SQL - Structured Query Language - SELECT COUNT dinâmico - COBOL/DB2


Volta a página anterior

Volta ao Menu Principal


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

O SQL dinâmico é montado em tempo de execução do programa
         1         2         3         4         5         6         7   
123456789012345678901234567890123456789012345678901234567890123456789012

000001*----------------- I N I C I O   D O   C O D I G O --------------*
000002 IDENTIFICATION DIVISION.                                         
000003*-----------------------
000004 PROGRAM-ID.     SELECT06.                                         
000005
000006*----------------------------------------------------------------*
000007* Sistema      : EXEMPLO                      
000008* Programa     : SELECT06                                           
000009* Objetivo     : Contar quantos registros existem na tabela    
000010* Analista     : CARLOS ALBERTO DORNELLES                                                   
000011* Desenvolvedor: CARLOS ALBERTO DORNELLES                           
000012* Data         : 31/12/2002                                         
000013* Linguagem    : COBOL / DB2 / CICS                                 
000014* Manutencoes  :                                                    
000015*----------------------------------------------------------------*
000016* Desenvolvedor              Responsavel                   Data   
000017* -------------              -----------                   ----
000018*
000019* xxxxxxxxxxxxxxxxxxxxxxxxx  xxxxxxxxxxxxxxxxxxxxxxxxxx xx/xx/xxxx
000020* descrição xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
000021*----------------------------------------------------------------*
000022
000023 ENVIRONMENT DIVISION.                                            
000024*---------------------
000025 CONFIGURATION SECTION.                                           
000026*---------------------
000027 SPECIAL-NAMES. 
000028     DECIMAL-POINT IS COMMA.                           
000029
000030 DATA DIVISION.                                                   
000031*-------------
000032 WORKING-STORAGE SECTION.                                         
000033*-----------------------
000034 77  WS-SQLCODE-EDT              PIC  ----9.     
000035 01  AREAS-DE-TRABALHO.                                           
000036     03 WS-TAM                   PIC  9(005).                     
000037 01  WS-VARIAVEIS-DB2.                                            
000038     03 WS-GR-CURSOR.                                             
000039        49 WS-ID-TAMANHO-CURSOR  PIC S9(004) COMP   VALUE ZEROES. 
000040        49 WS-DE-CURSOR          PIC  X(2500)       VALUE SPACES. 
000041 01  WS-AREA-SAIDA.                                               
000042     05 PRM-QTDE-CONTAS          PIC  9(004). 
000043                    
000044 01  WS-AREA-ERROS.                                               
000045     03 PRM-QTDE-ERROS           PIC  9(003).                     
000046     03 PRM-ARRAY-ERROS          OCCURS 1 TO 094 TIMES            
000047                                 DEPENDING ON PRM-QTDE-ERROS.           
000048        05 PRM-NUMERO-MENSAGEM   PIC  X(004).                     
000049        05 PRM-PROGRAMA          PIC  X(008).                     
000050        05 PRM-INFORMACOES       PIC  X(200).   
000051
000052*              Definicao de tabelas e areas na DCLGEN            *
000053*----------------------------------------------------------------*
000054     EXEC SQL INCLUDE SQLCA      END-EXEC.                        
000055     EXEC SQL INCLUDE TABELA01   END-EXEC. 
000056
000057 LINKAGE SECTION.                                                 
000058*---------------
000059 01  DFHCOMMAREA.                                                 
000060     03 LKS-EXCECAO.                                               
000061        05 LKS-ERRO-CICS         PIC  9(003).                     
000062        05 LKS-NU-MENSAGEM       PIC  9(004).                     
000063        05 LKS-NO-MENSAGEM       PIC  X(078).                     
000064        05 LKS-NU-SQLCODE        PIC  9(004).                     
000065     03 LKS-IDENTIFICACAO.                                         
000066        05 LKS-IN-NOME-PGM       PIC  X(008).                     
000067        05 LKS-IN-CO-USUARIO     PIC  X(008).                     
000068        05 LKS-IN-CO-FUNCAO      PIC  X(002).                     
000069     03 LKS-ENTRADA-SAIDA.                                         
000070        05 LKS-CONTEUDO-TAM      PIC  9(005).                     
000071        05 LKS-CONTEUDO.                                           
000072           07 FILLER             PIC  X(001) OCCURS 1 TO 20000    
000073                                 DEPENDING ON LKS-CONTEUDO-TAM.    
000074
000075 PROCEDURE DIVISION USING DFHCOMMAREA.                            
000076*------------------------------------
000077
000078     PERFORM R000-PROCED-INICIAIS      THRU R000-FIM.                
000079     PERFORM R100-PROCED-PRINCIPAIS    THRU R100-FIM.                
000080     PERFORM R999-PROCEDIMENTOS-FINAIS THRU R999-FIM. 
000081               
000082 R000-PROCED-INICIAIS.                                            
000083*--------------------
000084
000085     INITIALIZE     LK-EXCECAO.                
000086     MOVE SPACES TO LK-CONTEUDO(1:20000).      
000087     MOVE ZEROES TO LK-CONTEUDO-TAM PRM-QTDE-ERROS.
000088            
000089 R000-FIM.                                                        
000090     EXIT.    
000091                                                    
000092 R100-PROCED-PRINCIPAIS.                                          
000093*----------------------
000094
000095     PERFORM P105-GERAR-COUNT THRU P105-FIM.                      
000096     PERFORM P110-BUSCA-COUNT THRU P110-FIM.                      
000097 
000098     MOVE NU-CONTA TO PRM-QTDE-CONTAS.                                                                         
000099     MOVE LENGTH OF WS-AREA-SAIDA TO LK-CONTEUDO-TAM.           
000100     MOVE WS-AREA-SAIDA TO LK-CONTEUDO (1:LK-CONTEUDO-TAM). 
000101     PERFORM R900-FECHA-ARQUIVOS THRU R900-FIM.
000102     
000103 R100-FIM.                                                        
000104     EXIT.                                                        
000105
000106 R105-GERAR-COUNT.                                                
000107*----------------
000108
000109     INITIALIZE WS-GR-CURSOR.                                    
000110     MOVE 1 TO WS-ID-TAMANHO-CURSOR.                             
000111     STRING                                                      
000112        'SELECT COUNT(*) FROM DCL.TABELA01_CONTA'               
000113                DELIMITED BY SIZE INTO WS-DE-CURSOR                
000114                WITH POINTER WS-ID-TAMANHO-CURSOR                 
000114     END-STRING.                 
000115
000116     EXEC SQL                                                     
000117          PREPARE CONSULTA FROM :WS-GR-CURSOR                         
000118     END-EXEC.     
000119                                               
000120     IF SQLCODE NOT EQUAL +0  
000121        PERFORM R910-ERRO-SQLCODE THRU R910-FIM 
000122     END-IF.   
000123                                                   
000124     EXEC SQL                                                     
000125          DECLARE CUR001 CURSOR FOR CONSULTA                          
000126     END-EXEC.  
000127                                                  
000128     IF SQLCODE NOT EQUAL +0                                          
000129        PERFORM R910-ERRO-SQLCODE THRU R910-FIM                                    
000130     END-IF. 
000131                                                     
000132     EXEC SQL                                                     
000133          OPEN CUR001                                                 
000134     END-EXEC.      
000135                                              
000136     IF SQLCODE NOT EQUAL +0                                          
000137        PERFORM R910-ERRO-SQLCODE THRU R910-FIM                                    
000138     END-IF. 
000139                                                     
000140 R105-FIM.                                                        
000141     EXIT.                                                        
000142      
000143 R110-BUSCA-COUNT.                                                
000144*----------------
000145
000146     EXEC SQL                                                     
000147          FETCH  CUR001                                                 
000148          INTO  :NU-CONTA                                 
000149     END-EXEC. 						
000150
000151     IF NU-CONTA EQUAL ZEROES
000152        MOVE +100 TO SQLCODE
000153     END-IF.  
000154                                                  
000155     IF SQLCODE NOT = +0 AND +100  
000156        PERFORM R910-ERRO-SQLCODE THRU R910-FIM                                    
000157     END-IF.  
000158                                                    
000159 P110-FIM.                                                        
000160      EXIT.                                                        
000161
000162 R900-FECHA-ARQUIVOS.                                             
000163*-------------------
000164
000165     EXEC SQL                                                     
000166          CLOSE CUR001                                                
000167     END-EXEC. 
000168                                                   
000169 R900-FIM.                                                        
000170     EXIT.  
000171
000172 R910-ERRO-SQLCODE.
000173*----------------- 
000174                                                     
000175     MOVE 1       TO LKS-ERRO-CICS.                       
000176     ADD  1       TO PRM-QTDE-ERROS.                     
000177     MOVE SPACES  TO PRM-INFORMACOES (PRM-QTDE-ERROS).
000178     MOVE SQLCODE TO LKS-NU-SQLCODE.                      
000179     MOVE SQLCODE TO WS-SQLCODE-EDT.                      
000180     STRING 'Erro de acesso a base de dados. SQLCODE: '                  
000181             WS-SQLCODE-EDT ' ErrMc: ' SQLERRMC                                      
000182            ' - Tabela utilizada -> TABELA01'                        
000183             DELIMITED BY SIZE                                
000184                       INTO PRM-INFORMACOES (PRM-QTDE-ERROS)
           END-STRING.
000185     MOVE '0001'     TO PRM-NUMERO-MENSAGEM (PRM-QTDE-ERROS).
000186     MOVE 'SELECT06' TO PRM-PROGRAMA (PRM-QTDE-ERROS).
000187     PERFORM R999-PROCEDIMENTOS-FINAIS.                                
000188
OOO189 R910-FIM.
000190     EXIT.
000191
000192 R999-PROCEDIMENTOS-FINAIS.                                              
000193*-------------------------
000194
000195     IF LK-ERRO-CICS = 1                                          
000196        MOVE LENGTH OF WS-AREA-ERROS TO LK-CONTEUDO-TAM           
000197        MOVE WS-AREA-ERROS TO LK-CONTEUDO (1:LK-CONTEUDO-TAM)
000198     END-IF.   
000199                                                   
000200     EXEC CICS                                                    
000201          RETURN                                                    
000202     END-EXEC.  
000203                                                  
000204 R999-FIM.                                                        
000205     EXIT.                                                        



Volta a página anterior

Volta ao Menu Principal