Alteraçã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


Alteração de imagens no DB2
  • O programa PROGRA01 realiza o insert da primeira parte da imagem.
  • As demais partes serao realizadas por este programa, fazendo um UPDATE (append).
  • A variável WS-DE-IMAGEM-REAL é usada para fazer o UPDATE da coluna de_imagem da tabela CAD.TABELA32_imagem e a mesma quando da compilacao do programa gera as variáveis:
    WS-DE-IMAGEM-REAL-LENGTH e
    WS-DE-IMAGEM-REAL-DATA

Código

          1         2         3         4         5         6         7         8
 12345678901234567890123456789012345678901234567890123456789012345678901234567890

       *----------------------------------------------------------------- 
        IDENTIFICATION DIVISION.                                          
       *----------------------------------------------------------------- 
        PROGRAM-ID.      PROGRA02.                                        
        AUTHOR    .      DORNELLES CARLOS ALBERTO.                        
       *----------------------------------------------------------------- 
       * SISTEMA       : SICAD                                            
       * PROGRAMA      : PROGRA02                                         
       * OBJETIVO      : MANTEM IMAGENS                         
       *               : MANTER IMAGEM - ALTERACAO                        
       * ANALISTA      : CARLOS ALBERTO DORNELLES                                            
       * DATA          : 11/DEZEMBRO/2012                                 
       *----------------------------------------------------------------- 
                                                                          
       *----------------------------------------------------------------- 
       *                                                                  
       * O PROGRAMA PROGRA01 REALIZA O INSERT DA PRIMEIRA PARTE  DA       
       * IMAGEM.                                                          
       * AS DEMAIS PARTES SERAO REALIZADAS POR ESTE PROGRAMA, FAZENDO  UM 
       * UPDATE (APPEND).                                                 
       * A VARIAVEL WS-DE-IMAGEM-REAL EH USADA PARA FAZER O UPDATE DA CO- 
       * LUNA DE_IMAGEM DA TABELA CAD.TABELA32_IMAGEM E A MESMA QUANDO DA
       * COMPILACAO DO PROGRAMA GERA AS VARIAVEIS:                        
       * WS-DE-IMAGEM-REAL-LENGTH                                         
       * WS-DE-IMAGEM-REAL-DATA                                           
       *                                                                  
       *----------------------------------------------------------------- 

       *----------------------------------------------------------------- 
        ENVIRONMENT DIVISION.                                             
       *----------------------------------------------------------------- 
        CONFIGURATION SECTION.                                            
        SPECIAL-NAMES.                                                    
                         DECIMAL-POINT IS COMMA.                          
                                                                          
       *----------------------------------------------------------------- 
        DATA DIVISION.                                                    
       *----------------------------------------------------------------- 
                                                                          
       *----------------------------------------------------------------- 
        WORKING-STORAGE SECTION.                                          
       *----------------------------------------------------------------- 
                                                                          
        01  WS-AUXILIARES.                                                
            05 WS-DE-IMAGEM-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(009) COMP     VALUE ZEROES. 
            05 WS-TAMANHO-U            PIC S9(009) COMP     VALUE ZEROES. 
            05 WS-TAMANHO-T            PIC S9(009) COMP     VALUE ZEROES. 
            05 WS-DE-IMAGEM-ENTRADA.                                      
               10 WS-NU-IMAGEM            PIC  9(00009)     VALUE ZEROES. 
               10 WS-NU-SEQUENCIAL-MODELO PIC  9(00009)     VALUE ZEROES. 
               10 WS-DE-IMAGEM-JAVA       PIC  X(19980)     VALUE SPACES. 
                                                                          
       *----------------------------------------------------------------- 
        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.                        
                                                                          
       *----------------------------------------------------------------- 
        LINKAGE SECTION.                                                  
       *----------------------------------------------------------------- 
                                                                          
        01  DFHCOMMAREA.                                                  
            COPY COPY0001.                                                
       *----------------------------------------------------------------- 
       * 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     
            .                                                             
        P0001-FIM.                                                        
            EXIT.                                                         
                                                                          
       *----------------------------------------------------------------- 
        P1000-PROCEDIMENTOS-PRINCIPAIS.                                   
       *----------------------------------------------------------------- 
                                                                          
            MOVE 'P1000-PROCEDIMENTOS-PRINCIPAIS' TO WS-PARAGRAFO         
                                                                          
            PERFORM P4000-SELECT-TABELA32                                 
            PERFORM P5000-UPDATE-TABELA32                                 
            PERFORM P8000-TRATA-SQLCODE                                   
            .                                                             
        P1000-FIM.                                                        
            EXIT.                                                         
                                                                          
       *-----------------------------------------------------------------
        P4000-SELECT-TABELA32.                                            
       *----------------------------------------------------------------- 
                                                                          
            MOVE 'P4000-SELECT-TABELA32' TO WS-PARAGRAFO                  
                                                                          
            MOVE WS-NU-SEQUENCIAL-MODELO TO NU-SEQUENCIAL-MODELO          
            MOVE WS-NU-IMAGEM            TO NU-IMAGEM OF TABELA32         
            EXEC SQL                                                      
                 SELECT BLOB(DE_IMAGEM)                                   
                 INTO  :WS-DE-IMAGEM-REAL                                 
                 FROM   CAD.TABELA32_IMAGEM              TBA32            
                 ,      CAD.TABELA59_IMAGEM_CRCTA_OBJETO TBA59            
                 WHERE  NU_SEQUENCIAL_MODELO = :NU-SEQUENCIAL-MODELO      
                 AND    TBA32.NU_IMAGEM      = :TABELA32.NU-IMAGEM        
                 AND    TBA32.NU_IMAGEM      =  TBA59.NU_IMAGEM           
            END-EXEC                                                      
                                                                          
            MOVE WS-DE-IMAGEM-REAL-DATA   TO WS-DE-IMAGEM                 
            MOVE WS-DE-IMAGEM-REAL-LENGTH TO WS-TAMANHO-I                 
            .                                                             
        P4000-FIM.                                                        
            EXIT.                                                        
                                                                          
       *----------------------------------------------------------------- 
        P5000-UPDATE-TABELA32.                                            
       *----------------------------------------------------------------- 
                                                                          
            MOVE 'P5000-UPDATE-TABELA32' TO WS-PARAGRAFO                  
                                                                          
            EXEC SQL                                                      
                 SELECT LENGTH(STRIP(:WS-DE-IMAGEM-JAVA))                 
                 INTO  :WS-TAMANHO-U                                      
                 FROM SYSIBM.SYSDUMMY1                                    
            END-EXEC                                                      
                                                                          
            COMPUTE WS-TAMANHO-I = WS-TAMANHO-I + 1                       
            MOVE WS-DE-IMAGEM-JAVA (1:WS-TAMANHO-U) TO                    
                 WS-DE-IMAGEM      (WS-TAMANHO-I:WS-TAMANHO-U)            
            MOVE WS-DE-IMAGEM TO WS-DE-IMAGEM-REAL-DATA                   
            COMPUTE WS-TAMANHO-T = ((WS-TAMANHO-I + WS-TAMANHO-U) - 1)    
            MOVE WS-TAMANHO-T TO  WS-DE-IMAGEM-REAL-LENGTH                
                                                                          
            EXEC SQL                                                      
                 UPDATE CAD.TABELA32_IMAGEM                              
                 SET    DE_IMAGEM = :WS-DE-IMAGEM-REAL                    
                 WHERE  NU_IMAGEM = :TABELA32.NU-IMAGEM                   
            END-EXEC                                                      
            .                                                             
        P5000-FIM.                                                        
            EXIT.                                                         
                                                                          
       *----------------------------------------------------------------- 
        P8000-TRATA-SQLCODE.                                              
       *----------------------------------------------------------------- 
                                                                          
            MOVE ZEROES  TO STREAM-IO-ERRO-CICS                           
            MOVE SQLCODE TO STREAM-IO-NU-MENSAGEM                         
                            STREAM-IO-NU-SQLCODE                          
            EVALUATE SQLCODE                                              
                WHEN +000                                                 
                     MOVE 'MA00107' TO CO-MENSAGEM OF TABELA02            
                     PERFORM P8999-OBTER-MENSAGEM THRU P8999-FIM          
                     EXEC SQL COMMIT    END-EXEC                          
                WHEN +100                                                 
                     MOVE 'MN00005' TO CO-MENSAGEM OF TABELA02            
                     PERFORM P8999-OBTER-MENSAGEM THRU P8999-FIM         
                     EXEC CICS SYNCPOINT ROLLBACK END-EXEC                
                WHEN +999                                                 
                     EXEC CICS RETURN   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.                                                         
                                                                          
       *----------------------------------------------------------------* 
        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                                                      
                                                                          
            MOVE ZEROES                 TO STREAM-IO-NU-MENSAGEM          
            IF SQLCODE EQUAL +000                                         
               STRING CO-MENSAGEM ' - '                                   
                    DE-MENSAGEM-TEXT (1:DE-MENSAGEM-LEN)                  
                    DELIMITED BY SIZE INTO STREAM-IO-NO-MENSAGEM          
               END-STRING                                                 
            ELSE                                                          
               STRING CO-MENSAGEM ' - '                                   
                    'Mensagem nao cadastrada'                             
                    DELIMITED BY SIZE INTO STREAM-IO-NO-MENSAGEM          
               END-STRING                                                 
            END-IF                                                        
            .                                                             
        P8999-FIM.                                                        
            EXIT.                                                         
                                                                          
       *----------------------------------------------------------------- 
        P9000-PROCEDIMENTOS-FINAIS.                                       
       *-----------------------------------------------------------------
                                                                          
            EXEC CICS RETURN END-EXEC                                     
            .                                                             
        P9000-FIM.                                                        
            EXIT.