Inclusão de imagens no DB2 - www.cadcobol.com


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

Inclusão de imagens no DB2
  • Este programa é chamado para realizar o INSERT da primeira parte da imagem.
  • As demais partes serao realizadas pelo programa CADpo619, fazendo um UPDATE (append).
  • A variavel WS-IMAGEL-REAL é usada para fazer o INSERT na coluna DE_IMAGEM da tabela CAD.TABELA32_IMAGEM e a mesma quando da compilacao do programa gera as variaveis:
    WS-IMAGEL-REAL-DATA e
    WS-IMAGEL-REAL-LENGTH.

Código

          1         2         3         4         5         6         7         8
 12345678901234567890123456789012345678901234567890123456789012345678901234567890

       *-----------------------------------------------------------------
        IDENTIFICATION DIVISION.                                         
       *-----------------------------------------------------------------
        PROGRAM-ID.      PROGRA01.                                       
        AUTHOR    .      DORNELLES CARLOS ALBERTO.                       
       *-----------------------------------------------------------------
       * SISTEMA       : SICAD                                           
       * PROGRAMA      : PROGRA01                                        
       * OBJETIVO      : MANTEM IMAGENS                        
       *               : MANTER IMAGEM - INCLUSAO                        
       * ANALISTA      : CARLOS ALBERTO DORNELLES                                           
       * DATA          : 11/DEZEMBRO/2012                                
       *-----------------------------------------------------------------
                                                                         
       *-----------------------------------------------------------------
       *                                                                 
       * ESTE PROGRAMA EH CHAMADO PARA REALIZAR O INSERT DA PRIMEIRA     
       * PARTE DA IMAGEM.                                                
       * AS DEMAIS PARTES SERAO REALIZADAS PELO PROGRAMA PROGRA02, FAZEN-
       * DO UM UPDATE (APCADD).                                          
       * A VARIAVEL WS-IMAGEL-REAL EH USADA PARA FAZER O INSERT NA COLUNA
       * DE_IMAGEM DA TABELA CAD.TABELA32_IMAGEM E A MESMA QUANDO DA COM-
       * PILACAO DO PROGRAMA GERA AS VARIAVEIS:
       * WS-IMAGEL-REAL-DATA E WS-IMAGEL-REAL-LENGTH                                           
       *                                                                 
       *-----------------------------------------------------------------
                                                                         
       *-----------------------------------------------------------------
        ENVIRONMENT DIVISION.                                            
       *-----------------------------------------------------------------
        CONFIGURATION SECTION.                                           
        SPECIAL-NAMES.                                                   
                         DECIMAL-POINT IS COMMA.                         
                                                                         
       *-----------------------------------------------------------------
        DATA DIVISION.                                                   
       *-----------------------------------------------------------------
                                                                         
       *-----------------------------------------------------------------
        WORKING-STORAGE SECTION.                                         
       *-----------------------------------------------------------------
                                                                         
        01 WS-AUXILIARES.                                                
           05 WS-IMAGEL-REAL           USAGE IS SQL TYPE IS BLOB (50M).  
           05 WS-DE-IMAGEM             PIC  X(50000000)     VALUE SPACES.
           05 WS-SQLCODE               PIC -Z.ZZ9           VALUE ZEROES.
           05 WS-PARAGRAFO             PIC  X(080)          VALUE SPACES.
           05 WS-TAMANHO-I             PIC S9(004) COMP     VALUE ZEROES.
           05 WS-VER-QTDE              PIC S9(004) COMP     VALUE ZEROES.
           05 WS-DE-IMAGEM-ENTRADA.                                      
              10 WS-NU-SEQUENCIAL-MODELO PIC  9(00009)      VALUE ZEROES.
              10 WS-DE-IMAGEM-JAVA       PIC  X(19980)      VALUE SPACES.
           05 WS-DE-IMAGEM-SAIDA.                                        
              10 WS-NU-IMAGEM-SAI        PIC  9(00009)      VALUE ZEROES.
                                                                         
       *-----------------------------------------------------------------
        LOCAL-STORAGE SECTION.                                           
       *-----------------------------------------------------------------
                                                                         
       *    DEFINICAO DE TABELAS E AREAS NA DCLGEN                
                                                                         
            EXEC SQL INCLUDE SQLCA       END-EXEC.                       
            EXEC SQL INCLUDE TABELA02    END-EXEC.                       
            EXEC SQL INCLUDE TABELA32    END-EXEC.                       
            EXEC SQL INCLUDE TABELA59    END-EXEC.                       
            EXEC SQL INCLUDE TABELA61    END-EXEC.                       
                                                                         
       *-----------------------------------------------------------------
        LINKAGE SECTION.                                                 
       *-----------------------------------------------------------------
                                                                         
        01  DFHCOMMAREA.                                                 
            COPY COPY0000.                                               
       *-----------------------------------------------------------------
       * CONTEUDO DO BOOK - CADB0000                                     
       *-----------------------------------------------------------------
       *    02 STREAM.                                                   
       *       03 STREAM-IO-EXCECAO.                                     
       *          05 STREAM-IO-ERRO-CICS        PIC 9(003).              
       *          05 STREAM-IO-NU-MENSAGEM      PIC 9(004).              
       *          05 STREAM-IO-NO-MENSAGEM      PIC X(078).              
       *          05 STREAM-IO-NU-SQLCODE       PIC -9(3).               
       *       03 STREAM-IO-IDENTIFICACAO.                               
       *          04 STREAM-IO-NOME-PGM         PIC X(008).              
       *          04 STREAM-IO-CO-USUARIO       PIC X(008).              
       *          04 STREAM-IO-CO-FUNCAO        PIC X(002).              
       *       03 STREAM-IO-ENTRADA-SAIDA.                               
       *          04 STREAM-IO-CONTEUDO-TAM     PIC 9(005).              
       *          04 STREAM-IO-CONTEUDO.                                 
       *            05 FILLER  PIC X(001) OCCURS 1 TO 20000              
       *                       DECADDING ON STREAM-IO-CONTEUDO-TAM.      
       *-----------------------------------------------------------------
                                                                         
       *-----------------------------------------------------------------
        PROCEDURE DIVISION USING DFHCOMMAREA.                            
       *-----------------------------------------------------------------
                                                                         
            PERFORM P0001-PROCEDIMENTOS-INICIAIS                         
            PERFORM P1000-PROCEDIMENTOS-PRINCIPAIS                       
            PERFORM P9000-PROCEDIMENTOS-FINAIS                           
            .                                                            
       *-----------------------------------------------------------------
        P0001-PROCEDIMENTOS-INICIAIS.                                    
       *-----------------------------------------------------------------
                                                                         
            MOVE 'P0001-PROCEDIMENTOS-INICIAIS'    TO WS-PARAGRAFO       
                                                                         
            MOVE LENGTH OF STREAM-IO-CONTEUDO TO STREAM-IO-CONTEUDO-TAM  
            MOVE STREAM-IO-CONTEUDO (1:STREAM-IO-CONTEUDO-TAM)           
                                             TO WS-DE-IMAGEM-ENTRADA     
            MOVE ZEROES                      TO STREAM-IO-ERRO-CICS      
                                                STREAM-IO-NU-MENSAGEM    
            MOVE WS-NU-SEQUENCIAL-MODELO TO                              
                    NU-SEQUENCIAL-MODELO OF TABELA61                     
            .                                                            
        P0001-FIM.                                                       
            EXIT.                                                        
                                                                         
       *-----------------------------------------------------------------
        P1000-PROCEDIMENTOS-PRINCIPAIS.                                  
       *-----------------------------------------------------------------
                                                                         
            MOVE 'P1000-PROCEDIMENTOS-PRINCIPAIS' TO WS-PARAGRAFO        
                                                                         
            PERFORM P1300-VERIFICA-QDTE                                  
            PERFORM P2000-MAX-NU-IMAGEM                                  
            PERFORM P1500-SELECT-TABELA61                                
            PERFORM P3000-INSERT-TABELA32                                
            PERFORM P4000-INSERT-TABELA59                                
            PERFORM P8000-TRATA-SQLCODE                                  
            .                                                            
        P1000-FIM.                                                       
            EXIT.                                                        
                                                                         
       *-----------------------------------------------------------------
        P1300-VERIFICA-QDTE.                                             
       *-----------------------------------------------------------------
                                                                         
            EXEC SQL                                                     
                 SELECT COUNT(*)                                         
                 INTO  :WS-VER-QTDE                                      
                 FROM   CAD.TABELA32_IMAGEM              TBA32             
                 ,      CAD.TABELA59_IMAGEM_CRCTA_OBJETO TBA59             
                 ,      CAD.TABELA61_CRCTA_MODELO_OBJETO TBA61             
                 WHERE  TBA61.NU_SEQUENCIAL_MODELO =                      
                       :TABELA61.NU-SEQUENCIAL-MODELO                     
                 AND    TBA61.NU_SEQUENCIAL_MODELO =                      
                        TBA59.NU_SEQUENCIAL_MODELO                        
                 AND    TBA61.TS_CARACTERISTICA    =                      
                        TBA59.TS_CARACTERISTICA                           
                 AND    TBA32.NU_IMAGEM            = TBA59.NU_IMAGEM      
                 AND    IC_SITUACAO          = '1'                       
            END-EXEC                                                     
                                                                         
            IF WS-VER-QTDE GREATER THAN 9                                
                MOVE 'Quantidade de imagens no limite permitido.' TO     
                                                   STREAM-IO-NO-MENSAGEM 
                EXEC CICS SYNCPOINT ROLLBACK END-EXEC                    
                PERFORM P850-ERRO-INFORMACAO                             
            END-IF                                                       
            .                                                            
        P1000-FIM.                                                       
            EXIT.                                                        
       *-----------------------------------------------------------------
        P1500-SELECT-TABELA61.                                           
       *-----------------------------------------------------------------
                                                                         
                                                                         
            EXEC SQL                                                     
                 SELECT MAX(TS_CARACTERISTICA)                           
                 INTO  :TABELA61.TS-CARACTERISTICA                       
                 FROM   CAD.TABELA61_CRCTA_MODELO_OBJETO                 
                 WHERE  NU_SEQUENCIAL_MODELO =                           
                       :TABELA61.NU-SEQUENCIAL-MODELO                    
            END-EXEC                                                     
                                                                         
            IF SQLCODE NOT EQUAL +000                                    
                MOVE 'Sequencial modelo invalido.' TO                    
                                                   STREAM-IO-NO-MENSAGEM 
                EXEC CICS SYNCPOINT ROLLBACK END-EXEC                    
                PERFORM P850-ERRO-INFORMACAO                             
            END-IF                                                       
                                                                         
            .                                                            
        P1000-FIM.                                                       
            EXIT.                                                        
                                                                         
       *-----------------------------------------------------------------
        P2000-MAX-NU-IMAGEM.                                             
       *-----------------------------------------------------------------
                                                                         
            MOVE 'P2000-MAX-NU-IMAGEM' TO WS-PARAGRAFO                   
                                                                         
            EXEC SQL                                                     
                 SELECT VALUE(MAX(NU_IMAGEM),0) + 1                      
                 INTO  :TABELA32.NU-IMAGEM                               
                 FROM   CAD.TABELA32_IMAGEM                              
            END-EXEC                                                     
            MOVE NU-IMAGEM OF TABELA32 TO WS-NU-IMAGEM-SAI               
            .                                                            
        P2000-FIM.                                                       
            EXIT.                                                        
                                                                         
       *-----------------------------------------------------------------
        P3000-INSERT-TABELA32.                                           
       *-----------------------------------------------------------------
                                                                         
            MOVE 'P3000-INSERT-TABELA32' TO WS-PARAGRAFO                 
                                                                         
            EXEC SQL                                                     
                 SELECT LENGTH(STRIP(:WS-DE-IMAGEM-JAVA))                
                 INTO  :WS-TAMANHO-I                                     
                 FROM SYSIBM.SYSDUMMY1                                   
            END-EXEC                                                     
                                                                         
            MOVE WS-DE-IMAGEM-JAVA (1:WS-TAMANHO-I) TO                   
                                  WS-IMAGEL-REAL-DATA                    
            MOVE WS-TAMANHO-I TO  WS-IMAGEL-REAL-LENGTH                  
                                                                         
            EXEC SQL                                                     
                 INSERT INTO CAD.TABELA32_IMAGEM                         
                      ( NU_IMAGEM                                        
                 ,      DE_IMAGEM )                                      
                 VALUES                                                  
                      (:TABELA32.NU-IMAGEM                               
                 ,     BLOB(:WS-IMAGEL-REAL) )                          
            END-EXEC                                                     
                                                                         
            IF  SQLCODE NOT EQUAL +000                                   
                MOVE 'Inclusão não efetuada.' TO STREAM-IO-NO-MENSAGEM   
                EXEC CICS SYNCPOINT ROLLBACK END-EXEC                    
                PERFORM P850-ERRO-INFORMACAO                             
            END-IF                                                       
            .                                                            
        P3000-FIM.                                                       
            EXIT.                                                        
                                                                         
       *-----------------------------------------------------------------
        P4000-INSERT-TABELA59.                                           
       *-----------------------------------------------------------------
                                                                         
            MOVE 'P4000-INSERT-TABELA59' TO WS-PARAGRAFO                 
                                                                         
            MOVE NU-IMAGEM OF TABELA32   TO NU-IMAGEM OF TABELA59        
            MOVE WS-NU-SEQUENCIAL-MODELO TO                              
                    NU-SEQUENCIAL-MODELO OF TABELA59                     
                                                                         
            EXEC SQL                                                     
                 INSERT INTO CAD.TABELA59_IMAGEM_CRCTA_OBJETO            
                      ( NU_IMAGEM                                        
                 ,      NU_SEQUENCIAL_MODELO                             
                 ,      TS_CARACTERISTICA                                
                 ,      IC_SITUACAO )                                    
                 VALUES                                                  
                      (:TABELA59.NU-IMAGEM                               
                 ,     :TABELA59.NU-SEQUENCIAL-MODELO                    
                 ,     :TABELA61.TS-CARACTERISTICA                       
                 ,      '1' )                                            
            END-EXEC                                                     
            .                                                            
        P4000-FIM.                                                       
            EXIT.                                                        
                                                                         
                                                                         
       *-----------------------------------------------------------------
        P8000-TRATA-SQLCODE.                                             
       *-----------------------------------------------------------------
                                                                         
            MOVE 'P8000-TRATA-SQLCODE' TO WS-PARAGRAFO                   
                                                                         
            MOVE ZEROES  TO STREAM-IO-ERRO-CICS                          
            MOVE SQLCODE TO STREAM-IO-NU-MENSAGEM                        
                            STREAM-IO-NU-SQLCODE                         
            EVALUATE SQLCODE                                             
                WHEN +000                                                
                     MOVE 'MA00106' TO CO-MENSAGEM OF TABELA02           
                     PERFORM P8999-OBTER-MENSAGEM THRU P8999-FIM         
                     EXEC SQL COMMIT    END-EXEC                         
                WHEN +100                                                
                     MOVE 'Inclusão não efetuada.' TO                    
                                                    STREAM-IO-NO-MENSAGEM
                     EXEC CICS SYNCPOINT ROLLBACK END-EXEC               
                WHEN -803                                                
                     MOVE 'MA00041' TO CO-MENSAGEM OF TABELA02           
                     PERFORM P8999-OBTER-MENSAGEM THRU P8999-FIM         
                     EXEC CICS SYNCPOINT ROLLBACK END-EXEC               
                WHEN OTHER                                               
                     MOVE 'Erro de acesso ao banco de dados.'  TO        
                                                    STREAM-IO-NO-MENSAGEM
                     EXEC CICS SYNCPOINT ROLLBACK END-EXEC               
            END-EVALUATE                                                 
            .                                                            
        P8000-FIM.                                                       
            EXIT.                                                        
                                                                         
       *-----------------------------------------------------------------
        P850-ERRO-INFORMACAO.                                            
       *-----------------------------------------------------------------
                                                                         
            MOVE 'P8500-TRATA-SQLCODE' TO WS-PARAGRAFO                   
            MOVE 00                 TO STREAM-IO-ERRO-CICS               
            MOVE SQLCODE            TO STREAM-IO-NU-SQLCODE              
                                       WS-SQLCODE                        
            MOVE 01                 TO STREAM-IO-NU-MENSAGEM             
            EXEC CICS RETURN           END-EXEC                          
            .                                                            
        P8500-FIM.                                                       
            EXIT.                                                        
                                                                         
       *-----------------------------------------------------------------
        P8999-OBTER-MENSAGEM.                                            
       *-----------------------------------------------------------------
                                                                         
            EXEC SQL                                                     
                 SELECT DE_MENSAGEM                                        
                 INTO  :TABELA02.DE-MENSAGEM                               
                 FROM   CAD.TABELA02_MENSAGEM_APOIO                        
                 WHERE  CO_MENSAGEM = :TABELA02.CO-MENSAGEM                
                 AND    DT_FIM_VIGENCIA = '31.12.9999'                     
                 WITH UR                                                   
            END-EXEC                                                     
                                                                         
            IF SQLCODE = 0                                               
               MOVE 0                          TO STREAM-IO-NU-MENSAGEM  
               STRING CO-MENSAGEM ' - '                                  
                    DE-MENSAGEM-TEXT (1:DE-MENSAGEM-LEN)                 
                    DELIMITED BY SIZE INTO        STREAM-IO-NO-MENSAGEM  
               END-STRING                                                
            ELSE                                                         
               MOVE 0                          TO STREAM-IO-NU-MENSAGEM  
               STRING CO-MENSAGEM ' - '                                  
                    'Mensagem não cadastrada'                            
                     DELIMITED BY SIZE INTO STREAM-IO-NO-MENSAGEM        
               END-STRING                                                
            END-IF                                                       
            .                                                            
        P8999-FIM.                                                       
            EXIT.                                                        
                                                                         
       *-----------------------------------------------------------------
        P9000-PROCEDIMENTOS-FINAIS.                                      
       *-----------------------------------------------------------------
                                                                         
            MOVE 9                  TO STREAM-IO-CONTEUDO-TAM            
            MOVE WS-DE-IMAGEM-SAIDA TO STREAM-IO-CONTEUDO                
            EXEC CICS RETURN END-EXEC                                    
            .                                                            
        P9000-FIM.                                                       
            EXIT.