Prévia do material em texto
Livro Eletrônico Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital Judah Reis, Pedro Henrique Chagas Freitas 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 1 1 – COBOL DB2 SQL .............................................................................................. 2 1.1 – Delimitadores ............................................................................................................ 3 1.2 – EXEC SQL 1 ................................................................................................................ 6 EXEC SQL ......................................................................................................... 6 1.3 – EXEC SQL 2 ................................................................................................................ 7 1.4 – EXEC SQL 4 ................................................................................................................ 8 1.5 – SELECT versus OPEN e FETCH.................................................................................. 11 1.6 – CURSOR ................................................................................................................... 13 1.7 – COMMIT .................................................................................................................. 21 1.8 – ROLLBACK ................................................................................................................ 22 1.9 – SQLCA ...................................................................................................................... 25 1.10 – Composição da SQLCA e as condições de erro/sucesso ....................................... 26 ......................................................................................................................................... 43 1.11 – SPUFI (SQL Processing Using File Input) ............................................................... 45 1.12 – Entendendo melhor o BIND .................................................................................. 54 3 – Questões ...................................................................................................... 98 Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 2 1 – COBOL DB2 SQL Para podermos trabalhar com o SQL dentro de programas em linguagens tradicionais, devemos codificá-lo usando delimitadores especiais. Esta técnica é conhecida como SQL embutido. O SQL trabalha com tabelas e linhas. É uma linguagem desenvolvida para manipular conjuntos. Já as linguagens tradicionais trabalham com arquivos e registros e não conseguem reconhecer tabelas e linhas. Para simularmos um arquivo com seus registros existe o CURSOR do DB2. Assim o programa pode acessar e manipular linhas de uma tarefa como se estivesse trabalhando com um arquivo comum. NÃO RELACIONAL RELACIONAL COBOL SQL EMBUTIDO SQL Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 3 As colunas não são manipuladas diretamente pelas linguagens tradicionais. Para contornar isto são utilizadas as chamadas variáveis HOST que "hospedam" o conteúdo das colunas. 1.1 – DELIMITADORES COBOL EXEC SQL Instruções SQL END – EXEC. O compilador das linguagens tradicionais não entende instruções SQL. As instruções SQL devem ser embutidas dentro de um programa separados por delimitadores para que possam ser tratados antes de serem submetidos ao compilador. Cada linguagem tem o seu delimitador próprio para isolar as instruções SQL conforme mostra a figura acima. O delimitador que indica o início de uma instrução SQL é comum a todas as linguagens. No COBOL, o fim de um SQL é indicado pelo “END-EXEC”. ARQUIVO REGISTROS TABELAS LINHAS CURSOR VAR. HOST PARA FORNECER UM VALOR Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 4 MOVE ‘CO1’ TO DEPT. DEPT. EXEC SQL SELECT …… WHERE DEPT = :DEPT END–EXEC. Variáveis HOST são utilizadas para permuta de valores entre a linguagem SQL e a linguagem de programação. Uma das possíveis utilizações da variável HOST é a de fornecer um valor a uma instrução SQL, tornando-a assim uma instrução genérica. O exemplo mostra um SQL com valor de comparação parametrizado, sendo que: 1. O programa atribui um valor à variável HOST; 2. O programa executa a instrução SQL onde a referência à variável HOST é substituída pelo valor previamente atribuído. COBOL SQL Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 5 A referência à variável HOST deve ser precedida pelo caracter ":". Seu uso é facultativo, mas recomenda-se sua utilização para evitar possibilidade de confusão. O uso da variável HOST é opcional. Seu uso é obrigatório somente para as instruções SELECT. A variável HOST deve ser compatível com a coluna quanto ao seu DATA TYPE e ao seu tamanho. Variáveis adicionais chamadas de variáveis indicadoras são necessárias quando a coluna pode ter VALOR NULO e serão apresentadas mais tarde. As variáveis HOST não devem ser utilizadas para referenciar nomes de tabelas ou de colunas. EXEC SQL INSERT INTO XXX.XXXTB022_PARCELA (:XXXTB022.NU-PARCELA, :XXXTB022.VR-PARCELA) VALUES (:05, :2.500) END – EXEC. Nº DA PARCELA VALOR DA PARCELA PARA FORNECER UM VALOR Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 6 EXEC SQL UPDATE XXX.XXXTB022_PARCELA SET NU_PARCELA = :XXXTB022.NU-PARCELA WHERE DT_PAGTO = ’01.01.0001’ END – EXEC. DATA DO PAGTO VALOR DE DATA Variáveis HOST podem ser utilizadas para que o programa passe um valor para a instrução SQL. 1.2 – EXEC SQL 1 EXEC SQL SELECT NO_PENDENCIA INTO :XXXTB025.NO_PENDENCIA FROM XXX.XXXTB025_PENDENCIA WHERE CO_PENDENCIA = :EXETB026.FK-XXXTB025-PENCO PARA RECEBER UM VALOR Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 7 END – EXEC. É necessário em uma instrução SQL: Uma VARIÁVEL HOST para cada COLUNA selecionada e precedidas por dois pontos. A declaração da variável host e DATA TYPE da coluna, devem ser compatíveis. As variáveis adicionais necessárias para indicar VALOR NULO. 1.3 – EXEC SQL 2 SELECT NO_PENDENCIA INTO :XXXTB025.NO_PENDENCIA FROM XXX.XXXTB025_PENDENCIA WHERE CO_PENDENCIA = :EXETB026.FK-XXXTB025-PENCO END – EXEC. CÓDIGO DA PENDENCIA ALTERNATIVA EM COBOL NOME DA PENDENCIA Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 8 1.4 – EXEC SQL 4 SELECT NO_PENDENCIA, DT_PENDENCIA INTO :XXXTB025.ESTRUTURA FROM XXX.XXXTB025_PENDENCIA WHERE IC_STATUS = ‘C’ END – EXEC. Uma série contígua de variáveis HOST podem ser agrupadas em um conjunto chamado de estrutura. Esta estrutura pode ser referenciada e tratada como uma unidade conforme mostra o exemplo acima. DB2 COBOL SMALLINT 01 N1 PIC S9(4) COMP. INTEGER or INT 01 N2 PIC S9(9) COMP. DECIMAL (5,2) or DEC (5,2) 01 N3 PIC S9(3) V9(2) COMP –3 FLOAT (21) or REAL 01 N4 COMP –1. FLOAT or FLOAT (53) OR DOUBLE PRECISION 01 N5 COMP –2. PENDENCIA STATUS DADOS NUMÉRICOS Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 9 Estas tabelas mostram as correspondências em data type que devem ser observadas na declaração das variáveis HOST. O programador pode usar o programa DCLGEN para gerar variáveis HOST. Ver item DCLGEN. DB2 CHAR(10) VARCHAR(80) COBOL 01 STR1 PIC X(10). 01 STR2. 49 STR2L PIC S9(4) COMP. 49 STR2C PIC X(80). DB2 GRAPHIC(5) VARGRAPHIC (40) COBOL 01 DBC1 PIC X(05) DISPLAY –1 01 DBC2. 49 DBC2L PIC S9(4) COMP. 49 DBC2C PIC X(40) DISPLAY –1. DADOS ALFANUMÉRICOS DOUBLE BYTE CHARACTER STRING Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 10 DB2 DATE TIME TIMESTAMP COBOL 01 DT PIC X(10) 01 TM PIC X(8) 01 TS PIC X(26) NOTA: dados DATE/TIME são sempre convertidos para o formato caracter no assinalamento às variáveis host. Definições mostradas são para o padrão USA. DATE: (10 Caracteres) ISO: yyyy-mm-dd JIS: yyyy-mm-dd USA: mm/dd/yyyy EUR: dd.mm.yyyy TIME: (8 Caracteres) ISO: hh.mm.ss EUR: hh.mm.ss JIS: hh:mmas USA: hh:mm AM ou PM TIMESTAMP: yyyy-mm-dd-hh.mm.ss.nnnnnn (26 caracteres) DADOS DATE/TIME Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 11 1.5 – SELECT VERSUS OPEN E FETCH SELECT OPEN MATR SOBRENOME 000030 KWAN 000290 PARKER MATR SMOME 000300 SMITH (SELECT) FETCH MATR SOBRENOME 000030 KWAN 000030 KWAN Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 12 000290 PARKER 000300 SMITH MATR SNOME (SELECT) FETCH MATR SOBRENOME 000030 KWAN 000290 PARKER 000300 SMITH MATR SNOME Se o resultado de um SELECT pode ser múltiplas linhas, o programa deve trabalhar com um CURSOR, pois não tem como prever o tamanho da tabela resultante. Quando o programa executa um OPEN de um cursor, o DB2 executar o SELECT e a tabela resultante fica presa, esperando pelo processamento. O programa deve prover variáveis HOST para cada coluna do cursor. O programa executa a instrução SQL "FETCH", para movimentar o cursor para o "próximo registro". As variáveis HOST conterão os valores do registro (linha) apontado. 000290 PARKER Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 13 1.6 – CURSOR DEFINIR um CURSOR EXEC SQL DECLARE CUR005 CURSOR WITH HOLD FOR SELECT NU_CURSO, NO_CURSO, IC_TURNO FROM XXX.XXXTB005_CURSO WHERE NU_CURSO = :XXXTB005.NU_CURSO END–EXEC. ABRIR o CURSOR EXEC SQL OPEN CUR005 END–EXEC. FETCH das linhas resultantes EXEC SQL FETCH CUR005 INTO :XXXTB005.NU-CURSO, :XXXTB005.NO_CURSO, :XXXTB005.IC_TURNO D E F I N I Ç Ã O E X E C U Ç Ã O Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 14 END–EXEC. CLOSE CURSOR quando terminar EXEC SQL CLOSE CUR005 END–EXEC. A instrução DECLARE CURSOR define a seleção dos dados que deverão compor a tabela resultante. Um nome deve ser atribuído à esta tabela, para futuras referências dentro do programa. A instrução DECLARE CURSOR não retorna nenhum valor ao programa. Isto é feito pela instrução FETCH. No nosso exemplo foi declarado um cursor definido como CUR005. A instrução OPEN executa a seleção, que esta limitada pelos valores da variável HOST DEPT. O cursor não está apontando para nenhuma linha. O FETCH aponta para a primeira linha da tabela resultante. O programa lê o valor das colunas através das variáveis NU_CURSO, NO_CURSO e IC_TURNO. Um programa típico emite FETCHs sucessivamente até receber o SQLCODE +100 na SQLCA, indicando fim da tabela resultante. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 15 Um programa pode Ter vários cursores abertos simultaneamente. O cursor deve ser fechado com CLOSE quando não é mais necessário. Quando o programa chega ao final o DB2 fecha todos os cursores que não foram fechados. EXEC SQL DECLARE CUR005 CURSOR FOR SELECT . . . FROM XXX.XXXTB005_CURSO… END–EXEC. : EXEC SQL OPEN CUR005 END–EXEC. : EXEC SQL FETCH CUR005 lNTO … END–EXEC. : EXEC SQL DELETE FROM XXX.XXXTB005_CURSO WHERE CURRENT OF CUR005 END–EXEC. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - WellingtonLuan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 16 : EXEC SQL CLOSE CUR005 END–EXEC. Um programa tem a opção de eliminar algumas das linhas apontadas pelo cursor. A instrução DELETE, com a cláusula "WHERE CURRENT OF nome do cursor", faz com que a linha apontada pela última instrução FETCH seja eliminada. A estrutura do programa exemplo foi preparada para eliminar linhas apontadas por um cursor. Isto permite uma decisão pela eliminação ou não da linha pelo exame prévio do conteúdo das mesmas. "DELETE WHERE CURRENT OF" não deve ser usado para o cursor cuja instrução SELECT contém: · ORDER BY · GROUP BY · DISTINCT · UNION · Função · JOIN Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 17 EXEC SQL DECLARE CUR005 CURSOR WITH HOLD FOR SELECT NU_CURSO, IC_TURNO FROM XXX.XXXTB005_CURSO WHERE NU_CURSO = :000TB005.IC_TURNO FOR UPDATE OF IC_TURNO END–EXEC. : : EXEC SQL OPEN CUR005 END–EXEC. EXEC SQL FETCH CUR005 INTO :XXXTB005.NU-CURSO, :XXXTB005.IC_TURNO END–EXEC. : : EXEC SQL UPDATE XXX.XXXTB022_PARCELA Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 18 SET NU_PARCELA = :XXXTB022.NU-PARCELA WHERE CURRENTE OF CUR022 END–EXEC. : : EXEC SQL CLOSE CUR005 END–EXEC. Um programa pode fazer a atualização de algumas linhas apontadas pelo cursor. A atualização deve ser feita na linha que está sendo apontada pelo cursor especificado na cláusula "WHERE CURRENT OF nome do çursor". Somente as colunas especificadas na cláusula "FOR UPDATE OF lista de colunas" da instrução DECLARE podem ser atualizadas. A atualização via cursor não é obrigatória. A instrução DECLARE não pode ter a cláusula "FOR UPDATE OF", se a instrução SELECT contiver: · ORDER BY · GROUP BY · DISTINCT · UNION · função Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 19 · JOIN POSICIONAMENTO OPEN FETTCH …… FETCH …. FETCH… EXEC SQL DECLARE CUR005 CURSOR WITH HOLD FOR SELECT NU_CURSO, IC_TURNO FROM XXX.XXXTB005_CURSO WHERE NU_CURSO = :000TB005.NU_CURSO Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 20 CLOSE Para REUTILIZAR um CURSOR OPEN CURSOR NORMAL CURSOR HOLD OPEN posiciona o cursor "antes" da primeira linha da tabela resultante. FETCH avança o cursor uma linha pra frente. Não é possível fazer o FETCH voltar o cursor. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 21 Um cursor normal pode ser reaberto, mas a posição é restaurada para o topo. Se o cursor for do tipo WITH HOLD o posicionamento não é perdido. DECLARE A posição do cursor não é perdida se ela for definida como WITH HOLD. O CURSOR HOLD não pode ser utilizado numa aplicação projetada para a modalidade pseudoconversacional do ClCS. 1.7 – COMMIT COMMIT fecha todos os cursores abertos e valida todas as atualizações feitas até então. COMMIT não provoca perda de posição do CURSOR. Muitas vezes é necessária a emissão frequente de COMMIT em programas de longa duração. As razões são o aumento da concorrência e a diminuição do tempo necessário em eventuais recuperações. Características do COMMIT: 1. Indica término bem-sucedido de uma unidade de trabalho; DECLARE nome do cursor CURSOR FOR WITH HOLD Instrução SELECT Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 22 2. As alterações dos dados serão gravadas; 3. Todos os LOCK serão liberados; 4. O CURSOR é fechado. 1.8 – ROLLBACK Fecha o bloco da transação e indica que a transação deve ser terminada. Todas as atualizações são descartadas porque alguma coisa errada aconteceu e não será possível terminar normalmente. Nada realizado ficará perdurado no banco de dados. Ao contrário do que muita gente acredita, ROLLBACK no contexto de banco de dados não significa reverter e sim voltar ao estado original. Características do ROLLBACK: 1. A unidade trabalho corrente é abandonada; 2. As atualizações dos dados desde o último COMMIT são desfeitas; 3. Todos os PAGE LOCK são liberados; 4. O CURSOR é fechado. EXEMPLO COMMIT 500 500 400 500 400 600 400 600 conta conta A B A B Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 23 PONTO DE UPDATE A UPDATE B NOVO PONTO DE CONSISTÊNCIA CONSISTENCIA LUW ROLLBACK 100 100 Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 24 500 500 500 500 LUW abortada Uma Logical Unit of Work (LUW) também é conhecida como Unit of Work ou Unit of Recovery. Alguns processamentos devem ser logicamente divididos em unidades de processamento ao término da qual os dados estão consistentes. Estas unidades de processamento são conhecidas como LUW. No nosso exemplo, os dados estão consistentes quando a transferência de fundos está terminada. Se o processamento fosse interrompido antes do fundo ser adicionado na Segunda conta, teríamos uma situação de inconsistência de dados. Portanto este processamento não pode ser dividido em mais que uma LUW. Uma LUW não deve ser interrompida. No caso de interrupção do processamento, as eventuais atualizações devem ser desfeitas. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagemde Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 25 Para o DB2 o final de uma LUW é chamada de COMMIT point. Esta situação é estabelecida: 1. Ao término normal do programaç 2. Com a execução de um comando dentro do programa. Uma LUW incompleta deve ser desfeita até o último COMMIT point. Este processamento é conhecido como ROLLBACK. O ROLLBACK é disparado: 1. Ao término anormal do programaç 2. Com a execução de um comando dentro de um programa. 1.9 – SQLCA EXEC SQL INCLUDE SQLCA END–EXEC. Características de uma SQLCA: 1. Fornece informação descrevendo o estado da última instrução SQL executada; 2. Checado pelo programa após cada chamada; 3. Obrigatório e deve ser rotulado como "SQLCA"; 4. Deve ser incorporada no programa com a instrução include do precompilador. O DB2 passa as informações referentes a execução de uma instrução SQL em um bloco de controle chamado SQLCA (SQL COMMUNICATION AREA). Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 26 O SQLCA é obrigatório e é rotulado como "SQLCA" dentro do programa. O SQLCA deve ser verificado pelo programa para determinação do sucesso ou não da última execução de uma instrução SQL. A sua codificação pode ser incorporada ao programa pelo precompilador através da codificação da instrução INCLUDE SQLCA. 1.10 – COMPOSIÇÃO DA SQLCA E AS CONDIÇÕES DE ERRO/SUCESSO SQLCAID CHAR (8) SQLCABC INTEGER SQLCODE INTEGER SQLERRM VARCHAR (70) SQLERRD (1) INTEGER SQLERRD (2) INTEGER SQLERRD (3) INTEGER SQLERRD (4) INTEGER SQLERRD (5) INTEGER SQLERRD (6) INTEGER Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 27 SQLWRNO SQLWRN1 SQLWRN2 SQLWRN3 SQLWRN4 SQLWRN5 SQLWRN6 SQLWRN7 SQLWRN8 SQLWRN9 SQLWRNA SQLSTATE CONDIÇÃO SQLCODE SQLWARNO STATUS EXECUÇÃO ERRO <O FALHA ADVERTÊNCIA > O -OU- mas não + 100 “W” SATISEITO, COM CONDIÇÃO ESPECIAL NÃO ACHADO + 100 DADOS (ADICIONAIS) NÃO ENCONTRADOS SUCESSO 0 BEM SUCEDIDO Os nomes de todos esses campos são para COBOL, PL/I e ASSEMBLER. E são diferentes para o FORTRAN. SQLWARNx – São todos CHAR (1). Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 28 SQLERRD (3) – Indica quantidade de linhas atualizadas via INSERT, UPDATE ou DELETE. SQLCODE – Indica o estado do resultado da transação. É no SQLCA que programa deve verificar valor do SQLCODE, que descreve o sucesso ou insucesso da última execução da instrução SQL. Um valor negativo indica que uma condição de erro foi encontrada e a instrução não foi executada. Um valor posìtivo e diferente de +100 indicam que a instrução foi executada, mas algumas condições exigem atenção maior do programa. Valor igual a +100 significa que os dados não foram encontrados. Pode ser resultado de um FETCH que atingiu o fim de uma tabela resultante ou de uma atualização que não encontrou nenhuma linha em condições de ser atualizada. Valor zero significa execução bem-sucedida. O campo SQLWARNO é usado em alguns casos de advertência. Devem ser examinados em casos de SQLCODE positivos. SQLERRD – O terceiro campo do vetor de inteiros SQLERRD informa a quantidade de linhas afetadas por uma requisição de alteração de dados (UPDATE, INSERT, DELETE). Há uma exceção: a deleção em massa de uma tabela contida em um TABLESPACE SEGMENTADO. Esta situação é detectada com SQLERRD (3) = -1 Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 29 O SQLERRD padroniza códigos de erro de diferentes produtos. É baseado nas especificações da ANSI, tem 5 dígitos e está agrupado por classes. O SQLCA contém também um campo chamado SQLSTATE, que contém RETURN CODES padronizados para um ambiente de processamento distribuído. A informação neste campo pode ser útil para determinar o que aconteceu no APPLICATION SERVER. Informações mais detalhadas podem ser obtidas se o SQLSTATE for analisado em conjunto com o SQLCODE. Um SQLCODE pode corresponder a vários SQLSTATE. Um SQLSTATE pode corresponder a vários SQLCODE. Veja o site www.ibmmainframes.com, no IBM DB2 UDB Messages and Codes (ANEXO 2). Se SQLWARNO contém: ‘ ‘ - SQLWARN1 a 6 estão com branco ‘ W ‘ - Um ou mais de SQLWARN1 a 6 contém ‘ W ‘ Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 30 SQLWARN1 – Valor do STRING truncado no assinalamento a variável HOST. SQLWARN2 - valores nulos ignorados no cálculo de uma função de coluna. SQLWARN3 - número de colunas maior que número de variáveis HOST. SQLWARN4 - UPDATE OU DELETE da cláusula "WHERE". SQLWARN5 - Instrução SQL inválida no DB2. SQLWARN6 – Correção de um valor DATE OU TIMESTAMP com valor inválido resultante de uma operação aritmética. SQLWARN é um vetor de caracteres de 1 byte. Se o byte 0 contém um "W', os byte~ seguintes também podem conter um "W'. Se o byte 3 contém um "W", não houve variáveis HOST suficientes para receber todas as colunas que foram selecionadas. Por exemplo, um SELECT * pode ter sido executado em uma tabela que teve uma coluna adicionada. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 31 O BYTE 4 aplica-se ao SQL dinâmico. Adverte o usuário sobre a possibilidade de se afetar todas as linhas de uma tabela devido a um UPDATE ou DELETE sem a cláusula WHERE. O BYTE 6 indica correção de situações em que o valor de uma DATA ou TIMESTAMP resulta em um valor inválido após uma operação. Por exemplo, a adição de 1 MONTH a 30 de janeiro resultará em 28 de fevereiro ao invés de 30 de fevereiro que é uma data inválida. EXEC SQL SELECT NO_CARGO, NO_DEPT, NU_FONE, NOME INTO :XXXTB008.NO-CARGO, :XXXTB008.NO-DEPT, :XXXTB008.NU_FONE, :XXXTB008.NOME FROM XXX.XXXTB008_FUNCIONARIO WHERE NU_MATR = :XXXTB008.NU_MATR END–EXEC. COLUNA N0_CARGO VAR.HOST :CG VAR.IND. :CGI SELECT/FETCH “ANALISTA” nulo “ANALISTA” inalterado 0 -1 Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 32 UDATE/INSERT “GERENTE” nulo9 “GERENTE” inalterado 0 -1 SELECT ... INT :A:BA valor B Se uma coluna selecionada permitir VALOR NULO, o DB2 irá requerer uma variável indicadora para registrar uma eventual nulidade. Uma variável indicadora é uma HALFWORD (SMALLINT). Uma variável indicadora deve ser especificada contíguamente à variável HOST correspondente dentro de uma instrução SQL embutida. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 33 Uma coluna que não aceita valor nulo não requer uma variável indicadora. Se a coluna apresentar valor nulo em um SELECT ou FETCH, o DB2 atribuirá -1 à variável indicadora e manterá inalterada a variável HOST. Se um programa envolvendo UPDATE ou INSERT atribuir -1 à variável indicadora, o DB2 assumirá valor nulo para a coluna correspondente. EXEC SQL SELECT NO_CARGO, NO_DEPT, NU_FONE INTO :ESTRUTURA:VETOR FROM XXX.XXTB008_FUNCIONARIO WHERE MATR = :ID END-EXEC. ID ESTRUTURA 01 ESTRUTURA. 01 IND-VETOR. 10 CG PIC... 10 VETOR PIC S9(4) COMP 10 DPT PIC... OCCURS 3 TIMES. 10 FON PIC... VETOR Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 34 Se as variáveis HOST estão arranjadas em uma estrutura e pelo menos um de seus componentes trabalha com valor nulo, o programa deve trabalhar com um vetor de variáveis indicadoras. O vetor deve conter uma variável indicadora para cada componente da estrutura, inclusive para aqueles que não trabalham com nulo. A partir do último componente que trabalha com nulo não é mais necessário definir elementos para o vetor. No nosso exemplo a 4a coluna não trabalha com nulo e o nosso vetor não precisa de 4 indicadoras. A correspondência entre a estrutura e o vetor é posicional. O vetor é uma múltipla ocorrência de Variáveis HALFWORD (SMALLINT). Var. IND INTERPRETAÇÃO 0 Var. HOST contém valor não nulo -1 Coluna com valor nulo var. HOST inalterado -2 Resultado nulo devido ao erro aritmético ou de conversão Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 35 N(>0) String de “n” caracteres, trucando no Assinalamento à variável HOST As variáveis indicadoras podem ser utilizadas em outras situações. O valor ZERO indica variável HOST com valor não nulo. O valor -1 indica que a coluna tem ou deve assumir valor nulo. A variável HOST permanece inalterada. O valor -2 aplica-se ao SELECT externo (SUBQUERY) ou ao FETCH, indicando que a coluna tem resultado NULO e a variável HOST permanece inalterada. O teste de SQLCODE dá informações adicionais: 1. +304 indica erro de conversão. Por exemplo, uma variável HOST não conseguiu comportar um valor grande; 2. + 802 indica erro aritmético resultante de divisão por zero ou overflow; 3. Erros de conversão ou de aritmética resultam em SQLCODE -304 OU -802 na ausência da variável indicadora. 4. "n" indica que uma variável HOST é pequena demais para conter um STRING de "n" caracteres. Neste caso o STRING é truncado e o SQLWARN1 é setado para "W'. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 36 DCLGEN Definição de estrutura de tabela. INSTRUÇÃO INCLUDE Para embutir estrutura de tabela/sqlca no programa. DSNTIAR/DSNTIR Rotina de formatação de mensagem de erro. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 37 CATÁLOGO DB2 DEFINIÇÃO TBL DCLGEN Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 38 BIBLIOTECA MEMBRO3 EXEC SQL DECLARE TBL TABLE (A . . , B . .) END-EXEC 01 TBL 10 . . . 10 . . . Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 39 O DCLGEN é um programa que para uma dada tabela, usa o catálogo do DB2 para montar na biblioteca do usuário: 1. A instrução SQL ' DECLARE TABLE '; 2. O código de declarações das variáveis HOST (DATA STRUCTURE). A saída do DCLGEN é inteiramente gravada em um único membro de uma biblioteca. Normalmente existe alguém responsável pela manutenção destas bibliotecas com as saídas dos DCLGEN para as tabelas de DB2. ***************************************************************************** * DCLGEN TABLE (EMPR) * LIBRARY (CEDB2xx . DB01 . LIB (DCLEMPR) * * ACTION (REPLACE) * APOST *... IS THE DCLGEN COMMANDO THAT MADE THE FOLLOWING STATEMENTS **************************************************************************** EXEC SQL DECLARE EMPR TABLE ( MATR CHAR (6) NOT NULL, NOME VARCHAR (12) NOT NULL, SOBRENOME VARCHAR (15) NOT NULL, DEPT CHAR (3) NOT NULL, FONE CHAR (4), Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 40 DATADIM DATE, CARGO DECIMAL (3 , 0), NIVELLED SMALLINT, SEXO CHAR (1), DATANAS DATE, SALARIO DECIMAL (8 , 2) ) END-EXEC. ***************************************************************************** COBOL DECLARATION FOR TABLE EMPR **************************************************************************** 01 DCLEMPR. 10 MATR PIC X (6). 10 NOME 49 NOME-LEN PIC S9(4) USAGE COMP. 49 NOME-TEXT PIC X(12). 10 SOBRENOME. 49 SOBRENOME-LEN PIC S9(4) USAGE COMP. 49 SOBRENOME-TEXT PIC X(15). 10 DEPT PIC X(3). 10 FONE PIC X(4). 10 DATADIM PIC X(10). 10 CARGO PIC XS999V USAGE COMP-3. 10 NIVELED PIC S9( 4 ) USAGE COMP. 10 SEXO PIC X(1). Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 41 10 DATANAS PIC X(10). 10 SALARIO PIC S999999V99 USAGE COMP-3. *****************************************************************************THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 12 **************************************************************************** Este é o resultado da execução do DCLGEN com as telas preenchidas conforme a página anterior. Na parte superior temos a instrução DECLARE com o nome das tabelas, colunas e seus DATA TYPES. Notar que o nome da estrutura deriva do nome da tabela. O nome das variáveis são os nomes das colunas correspondentes. As variáveis para colunas VARCHAR são subdivididas em dois componentes: comprimento e texto. Variáveis indicadoras não são geradas pelo DCLGEN. Essas variáveis são opcionais, servem de documentação e permitem validação adicional pelo precompilador para os nomes de tabelas e colunas, além de DATA TYPES. EXEC SQL DECLARE TBL TABLE (A CHAR (3) NOT NULL, B SMALLINT) END-EXEC. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 42 O precompilador examina a sintaxe de uma instrução SQL, mas não verifica a existência ou não dos objetos referenciados. O precompilador não consulta o catálogo. Assim, uma instrução DECLARE TABLE, apesar de opcional, fornece subsídios ao precompilador para que verifique a existência da tabela e a correspondência entre as variáveis HOST e respectivas colunas. Mesmo que seja feita a opção pela utilização da instrução DECLARE TABLE, o BIND trabalhará com o catálogo para uma verificação final. Veja ao final o item: Entendendo melhor o Bind. BIBLIOTECA MEMBROS EXEC SQL DECLARE TBL TABLE (A . . , B . . ) END–EXEC 01 TBL, 10. . . 10. . . Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 43 Quando o precompilador encontra uma instrução INCLUDE, faz a sua substituição pela saída do DCLGEN. O INCLUDE aponta para o membro que contém a saída do DCLGEN. O arquivo particionado que contém o membro é fornecido pelo usuário na tela do PROGRAM PREPARATION ou pelo cartão SYSLIB do JCL do precompilador. A estrutura de uma SQLCA também pode ser incluída via INCLUDE. Como este bloco está internamente embutido no DB2, não há necessidade de cópia a partir de uma biblioteca. Envolve DUAS ROTINAS na biblioteca de sample do DB2 EXEC SQL DECLARE TBL TABLE (A . . , B . .) END–EXEC 01 TBL 10 . . . 10 . . . 01 SQLCA, 05 . . . 05 . . . DSNTIAR COBOL EXEC SQL INCLUDE MEMBRO3 EXEC SQL INCLUDE SQLCA Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 44 CALL ‘DSNTIAR’ USING SQLCA MESSAGE LRECL. Estas são rotinas que geram mensagens de acordo com o SQLCODE na SQLCA. As mensagens geradas são como as SPUFI. O CALL do DSNTIAR deve ter três parâmetros: 1. SQLCA que contém o SQLCODE e os caracteres que devem ser inseridos no esqueleto da mensagem correspondente. Por exemplo deve ser fornecido o nome da coluna e o nome da tabela para ser inserida no esqueleto da mensagem "there is no column named _________ in table ________." 2. Um número inteiro fornecendo o comprimento desejado para a linha de mensagem. 3. A variável onde será colocada a mensagem formatada. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 45 1.11 – SPUFI (SQL PROCESSING USING FILE INPUT) O SPUFI é um DB2 Interativo constituído por um conjunto de programas que possibilitam a execução imediata de alguma tarefa na base de dados, executando instruções SQL. Ele trabalha com um arquivo de entrada e um arquivo de saída. A sua execução consiste basicamente de três fases: 1. EDIT – Edição de arquivo de entrada onde é codificada uma ou mais instruções SQL; 2. EXECUTE – Interpreta/executa as instruções constantes do arquivo de entrada; 3. BROWSE – Apresenta o arquivo de saída como um relatório do resultado da execução. Preparação e execução de programa Código Fonte Com SQL Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 46 Catálogo DB2 Módulo Objeto Biblioteca de INCLUDE Código Fonte Modificado COMPILAÇÃO LINKEDIÇÃO PRECOMPILAÇÃO DBRM (biblioteca de usuário) BIND Descrição Das tabelas Autorização Plano/ Package Diretório DB2 DBRM Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 47 A preparação de programa é o nome que damos ao processo que torna um programa fonte em um módulo de carga executável. A preparação pode ser feita de várias maneiras: 1. Com um Job editado a partir da PROC do Programa Preparation do DB2. 2. Com um Job montado pelo programa DSNH (opção 3 do DB2I). 3. Interativamente com o programa DSNH. Em linhas gerais a preparação de um programa é constituída das seguintes fases: 1. Pré-compilação 2. Compilação e Linkedição 3. BIND O precompilador pode ser executado com o DB2 fora do ar. A sua função é gerar à partir do fonte dois data sets selados com um TIMESTAMP. Os data sets gerados são: 1. DBRM (Database Request Module) – Contém todas as instruções SQL embutidas no Fonte; 2. Fonte Modificado Módulo De carga Language Interface EXECUÇÃO Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 48 O Fonte é copiado para este DATA SET com modificações. As instruções SQL são transformadas em comentários e os CALLs para o DB2 são inseridos logo a seguir. Eventualmente, códigos de definição de variáveis HOST são copiadas a partir de uma Biblioteca de INCLUDE (que foi gerada pelo DCLGEN por exemplo). Essas Bibliotecas de INCLUDE são anexadas ao código em tempo de compilação do programa O precompilador faz a checagem da sintaxe das instruções SQL e da validade das variáveis HOST utilizadas. Um relatório de execução com eventuais mensagens de erro também é gerado. O compilador gera o módulo objeto a partir do Fonte modificado pelo precompilador. O TIMESTAMP é copiado do Fonte. O Linkage Editor gera o módulo de carga à partir do módulo da linguagem de interface do DB2. O TIMESTAMP original é copiado do módulo objeto. O processador de BIND gera o plano ou PACKAGE à partir do DBRM. O TIMESTAMP é copiado do DBRM. Um Plano ou PACKAGE contéma estratégia de acesso aos dados DB2 com informações do tipo: índices utilizados, estratégia de LOCKING, estratégia de execução de um JOIN, etc. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 49 A fase de COMPILAÇÃO/LINKEDIÇÃO e a fase de BIND são executadas separadamente e podem ser executadas em qualquer ordem. Nesse momento, ocorre a verificação da sintaxe das instruções SQL, inclui declaração de tabelas e variáveis HOST, inclui a SQLCA, cria Fonte modificado com SQL traduzido e cria um DBRM com os SQL copiados, enquanto que o Catálogo não é acessado. O precompilador é executado independentemente do DB2. O DB2 não precisa estar “no ar”. Portanto, não é feito a checagem com os dados do Catálogo. Isto faz com que a carga do Desenvolvimento sob DB2 seja diminuída. A instrução DECLARE TABLE é utilizada para verificação do nome dos objetos, nome das colunas e a correspondência entre colunas e variáveis HOST. Quando a tabela é declarada: 1. Cria um arquivo com o código Fonte modificado Instruções EXEC SQL são transformadas em comentários; Os comentários das instruções EXEC SQL são seguidos de um CALL para o DB2; Gera a declaração das tabelas e das variáveis HOST, conforme especificada na instrução INCLUDE; Gera a estrutura da SQLCA, quando especificado no INCLUDE. 2. Cria um DBRM com as instruções SQL copiadas. BIND ADD REBIND BIND REPLACE Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 50 ADICIONA REFAZ PLANO REFAZ PLANO PLANO NOVO (AMBIENTE ALTERADO) (SQL ALTERADO) DBRM Catálogo Diretório OTIMIZADOR DBRM PLANO / PACKAGE. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 51 O propósito do BIND é a geração do PLANO ou de um PACKAGE. A partir do DBRM e do catálogo são executados os seguintes procedimentos: 1. Checagem da consistência das instruções SQL com os objetos manipulados. São checados nomes, DATA TYPE das colunas, etc...; 2. Checagem da autorização necessária para a execução das instruções SQL; 3. Determinação da estratégia de acesso aos objetos de manipulação, pelo otimizador do DB2; 4. O Plano ou o PACKAGE são armazenados no diretório e uma cópia do DBRM é carregado no catálogo. BIND ADD – Utilizado para criar um novo plano/PACKAGE BIND REPLACE – Utilizado quando a própria instrução SQL foi alterada e queremos refazer o plano ou o PACKAGE existente. REBIND – Utilizado quando o SQL permanece inalterado, mas queremos refletir uma modificação ocorrida no ambiente tais como criação/eliminação de índice ou atualização das estatísticas do catálogo. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 52 O otimizador do DB2 analisa fatores como CPU e I/O para elaborar uma estratégia de acesso. Vejamos: 1. Índices Disponíveis? 2. Número de páginas lidas se TABLESPACE verificado? 3. Número de páginas lidas se utilizado índice? 4. Melhor ordem de execução dos testes? A estratégia de acesso de uma instrução SQL é determinada pelo otimizador DB2. O otimizador procura a melhor opção de acesso para minimizar o consumo de recursos de I/O e de CPU. O otimizador se baseia nas informações estatísticas contidas no catálogo. Tais informações são atualizadas pelo utilitário RUNSTATS. SELECT * FROM XXX.XXXTB005_CURSO WHERE SEXO = ' F' AND (CARGO = ‘ANALISTA’ OR SALARIO > 10001), AND DEPT IN (` E11 ' , ' D14 `) Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 53 CALL RELATÓRIO VSAM TABELAS DB2 CIC ,IMS TSO , BATCH PROGRAMA DB2 PLANO/ PACKAGE Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 54 O programa é executado no adress space do usuário enquanto o plano é executado no address space do DB2. O acesso às tabelas é feito através de CALLs para o DB2. Para impedir que eventualmente um programa venha a utilizar um plano que não Ihe pertence, o DB2 checa se os TIMESTAMPS do módulo de carga e do plano são iguais. O programa não é executado se não forem coincidentes. 1.12 – ENTENDENDO MELHOR O BIND Ao compilarmos o programa, um dos primeiros passos é a pré-compilação, que varre o código- fonte, identifica as instruções de diferentes linguagens e realiza alguns procedimentos, quais sejam: 1. Extrai do programa Cobol a linha do EXEC-SQL, substituindo-a pela chamada de uma sub-rotina que irá realizar o acesso ao DB2; 2. Todas as instruções SQL extraídas dão origem a um outro arquivo-fonte, denominado DBRM (Data Base Request Module); 3. Os dois fontes recebem um TIMESTAMP com o exato momento da geração dos dois arquivos (um com as instruções Cobol e o outro com o SQL). Isso é necessário para que, em tempo de execução, quando o programa fizer requisições ao banco de dados, o mesmo se certifique de que tudo faz parte de uma mesma versão. Havendo divergência, o DB2 retorna SQLCODE = -805; Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 55 4. O BIND é simplesmente a criação do plano de acesso do programa ao BD, ou melhor, a geração de um executável (PACKAGE) a partir do fonte DBRM relacionado. Esse executável normalmente tem o mesmo nome do programa de origem. Portanto, ao executarmos o programa e este chegar a instrução SQL, o módulo de carga Cobol, na prática, chama (via CALL) a interface com o DB2 “pedindo” o seguinte: Acesse o “PACKAGE” com o meu nome e TIMESTAMP para o meu SELECT com as variáveis que estou lhe passando e me retorne o resultado. É importante ressaltar que aqui estamos falando de BIND “estático”, ou seja, aquele que é realizado previamente à execução e no momento em que o programa é instalado em cada ambiente. Isso desonera a aplicação de traçar sua estratégia de acesso às tabelas no momento em que o usuário está utilizando o sistema. Cada ambiente de desenvolvimento, homologação e produção tem um BIND específico, utilizando o mesmo DBRM. Mas por que fazer um novo BIND em todos os ambientes, ao invés de se reutilizar o PACKAGE gerado no desenvolvimento? Porque cada ambiente tem seu próprio DB2, com características específicas, e o processo considera diversas informaçõesdo catálogo, como a existência de índices, a quantidade de registros da tabela e até a variedade de conteúdo dos campos das tabelas. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 56 Quer dizer que o BIND deve ser mais demorado conforme envolva tabelas grandes, pois o DB2 analisa cada linha? Não. Quando executamos o utilitário RUNSTATS, todas as estatísticas das tabelas necessárias ao BIND são consolidadas e gravadas no catálogo do DB2. Essas estatísticas são as utilizadas na geração do PACKAGE. Nesse caso, como o conteúdo dos bancos de dados é muito dinâmico, faz-se necessário a realização periódica de RUNSTATS e REBIND. Com a utilização do mesmo DBRM, o DB2 reavalia sua estratégia de acesso e gere novo PACKAGE. Por fim, quando falamos em BIND dinâmico estamos nos referindo à realização, em tempo de execução, de todo o processo de decisão do DB2 quanto à forma de acesso aos dados, podendo causar degradação de performance na aplicação e até mesmo a sua indisponibilidade. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 57 Exemplo de Cobol/DB2 IDENTIFICATION DIVISION. PROGRAM-ID. XXXPA016. *----------------------------------------------------------------- * SISTEMA : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * PROGRAMA : XXXPA016 * OBJETIVO : XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX * ANALISTA : ERNANI PRAIA * LINGUAGEM : COBOL 2 DB2 * MODO OPERACAO : BATCH *----------------------------------------------------------------- ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. *----------------------------------------------------------------- * AREA DE TRABALHO AUXILIAR *----------------------------------------------------------------- 01 WS-AUXILIARES. 05 WS-FIM PIC X(01) VALUE SPACES. 88 FIM VALUE 'F'. 05 WS-SQLCODE PIC --------9. 05 WS-COUNT-EXTRA PIC S9(04) COMP VALUE +0. 05 WS-FIM-PARCELA PIC S9(04) COMP VALUE +0. 05 WS-NULL-SITCO PIC S9(04) COMP VALUE +0. 05 WS-NULL-EVECO PIC S9(04) COMP VALUE +0. 05 WS-VLR-MONTANTE PIC S9(16)V99 COMP-3 VALUE +0. 05 WS-VLR-DIFERENCA PIC S9(16)V99 COMP-3 VALUE +0. 05 WS-VLR-DEVIDO PIC S9(16)V99 COMP-3 VALUE +0. 05 WS-50-PORCENTO PIC S9(16)V99 COMP-3 VALUE +0. 05 WS-AGENCIA-ANT PIC 9(04) VALUE ZEROS. 05 WS-CHAVE-ATUAL. 07 WS-CONTRATO-ATUAL PIC 9(12) VALUE ZEROS. 07 WS-DT-CONTRATO-ATUAL PIC X(10) VALUE SPACES. 05 WS-CHAVE-ANT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 58 07 WS-CONTRATO-ANT PIC 9(12) VALUE ZEROS. 07 WS-DT-CONTRATO-ANT PIC X(10) VALUE SPACES. 05 WS-ACM-LIDOS PIC 9(07) COMP-3 VALUE ZEROS. 05 WS-ACM-GRAV PIC 9(07) COMP-3 VALUE ZEROS. 05 WS-ACM-COMMIT PIC 9(07) COMP-3 VALUE ZEROS. 05 WS-ACM-MONTANTE-ZERO PIC 9(07) COMP-3 VALUE ZEROS. 05 WS-DATA-HOJE PIC X(10) VALUE SPACES. 05 WS-SQ-LANCAMENTO PIC S9(4) COMP VALUE +0. 05 WS-SECULO PIC 9(02) VALUE ZEROS. 05 WS-DATA-VENC. 07 WS-DD-VENC PIC 9(02) VALUE ZEROS. 07 FILLER PIC X(01) VALUE SPACES. 07 WS-MM-VENC PIC 9(02) VALUE ZEROS. 07 FILLER PIC X(01) VALUE SPACES. 07 WS-AA-VENC PIC 9(04) VALUE ZEROS. *----------------------------------------------------------------- * TRATAMENTO DE ERROS DE ACESSO AO DB2 *----------------------------------------------------------------- 01 WS-ERROR-MESSAGE. 05 WS-ERROR-LEN PIC S9(004) COMP VALUE +960. 05 WS-ERROR-TEXT PIC X(120) OCCURS 8 TIMES. 01 WS-ERROR-TEXT-LEN PIC S9(009) COMP VALUE +120. *----------------------------------------------------------------- * MENSAGENS DE INICIO E TERMINO DO PROGRAMA *----------------------------------------------------------------- 01 WS-MENS-INIC-FIM-PROG. 05 WS-COD-PROGRAMA PIC X(08) VALUE 'XXXPA016'. 05 WS-COD-VER PIC X(13) VALUE 'VERSAO - 01'. 05 WS-COD-ERRO PIC 9(2) VALUE ZEROS. 05 WS-COD-ABN PIC S9(4) COMP. *----------------------------------------------------------------- * AREA DE TRABALHO DB2 *----------------------------------------------------------------- EXEC SQL INCLUDE SQLCA END-EXEC Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 59 EXEC SQL INCLUDE XXXTBA01 END-EXEC EXEC SQL INCLUDE XXXTBA10 END-EXEC EXEC SQL INCLUDE XXXTB021 END-EXEC EXEC SQL INCLUDE XXXTB022 END-EXEC EXEC SQL INCLUDE XXXTB048 END-EXEC *------------------------------------------------------------- * CURSOR TABELA LANCAMENTO CUR021 *------------------------------------------------------------- EXEC SQL DECLARE CUR021 CURSOR WITH HOLD FOR SELECT DT_LANCAMENTO , SQ_LANCAMENTO , VR_LANCAMENTO , NU_PARCELA , DT_ENVIO_SIDEC , DT_CONF_SIDEC , DT_ENVIO_SINAF , FK_XXXTB001_IMONU , FK_XXXTB001_CONDT , FK_XXXTB026_TIPCO , FK_XXXTB028_UNICO , FK_XXXTB028_UNIMCO, FK_XXXTB043_EVECO FROM XXX.XXXTB021_LANCAMENT WHERE FK_XXXTB001_IMONU = :XXXTB021.FK-XXXTB001-IMONU AND FK_XXXTB001_CONDT = :XXXTB021.FK-XXXTB001-CONDT AND FK_XXXTB026_TIPCO IN( 04 , 54 ) Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 60 FOR UPDATE OF FK_XXXTB026_TIPCO END-EXEC. *------------------------------------------------------------- * CURSOR TABELA PARCELA CUR022 *------------------------------------------------------------- EXEC SQL DECLARE CUR022 CURSOR WITH HOLD FOR SELECT NU_PARCELA , DT_VENCIMENTO , VR_PARCELA , VR_MORA , VR_DIF_PARCELA , VR_DIF_MORA , DT_ENVIO_SICOB , DT_CONF_SICOB , NOSSO_NUMERO , DT_PAGAMENTO , FK_XXXTB001_IMONU, FK_XXXTB001_CONDT, FK_XXXTBA11_SITCO FROM XXX.XXXTB022_PARCELA WHERE FK_XXXTB001_IMONU = :XXXTB022.FK-XXXTB001-IMONU AND FK_XXXTB001_CONDT = :XXXTB022.FK-XXXTB001-CONDT AND DT_PAGAMENTO = '01.01.0001' AND DT_VENCIMENTO < :WS-DATA-HOJE AND NU_PARCELA < 50 FOR UPDATE OF DT_PAGAMENTO, VR_PARCELA , VR_DIF_MORA , FK_XXXTBA11_SITCO END-EXEC. *------------------------------------------------------------- * CURSOR TABELA HIST_SIDE CUR048 *------------------------------------------------------------- Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 61 EXEC SQL DECLARE CUR048 CURSOR WITH HOLD FOR SELECT H.DT_LANCAMENTO , H.VR_LANCAMENTO , H.FK_XXXTB001_IMONU , H.FK_XXXTB001_CONDT , H.FK_XXXTB028_UNICO , T.IC_DEBITO_CREDITO FROM XXX.XXXTB048_HIST_SIDE H, XXX.XXXTBA10_TP_LANC_S T WHERE H.FK_XXXTB001_IMONU > :XXXTB048.FK-XXXTB001-IMONU * WHERE H.FK_XXXTB001_IMONU = 500750000199 AND H.FK_XXXTBA10_TP_CO = T.CO_TIPO_LANCAMENTO AND T.IC_DEBITO_CREDITO IN ( 'C' , 'D' ) ORDER BY H.FK_XXXTB001_IMONU, H.FK_XXXTB001_CONDT, H.DT_LANCAMENTO END-EXEC. PROCEDURE DIVISION. 000-000-INICIO. * ---------------------------------------------------- INICIALIZAR EXEC SQL SET :WS-DATA-HOJE = CURRENT DATE END-EXEC. PERFORM 080-000-CONTROLA-COMMIT THRU 080-999-EXIT MOVE NU-CONTRATO OF XXXTBA01 TO FK-XXXTB001-IMONU OF XXXTB048 PERFORM 010-000-OPEN-CUR048 THRU 010-999-EXIT MOVE NU-CONTRATO OF XXXTBA01 TO WS-CONTRATO-ATUAL MOVE DT-REFERENCIA OF XXXTBA01 TO WS-DT-CONTRATO-ATUAL MOVE WS-CHAVE-ATUAL TO WS-CHAVE-ANT PERFORM 015-000-FETCH-CUR048 THRU 015-999-EXIT UNTIL WS-CHAVE-ATUAL NOT EQUAL WS-CHAVE-ANT OR FIM. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 62 MOVE QT-ACATADOS OF XXXTBA01 TO WS-ACM-LIDOS ADD 1 TO WS-ACM-LIDOS CO-EVENTO OF XXXTBA01 MOVE QT-REJEITADOS OF XXXTBA01 TO WS-ACM-GRAV DISPLAY 'REGISTRO ANTERIOR = ' WS-CHAVE-ANT DISPLAY 'INICIO DA ROTINA = ' WS-CHAVE-ATUAL * ---------------------------------------------------- PROCESSAR PERFORM 020-000-PROC-CUR048 THRU 020-999-EXIT UNTIL FIM. * ---------------------------------------------------- FINALIZAR PERFORM 025-000-CLOSE-CUR048 THRU 025-999-EXIT DISPLAY '* -----------------------------------------' DISPLAY '* REG.LIDOS TAB.HISTORICO = ' WS-ACM-LIDOS DISPLAY '* GRAVADOS TAB.LANCAM. = ' WS-ACM-GRAV DISPLAY '* MONTANTE MENOR/IGUAL ZERO = ' WS-ACM-MONTANTE-ZERO DISPLAY '* -----------------------------------------' STOP RUN. 010-000-OPEN-CUR048. EXEC SQL OPEN CUR048 END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* -----------------------------------' DISPLAY '* 010-000 ERRO OPEN CUR048 ' DISPLAY '* 010-000 SQLCODE = ' WS-SQLCODE DISPLAY '* -----------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 010-999-EXIT. EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 63 015-000-FETCH-CUR048. * DISPLAY '015-000-FETCH-CUR048'. EXEC SQL FETCH CUR048 INTO :XXXTB048.DT-LANCAMENTO , :XXXTB048.VR-LANCAMENTO , :XXXTB048.FK-XXXTB001-IMONU , :XXXTB048.FK-XXXTB001-CONDT , :XXXTB048.FK-XXXTB028-UNICO , :XXXTBA10.IC-DEBITO-CREDITO END-EXEC. IF SQLCODE NOT EQUAL ZEROS AND +100 MOVE SQLCODE TO WS-SQLCODE DISPLAY '* -----------------------------------' DISPLAY '* 015-000 ERRO FETCH CUR048 ' DISPLAY '* 015-000 SQLCODE = ' WS-SQLCODE DISPLAY '* -----------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. IF SQLCODE EQUAL ZEROS * DISPLAY FK-XXXTB001-IMONU OF XXXTB048 ' ' * FK-XXXTB001-CONDT OF XXXTB048 MOVE FK-XXXTB001-IMONU OF XXXTB048 TO WS-CONTRATO-ATUAL MOVE FK-XXXTB001-CONDT OF XXXTB048 TO WS-DT-CONTRATO-ATUAL ADD 1 TO WS-ACM-LIDOS ELSE MOVE 'F' TO WS-FIM END-IF. 015-999-EXIT. EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 64 020-000-PROC-CUR048. * --------------------------------------- INICIO QUEBRA CONTRATO MOVE ZEROS TO WS-VLR-MONTANTE MOVE FK-XXXTB028-UNICO OF XXXTB048 TO WS-AGENCIA-ANT MOVE WS-CHAVE-ATUAL TO WS-CHAVE-ANT * --------------------------------------- PROCESSA QUEBRA CONTRATO PERFORM 030-000-PROC-QUEBRA-CONTRATO THRU 030-999-EXITUNTIL WS-CHAVE-ATUAL NOT EQUAL WS-CHAVE-ANT OR FIM. * DISPLAY '***** WS-CH-ANT=' WS-CHAVE-ANT * ' WS-CH-ATUAL=' WS-CHAVE-ATUAL * DISPLAY ' WS-VLR-MONTANTE-048=' WS-VLR-MONTANTE * --------------------------------------- FIM QUEBRA CONTRATO PERFORM 040-000-FIM-QUEBRA-CONTRATO THRU 040-999-EXIT. 020-999-EXIT. EXIT. 025-000-CLOSE-CUR048. EXEC SQL CLOSE CUR048 END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* -----------------------------------' DISPLAY '* 025-000 ERRO CLOSE CUR048 ' DISPLAY '* 025-000 SQLCODE = ' WS-SQLCODE DISPLAY '* -----------------------------------' Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 65 PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 025-999-EXIT. EXIT. 030-000-PROC-QUEBRA-CONTRATO. * DISPLAY '030-000-PROC-QUEBRA-CONTRATO'. IF IC-DEBITO-CREDITO OF XXXTBA10 EQUAL 'C' COMPUTE WS-VLR-MONTANTE = WS-VLR-MONTANTE + VR-LANCAMENTO OF XXXTB048 ELSE COMPUTE WS-VLR-MONTANTE = WS-VLR-MONTANTE - VR-LANCAMENTO OF XXXTB048 END-IF * DISPLAY ' MONTANTE = ' WS-VLR-MONTANTE * ' VR-LANC = ' VR-LANCAMENTO OF XXXTB048 * ' INDICADOR= ' IC-DEBITO-CREDITO OF XXXTBA10 PERFORM 015-000-FETCH-CUR048 THRU 015-999-EXIT. 030-999-EXIT. EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 66 040-000-FIM-QUEBRA-CONTRATO. MOVE WS-CONTRATO-ANT TO FK-XXXTB001-IMONU OF XXXTB021 MOVE WS-DT-CONTRATO-ANT TO FK-XXXTB001-CONDT OF XXXTB021 PERFORM 042-000-OPEN-CUR021 THRU 042-999-EXIT PERFORM 044-000-FETCH-CUR021 THRU 044-999-EXIT PERFORM 045-000-PROC-CUR021 THRU 045-999-EXIT UNTIL SQLCODE EQUAL +100 PERFORM 046-000-CLOSE-CUR021 THRU 046-999-EXIT * DISPLAY '1-WS-CONTRATO-ANT = ' WS-CONTRATO-ANT * ' WS-DT-CONTRATO-ANT = ' WS-DT-CONTRATO-ANT * DISPLAY ' WS-VLR-MONTANTE-048-021 = ' WS-VLR-MONTANTE IF WS-VLR-MONTANTE GREATER ZEROS PERFORM 060-000-APROPRIAR-PARCELA THRU 060-999-EXIT ADD 1 TO WS-ACM-COMMIT ELSE ADD 1 TO WS-ACM-MONTANTE-ZERO DISPLAY ' CONTRATO = ' WS-CONTRATO-ANT ' DT-CONTR = ' WS-DT-CONTRATO-ANT ' MONTANTE = ' WS-VLR-MONTANTE END-IF * DISPLAY '---------------------------------------------------' IF WS-ACM-COMMIT EQUAL 1000 MOVE WS-CONTRATO-ANT TO NU-CONTRATO OF XXXTBA01 MOVE WS-DT-CONTRATO-ANT TO DT-REFERENCIA OF XXXTBA01 Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 67 PERFORM 084-000-UPDATE-XXXTBA01 THRU 084-999-EXIT PERFORM 090-000-COMMIT THRU 090-999-EXIT DISPLAY '---> ULTIMA ATUALIZACAO = ' WS-CHAVE-ANT MOVE ZEROS TO WS-ACM-COMMIT END-IF. 040-999-EXIT. EXIT. 042-000-OPEN-CUR021. EXEC SQL OPEN CUR021 END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* -----------------------------------' DISPLAY '* 042-000 ERRO OPEN CUR021 ' DISPLAY '* 042-000 SQLCODE = ' WS-SQLCODE DISPLAY '* -----------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 042-999-EXIT. EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 68 044-000-FETCH-CUR021. EXEC SQL FETCH CUR021 INTO :XXXTB021.DT-LANCAMENTO , :XXXTB021.SQ-LANCAMENTO , :XXXTB021.VR-LANCAMENTO , :XXXTB021.NU-PARCELA , :XXXTB021.DT-ENVIO-SIDEC , :XXXTB021.DT-CONF-SIDEC , :XXXTB021.DT-ENVIO-SINAF , :XXXTB021.FK-XXXTB001-IMONU , :XXXTB021.FK-XXXTB001-CONDT , :XXXTB021.FK-XXXTB026-TIPCO , :XXXTB021.FK-XXXTB028-UNICO , :XXXTB021.FK-XXXTB028-UNIMCO, :XXXTB021.FK-XXXTB043-EVECO :WS-NULL-EVECO END-EXEC. IF SQLCODE NOT EQUAL ZEROS AND +100 MOVE SQLCODE TO WS-SQLCODE DISPLAY '* -----------------------------------' DISPLAY '* 044-000 ERRO FETCH CUR021 ' DISPLAY '* 044-000 SQLCODE = ' WS-SQLCODE DISPLAY '* -----------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 044-999-EXIT. EXIT. 045-000-PROC-CUR021. ADD VR-LANCAMENTO OF XXXTB021 TO WS-VLR-MONTANTE MOVE 94 TO FK-XXXTB026-TIPCO OF XXXTB021 EXEC SQL UPDATE XXX.XXXTB021_LANCAMENT SET FK_XXXTB026_TIPCO = :XXXTB021.FK-XXXTB026-TIPCO Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro ==736ec== Prof. Pedro Freitas e Judah Reis 69 WHERE CURRENT OF CUR021 END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* ------------------------------------' DISPLAY '* 045-000 ERRO UPDATE CURRENT CUR021 ' DISPLAY '* 045-000 SQLCODE = ' WS-SQLCODE DISPLAY '* ------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. MOVE FK-XXXTB001-IMONU OF XXXTB021 TO FK-XXXTB001-IMONU OF XXXTB022 MOVE FK-XXXTB001-CONDT OF XXXTB021 TO FK-XXXTB001-CONDT OF XXXTB022 MOVE NU-PARCELA OF XXXTB021TO NU-PARCELA OF XXXTB022 PERFORM 050-000-UPDATE-XXXTB022 THRU 050-999-EXIT. PERFORM 044-000-FETCH-CUR021 THRU 044-999-EXIT. 045-999-EXIT. EXIT. 046-000-CLOSE-CUR021. EXEC SQL CLOSE CUR021 END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* -----------------------------------' DISPLAY '* 046-000 ERRO CLOSE CUR021 ' DISPLAY '* 046-000 SQLCODE = ' WS-SQLCODE DISPLAY '* -----------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 70 END-IF. 046-999-EXIT. EXIT. 048-000-INSERT-XXXTB021. MOVE NU-PARCELA OF XXXTB022 TO NU-PARCELA OF XXXTB021 MOVE WS-DATA-HOJE TO DT-LANCAMENTO OF XXXTB021 MOVE '01.01.0001' TO DT-ENVIO-SIDEC OF XXXTB021 DT-CONF-SIDEC OF XXXTB021 DT-ENVIO-SINAF OF XXXTB021 MOVE WS-CONTRATO-ANT TO FK-XXXTB001-IMONU OF XXXTB021 MOVE WS-DT-CONTRATO-ANT TO FK-XXXTB001-CONDT OF XXXTB021 MOVE WS-AGENCIA-ANT TO FK-XXXTB028-UNICO OF XXXTB021 FK-XXXTB028-UNIMCO OF XXXTB021 MOVE -1 TO WS-NULL-EVECO ADD 1 TO WS-SQ-LANCAMENTO WS-ACM-GRAV IF WS-SQ-LANCAMENTO EQUAL 9999 MOVE 1 TO WS-SQ-LANCAMENTO END-IF MOVE WS-SQ-LANCAMENTO TO SQ-LANCAMENTO OF XXXTB021 EXEC SQL INSERT INTO XXX.XXXTB021_LANCAMENT VALUES ( :XXXTB021.DT-LANCAMENTO , :XXXTB021.SQ-LANCAMENTO , :XXXTB021.VR-LANCAMENTO , :XXXTB021.NU-PARCELA , :XXXTB021.DT-ENVIO-SIDEC , :XXXTB021.DT-CONF-SIDEC , :XXXTB021.DT-ENVIO-SINAF , :XXXTB021.FK-XXXTB001-IMONU , :XXXTB021.FK-XXXTB001-CONDT , :XXXTB021.FK-XXXTB026-TIPCO , Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 71 :XXXTB021.FK-XXXTB028-UNICO , :XXXTB021.FK-XXXTB028-UNIMCO, :XXXTB021.FK-XXXTB043-EVECO :WS-NULL-EVECO) END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* --------------------------------------' DISPLAY '* 048-000 ERRO INSERT XXXTB021_LANCAMENT' DISPLAY '* 048-000 SQLCODE = ' WS-SQLCODE DISPLAY '* 048-000 DT-LANCAMENTO = ' DT-LANCAMENTO OF XXXTB021 DISPLAY '* 048-000 SQ-LANCAMENTO = ' SQ-LANCAMENTO OF XXXTB021 DISPLAY '* 048-000 CONTRATO = ' FK-XXXTB001-IMONU OF XXXTB021 DISPLAY '* 048-000 DT-CONTRATO = ' FK-XXXTB001-CONDT OF XXXTB021 DISPLAY '* --------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 048-999-EXIT. EXIT. 050-000-UPDATE-XXXTB022. EXEC SQL UPDATE XXX.XXXTB022_PARCELA SET FK_XXXTBA11_SITCO = 'AA' WHERE FK_XXXTB001_IMONU = :XXXTB022.FK-XXXTB001-IMONU AND FK_XXXTB001_CONDT = :XXXTB022.FK-XXXTB001-CONDT AND NU_PARCELA = :XXXTB022.NU-PARCELA Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 72 END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* --------------------------------------' DISPLAY '* 050-000 ERRO UPDATE XXXTB022_PARCELA ' DISPLAY '* 050-000 SQLCODE = ' WS-SQLCODE DISPLAY '* 050-000 CONTRATO = ' FK-XXXTB001-IMONU OF XXXTB022 DISPLAY '* 050-000 DT-CONTRATO = ' FK-XXXTB001-CONDT OF XXXTB022 DISPLAY '* 050-000 PARCELA = ' NU-PARCELA OF XXXTB022 DISPLAY '* --------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 050-999-EXIT. EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 73 060-000-APROPRIAR-PARCELA. MOVE ZEROS TO WS-VLR-DIFERENCA MOVE WS-CONTRATO-ANT TO FK-XXXTB001-IMONU OF XXXTB022 MOVE WS-DT-CONTRATO-ANT TO FK-XXXTB001-CONDT OF XXXTB022 PERFORM 062-000-OPEN-CUR022 THRU 062-999-EXIT PERFORM 064-000-FETCH-CUR022 THRU 064-999-EXIT PERFORM 065-000-PROC-CUR022 THRU 065-999-EXIT UNTIL WS-VLR-MONTANTE EQUAL ZEROS OR SQLCODE = +100. PERFORM 066-000-CLOSE-CUR022 THRU 066-999-EXIT IF WS-VLR-MONTANTE GREATER ZEROS PERFORM 070-000-PARCELA-EXTRA THRU 070-999-EXIT * DISPLAY '6-UPDATE XXXTB022 - 34 - QQ - SOBROU MONTANTE' * DISPLAY ' MONTANTE=' WS-VLR-MONTANTE * ' VR-PARC=' VR-PARCELA OF XXXTB022 * ' PARCELA=' NU-PARCELA OF XXXTB022 MOVE 34 TO FK-XXXTB026-TIPCO OF XXXTB021 MOVE WS-VLR-MONTANTE TO VR-LANCAMENTO OF XXXTB021 PERFORM 048-000-INSERT-XXXTB021 THRU 048-999-EXIT * DISPLAY '7-INSERT XXXTB021 = ' XXXTB021 END-IF. IF WS-VLR-DIFERENCA GREATER ZEROS PERFORM 072-000-APROP-DIFER THRU 072-999-EXIT * DISPLAY '8-UPDATE XXXTB022 - APROP.DIFERENCA ---------' * DISPLAY ' MONTANTE=' WS-VLR-MONTANTE * ' DIFEREN=' WS-VLR-DIFERENCA * DISPLAY ' PARCELA=' NU-PARCELA OF XXXTB022 * ' VR-PARC= ' VR-PARCELA OF XXXTB022 END-IF. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis74 060-999-EXIT. EXIT. 062-000-OPEN-CUR022. EXEC SQL OPEN CUR022 END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* -----------------------------------' DISPLAY '* 062-000 ERRO OPEN CUR022 ' DISPLAY '* 062-000 SQLCODE = ' WS-SQLCODE DISPLAY '* -----------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 062-999-EXIT. EXIT. 064-000-FETCH-CUR022. EXEC SQL FETCH CUR022 INTO :XXXTB022.NU-PARCELA , :XXXTB022.DT-VENCIMENTO , :XXXTB022.VR-PARCELA , :XXXTB022.VR-MORA , :XXXTB022.VR-DIF-PARCELA , :XXXTB022.VR-DIF-MORA , :XXXTB022.DT-ENVIO-SICOB , :XXXTB022.DT-CONF-SICOB , :XXXTB022.NOSSO-NUMERO , :XXXTB022.DT-PAGAMENTO , :XXXTB022.FK-XXXTB001-IMONU, Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 75 :XXXTB022.FK-XXXTB001-CONDT, :XXXTB022.FK-XXXTBA11-SITCO :WS-NULL-SITCO END-EXEC. IF SQLCODE NOT EQUAL ZEROS AND +100 MOVE SQLCODE TO WS-SQLCODE DISPLAY '* ------------------------------------' DISPLAY '* 064-000 ERRO FETCH CUR022 ' DISPLAY '* 064-000 SQLCODE = ' WS-SQLCODE DISPLAY '* ------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 064-999-EXIT. EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 76 065-000-PROC-CUR022. COMPUTE WS-VLR-DEVIDO = VR-PARCELA OF XXXTB022 + VR-DIF-PARCELA OF XXXTB022 IF WS-VLR-MONTANTE NOT LESS WS-VLR-DEVIDO COMPUTE WS-VLR-MONTANTE = WS-VLR-MONTANTE - WS-VLR-DEVIDO * DISPLAY '2-UPDATE XXXTB022 --- 33 -- QQ -------------' * DISPLAY ' MONTANTE=' WS-VLR-MONTANTE * ' DEVIDO =' WS-VLR-DEVIDO * ' PARCELA=' NU-PARCELA OF XXXTB022 MOVE WS-VLR-DEVIDO TO VR-LANCAMENTO OF XXXTB021 MOVE WS-DATA-HOJE TO DT-PAGAMENTO OF XXXTB022 MOVE 33 TO FK-XXXTB026-TIPCO OF XXXTB021 MOVE 'QQ' TO FK-XXXTBA11-SITCO OF XXXTB022 MOVE ZEROS TO VR-DIF-MORA OF XXXTB022 PERFORM 068-000-UPDATE-XXXTB022 THRU 068-999-EXIT ELSE COMPUTE WS-50-PORCENTO = WS-VLR-DEVIDO / 2 IF WS-VLR-MONTANTE LESS WS-50-PORCENTO * DISPLAY '3-UPDATE XXXTB022 --- 34 -- QQ ----- EXTRA -' * DISPLAY ' MONTANTE=' WS-VLR-MONTANTE * ' DEVIDO=' WS-VLR-DEVIDO * ' PARCELA=' NU-PARCELA OF XXXTB022 PERFORM 070-000-PARCELA-EXTRA THRU 070-999-EXIT MOVE 34 TO FK-XXXTB026-TIPCO OF XXXTB021 ELSE * DISPLAY '4-UPDATE XXXTB022 --- 33 -- QQ ----- DIFER -' * DISPLAY ' MONTANTE=' WS-VLR-MONTANTE * ' DEVIDO=' WS-VLR-DEVIDO * ' PARCELA=' NU-PARCELA OF XXXTB022 MOVE WS-DATA-HOJE TO DT-PAGAMENTO OF XXXTB022 MOVE 'QQ' TO FK-XXXTBA11-SITCO OF XXXTB022 MOVE ZEROS TO VR-DIF-MORA OF XXXTB022 PERFORM 068-000-UPDATE-XXXTB022 THRU 068-999-EXIT COMPUTE WS-VLR-DIFERENCA = WS-VLR-DEVIDO - WS-VLR-MONTANTE Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 77 MOVE 33 TO FK-XXXTB026-TIPCO OF XXXTB021 END-IF MOVE WS-VLR-MONTANTE TO VR-LANCAMENTO OF XXXTB021 MOVE ZEROS TO WS-VLR-MONTANTE END-IF PERFORM 048-000-INSERT-XXXTB021 THRU 048-999-EXIT * DISPLAY '5-INSERT XXXTB021 = ' XXXTB021 PERFORM 064-000-FETCH-CUR022 THRU 064-999-EXIT. * DISPLAY '****** IMONU = ' FK-XXXTB001-IMONU OF XXXTB022 * ' CONDT=' FK-XXXTB001-CONDT OF XXXTB022 * ' PARC= ' NU-PARCELA OF XXXTB022. 065-999-EXIT. EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 78 066-000-CLOSE-CUR022. * DISPLAY '066-000-CLOSE-CUR022'. EXEC SQL CLOSE CUR022 END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* -----------------------------------' DISPLAY '* 066-000 ERRO CLOSE CUR022 ' DISPLAY '* 066-000 SQLCODE = ' WS-SQLCODE DISPLAY '* -----------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 066-999-EXIT. EXIT. 068-000-UPDATE-XXXTB022. EXEC SQL UPDATE XXX.XXXTB022_PARCELA SET VR_PARCELA = :XXXTB022.VR-PARCELA , VR_DIF_MORA = :XXXTB022.VR-DIF-MORA , DT_PAGAMENTO = :XXXTB022.DT-PAGAMENTO , FK_XXXTBA11_SITCO = :XXXTB022.FK-XXXTBA11-SITCO WHERE CURRENT OF CUR022 END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* ------------------------------------' DISPLAY '* 068-000 ERRO UPDATE CUR022 ' DISPLAY '* 068-000 SQLCODE = ' WS-SQLCODE DISPLAY '* 068-000 CONTRATO = ' FK-XXXTB001-IMONU OF XXXTB022 DISPLAY '* 068-000 DT-CONTRATO = ' Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 79 FK-XXXTB001-CONDT OF XXXTB022 DISPLAY '* 068-000 PARCELA = ' NU-PARCELA OF XXXTB022 DISPLAY '* ------------------------------------'PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 068-999-EXIT. EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 80 070-000-PARCELA-EXTRA. * DISPLAY '070-000-PARCELA-EXTRA'. * DISPLAY '****** PARC-ANTES= ' NU-PARCELA OF XXXTB022 PERFORM 076-000-COUNT-XXXTB022 THRU 076-999-EXIT COMPUTE NU-PARCELA OF XXXTB022 = WS-COUNT-EXTRA + 50 MOVE WS-VLR-MONTANTE TO VR-PARCELA OF XXXTB022 VR-LANCAMENTO OF XXXTB021 * DISPLAY '****** CTR = ' FK-XXXTB001-IMONU OF XXXTB022 * ' DT-CTR = ' FK-XXXTB001-CONDT OF XXXTB022 * DISPLAY ' PARC = ' NU-PARCELA OF XXXTB022 * ' VR-PARC=' VR-PARCELA OF XXXTB022 * ' COUNT-X=' WS-COUNT-EXTRA MOVE WS-DATA-HOJE TO DT-VENCIMENTO OF XXXTB022 DT-PAGAMENTO OF XXXTB022 MOVE '01.01.0001' TO DT-ENVIO-SICOB OF XXXTB022 DT-CONF-SICOB OF XXXTB022 MOVE ZEROS TO VR-MORA OF XXXTB022 VR-DIF-PARCELA OF XXXTB022 VR-DIF-MORA OF XXXTB022 NOSSO-NUMERO OF XXXTB022 MOVE 'QQ' TO FK-XXXTBA11-SITCO OF XXXTB022 PERFORM 078-000-INSERT-XXXTB022 THRU 078-999-EXIT. 070-999-EXIT. EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 81 072-000-APROP-DIFER. * DISPLAY '072-000-APROP-DIFER'. EXEC SQL SELECT COUNT(*) INTO :WS-FIM-PARCELA FROM XXX.XXXTB022_PARCELA WHERE FK_XXXTB001_IMONU = :XXXTB022.FK-XXXTB001-IMONU AND FK_XXXTB001_CONDT = :XXXTB022.FK-XXXTB001-CONDT AND NU_PARCELA < 50 END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* --------------------------------------' DISPLAY '* 072-000 ERRO COUNT XXXTB022_PARCELA ' DISPLAY '* 072-000 SQLCODE = ' WS-SQLCODE DISPLAY '* 072-000 CONTRATO = ' FK-XXXTB001-IMONU OF XXXTB022 DISPLAY '* 072-000 DT-CONTRATO = ' FK-XXXTB001-CONDT OF XXXTB022 DISPLAY '* --------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. * DISPLAY 'TEM QUE ENTRAR A PRIMEIRA VEZ' PERFORM TEST BEFORE UNTIL DT-PAGAMENTO OF XXXTB022 EQUAL '01.01.0001' OR NU-PARCELA OF XXXTB022 EQUAL WS-FIM-PARCELA * DISPLAY 'MOSTRAR PARCELA = ' NU-PARCELA OF XXXTB022 * ' QTDE.PARCELA = ' WS-FIM-PARCELA COMPUTE NU-PARCELA OF XXXTB022 = NU-PARCELA OF XXXTB022 + 1 PERFORM 074-000-SELECT-XXXTB022 THRU 074-999-EXIT END-PERFORM IF DT-PAGAMENTO OF XXXTB022 NOT EQUAL '01.01.0001' AND NU-PARCELA OF XXXTB022 EQUAL WS-FIM-PARCELA DISPLAY 'ENTROU PARA CRIAR PARCELA NOVA' ADD 1 TO NU-PARCELA OF XXXTB022 Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 82 MOVE WS-VLR-DIFERENCA TO VR-PARCELA OF XXXTB022 MOVE ZEROS TO VR-MORA OF XXXTB022 VR-DIF-PARCELA OF XXXTB022 VR-DIF-MORA OF XXXTB022 MOVE DT-VENCIMENTO OF XXXTB022 TO WS-DATA-VENC IF WS-MM-VENC EQUAL 12 MOVE 1 TO WS-MM-VENC ADD 1 TO WS-AA-VENC ELSE ADD 1 TO WS-MM-VENC END-IF MOVE ZEROS TO NOSSO-NUMERO OF XXXTB022 MOVE WS-DATA-VENC TO DT-VENCIMENTO OF XXXTB022 MOVE '01.01.0001' TO DT-ENVIO-SICOB OF XXXTB022 DT-CONF-SICOB OF XXXTB022 DT-PAGAMENTO OF XXXTB022 MOVE -1 TO WS-NULL-SITCO PERFORM 078-000-INSERT-XXXTB022 THRU 078-999-EXIT ELSE * DISPLAY 'ENTROU PARA APROPRIAR DIFERENCA/PARC=' * NU-PARCELA OF XXXTB022 ADD WS-VLR-DIFERENCA TO VR-DIF-PARCELA OF XXXTB022 PERFORM 077-000-UPDATE-XXXTB022 THRU 077-999-EXIT END-IF. 072-999-EXIT. EXIT. 074-000-SELECT-XXXTB022. EXEC SQL SELECT NU_PARCELA , DT_VENCIMENTO , VR_PARCELA , VR_MORA , VR_DIF_PARCELA , VR_DIF_MORA , DT_ENVIO_SICOB , DT_CONF_SICOB , NOSSO_NUMERO , Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 83 DT_PAGAMENTO , FK_XXXTB001_IMONU, FK_XXXTB001_CONDT, FK_XXXTBA11_SITCO INTO :XXXTB022.NU-PARCELA , :XXXTB022.DT-VENCIMENTO , :XXXTB022.VR-PARCELA , :XXXTB022.VR-MORA , :XXXTB022.VR-DIF-PARCELA , :XXXTB022.VR-DIF-MORA , :XXXTB022.DT-ENVIO-SICOB , :XXXTB022.DT-CONF-SICOB , :XXXTB022.NOSSO-NUMERO , :XXXTB022.DT-PAGAMENTO , :XXXTB022.FK-XXXTB001-IMONU, :XXXTB022.FK-XXXTB001-CONDT, :XXXTB022.FK-XXXTBA11-SITCO :WS-NULL-SITCO FROM XXX.XXXTB022_PARCELA WHERE FK_XXXTB001_IMONU = :XXXTB022.FK-XXXTB001-IMONU AND FK_XXXTB001_CONDT = :XXXTB022.FK-XXXTB001-CONDT AND NU_PARCELA = :XXXTB022.NU-PARCELA END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* --------------------------------------' DISPLAY '* 074-000 ERRO SELECT XXXTB022_PARCELA 'DISPLAY '* 074-000 SQLCODE = ' WS-SQLCODE DISPLAY '* 074-000 CONTRATO = ' FK-XXXTB001-IMONU OF XXXTB022 DISPLAY '* 074-000 DT-CONTRATO = ' FK-XXXTB001-CONDT OF XXXTB022 DISPLAY '* 074-000 PARCELA = ' NU-PARCELA OF XXXTB022 DISPLAY '* --------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 074-999-EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 84 EXIT. 076-000-COUNT-XXXTB022. EXEC SQL SELECT COUNT(*) INTO :WS-COUNT-EXTRA FROM XXX.XXXTB022_PARCELA WHERE FK_XXXTB001_IMONU = :XXXTB022.FK-XXXTB001-IMONU AND FK_XXXTB001_CONDT = :XXXTB022.FK-XXXTB001-CONDT AND NU_PARCELA > 49 END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* --------------------------------------' DISPLAY '* 076-000 ERRO COUNT XXXTB022_PARCELA ' DISPLAY '* 076-000 SQLCODE = ' WS-SQLCODE DISPLAY '* 076-000 CONTRATO = ' FK-XXXTB001-IMONU OF XXXTB022 DISPLAY '* 076-000 DT-CONTRATO = ' FK-XXXTB001-CONDT OF XXXTB022 DISPLAY '* --------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 076-999-EXIT. EXIT. 077-000-UPDATE-XXXTB022. EXEC SQL UPDATE XXX.XXXTB022_PARCELA SET VR_DIF_PARCELA = :XXXTB022.VR-DIF-PARCELA WHERE FK_XXXTB001_IMONU = :XXXTB022.FK-XXXTB001-IMONU Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 85 AND FK_XXXTB001_CONDT = :XXXTB022.FK-XXXTB001-CONDT AND NU_PARCELA = :XXXTB022.NU-PARCELA END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* --------------------------------------' DISPLAY '* 077-000 ERRO UPDATE XXXTB022_PARCELA ' DISPLAY '* 077-000 SQLCODE = ' WS-SQLCODE DISPLAY '* 077-000 CONTRATO = ' FK-XXXTB001-IMONU OF XXXTB022 DISPLAY '* 077-000 DT-CONTRATO = ' FK-XXXTB001-CONDT OF XXXTB022 DISPLAY '* 077-000 PARCELA = ' NU-PARCELA OF XXXTB022 DISPLAY '* --------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 077-999-EXIT. EXIT. 078-000-INSERT-XXXTB022. EXEC SQL INSERT INTO XXX.XXXTB022_PARCELA VALUES (:XXXTB022.NU-PARCELA , :XXXTB022.DT-VENCIMENTO , :XXXTB022.VR-PARCELA , :XXXTB022.VR-MORA , :XXXTB022.VR-DIF-PARCELA , :XXXTB022.VR-DIF-MORA , :XXXTB022.DT-ENVIO-SICOB , :XXXTB022.DT-CONF-SICOB , :XXXTB022.NOSSO-NUMERO , Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 86 :XXXTB022.DT-PAGAMENTO , :XXXTB022.FK-XXXTB001-IMONU, :XXXTB022.FK-XXXTB001-CONDT, :XXXTB022.FK-XXXTBA11-SITCO) END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* --------------------------------------' DISPLAY '* 078-000 ERRO INSERT XXXTB022_PARCELA ' DISPLAY '* 078-000 SQLCODE = ' WS-SQLCODE DISPLAY '* 078-000 CONTRATO = ' FK-XXXTB001-IMONU OF XXXTB022 DISPLAY '* 078-000 DT-CONTRATO = ' FK-XXXTB001-CONDT OF XXXTB022 DISPLAY '* 078-000 PARCELA = ' NU-PARCELA OF XXXTB022 DISPLAY '* --------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 078-999-EXIT. EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 87 080-000-CONTROLA-COMMIT. EXEC SQL SELECT CO_EVENTO , NU_CONTRATO , DT_EXECUCAO , DT_REFERENCIA INTO :XXXTBA01.CO-EVENTO , :XXXTBA01.NU-CONTRATO , :XXXTBA01.DT-EXECUCAO , :XXXTBA01.DT-REFERENCIA FROM XXX.XXXTBA01_APLI_EXEC WHERE CO_APLICATIVO = 'XXXA016' END-EXEC. IF SQLCODE NOT EQUAL ZEROS AND +100 MOVE SQLCODE TO WS-SQLCODE DISPLAY '* --------------------------------------' DISPLAY '* 080-000 ERRO SELECT XXXTBA01_APLI_EXEC' DISPLAY '* 080-000 SQLCODE = ' WS-SQLCODE DISPLAY '* --------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. MOVE WS-DATA-HOJE TO DT-EXECUCAO OF XXXTBA01 IF SQLCODE NOT EQUAL ZEROS MOVE ZEROS TO CO-EVENTO OF XXXTBA01 MOVE 'XXXA016' TO CO-APLICATIVO OF XXXTBA01 MOVE '01.01.0001' TO DT-REFERENCIA OF XXXTBA01 MOVE SPACES TO CO-STATUS OF XXXTBA01 MOVE ZEROS TO QT-ACATADOS OF XXXTBA01 QT-REJEITADOS OF XXXTBA01 NU-CONTRATO OF XXXTBA01 SQ-LOTE OF XXXTBA01 NU-ULT-LOTE OF XXXTBA01 MOVE 'CONTROLE CANCELAMENTO XXXPA016' TO TX-MSG-ERRO OF XXXTBA01 PERFORM 082-000-INSERT-XXXTBA01 THRU 082-999-EXIT END-IF. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 88 080-999-EXIT. EXIT. 082-000-INSERT-XXXTBA01. EXEC SQL INSERT INTO XXX.XXXTBA01_APLI_EXEC VALUES ( :XXXTBA01.CO-EVENTO, :XXXTBA01.CO-APLICATIVO, :XXXTBA01.DT-EXECUCAO , :XXXTBA01.DT-REFERENCIA, :XXXTBA01.CO-STATUS , :XXXTBA01.QT-ACATADOS , :XXXTBA01.QT-REJEITADOS, :XXXTBA01.NU-CONTRATO , :XXXTBA01.SQ-LOTE , :XXXTBA01.NU-ULT-LOTE , :XXXTBA01.TX-MSG-ERRO) END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* --------------------------------------' DISPLAY '* 082-000 ERRO INSERT XXXTBA01_APLI_EXEC' DISPLAY '* 082-000 SQLCODE = ' WS-SQLCODE DISPLAY '* 082-000 CO-APLICATIVO = ' CO-APLICATIVO OF XXXTBA01 DISPLAY '* --------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 082-999-EXIT. EXIT. Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 89 084-000-UPDATE-XXXTBA01. EXEC SQL UPDATE XXX.XXXTBA01_APLI_EXEC SET CO_EVENTO = :XXXTBA01.CO-EVENTO , NU_CONTRATO = :XXXTBA01.NU-CONTRATO , DT_EXECUCAO = :XXXTBA01.DT-EXECUCAO , DT_REFERENCIA = :XXXTBA01.DT-REFERENCIA WHERE CO_APLICATIVO = 'XXXA016' END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* --------------------------------------' DISPLAY '* 084-000 ERRO UPDATE XXXTBA01_APLI_EXEC' DISPLAY '* 084-000 SQLCODE = ' WS-SQLCODE DISPLAY '* --------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT END-IF. 084-999-EXIT. EXIT. 090-000-COMMIT. EXEC SQL COMMIT END-EXEC. IF SQLCODE NOT EQUAL ZEROS MOVE SQLCODE TO WS-SQLCODE DISPLAY '* --------------------------------------' DISPLAY '* 090-000 ERRO COMMIT ' DISPLAY '* 090-000 SQLCODE = ' WS-SQLCODE DISPLAY '* --------------------------------------' PERFORM 900-000-TRATAR-ABEND THRU 900-999-EXIT Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 90 END-IF. 090-999-EXIT. EXIT. 900-000-TRATAR-ABEND. DISPLAY '****** PROGRAMA CANCELADO **********' DISPLAY '** **' DISPLAY '** PROGRAMA: ' WS-COD-PROGRAMA ' **' DISPLAY '** **' DISPLAY '** OBS: ERRO DE DB2. ENTRAR EM **' DISPLAY '** CONTATO COM OS ANALISTAS **' DISPLAY '** RESPONSAVEIS. **' DISPLAY '** **' DISPLAY '**************************************' CALL 'DSNTIAR' USING SQLCA WS-ERROR-MESSAGE WS-ERROR-TEXT-LEN IF RETURN-CODE = 000 DISPLAY WS-ERROR-TEXT(1) DISPLAY WS-ERROR-TEXT(2) DISPLAY WS-ERROR-TEXT(3) DISPLAY WS-ERROR-TEXT(4) DISPLAY WS-ERROR-TEXT(5) DISPLAY WS-ERROR-TEXT(6) DISPLAY WS-ERROR-TEXT(7) DISPLAY WS-ERROR-TEXT(8) ELSE DISPLAY ' SQLCODE ==> ' SQLCODE DISPLAY ' SQLCAID ==> ' SQLCAID DISPLAY ' SQLCABC ==> ' SQLCABC DISPLAY ' SQLERRMC ==> ' SQLERRMC DISPLAY ' SQLERRP ==> ' SQLERRP Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 91 DISPLAY ' SQLERRD ==> ' SQLERRD(1) ' ' SQLERRD(2) ' ' SQLERRD(3) ' ' SQLERRD(4) ' ' SQLERRD(5) ' ' SQLERRD(6) DISPLAY ' SQLWARN ==> ' SQLWARN DISPLAY ' SQLEXT ==> ' SQLEXT END-IF CALL 'ILBOABN0'. 900-999-EXIT. EXIT. ANEXO 2 – IBM DB2 UDB Messages and Codes -------------------------------------------------------------------------- 00 SUCCESSFUL EXECUTION -------------------------------------------------------------------------- +012 THE UNQUALIFIED COLUMN NAME column-name WAS INTERPRETED AS A CORRELATED REFERENCE -------------------------------------------------------------------------- +098 A DYNAMIC SQL STATEMENT ENDS WITH A SEMICOLON. -------------------------------------------------------------------------- +100 ROW NOT FOUND FOR FETCH, UPDATE OR DELETE, OR THE RESULT OF A QUERY IS AN EMPTY TABLE -------------------------------------------------------------------------- +110 SQL UPDATE TO A DATA CAPTURE TABLE NOT SIGNALED TO ORIGINATING SUBSYSTEM ------------------------------------------------------------------------- +111 THE SUBPAGES OPTION IS NOT SUPPORTED FOR TYPE 2 INDEXES -------------------------------------------------------------------------- +117 THE NUMBER OF INSERT VALUES IS NOT THE SAME AS THE NUMBER OF OBJECT COLUMNS -------------------------------------------------------------------------- Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 92 +162 TABLESPACE database-name.tablespace-name HAS BEEN PLACED IN CHECK PENDING -------------------------------------------------------------------------- +203 THE QUALIFIED COLUMN NAME column-name WAS RESOLVED USING A NON-UNIQUE OR UNEXPOSED NAME --------------------------------------------------------------------------+204 name IS AN UNDEFINED NAME -------------------------------------------------------------------------- +206 column-name IS NOT A COLUMN OF AN INSERTED TABLE, UPDATED TABLE, OR ANY TABLE IDENTIFIED IN A FROM CLAUSE -------------------------------------------------------------------------- +218 THE SQL STATEMENT REFERENCING A REMOTE OBJECT CANNOT BE EXPLAINED -------------------------------------------------------------------------- +219 THE REQUIRED EXPLANATION TABLE table-name DOES NOT EXIST -------------------------------------------------------------------------- +220 THE COLUMN column-name IN EXPLANATION TABLE table-name IS NOT DEFINED PROPERLY -------------------------------------------------------------------------- +236 SQLDA INCLUDES integer1 SQLVAR ENTRIES, BUT integer2 ARE REQUIRED FOR integer3 COLUMNS -------------------------------------------------------------------------- +237 SQLDA INCLUDES integer1 SQLVAR ENTRIES, BUT integer2 ARE REQUIRED BECAUSE AT LEAST ONE OF THE COLUMNS BEING DESCRIBED IS A DISTINCT TYPE -------------------------------------------------------------------------- +238 SQLDA INCLUDES integer1 SQLVAR ENTRIES, BUT integer2 SQLVAR ENTRIES ARE NEEDED FOR integer3 COLUMNS BECAUSE AT LEAST ONE OF THE COLUMNS BEING DESCRIBED IS A LOB -------------------------------------------------------------------------- +239 SQLDA INCLUDES integer1 SQLVAR ENTRIES, BUT integer2 ARE REQUIRED FOR integer3 COLUMNS BECAUSE AT LEAST ONE OF THE COLUMNS BEING DESCRIBED IS A DISTINCT TYPE Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 93 -------------------------------------------------------------------------- +304 A VALUE WITH DATA TYPE data-type1 CANNOT BE ASSIGNED TO A HOST VARIABLE BECAUSE THE VALUE IS NOT WITHIN THE RANGE OF THE HOST VARIABLE IN POSITION position-number WITH DATA TYPE data-type2 -------------------------------------------------------------------------- +331 THE NULL VALUE HAS BEEN ASSIGNED TO A HOST VARIABLE BECAUSE THE STRING CANNOT BE TRANSLATED. REASON reason-code, CHARACTER code-point, HOST VARIABLE position-number -------------------------------------------------------------------------- +339 THE SQL STATEMENT HAS BEEN SUCCESSFULLY EXECUTED, BUT THERE MAY BE SOME CHARACTER CONVERSION INCONSISTENCIES -------------------------------------------------------------------------- +394 USER SPECIFIED OPTIMIZATION HINTS USED DURING ACCESS PATH SELECTION -------------------------------------------------------------------------- +395 USER SPECIFIED OPTIMIZATION HINTS ARE INVALID (REASON CODE = 'reason-code'). THE OPTIMIZATION HINTS ARE IGNORED. -------------------------------------------------------------------------- +402 LOCATION location IS UNKNOWN -------------------------------------------------------------------------- +403 THE LOCAL OBJECT REFERENCED BY THE CREATE ALIAS STATEMENT DOES NOT EXIST -------------------------------------------------------------------------- +434 OPTION keyword IS A DEPRECATED FEATURE -------------------------------------------------------------------------- +445 VALUE value HAS BEEN TRUNCATED -------------------------------------------------------------------------- +462 EXTERNAL FUNCTION OR PROCEDURE name (SPECIFIC NAME specific-name) HAS RETURNED A WARNING SQLSTATE, WITH DIAGNOSTIC TEXT text -------------------------------------------------------------------------- Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 94 +464 PROCEDURE proc RETURNED num QUERY RESULT SETS, WHICH EXCEEDS THE DEFINED LIMIT integer -------------------------------------------------------------------------- +466 CREATE PROCEDURE proc RETURNED num QUERY RESULTS SETS -------------------------------------------------------------------------- +494 NUMBER OF RESULT SETS IS GREATER THAN NUMBER OF LOCATORS -------------------------------------------------------------------------- +495 ESTIMATED PROCESSOR COST OF estimate-amount1 PROCESSOR SECONDS (estimate-amount2 SERVICE UNITS) IN COST CATEGORY cost-category EXCEEDS A RESOURCE LIMIT WARNING THRESHOLD OF limit- amount SERVICE UNITS -------------------------------------------------------------------------- +535 THE RESULT OF THE POSITIONED UPDATE OR DELETE MAY DEPEND ON THE ORDER OF THE ROWS -------------------------------------------------------------------------- +541 THE REFERENTIAL OR UNIQUE CONSTRAINT name HAS BEEN IGNORED BECAUSE IT IS A DUPLICATE -------------------------------------------------------------------------- +551 auth-id DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION operation ON OBJECT object-name -------------------------------------------------------------------------- +552 auth-id DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION operation -------------------------------------------------------------------------- +558 THE WITH GRANT OPTION IS IGNORED -------------------------------------------------------------------------- +561 THE ALTER, INDEX, REFERENCES, AND TRIGGER PRIVILEGES CANNOT BE GRANTED PUBLIC AT ALL LOCATIONS -------------------------------------------------------------------------- +562 A GRANT OF A PRIVILEGE WAS IGNORED BECAUSE THE GRANTEE ALREADY HAS THE PRIVILEGE FROM THE GRANTOR Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 95 -------------------------------------------------------------------------- +585 THE SCHEMA NAME schema-name APPEARS MORE THAN ONCE IN THE CURRENT PATH -------------------------------------------------------------------------- +599 COMPARISON FUNCTIONS ARE NOT CREATED FOR A DISTINCT TYPE BASED ON A LONG STRING DATA TYPE -------------------------------------------------------------------------- +610 A CREATE/ALTER ON OBJECT object-name HAS PLACED OBJECT IN utility PENDING -------------------------------------------------------------------------- +625 THE DEFINITION OF TABLE table-name HAS BEEN CHANGED TO INCOMPLETE -------------------------------------------------------------------------- +626 DROPPING THE INDEX TERMINATES ENFORCEMENT OF THE UNIQUENESS OF A KEY THAT WAS DEFINED WHEN THE TABLE WAS CREATED -------------------------------------------------------------------------- +645 WHERE NOT NULL IS IGNORED BECAUSE THE INDEX KEY CANNOT CONTAIN NULL VALUES -------------------------------------------------------------------------- +650 THE TABLE BEING CREATED OR ALTERED CANNOT BECOME A DEPENDENT TABLE --------------------------------------------------------------------------+653 TABLE table-name IN PARTITIONED TABLESPACE tspace-name IS NOT AVAILABLE BECAUSE ITS PARTITIONED INDEX HAS NOT BEEN CREATED -------------------------------------------------------------------------- +655 STOGROUP stogroup_name HAS BOTH SPECIFIC AND NON-SPECIFIC VOLUME IDS. IT WILL NOT BE ALLOWED IN FUTURE RELEASES -------------------------------------------------------------------------- +658 THE SUBPAGES VALUE IS IGNORED FOR THE CATALOG INDEX index-name -------------------------------------------------------------------------- +664 THE INTERNAL LENGTH OF THE LIMIT-KEY FIELDS FOR THE PARTITIONED INDEX index-name EXCEEDS THE LENGTH IMPOSED BY THE INDEX MANAGER -------------------------------------------------------------------------- +738 DEFINITION CHANGE OF object object_name MAY REQUIRE SIMILAR CHANGE ON READ-ONLY SYSTEMS -------------------------------------------------------------------------- +799 A SET STATEMENT REFERENCES A SPECIAL REGISTER THAT DOES NOT EXIST AT THE SERVER SITE -------------------------------------------------------------------------- +802 EXCEPTION ERROR exception-type HAS OCCURRED DURING operation-type OPERATION ON data-type DATA, POSITION position-number -------------------------------------------------------------------------- Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 96 +806 BIND ISOLATION LEVEL RR CONFLICTS WITH TABLESPACE LOCKSIZE PAGE OR LOCKSIZE ROW AND LOCKMAX 0 -------------------------------------------------------------------------- +807 THE RESULT OF DECIMAL MULTIPLICATION MAY CAUSE OVERFLOW -------------------------------------------------------------------------- +863 THE CONNECTION WAS SUCCESSFUL BUT ONLY SBCS WILL BE SUPPORTED -------------------------------------------------------------------------- +883 ROLLBACK TO SAVEPOINT OCCURED WHEN THERE WERE OPERATIONS THAT CANNOT BE UNDONE, OR AN OPERATION THAT CANNOT BE UNDONE WAS PERFORMED WHEN THERE WAS A SAVEPOINT OUTSTANDING -------------------------------------------------------------------------- +2000 TYPE 1 INDEXES WITH SUBPAGES GREATER THAN 1 CANNOT BECOME GROUP BUFFER POOL DEPENDENT IN A DATA SHARING ENVIRONMENT -------------------------------------------------------------------------- +20002 THE GBPCACHE SPECIFICATION IS IGNORED, bpname DOES NOT ALLOW CACHING -------------------------------------------------------------------------- +20007 USE OF OPTIMIZATION HINTS IS DISALLOWED BY A DB2 SUBSYSTEM PARAMETER. THE SPECIAL REGISTER 'OPTIMIZATION HINT' IS SET TO THE DEFAULT VALUE OF BLANKS. -------------------------------------------------------------------------- +20122 DEFINE NO OPTION IS NOT APPLICABLE IN THE CONTEXT SPECIFIED -------------------------------------------------------------------------- +30100 OPERATION COMPLETED SUCCESSFULLY BUT A DISTRIBUTION PROTOCOL VIOLATION HAS BEEN DETECTED. ORIGINAL SQLCODE=original-sqlcode AND ORIGINAL SQLSTATE=original-sqlstate ANEXO 3 – JCL que executa programas COBOL/DB2 //A01XXXY JOB ,ALM104,MSGCLASS=H,MSGLEVEL=(1,1),CLASS=A, // TIME=1,COND=(0,NE) //**************************************************************** //*** EXECUTA PROGRAMA CURPXXXY //**************************************************************** //STEP01 EXEC PGM=IKJEFT01 //STEPLIB DD DISP=SHR,DSN=DB2.V4R1M0.SDSNEXIT // DD DISP=SHR,DSN=DB2.V4R1M0.SDSNLOAD // DD DISP=SHR,DSN=CURSO.LOADLIB //DBRMLIB DD DISP=SHR,DSN=CURSO.DBRMLIB.DATA //OSPSB530 DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSPRINT DD SYSOUT=* Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Prof. Pedro Freitas e Judah Reis 97 //SYSUDUMP DD SYSOUT=* //SYSDBOUT DD SYSOUT=* //SYSTSIN DD * DSN S(DSNA) RUN PROGRAM(CURPXXXY) PLAN(CURPXXXY) END // Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista de TI) – Pós-Edital www.estrategiaconcursos.com.br 98 3 – QUESTÕES Judah Reis, Pedro Henrique Chagas Freitas Aula 13 Desenvolvimento de Sistemas e Linguagem de Programação p/ BRB (Analista TI) - Pós-Edital www.estrategiaconcursos.com.br 472812 00593590210 - Wellington Luan Correa Pinheiro