Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

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

Mais conteúdos dessa disciplina