Escolar Documentos
Profissional Documentos
Cultura Documentos
DB2 Cobol
NOV/2004
SUMÁRIO
2
(TCL - Transaction Control Language) statements ____________________________________________________ 38
4 - DB2 em um programa COBOL ______________________________________________________ 39
Diferenças no programa e conceitos associados _________________________________________________ 39
Fluxo do processo de geração do executável ____________________________________________________ 40
Funções do Pré-compilador _________________________________________________________________ 42
Funções do Binder_________________________________________________________________________ 42
Comandos ao Pré-compilador _______________________________________________________________ 42
INCLUDES ____________________________________________________________________________________ 42
DECLARE _____________________________________________________________________________________ 43
DCLGEN ____________________________________________________________________________________ 43
SQLCA / SQLCODE ______________________________________________________________________ 45
Variáveis ________________________________________________________________________________ 48
5 – Comandos DDL - Rápida visão _____________________________________________________ 49
CREATE ________________________________________________________________________________ 49
ALTER __________________________________________________________________________________ 50
DROP ___________________________________________________________________________________ 50
COMMENT ______________________________________________________________________________ 50
GRANT _________________________________________________________________________________ 51
RENAME ________________________________________________________________________________ 51
REPLACE _______________________________________________________________________________ 51
REVOKE ________________________________________________________________________________ 52
6 – Comandos DCL – Rápida visão; Transações de Banco de Dados __________________________ 53
Conceito de transação ______________________________________________________________________ 53
Controle de transação : comandos DCL _______________________________________________________ 53
COMMIT ______________________________________________________________________________________ 53
SAVEPOINT ___________________________________________________________________________________ 53
ROLLBACK ____________________________________________________________________________________ 53
7 – Comandos DML _________________________________________________________________ 56
SELECT _________________________________________________________________________________ 56
SELECT - Uso batch em Cobol _____________________________________________________________________ 56
SEM cursor ___________________________________________________________________________________ 56
COM cursor __________________________________________________________________________________ 58
• Conceitos ______________________________________________________________________________ 58
• DECLARE , OPEN, CLOSE, FETCH ________________________________________________________ 59
SELECT – uso batch no DSNTEP2 __________________________________________________________________ 63
Parâmetros do SELECT (Embedded / Dsntep2) _________________________________________________________ 64
Exemplos sintáticos do SELECT ____________________________________________________________________ 68
Exemplos de uso (sem INTO) ______________________________________________________________________ 70
3
Exemplos de uso (com INTO) ______________________________________________________________________ 71
Exemplos de Select no DSNTEP2 ___________________________________________________________________ 72
UPDATE ________________________________________________________________________________ 77
UPDATE - Uso batch no DSNTEP2 _________________________________________________________________ 77
UPDATE - Uso batch em Cobol _____________________________________________________________________ 78
INSERT _________________________________________________________________________________ 80
INSERT - Uso batch no DSNTEP2 __________________________________________________________________ 80
INSERT - Uso batch em Cobol _____________________________________________________________________ 81
DELETE ________________________________________________________________________________ 83
DELETE - Uso batch no DSNTEP2 __________________________________________________________________ 83
DELETE - Uso batch em Cobol _____________________________________________________________________ 84
WHENEVER _____________________________________________________________________________ 85
8 - FUNÇÕES (Built-In) _____________________________________________________________ 87
APÊNDICE I - A Relational Model of Data for Large Shared Data Banks - E. F. Codd___________ 90
APÊNDICE II – Comandos SQL _______________________________________________________ 91
APÊNDICE III – Programas Exemplo __________________________________________________ 93
Completo (Fontes + Saídas) _________________________________________________________________ 93
Leitura com cursor _______________________________________________________________________ 105
APÊNDICE IV – Uso de colunas com NULL ____________________________________________ 108
4
1 – Conceitos de Bases de Dados
Armazenamento de dados
File-oriented
Dados armazenados em arquivos individuais, com todo o relacionamento resolvido pelos
aplicativos.
Vantagens
• rapidez
• facilidade para aplicações muito pequenas e rápidas
Desvantagens
• redundância
• inconsistências
• falta de integração entre diversos arquivos
• dificuldade de compatibilidade / compartilhamento (entre aplicativos / usuários)
• dificuldades nas mudanças da view física (tamanho, formato, localização)
Utilização
• exige tratamento das view’s física e lógica no aplicativo. Para os aspectos da view
física, exige conhecimento de características de hardware.
Vantagens
• Menor redundância
• Menor / Sem inconsistências
• Integração entre diversos “arquivos”
• Compartilhamento (entre aplicativos / usuários)
• Mudanças da view física transparentes para o aplicativo
• (Mudanças da view lógica transparentes para o aplicativo)
• Gerenciamento centralizado
Desvantagens
• Custo (software , hardware , peopleware)
• Complexidade
• Dependência de ambiente de HW e SW
• Dificuldade de recuperação em determinadas falhas
Utilização
exige tratamento somente da view lógica no aplicativo.
5
Base de dados
• (Banco de dados / Database) = conjunto de arquivos relacionados entre si, gerenciados de forma
minimamente centralizada, que permitem armazenamento e acesso eficientes de informações
Tipos de DBMS
• Hierárquicos
❑ Estrutura de armazenamento baseada na estrutura de dados ÁRVORE (semelhante ao organograma
de uma empresa; com hierarquia dos dados; um dado principal é a raiz de outros dados
subordinados (pertencentes) a ele
❑ Cada pai pode ter 1 a n filhos e cada filho pode ter somente um pai
• Rede
❑ Extensão do hierárquico; cada pai pode ter 1 a n filhos e cada filho pode ter 1 a n pais
• Relacionais
❑ O modelo de dados relacional é baseado na lógica de predicados e na teoria dos conjuntos
❑ Um relational database (RDB) é um database composto de um conjunto de tabelas, manipuladas
de acordo com o modelo de dados relacional.
❑ Um relational database management system – RDBMS é um software que efetua todas as
operações em um database, e que faz e permite que seja feita pelo DBA sua administração
❑ Frequentemente RDB e RDBMS são usados sem critério, para referência tanto à base de dados
quanto ao software
❑ Um RDBMS manipula um conjunto de objetos usados para que dados sejam armazenados,
acessados e mantidos.
❑ Exemplos desses objetos são : tabelas, views, indices, chaves (keys), constraints, funções, etc...
❑ Criado pelo Dr. Edgard F. Codd (IBM) no início da década de 70
❑ Um RDB é assim considerado somente se seguir as seguintes “12” regras :
0. (Modelo relacional) : as características do modelo relacional devem ser aplicadas
exclusivamente para administrar o banco de dados (não para armazenar seus dados)
1. Representação da informação : todas as informações no banco de dados devem ser representadas
somente de uma forma, por meio de valores em colunas e linhas das tabelas
2. Acesso garantido : todos os dados devem ser acessados sem ambiguidade (identificação /
individualização = tabela + coluna + primary key da linha
3. Tratamento de NULL : deve ser permitido a qualquer campo (“conteúdo” de coluna) a
possibilidade de NÃO TER conteúdo (vazio ou nulo) para indicar a ausência de informação
ou o fato de que no caso ela é inaplicável
4. Catálogo : deve existir um catálogo (com dados a respeito da estrutura do banco de dados –
metadados) baseado no modelo relacional, passível de ser acessado, por pessoas
autorizadas, com a mesma linguagem usada para acessar os dados
6
5. Linguagem : deve suportar pelo menos uma linguagem relacional que (a) tenha sintaxe linear (b)
possa ser usada tanto interativamente quanto em programas aplicativos e (c) suporte
operações de (DDL) definição de dados e seus atributos (inclusive views) , operações de
(DML) manipulação de dados (acesso e atualização) , administração de segurança e
integridade, e operações de controle das transações (begin, commit, rollback).
6. Atualização de Views : todas as views que sejam passíveis de atualização, devem ser
atualizadas pelo sistema.
7. Insert, update e delete: o sistema deve permitir operadores insert, update, e delete
8. Independência física de dados : mudanças no armazenamento de dados no nível físico não
podem implicar em mudanças nos aplicativos
9. Independência lógica de dados : mudanças na estrutura lógica (tabelas, colunas, etc) não podem
implicar em mudanças nos aplicativos
10. Independência de integridade : restrições relativas à integridade devem ser especificadas
separadamente dos aplicativos e armazenadas no catálogo; mudanças nessas regras não
podem implicar em mudanças nos aplicativos
11. Independência de distribuição : a distribuição da base de dados, caso ocorra, deve ser
transparente para os usuários (aplicativos que usam a base); caso haja mudança que
implique em mudança de distribuição, os aplicativos devem continuar a rodar sem
mudanças
12. Não-subversão : se o sistema tiver interface de baixo nível , a interface não pode ser usada para
subverter o sistema (suas regras), como por exemplo efetuar bypass de verificação de
constraint.
7
Conceitos relativos a RDB’s
Entidade
• (substantivo) ítem sobre o qual alguma informação é armazenada. Ex. cliente, produto
Atributo
• (substantivo / adjetivo - qualificativo) característica de (pertencente a) uma entidade. Ex. tipo de
cliente
Relacionamento
• (verbo / ação) associação existente entre entidades. Ex. cliente compra produto
Tabelas
• São estruturas mantidas pelo gerenciador de banco de dados.
• Uma tabela é um conjunto de linhas (ROWS)
• OU, na verdade :
Campo / Coluna / Column = dado referente a um atributo
Registro / Linha / Row = colunas (campos) com atributos de uma entidade
• Denomina-se RESULT TABLE à tabela gerada como resultado de uma QUERY.
• Manipulação de tabelas : exemplos :
❑ Criando
CREATE TABLE EMP
(EMPNUME INTEGER(5) NOT NULL,
EMPNOME CHAR(30) NOT NULL,
EMPGERE INTEGER(5) ,
EMPSERV CHAR(20) ,
EMPADMI DATE NOT NULL,
EMPSALA INTEGER(10,2),
PRIMARY KEY (EMPNUME),
FOREIGN KEY HAS (DEPNUME)
REFERENCES DEPT
ON DELETE RESTRICT
ON UPDATE CASCADE
);
❑ Acessando
SELECT EMPNUME, EMPNOME
FROM EMP
WHERE EMPNUME > 500;
8
Views
• São formas alternativas de “visualizar” / acessar dados em uma ou mais tabelas.
• Uma view é, na verdade, uma result table , uma “tabela lógica” ; ela não tem dados fisicamente, mas é
uma “máscara” por meio da qual pode-se acessar outros dados de outra(s) tabela(s) e / ou outra(s)
view(s)
• Especifica-se sua estrutura, por exemplo num SELECT, indicando a origem dos seus dados.
• Usa-se views para
✓ Restringir o acesso a dados
✓ Facilitar consultas complexas
✓ Apresentar diferents views de mesmos dados
• Tipos :
✓ Logical view - especificação de como os dados são tratados no nível do aplicativo, podendo
abranger uma ou mais tabelas (é, na verdade, uma result table). A transformação do que existe
armazenado para o que o aplicativo necessita é feita pelo SGBD.
✓ Physical view - especificação de como os dados estão fisicamente dispostos / armazenados, em
geral num segundo nível (o primeiro é tratado pelo hardware + sistema operacional). A
transformação do que existe armazenado para o que o aplicativo necessita deve ser feita pelo
próprio aplicativo.
• Manipulação de VIEW’s : exemplos
❑ Criando
CREATE VIEW EMPVU10
AS SELECT EMPNO, ENAME, JOB
FROM EMP
WHERE DEPTNO = 10;
❑ Acessando
SELECT *
FROM EMPVU10;
Índices
• Conjuntos ordenados de pointers para linhas de uma tabela. São baseados nos valores que as colunas
chave contêm.
• Os índices são utilizados para : possibilitar acesso através de chaves distintas, melhorar a performance,
assegurar a unicidade de chaves.
9
Keys
• É um conjunto ordenado de coluna(s) usado para identificar e acessar determinada(s) linha(s). Uma
determinada coluna pode fazer parte de uma ou mais chaves.
• Uma composite key é composta de mais de uma coluna.
• Uma unique key é uma key é aquela que não permite mais de uma linha com valores iguais.
• Uma primary key é um caso especial de unique key, e é a que permite o armazenamento e acesso
básico a uma tabela.
• Uma foreign key é aquela definida através de um referential constraint.
Constraints
Um constraint é uma regra (propriedade) associada a uma coluna ou conjunto de colunas de uma tabela
que permite a integridade dos dados (data integrity), impedindo a inserção de valores com alguns tipos de
inconsistências. Existem os seguintes tipos de integridade de dados :
• Integridade de entidade (Entity Integrity) : assegura que não haja linhas duplicadas numa tabela
• Integridade de domínio (Domain Integrity) : restringe o valor de uma coluna por meio de especificação
de tipo, formato, ou faixa de valores possíveis. Ex.: salario > 300 e < 1000000
• Integridade referencial (Referential integrity) : assegura que linhas não sejam deletadas se estiverem
sendo usadas por outros registros (linhas). Ex.: linha que descreve uma agência de um banco numa
tabela de agências, sendo a agência usada (referenciada) numa tabela de lançamentos.
• Integridade definida pelo usuário (User-Defined Integrity) : especifica algum teste ou validação que
não se enquadre em nenhuma das 3 categorias anteriores.
Os constraints são :
PRIMARY KEY
É um identificador único para uma linha numa tabela. Toda tabela deve ter um primary key
constraint em uma coluna, e somente um primary key constraint pode ser criado para uma tabela.
UNIQUE
Um unique constraint é uma regra que proibe a duplicidade de valores em uma ou mais colunas de
uma tabela. Unique e primary keys são exemplos de unique constraints. Por exemplo, um unique
constraint pode ser definido no código de fornecedor de uma tabela de fornecedores, para
assegurar que o mesmo código de fornecedor não seja dado a dois (ou mais) fornecedores.
FOREIGN KEY
Um foreign key constraint serve para prevenir ações que possam destruir dados (com valores
iguais) que efetuem a ligação entre tabelas. Uma foreign key numa tabela aponta para uma
primary key em outra tabela. Por meio das foreign keys , por exemplo, impede-se que sejam
deletadas linhas de uma tabela em que a primary key seja foreign key em outra tabela. É a
integridade referencial. Exemplo : supor uma tabela de agências em que a primary key seja o
código de agência de um banco (supor agência 010); e que haja outra tabela com os correntistas
10
das agências; por meio da integridade referencial, não é possível deletar a linha de uma agência na
primeira tabela enquanto houver linhas na tabela de correntistas que refiram-se à agência 010.
CHECK
Um table check constraint é usado para validar valores que devam ser inseridos numa coluna. Por
meio dele, estabelece-se as restrições que definem o domínio das informações válidas para uma
coluna.Por exemplo, pode-se definir um table check constraint que impeça que seja gravado (por
inclusão ou atualização) um salário de funcionário < 180,00.
NOT NULL
Um NOT NULL constraint impede que colunas que devam obrigatoriamente ter conteúdo, sejam
gravadas sem conteúdo.
Pode-se incluir constraint de primary ou unique key a uma tabela já existente somente se não
houver linhas duplicadas na tabela.
• Para deletar constraint já criado em uma table , usa-se o comando ALTER TABLE :
• Para habilitar ou desabilitar constraints de FOREIGN KEY ou CHECK (para efetuar algumas
operações específicas) usar o comando ALTER TABLE :
11
ALTER TABLE EMPLOYEE CHECK CONSTRAINT CHECK_SALE
• Outros exemplos :
Queries
Uma query é uma ferramenta / linguagem / comando para a manipulação (recuperação / acesso / obtenção)
dos dados em um banco de dados.
Existem diversas linguagens para efetuar queries; em geral, cada SGBD tem a sua.
• Responsável pela guarda, disponibilidade e acessibilidade das informações utilizadas nos sistemas
de informação da empresa, tanto em situações normais quanto de contingência.
• Estuda, analisa, planeja, implanta e acompanha os database systems com base nas necessidades e
objetivos da empresa
• Verifica o design de databases para assegurar segurança e eficiência no armazenamento e acesso às
informações.
• Verifica o design de aplicativos para assegurar o uso adequado do database
• Verifica a utilização dos softwares integrados / relacionados ao database para assegurar o uso
adequado do database
• Desenvolve e implementa padrões de utilização do database
• Provê suporte técnico para analistas de desenvolvimento e de produção
• Recebe notificações de erro, analisa-as e, caso não seja do aplicativo, providencia correção,
eventualmente através de contato com fornecedor(es)
• Verifica e monitora o desempenho do database
12
• Verifica o impacto de mudanças de ambiente de hardware e software na continuidade de uso do
database e no seu desempenho
• Analisa e homologa novos produtos de hardware e software relacionados ao database
• Implanta e dá manutenção a novos softwares relacionados ao database
• Processo que constrói ‘access paths’ para tabelas DB2 (método usado para acessar os dados
solicitados via statements SQL)
• Visão geral do processo de BIND :
✓ Lê o arquivo DBRM (Data Base Request Module) gerado pelo pré-compilador
✓ Valida os statements SQL (lidos no DBRM)
✓ Verifica autoridade do usuário para manipular os objetos / tabelas indicados no DBRM
✓ Grava um plano (plan)
• Responsável pela guarda, disponibilidade e acessibilidade das informações utilizadas nos sistemas
de informação da empresa, tanto em situações normais quanto de contingência.
13
2 - DB2
TABLE
STORAGE GROUP
14
Exemplos de tabelas DB2
Creator Table Usuário
DB2T ZZA100_CADAGE ALUNO 01
DB2T ZZA101_AGECLI ALUNO 01
DB2T ZZA102_SLDCLI ALUNO 01
DB2T ZZA103_SLDCLI2 ALUNO 01
DB2T ZZA200_CADAGE ALUNO 02
DB2T ZZA201_AGECLI ALUNO 02
DB2T ZZA202_SLDCLI ALUNO 02
DB2T ZZA203_SLDCLI2 ALUNO 02
DB2T ZZA300_CADAGE ALUNO 03
DB2T ZZA301_AGECLI ALUNO 03
DB2T ZZA302_SLDCLI ALUNO 03
DB2T ZZA303_SLDCLI2 ALUNO 03
DB2T ZZA400_CADAGE ALUNO 04
DB2T ZZA401_AGECLI ALUNO 04
DB2T ZZA402_SLDCLI ALUNO 04
DB2T ZZA403_SLDCLI2 ALUNO 04
DB2T ZZA500_CADAGE ALUNO 05
DB2T ZZA501_AGECLI ALUNO 05
DB2T ZZA502_SLDCLI ALUNO 05
DB2T ZZA503_SLDCLI2 ALUNO 05
DB2T ZZA600_CADAGE ALUNO 06
DB2T ZZA601_AGECLI ALUNO 06
DB2T ZZA602_SLDCLI ALUNO 06
DB2T ZZA603_SLDCLI2 ALUNO 06
DB2T ZZA700_CADAGE ALUNO 07
DB2T ZZA701_AGECLI ALUNO 07
DB2T ZZA702_SLDCLI ALUNO 07
DB2T ZZA703_SLDCLI2 ALUNO 07
DB2T ZZA800_CADAGE ALUNO 08
DB2T ZZA801_AGECLI ALUNO 08
DB2T ZZA802_SLDCLI ALUNO 08
DB2T ZZA803_SLDCLI2 ALUNO 08
DB2T ZZA900_CADAGE ALUNO 09
DB2T ZZA901_AGECLI ALUNO 09
DB2T ZZA902_SLDCLI ALUNO 09
DB2T ZZA903_SLDCLI2 ALUNO 09
DB2T ZZB100_CADAGE ALUNO 10
DB2T ZZB101_AGECLI ALUNO 10
DB2T ZZB102_SLDCLI ALUNO 10
DB2T ZZB103_SLDCLI2 ALUNO 10
DB2T ZZB200_CADAGE ALUNO 11
DB2T ZZB201_AGECLI ALUNO 11
DB2T ZZB202_SLDCLI ALUNO 11
DB2T ZZB203_SLDCLI2 ALUNO 11
DB2T ZZB300_CADAGE ALUNO 12
DB2T ZZB301_AGECLI ALUNO 12
DB2T ZZB302_SLDCLI ALUNO 12
DB2T ZZB303_SLDCLI2 ALUNO 12
DB2T ZZB400_CADAGE ALUNO 13
DB2T ZZB401_AGECLI ALUNO 13
DB2T ZZB402_SLDCLI ALUNO 13
DB2T ZZB403_SLDCLI2 ALUNO 13
DB2T ZZB500_CADAGE ALUNO 14
15
DB2T ZZB501_AGECLI ALUNO 14
DB2T ZZB502_SLDCLI ALUNO 14
DB2T ZZB503_SLDCLI2 ALUNO 14
DB2T ZZB600_CADAGE ALUNO 15
DB2T ZZB601_AGECLI ALUNO 15
DB2T ZZB602_SLDCLI ALUNO 15
DB2T ZZB603_SLDCLI2 ALUNO 15
DB2T ZZB700_CADAGE ALUNO 16
DB2T ZZB701_AGECLI ALUNO 16
DB2T ZZB702_SLDCLI ALUNO 16
DB2T ZZB703_SLDCLI2 ALUNO 16
DB2T ZZB800_CADAGE ALUNO 17
DB2T ZZB801_AGECLI ALUNO 17
DB2T ZZB802_SLDCLI ALUNO 17
DB2T ZZB803_SLDCLI2 ALUNO 17
DB2T ZZB900_CADAGE ALUNO 18
DB2T ZZB901_AGECLI ALUNO 18
DB2T ZZB902_SLDCLI ALUNO 18
DB2T ZZB903_SLDCLI2 ALUNO 18
DB2T ZZC100_CADAGE ALUNO 19
DB2T ZZC101_AGECLI ALUNO 19
DB2T ZZC102_SLDCLI ALUNO 19
DB2T ZZC103_SLDCLI2 ALUNO 19
DB2T ZZC200_CADAGE ALUNO 20
DB2T ZZC201_AGECLI ALUNO 20
DB2T ZZC202_SLDCLI ALUNO 20
DB2T ZZC203_SLDCLI2 ALUNO 20
DB2T ZZC300_CADAGE ALUNO 21
DB2T ZZC301_AGECLI ALUNO 21
DB2T ZZC302_SLDCLI ALUNO 21
DB2T ZZC303_SLDCLI2 ALUNO 21
DB2T ZZC400_CADAGE ALUNO 22
DB2T ZZC401_AGECLI ALUNO 22
DB2T ZZC402_SLDCLI ALUNO 22
DB2T ZZC403_SLDCLI2 ALUNO 22
DB2T ZZC500_CADAGE ALUNO 23
DB2T ZZC501_AGECLI ALUNO 23
DB2T ZZC502_SLDCLI ALUNO 23
DB2T ZZC503_SLDCLI2 ALUNO 23
DB2T ZZC600_CADAGE ALUNO 24
DB2T ZZC601_AGECLI ALUNO 24
DB2T ZZC602_SLDCLI ALUNO 24
DB2T ZZC603_SLDCLI2 ALUNO 24
DB2T ZZC700_CADAGE ALUNO 25
DB2T ZZC701_AGECLI ALUNO 25
DB2T ZZC702_SLDCLI ALUNO 25
DB2T ZZC703_SLDCLI2 ALUNO 25
DB2T ZZC800_CADAGE ALUNO 26
DB2T ZZC801_AGECLI ALUNO 26
DB2T ZZC802_SLDCLI ALUNO 26
DB2T ZZC803_SLDCLI2 ALUNO 26
DB2T ZZC900_CADAGE PROFESSOR
DB2T ZZC901_AGECLI PROFESSOR
DB2T ZZC902_SLDCLI PROFESSOR
DB2T ZZC903_SLDCLI2 PROFESSOR
16
DB2T.ZZCnn0_CADAGE
CD_AGE INTEGER
NM_AGE CHAR(15)
END_AGE CHAR(30)
TEL_AGE INTEGER
DB2T.ZZCnn1_AGECLI
CD_AGE_CLI INTEGER
CD_CLI INTEGER
TP_CLI INTEGER
NM_CLI CHAR(35)
END_CLI CHAR(35)
COMPL_CLI CHAR(30)
CID_CLI CHAR(30)
UF_CLI CHAR(2)
CEP_CLI INTEGER
CMCEP_CLI INTEGER
TEL_CLI INTEGER
RG_CLI INTEGER
CPF_CGC_CLI INTEGER
DT_INCL_CLI DATE
DT_EXCL_CLI DATE
VL_SDO_CLI DECIMAL(7,2)
DB2T.ZZCnn2_SLDCLI
CD_AGE_SLD INTEGER
CD_CLI INTEGER
NM_CLI CHAR(35)
TEL_CLI INTEGER
VL_SDO_CLI DECIMAL(7,2)
DB2T.ZZCnn3_SLDCLI2
CD_AGE_SLD INTEGER
CD_CLI INTEGER
NM_CLI CHAR(35)
TEL_CLI INTEGER
VL_SDO_CLI DECIMAL(15,2)
17
Arquivos de configuração e controle usados pelo DB2
Base de Dados
Arquivos de controle
SYSIBM.SYSTABLES SYSIBM.SYSCOLUMNS
SYSIBM.SYSDBAUTH SYSIBM.SYSTABAUTH
SYSIBM.SYSINDEXES SYSIBM.SYSRELS
SYSIBM.SYSTABCONST
18
SYSCOLUMNS
NAME VARCHAR(18)
TBNAME VARCHAR(18)
TBCREATOR CHAR(8)
COLNO SMALLINT
COLTYPE CHAR(8)
LENGTH SMALLINT
SCALE SMALLINT
NULLS CHAR(1)
COLCARD INTEGER
HIGH2KEY CHAR(8)
LOW2KEY CHAR(8)
UPDATES CHAR(1)
IBMREQD CHAR(1)
REMARKS VARCHAR(254)
DEFAULT CHAR(1)
KEYSEQ SMALLINT
FOREIGNKEY CHAR(1)
FLDPROC CHAR(1)
LABEL VARCHAR(30)
STATSTIME TIMESTMP
DEFAULTVALUE VARCHAR(512)
COLCARDF FLOAT(8)
COLSTATUS CHAR(1)
LENGTH2 INTEGER
DATATYPEID INTEGER
SOURCETYPEID INTEGER
TYPESCHEMA CHAR(8)
TYPENAME VARCHAR(18)
CREATEDTS TIMESTMP
TABELA ACT0001
COLUNA DESCRICAO SEQ TIPO TAM NUL
--- ---- --- ---- --- ---
NRFILIAL NUMERO FILIAL 1 DECIMAL 3 N
CDCIDADE CODIGO CIDADE 2 SMALLINT 2 N
CDNOMEFA CODIGO NOME FANTASIA 3 SMALLINT 2 N
TPFRANQU TIPO FRANQUIA 4 SMALLINT 2 N
CDOFERTA CODIGO OFERTA 5 SMALLINT 2 N
INGRHEAD INDICADOR GROUP HEAD 6 CHAR 1 N
19
SYSIBM.tabelas
SYSIBM DSNRLST01 TABLE
SYSIBM IPNAMES TABLE
SYSIBM LOCATIONS TABLE
SYSIBM LULIST TABLE
SYSIBM LUMODES TABLE
SYSIBM LUNAMES TABLE
SYSIBM MODESELECT TABLE
SYSIBM SQLTABLETYPES TABLE
SYSIBM SQLTYPEINFO TABLE
SYSIBM SYSAUXRELS TABLE
SYSIBM SYSCHECKDEP TABLE
SYSIBM SYSCHECKS TABLE
SYSIBM SYSCHECKS2 TABLE
SYSIBM SYSCOLAUTH TABLE
SYSIBM SYSCOLDIST TABLE
SYSIBM SYSCOLDIST_HIST TABLE
SYSIBM SYSCOLDISTSTATS TABLE
SYSIBM SYSCOLSTATS TABLE
SYSIBM SYSCOLUMNS TABLE
SYSIBM SYSCOLUMNS_HIST TABLE
SYSIBM SYSCONSTDEP TABLE
SYSIBM SYSCOPY TABLE
SYSIBM SYSDATABASE TABLE
SYSIBM SYSDATATYPES TABLE
SYSIBM SYSDBAUTH TABLE
SYSIBM SYSDBRM TABLE
SYSIBM SYSDUMMY1 TABLE
SYSIBM SYSFIELDS TABLE
SYSIBM SYSFOREIGNKEYS TABLE
SYSIBM SYSINDEXES TABLE
SYSIBM SYSINDEXES_HIST TABLE
SYSIBM SYSINDEXPART TABLE
SYSIBM SYSINDEXPART_HIST TABLE
SYSIBM SYSINDEXSTATS TABLE
SYSIBM SYSINDEXSTATS_HIST TABLE
SYSIBM SYSJARCONTENTS TABLE
SYSIBM SYSJAROBJECTS TABLE
SYSIBM SYSJAVAOPTS TABLE
SYSIBM SYSKEYCOLUSE TABLE
SYSIBM SYSKEYS TABLE
SYSIBM SYSLINKS TABLE
SYSIBM SYSLOBSTATS TABLE
SYSIBM SYSLOBSTATS_HIST TABLE
SYSIBM SYSPACKAGE TABLE
SYSIBM SYSPACKAUTH TABLE
SYSIBM SYSPACKDEP TABLE
SYSIBM SYSPACKLIST TABLE
SYSIBM SYSPACKSTMT TABLE
SYSIBM SYSPARMS TABLE
20
SYSIBM SYSPKSYSTEM TABLE
SYSIBM SYSPLAN TABLE
SYSIBM SYSPLANAUTH TABLE
SYSIBM SYSPLANDEP TABLE
SYSIBM SYSPLSYSTEM TABLE
SYSIBM SYSPROCEDURES TABLE
SYSIBM SYSPSM VIEW
SYSIBM SYSPSMOPTS VIEW
SYSIBM SYSRELS TABLE
SYSIBM SYSRESAUTH TABLE
SYSIBM SYSROUTINEAUTH TABLE
SYSIBM SYSROUTINES TABLE
SYSIBM SYSROUTINES_OPTS TABLE
SYSIBM SYSROUTINES_SRC TABLE
SYSIBM SYSSCHEMAAUTH TABLE
SYSIBM SYSSEQUENCES TABLE
SYSIBM SYSSEQUENCESDEP TABLE
SYSIBM SYSSTMT TABLE
SYSIBM SYSSTOGROUP TABLE
SYSIBM SYSSTRINGS TABLE
SYSIBM SYSSYNONYMS TABLE
SYSIBM SYSTABAUTH TABLE
SYSIBM SYSTABCONST TABLE
SYSIBM SYSTABLEPART TABLE
SYSIBM SYSTABLEPART_HIST TABLE
SYSIBM SYSTABLES TABLE
SYSIBM SYSTABLES_HIST TABLE
SYSIBM SYSTABLESPACE TABLE
SYSIBM SYSTABSTATS TABLE
SYSIBM SYSTABSTATS_HIST TABLE
SYSIBM SYSTRIGGERS TABLE
SYSIBM SYSUSERAUTH TABLE
SYSIBM SYSVIEWDEP TABLE
SYSIBM SYSVIEWS TABLE
SYSIBM SYSVLTREE TABLE
SYSIBM SYSVOLUMES TABLE
SYSIBM SYSVTREE TABLE
SYSIBM USERNAMES TABLE
21
Built-In Data Types ; formatos de Date e Time
Dado Obs. Formato DB2 PIC Cobol
Horário Alfanumérico TIME X(8)
ISO format = hh.mm.ss (00.00.00 a 24.00.00)
EUR format = hh.mm.ss (00.00.00 a
24.00.00)
JIS format = hh:mm:ss (00:00:00 a 24:00:00)
USA format = 00.00 xx (00.00 a 12.00);
(xx=AM ou PM )
(Pode ser LOCAL format = definido pela instalação)
Horário + data Alfanumérico TIMESTAMP X(26)
EUR format = yyyy-mm-dd-hh.mm.ss.xxxxxx
Data Alfanumérico DATE X(10)
ISO format = yyyy-mm-dd
EUR format = dd.mm.yyyy
JIS format = yyyy-mm-dd
USA format = mm/dd/yyyy
(Pode ser LOCAL format = definido pela instalação)
Número Binário ponto fixo SMALLINT S9(4) COMP
(16 bits) Ou
2 bytes S9(4) COMP-4
Número Binário ponto fixo INTEGER S9(9) COMP
(32 bits) Ou
4 bytes S9(9) COMP-4
Número Binário ponto fixo Não tem
(64 bits) BIGINT
8 bytes
Número Decimal DECIMAL(p,s) S9(p-s)V9(s) COMP-3
compactado
Número Binário ponto REAL COMP-1
flutuante precisao
simples
4 bytes
Número Binário ponto DOUBLE COMP-2
flutuante dupla Ou
8 bytes FLOAT
String Tamanho fixo CHAR(n) X(n)
Carater
String Tamanho variavel VARCHAR(n) xxx-LEN PIC S9(4) COMP.
Carater xxx-TEXT PIC X(n).
String grafico Tamanho fixo Grafico GRAPHIC
String grafico Tamanho variavel Grafico VARGRAPHIC
String grafico LOB Tamanho variavel Grafico DBCLOB
LOB
String LOB Tamanho variavel Carater CLOB
LOB
String LOB Tamanho variavel Binario BLOB
LOB
Dado externo Pointer DATALINK USAGE POINTER
22
Obs. LOB = LARGE OBJECT : desenhos, fotos, voz, (teses), (livros), etc...
23
DB2 no mainframe
IKJFT01
Sistema Gerenciador DB2 (TSO batch) DSNTEP2
Operacional (SQL batch)
comandos SQL
→resultados
Aplicativos Cobol Batch
FileAid
comandos SQL
→resultados
Outros Softwares
comandos SQL
→resultados
SYSPRINT
(RESULTADO)
24
Job submetido :
//JOBNAME JOB (ALBERTO),ALBERTO,MSGCLASS=X,CLASS=R
//STEP001 EXEC PGM=IKJEFT01,DYNAMNBR=20,REGION=6M
//STEPLIB DD DSN=SYS1.DSNDB1D.SDSNLOAD,DISP=SHR
// DD DSN=SYS1.DSNDB1D.RUNLIB.LOAD,DISP=SHR
//DBRMLIB DD DSN=SYS1.DSNDB1D.DBRMLIB.DATA,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DB1D)
RUN PROGRAM(DSNTEP2) PLAN(DSNTEP2) -
LIB('SYS1.DSNDB1D.RUNLIB.LOAD') PARMS('/ALIGN(MID)')
END
//SYSIN DD *
SELECT * FROM DB2T.ZZZ_CADAGE
Resultado produzido :
READY
DSN SYSTEM(DB1D)
DSN
RUN PROGRAM(DSNTEP2) PLAN(DSNTEP2) LIB('SYS1.DSNDB1D.RUNLIB.LOAD')
DSN
END
READY Nome tabela
END
errado !!!
PAGE 1
***INPUT STATEMENT:
SELECT * FROM DB2T.ZZZ_CADAGE
SQLERROR ON SELECT COMMAND, PREPARE FUNCTION
RESULT OF SQL STATEMENT:
DSNT408I SQLCODE = -204, ERROR: DB2T.ZZZ_CADAGE IS AN UNDEFINED NAME
DSNT418I SQLSTATE = 42704 SQLSTATE RETURN CODE
DSNT415I SQLERRP = DSNXOTL SQL PROCEDURE DETECTING ERROR
DSNT416I SQLERRD = -500 0 0 -1 0 0 SQL DIAGNOSTIC INFORMATION
DSNT416I SQLERRD = X'FFFFFE0C' X'00000000' X'00000000' X'FFFFFFFF'
INFORMATION
25
Resultado produzido :
PAGE 1
***INPUT STATEMENT:
SELECT * FROM DB2T.ZZC900_CADAGE;
+------------------------------------------------------------------------------------+
] CD_AGE ] NM_AGE ] END_AGE ] TEL_AGE ]
+------------------------------------------------------------------------------------+
1_] 1 ] AGENCIA 01 ] ENDER AGE 01 ] 1111111 ]
2_] 2 ] AGENCIA 02 ] ENDER AGE 02 ] 1111111 ]
3_] 3 ] AGENCIA 02 ] ENDER AGE 03 ] 1111111 ]
4_] 4 ] AGENCIA 02 ] ENDER AGE 04 ] 1111111 ]
5_] 5 ] AGENCIA 03 ] ENDER AGE 05 ] 1111111 ]
+------------------------------------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF 5 ROW(S)
Caso a totalidade dos dados não coubesse na linha, eles seriam agrupados em conjuntos de colunas
que coubessem nas linhas; exemplo (de outra tabela) :
PAGE 1
*-----------------------------------------
***INPUT STATEMENT:
SELECT *
FROM DB2T.ZZC901_AGECLI;
+-----------------------------------------------------------------------------------------
] CD_AGE_CLI ] CD_CLI ] TP_CLI ] NM_CLI ]
+-----------------------------------------------------------------------------------------
1_] 1 ] 1 ] 1 ] CLIENTE 1 ]
+-----------------------------------------------------------------------------------------
PAGE 2
------------------------------------------------------------------------------------------------------------------
] END_CLI ] COMPL_CLI ] CID_CLI ] UF_CLI ]
------------------------------------------------------------------------------------------------------------------
1_] ] ] ] ]
------------------------------------------------------------------------------------------------------------------
PAGE 3
------------------------------------------------------------------------------------------------------------------
] CEP_CLI ] CMCEP_CLI ] TEL_CLI ] RG_CLI ] CPF_CGC_CLI ] DT_INCL_CLI ] DT_EXCL_CLI ]
------------------------------------------------------------------------------------------------------------------
1_] 1 ] 1 ] 1 ] 1 ] 1 ] 09.12.2003 ] 30.12.2003 ]
------------------------------------------------------------------------------------------------------------------
PAGE 4
-------------+
] VL_SDO_CLI ]
-------------+
1_] 1.00 ]
-------------+
SUCCESSFUL RETRIEVAL OF 1 ROW(S)
26
Execução de comandos DB2 via FileAid
Comandos Resultados
BASE DE DADOS
Consulta
F6=EXECUTE
Resultado
28
3 - SQL
Origem
1970 = modelo base de dados relacional (Dr. E. F. Codd da IBM) = como os BD são concebidos (não
como são usados) : tabelas, colunas, linhas, índices, chaves, relação entre tabelas, metadados, etc…
IBM desenvolveu SYSTEM R (protótipo de um BD relacional).
Para a criação e a manipulação dos dados do System R, a IBM desenvolveu o SEQUEL (Structured
English Query Language).
Portanto, SQL é uma linguagem que provê o interface com um banco de dados (relacional), tanto para a
manipulação de dados quanto para o seu gerenciamento.
O SQL é suportado por ampla gama de RDBMS , como por exemplo : Oracle, Sybase, SQL Server,
MySql, DB2.
29
Execução de comandos SQL : métodos
• Interactive SQL (ou invocação direta) : (bulk process) permite que comandos sejam dados em
linha de comando e o resultado aparece na tela.
• Module SQL : os statements SQL são compilados separadamente dos statements do código do
programa na linguagem hospedeira; os dois “programas-objeto” gerados são linkeditados
formando um único programa executável.
• Dynamic SQL : permite a criação dos statements (e sua sintaxe e suas variáveis) durante a
execução do programa : o “string” com o comando é gerado em tempo de execução e não em
tempo de codificação; o string é passado diretamente para o SGBD ou para uma API (Aplication
Program Interface) que o repassa para o SGBD; neste último caso diz-se que o método é CLI
(Call-Level Interface).
EXEMPLOS :
30
SQL interativo
(SELECT * Resultados
FROM
TABELA_CLIE
NTE)
BASE DE DADOS
SQL Plus
Sistema SGBD
Operacional DB2
SELECT * FROM TABELA_CLIENTE
→(RESULTADOS)
31
32
SQL dinâmico
Consulta Resultados
BASE DE DADOS
FileAid
Sistema SGBD
Operacional DB2 Consulta SQL
→Resultados
Consulta
File-AID for DB2 -------- BROWSE Selection Template ---------- Row 1 to 4 of 4
COMMAND ===> SCROLL ===> CSR
SSID: DB1D
Use EXEC to continue
Use SQL to view/edit the SQL source for DB2T.ZZC100_CADAGE
F6=EXECUTE
Resultado
File Edit View Options Open Menu Utilities Help
-----------------------------------------------------------------------------
-
File-AID for DB2 Browse DB2T.ZZC100_CADAGE 2 rows
fetched
COMMAND ===> SCROLL ===>
PAGE
CD_AGE NM_AGE
INTEGER CHAR(15)
----PRIMARY ---------------
****** **************************** TOP OF DATA
****************************
000001 8 NOME AG 8 33
000002 10 NOME AG 10
****** ************************** BOTTOM OF DATA
***************************
SQL embedded (aplicação on-line)
Resultados
Dados
(informações
para compor
uma consulta
BASE DE DADOS ao BD) (Resultados)
34
SQL embedded (aplicação batch)
Avisa que :
Programa=X
Plano=xxxxx Consulta Resultados
LoadLib=dsn (no código
Etc... executável)
BASE DE DADOS
(no arquivo com
ddname SYSTSIN)
IKJEFT01 Aplicativo X
Sistema SGBD
Operacional DB2 consulta em SQL
35
SQL batch
Avisa que :
Programa=DSNTEP2 Resultados
Consulta
Plano=xxxxx (SYSPRINT)
LoadLib=dsn (no arquivo com
BASE DE DADOS Etc... ddname SYSIN)
(no arquivo com
ddname SYSTSIN)
IKJEFT01 DSNTEP2
Sistema SGBD
Operacional DB2
consulta em SQL
→(RESULTADOS)
36
Resumo dos principais comandos SQL
Obs.: DCLGEN = Processo via ISPF ou via IKJEFT01 para declarar estruturas relativas a tabelas (DECLARE’s)
e à linguagem hospedeira ; se for Cobol, define as variáveis com nível, nome, PIC, etc.
37
Outros conceitos
38
4 - DB2 em um programa COBOL
Diferenças no programa e conceitos associados
• Os comandos DB2/SQL são incluidos / misturados / “em linha” com os comando COBOL
• Pode-se usar busca de fonte DB2/SQL em bibliotecas por meio do comando INCLUDE (equivale
ao COPY do COBOL)
EXEC SQL
INCLUDE ..........
END-EXEC
• O INCLUDE é na maioria das vezes usado para incluir DECLARE’s
• Após toda operação SQL deve-se testar o código de retorno do DB2 referente a ela, disponível na
variável SQLCODE, pertencente à SQLCA
39
Fluxo do processo de geração do executável
Mensagens
(erros /
COMPILADOR COBOL
resultados da
NORMAL compilação)
BINDER
PACKAGE
Mensagens (dados para
(erros / executar SQL
LINKEDITOR resultados
estático)
da
linkedição)
PROGRAMA
EXECUTÁVEL
40
41
Funções do Pré-compilador
• Resolver os INCLUDE’s , buscando-os na library indicada no JCL (ou que seja default); os
INCLUDES equivalem aos COPY’s : INCLUDE’s referem-se a dados para o DB2/SQL e são
resolvidos em tempo de pré-compilação; COPY’s referem-se a dados (ou procedimentos) do Cobol e
são resolvidos em tempo de compilação.
• Efetuar validação básica de sintaxe dos comandos DB2/SQL baseando-se nos DECLARE e não em
dicionário de dados (NÃO é feita consulta ao banco de dados em tempo de pré-compilação)
• Gerar de 2 arquivos :
✓ Fonte COBOL “puro” (com os statements DB2/SQL transformados em CALL’s ou comentados)
✓ DBRM (Data Base Request Module) : membro de um PDS que tem somente os dados DB2/SQL
Funções do Binder
• Bind = atar, amarrar, encadernar / empacotar = associação entre (código “objeto” dos) statements SQL
do programa com o código objeto do programa propriamente dito.
• Converter o DBRM gerado pelo em um package ou plano (application plan).
• Escolher os caminhos (paths) que serão usados para acessar os dados na base de dados
• Efetuar alguma validação de autorização para efetuar as operações
Comandos ao Pré-compilador
INCLUDES
42
DECLARE
• Declara estruturas (lay-outs) de tabelas em SQL (usar na Working-Storage Section) :
WORKING-STORAGE SECTION.
...
EXEC SQL INCLUDE SQLCA END-EXEC
...
EXEC SQL DECLARE EPCV01A1_PAM_EPC TABLE
( CD_PAM_SIS_EPC CHAR(10) NOT NULL,
DS_PAM_SIS_EPC CHAR(200) NOT NULL,
TS_INC TIMESTAMP NOT NULL,
CD_USU_INC CHAR(8) NOT NULL,
TS_ULT_ATU TIMESTAMP NOT NULL,
CD_USU_ULT_ATU CHAR(8) NOT NULL,
CD_PGM_MAN CHAR(8) NOT NULL
) END-EXEC.
...
DCLGEN
• Não é comando ao pré-compilador. É função utilitária do ISPF ou do IKJEFT01
• Usado por facilidade de padronização
• Ele gera as declarações em SQL (da estrutura das tabelas) e em Cobol (das variáveis que irão ser
usadas para receber dados na leitura ou para enviar dados na gravação)
WORKING-STORAGE SECTION.
...
EXEC SQL INCLUDE SQLCA END-EXEC
...
EXEC SQL INCLUDE EPCV01A1 END-EXEC
...
• A (prévia) geração do DCLGEN dos fontes SQL e Cobol numa library deve anexar ao fonte :
*****EXEC SQL INCLUDE EPCV01A1 END-EXEC.
******************************************************************
* DCLGEN TABLE(DB2DEPC.EPCV01A1_PAM_EPC) *
* LIBRARY(DSVAABLB.DB2.DCLGEN(EPCV01A1)) *
* ACTION(REPLACE) *
* LANGUAGE(COBOL) *
* STRUCTURE(EPCV01A1) *
* APOST *
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS *
******************************************************************
*****EXEC SQL DECLARE EPCV01A1_PAM_EPC TABLE
*****( CD_PAM_SIS_EPC CHAR(10) NOT NULL,
***** DS_PAM_SIS_EPC CHAR(200) NOT NULL,
***** TS_INC TIMESTAMP NOT NULL,
***** CD_USU_INC CHAR(8) NOT NULL,
***** TS_ULT_ATU TIMESTAMP NOT NULL,
***** CD_USU_ULT_ATU CHAR(8) NOT NULL,
***** CD_PGM_MAN CHAR(8) NOT NULL
*****) END-EXEC.
******************************************************************
* COBOL DECLARATION FOR TABLE DB2DEPC.EPCV01A1_PAM_EPC *
******************************************************************
01 EPCV01A1.
10 CD-PAM-SIS-EPC PIC X(10).
10 DS-PAM-SIS-EPC PIC X(200).
10 TS-INC PIC X(26).
10 CD-USU-INC PIC X(8).
43
10 TS-ULT-ATU PIC X(26).
10 CD-USU-ULT-ATU PIC X(8).
10 CD-PGM-MAN PIC X(8).
44
SQLCA / SQLCODE
• SQLCA (SQL Communication Area): área de comunicação entre gerenciador DB2 e aplicativo
• Declaração da SQLCA : na Working-Storage Section, em geral via INCLUDE
• SQLCODE = variável pertencente à SQLCA
45
• SQLCA : detalhes
NAME Data type Field Values
SQLCAID Char(8) An "eye catcher" for storage dumps containing 'SQLCA'. The sixth byte is 'L' if line number
information is returned from parsing an SQL procedure body.
SQLCABC Integer Contains the length of the SQLCA, 136.
SQLCODE Integer Contains the SQL return code. For specific meanings of SQL return codes, see the message
section of the Message Reference.
Code Means
0 Successful execution (although one or more SQLWARN indicators may be set).
positive Successful execution, but with a warning condition.
negative Error condition.
SQLERRML Smallint Length indicator for sqlerrmc, in the range 0 through 70. 0 means that the value of sqlerrmc
is not relevant.
SQLERRMC Varchar (70) Contains one or more tokens, separated by X'FF', that are substituted for variables in the
descriptions of error conditions.
This field is also used when a successful connection is completed.
When a NOT ATOMIC compound SQL statement is issued, it may contain information on
up to 7 errors.
SQLERRP Char(8) Begins with a three-letter identifier indicating the product, followed by five digits indicating
the version, release, and modification level of the product. For example, SQL07010 means
DB2 Universal Database Version 7 Release 1 Modification level 0.
If SQLCODE indicates an error condition, then this field identifies the module that returned
the error.
This field is also used when a successful connection is completed.
SQLERRD Array Six INTEGER variables that provide diagnostic information. These values are generally
empty if there are no errors, except for sqlerrd(6) from a partitioned database.
SQLERRD(1) Integer If connection is invoked and successful, contains the maximum expected difference in length
of mixed character data (CHAR data types) when converted to the database code page from
the application code page.
A value of 0 or 1 indicates no expansion;
A value greater than 1 indicates a possible expansion in length;
A negative value indicates a possible contraction.
On successful return from an SQL procedure, contains the return status value from the SQL
procedure.
SQLERRD(2) Integer If connection is invoked and successful, contains the maximum expected difference in length
of mixed character data (CHAR data types) when converted to the application code page
from the database code page.
A value of 0 or 1 indicates no expansion;
A value greater than 1 indicates a possible expansion in length;
A negative value indicates a possible contraction.
If the SQLCA results from a NOT ATOMIC compound SQL statement that encountered one
or more errors, the value is set to the number of statements that failed.
SQLERRD(3) Integer If PREPARE is invoked and successful, contains an estimate of the number of rows that will
be returned. After INSERT, UPDATE, and DELETE, contains the actual number of rows
affected. If compound SQL is invoked, contains an accumulation of all sub-statement rows. If
CONNECT is invoked, contains 1 if the database can be updated; 2 if the database is read
only.
If CREATE PROCEDURE for an SQL procedure is invoked and an error is encountered
parsing the SQL procedure body, contains the line number where the error was encountered.
The sixth byte of sqlcaid must be 'L' for this to be a valid line number.
46
SQLERRD(4) Integer If PREPARE is invoked and successful, contains a relative cost estimate of the resources
required to process the statement. If compound SQL is invoked, contains a count of the
number of successful sub-statements. If CONNECT is invoked, contains 0 for a one-phase
commit from a down-level client; 1 for a one-phase commit; 2 for a one-phase, read-only
commit; and 3 for a two-phase commit.
SQLERRD(5) Integer Contains the total number of rows deleted, inserted, or updated as a result of both:
• The enforcement of constraints after a successful delete operation
• The processing of triggered SQL statements from activated triggers.
If compound SQL is invoked, contains an accumulation of the number of such rows for all
substatements. In some cases when an error is encountered, this field contains a negative
value that is an internal error pointer. If CONNECT is invoked, contains an authentication
type value of 0 for a server authentication; 1 for client authentication; 2 for authentication
using DB2 Connect; 3 for DCE security services authentication; 255 for unspecified
authentication.
SQLERRD(6) Integer For a partitioned database, contains the partition number of the partition that encountered the
error or warning. If no errors or warnings were encountered, this field contains the partition
number of the coordinator node. The number in this field is the same as that specified for the
partition in the db2nodes.cfg file.
SQLWARN Array A set of warning indicators, each containing a blank or W. If compound SQL is invoked,
contains an accumulation of the warning indicators set for all substatements.
SQLWARN0 Char(1) Blank if all other indicators are blank; contains W if at least one other indicator is not blank.
SQLWARN1 Char(1) Contains W if the value of a string column was truncated when assigned to a host variable.
Contains N if the null terminator was truncated.
Contains A if the CONNECT or ATTACH is successful and the authID for the connection is
longer than 8 bytes.
SQLWARN2 Char(1) Contains W if null values were eliminated from the argument of a function.
SQLWARN3 Char(1) Contains W if the number of columns is not equal to the number of host variables.
SQLWARN4 Char(1) Contains W if a prepared UPDATE or DELETE statement does not include a WHERE
clause.
SQLWARN5 Char(1) Reserved for future use.
SQLWARN6 Char(1) Contains W if the result of a date calculation was adjusted to avoid an impossible date.
SQLWARN7 Char(1) Reserved for future use.
If CONNECT is invoked and successful, contains 'E' if the DYN_QUERY_MGMT database
configuration parameter is enabled.
SQLWARN8 Char(1) Contains W if a character that could not be converted was replaced with a substitution
character.
SQLWARN9 Char(1) Contains W if arithmetic expressions with errors were ignored during column function
processing.
SQLWARN10 Char(1) Contains W if there was a conversion error when converting a character data value in one of
the fields in the SQLCA.
SQLSTATE Char(5) A return code that indicates the outcome of the most recently executed SQL statement.
47
Variáveis
• Dentro de embedded SQL statements : utiliza-se nomes de objetos que o SQL aceita (é o pré-
compilador quem vai analisar / resolver );
✓ Variáveis Cobol (que receberão dados de colunas ou das quais serão obtidos os dados para
inserir ou alterar nas colunas) : preceder com dois pontos. Exemplos:
:WS-NOM-CLI
:CODOPER
✓ Nomes de colunas de tabelas : não colocar dois pontos; colocar o nome da coluna onde esteja o
dado desejado. Neste caso, caso seja necessário qualificar, usar tabela • coluna (o pré-
compilador não aceita OF ou IN). Exemplos:
WS-NOM-CLI
✓ Atenção para as regras a respeito dos nomes de colunas de tabelas e para os nomes de variáveis
Cobol, colocadas nos quadros ilustrativos dos exemplos a seguir !!!!
EXEC SQL
SELECT CD_AGE, NM_AGE
FROM CADAGE Nomes de colunas de tabelas
INTO :WS-CD-AGE,
:WS-NM-AGE
Nomes de variáveis Cobol
END-EXEC
48
5 – Comandos DDL - Rápida visão
CREATE
Usado para criar objetos no database ; alguns exemplos de objetos :
CREATE CLUSTER
CREATE DATABASE
CREATE INDEX
CREATE PACKAGE
CREATE PROCEDURE
CREATE TABLE
CREATE USER
CREATE VIEW
49
Subconsulta é uma instrução SELECT completa (pode-se usar apelidos para as
colunas na lista SELECT).
WITH CHECK OPTION especifica que somente linhas acessíveis à view podem ser inseridas
ou atualizadas.
Restrição é o nome atribuído à restrição CHECK OPTION
WITH READ ONLY assegura que as operações DML não possam ser executadas nesta
view.
ALTER
Usado para alterar objetos (sua estrutura / características) do database ; alguns objetos:
ALTER CLUSTER
ALTER DATABASE
ALTER INDEX
ALTER PACKAGE
ALTER PROCEDURE
ALTER TABLE
ALTER USER
ALTER VIEW
DROP
Usado deletar objetos do database ; alguns exemplos de objetos :
DROP CLUSTER
DROP INDEX
DROP PACKAGE
DROP PROCEDURE
DROP TABLE
DROP USER
DROP VIEW
COMMENT
50
Usado para inserir comentários no data dictionary
GRANT
Usado para conceder privilégios de acesso de usuário ao database
Sintaxe:
RENAME
Usado para renomear objetos do database
REPLACE
Usado para recriar uma view se ela já existir (substitui uma já existente por uma nova com o
mesmo nome)
Sintaxe:
Exemplo :
REPLACE VIEW EMPVU10R
AS SELECT EMPNO, ENAME, JOB
FROM EMP
WHERE DEPTNO = 10;
51
REVOKE
Usado para revogar privilégios concedidos pelo GRANT
Sintaxe:
52
6 – Comandos DCL – Rápida visão; Transações de Banco de Dados
Conceito de transação
• Uma transacao começa quando for executada a primeira instrução SQL executável.
• Ela termina com um dos seguintes eventos:
▪ COMMIT ou ROLLBACK é emitida
▪ Instrução DDL (proibido...) ou DCL (COMMIT, SAVEPOINT, ROLLBACK) é executada
(commit automático)
▪ Termina o programa
▪ O sistema cai
• Uma operacao que altere os dados (INSERT, UPDATE, DELETE) na verdade deixa pendente sua
efetivacao , que somente acontece no final da transacao ou no COMMIT
SAVEPOINT
Sintaxe : SAVEPOINT nome
Funcao : Marca um ponto de gravação dentro da transação atual, identificando-o com nome
ROLLBACK
Sintaxe : ROLLBACK [TO SAVEPOINT nome]
Funcao :
• ROLLBACK (sem parametros) finaliza a transação atual, NAO EFETIVANDO nenhuma alteraçao
pendente desde o início da transação (primeiro comando SQL do programa ou último COMMIT);
• ROLLBACK TO SAVEPOINT nome finaliza a transação atual, NAO EFETIVANDO nenhuma
alteracao pendente DESDE o SAVEPOINT indicado (somente efetiva as pendentes ATE o
SAVEPOINT)
53
Se o ROLLBACK for solicitado SEM REFERENCIA ao SAVEPOINT,
serão desfeitos :
INSERT chave 15
UPDATE chave 11
INSERT chave 16
DELETE chave 12
portanto, somente serão efetivadas as operações efetuadas até o COMMIT (que as efetivou)
54
Estado dos dados após o ROLLBACK
• Descarte todas as alterações pendentes usando a instrução ROLLBACK.
• As alterações nos dados são desfeitas.
• O estado anterior dos dados é restaurado.
• As linhas afetadas são desbloqueadas.
Exemplos
UPDATE EMP
SET DEPTNO = 10
WHERE EMPNO = 7782;
COMMIT;
COMMIT;
**************************************************************
PROGRAMA.
PERFORM INICIAR.
PERFORM INCLUIR-E-ALTERAR-TABELAS.
PERFORM TERMINAR.
IF WS-RETURN-CODE NOT EQUAL ZERO
GO TO ROLLBECKAR
END-IF.
STOP RUN.
ROLLBECKAR.
DISPLAY 'VAI INICIAR O ROLLBACK'
EXEC SQL
ROLLBACK
END-EXEC
DISPLAY 'ROLLBACK EFETUADO'
MOVE WS-RETURN-CODE TO RETURN-CODE.
STOP RUN.
**************************************************************
55
7 – Comandos DML
SELECT
SELECT - Uso batch em Cobol
• Para efetuar Query (obter dados; obter colunas / linhas das tabelas)
• Se a tabela resultado tiver uma única linha a acessar : SELECT sem cursor
• Se a tabela resultado tiver mais de uma linha a acessar : SELECT com cursor
SEM cursor
❑ Quando for certeza que a tabela resultado tiver uma única linha
❑ Na Procedure Division, colocar o SELECT em linha, no momento necessário.
❑ Sintaxe :
SELECT [ | DISTINCT ou ALL | ]
coluna(s)-resultado
FROM tab_origem
[ WHERE condicao-filtro ]
[ GROUP BY coluna(s) ]
Tem INTO aqui
[ HAVING coluna(s) ]
[ ORDER coluna(s) ]
INTO variável-working-storage
[ OPTIMIZE FOR n ROW ]
[ FETCH FIRST [n] ROW ONLY ]
❑ Exemplo 1 :
...
...
EXEC SQL
INCLUDE SQLCA
END-EXEC
...
PROCEDURE DIVISION.
...
...
EXEC SQL
SELECT COUNT(*) FROM TABCLI INTO :W-QUANTOS
END-EXEC
...
...
❑ Exemplo 2 :
...
DATA DIVISION.
...
WORKING-STORAGE SECTION.
...
56
EXEC SQL INCLUDE SQLCA END-EXEC
...
PROCEDURE DIVISION.
...
...
EXEC SQL
SELECT CD_AGE, NM_AGE
FROM CADAGE
WHERE CD_AGE = 543
INTO :CADAGE.CD-AGE,
:CADAGE.NM-AGE
END-EXEC
EVALUATE SQLCODE
WHEN 0 DISPLAY ‘LINHA LIDA DA TABELA’
WHEN OTHER DISPLAY ‘ERRO NO SELECT’
END-EVALUATE
...
...
57
COM cursor
• Conceitos
❑ Quando um programa faz um SELECT, ele consegue acessar uma única linha por vez da result
table, diferentemente de quando o SELECT é feito de forma interativa ou por meio do DSNTEP2,
quando todas as linhas da result table são disponibilizadas (em arquivo tipo texto ou em relatório /
spool).
❑ CURSOR é um recurso do DB2 que permite acessar uma única linha da tabela resultado de um
SELECT; é usado quando o SELECT retorna mais de uma linha, para acessar linha por linha
sequencialmente (à semelhança de uma arquivo sequencial ; o cursor é como se fosse um “arquivo
sequencial virtual” : cada linha da tabela resultado seria equivalente a um registro lógico.)
58
EXEC SQL CLOSE C1 END-EXEC
EVALUATE SQLCODE
WHEN 0 DISPLAY ‘CURSOR ABERTO OK’
WHEN OTHER DISPLAY ‘ERRO NO OPEN DO CURSOR’
MOVE ‘S’ TO W-FLAG-PARAR
END-EVALUATE
...
cursor-name
Indica o nome do cursor (para referência no Open, Fetch e Close).
WITH HOLD
• Indica que os recursos (linhas) devem ficar disponíveis mesmo após o término de uma
transação DB2
• Transações que terminam com COMMIT:
o Cursores que tenham WITH HOLD na definição e que estejam abertos quando for
dado o COMMIT permanecem abertos mesmo depois do COMMIT; ele fica
posicionado na próxima linha a ser acessada
o Após o COMMIT, somente podem ser dados os comandos FETCH e CLOSE para o
cursor
• Transações que terminam com ROLLBACK: todos os cursores abertos são fechados
(não podem ser usados depois do ROLLBACK)
FOR
• Especifica o SELECT que deve ser efetuado para obter uma result table, da qual serão
obtidas as linhas que serão acessadas pelo cursor.
Exemplos :
59
✓ Só DECLARE :
60
OPEN nome_cursor
INTO
• Especifica as variáveis dentro das quais será colocado o conteúdo de cada coluna
solicitada no DECLARE
• Deve haver uma variável para cada coluna
• As variáveis devem ser especificadas na mesma ordem em que as colunas foram
especificadas no DECLARE
• As variáveis deve obrigatoriamente ter PIC compatível com os data-types da coluna
• Se a quantidade de variáveis receptoras for menor que a quantidade de colunas, na
variável SQLWARN3 de SQLDA é colocado ‘W’
• Se a quantidade de variáveis receptoras for maior que a quantidade de colunas não é
dado nenhum aviso
• Ao efetuar uma tentativa de obter linha quando todas já foram obtidas, é colocado +100
no SQLCODE e ‘02000’no SQLSTATE ; as variáveis receptoras não são alteradas
Exemplos :
EXEC SQL
DECLARE C1 CURSOR FOR
SELECT DEPTNO, DEPTNAME, MGRNO FROM TDEPT
WHERE ADMRDEPT = 'A00'
END-EXEC
...
EXEC SQL
OPEN C1 END-EXEC
END-EXEC
...
PERFORM UNTIL SQLCODE NOT =0
EXEC SQL
FETCH C1
INTO :DNUM, :DNAME, :MNUM
END-EXEC
61
END-PERFORM
...
EXEC SQL
CLOSE C1
END-EXEC
62
SELECT – uso batch no DSNTEP2
• Exemplo :
SELECT CD_AGE_SLD, SLD_CLI AS VALOR_DEBITO
FROM DB2T.ZZZ333_SLDNEG;
63
Parâmetros do SELECT (Embedded / Dsntep2)
Importante :
Na especificação de parâmetros que sejam uma lista de elementos (para especificar uma relação de
colunas, por exemplo), deve-se colocar vírgula separando um elemento de outro (mas não colocar vírgula
após o último elemento, antes do próximo parâmetro ou do final do comando). Exemplo :
Coluna(s)-resultado
• Indica-se o(s) elemento(s) que forma(m) a tabela-resultado. Pode-se especificar :
* (indica TODAS as colunas) ou
nome_coluna [AS nome_temporário] ou
função [AS nome_temporário] ou
expressão [AS nome_temporário]
• Pode-se atribuir nomes (temporários) aos elemento(s) resultado, utilizando a cláusula AS :
SELECT COUNT(*) AS QUANTAS_LINS FROM .......
Neste caso a coluna da tabela resultado que irá ter a informação COUNT(*) terá o
nome de QUANTAS_LINS .
Se não fosse especificada a cláusula AS com o nome QUANTAS_LINS, a referida
coluna não teria nome
SELECT MAX(SALARIO) AS MAIOR_SALARIO FROM ......
SELECT (SALARIO * 1.2) AS COM_REAJUSTE FROM ......
• Se entre os elementos que compõem a tabela-resultado for especificado uma função que faça tratamento
de grupos de linhas , é necessário :
❑ especificar as colunas como coluna(s)-resultado e
❑ especificar a cláusula GROUP BY indicando as mesmas colunas como elementos chave de
agrupamento
• As funções que tratam grupos de linhas (funções agregadas) são :
❑ COUNT(coluna) = retorna o número (quantidade) de colunas que sejam NOT NULL .
COUNT(*) = retorna o número (quantidade) de colunas, sejam NULL ou NOT NULL
❑ MAX(coluna) = retorna o maior valor que a coluna tenha em qualquer de suas linhas
❑ MIN(coluna) = retorna o menor valor que a coluna tenha em qualquer de suas linhas
❑ SUM(coluna) = retorna a somatória de todos os valores que a coluna tenha em todas suas linhas
❑ AVG(coluna) = retorna a média aritmética de todos os valores que a coluna tenha em todas suas linhas
64
FROM tab_origem
• pode-se especificar :
❑ nome de uma tabela
❑ nome de mais de uma tabela
❑ outro SELECT (na verdade é uma result table)
Operador LIKE ::
LIKE ‘%literal%’ : se o conteúdo tiver a literal em qualquer posição
LIKE ‘literal%’ : se o conteúdo tiver a literal no início (posição 1)
LIKE ‘%literal’ : se o conteúdo tiver a literal no fim (terminar com ela)
LIKE ‘literal_’ : se o conteúdo tiver a literal em qualquer posição, seguida de qualquer caracter
LIKE ‘_literal’ : se o conteúdo tiver a literal em qualquer posição, precedida de qualquer caracter
GROUP BY coluna(s)-agrupamento
65
indica-se a(s) coluna(s) cujas linhas devem ser agrupadas para que do grupo seja extraido um resultado.
Obrigatório se for usada funcão(ões) na(s) coluna(s) resultado. Deve-se especificar os nomes das colunas
(não de função) indicados também na(s) coluna(s) resultado .
Se usada, a cláusula GROUP BY deve seguir a cláusula FROM (e a WHERE, se houver), e deve preceder a
cláusula ORDER BY.
Pode-se, também, agrupar mais de um grupo de colunas.
ORDER coluna(s)-ordenação
Especificar a ordem de classificação.
Pode ser feita através do nome da coluna, ou de um inteiro que indique seu número, ou uma
expressão.
O DB2 ordena primeiro pela primeira chave (coluna) especificada, depois pela segunda, e assim
por diante.
Pode-se especificar ordem ascendente ou descendente. Dados nulos aparecem por ultimo (na
ordem ascendente) ou no início (se a ordem solicitada for descendente).
INTO
Nomes das variáveis onde serão colocados os valores obtidos da tabela.
Especificar na execução do DB2 chamado por programa em linguagem hospedeira.
Não especificar na execução do DB2 sozinho.
OPTIMIZE FOR n ROW
Indica que o DB2 deve efetuar acesso diferenciado aos dados, para, de alguma forma, otimizar o
desempenho. Pode-se especificar : OPTIMIZE FOR n ROWS
A cada n linhas o DB2 libera um bloco com essas n linhas para que possam ser processadas, permitindo
que o aplicativo ganhe controle a cada intervalo de tempo menor do que ganharia caso tivesse que esperar o
fim do acesso a todas as linhas da result table do SELET. Exemplo :
SELECT CODFUNC, NOMEFUNC, SALARIO
FROM TABFUNCS
ORDER BY SALARIO DESC
OPTIMIZE FOR 20 ROWS;
É equivalente a
SELECT CODFUNC, NOMEFUNC, SALARIO
FROM TABFUNCS A
WHERE 10 > (SELECT COUNT(*)
FROM TABFUNCS B
WHERE A.SALARIO < B.SALARIO
AND B.SALARIO IS NOT NULL)
ORDER BY SALARY DESC;
Mas com FETCH FIRST é bem mais eficiente
Para obter os 5 menores salários de uma empresa :
SELECT CODFUNC, NOMEFUNC, SALARIO
FROM TABFUNCS.EMP
ORDER BY SALARIO
FETCH FIRST 5 ROWS ONLY;
67
Exemplos sintáticos do SELECT
68
SELECT [ | DISTINCT | ALL | ]
{ | * | coluna(s) | }
FROM tab_origem
WHERE condicao-filtro
Devolve : Colunas : conforme solicitado
Linhas : aquelas que satisfizerem a condição-filtro
Ordem : chave primária
69
Exemplos de uso (sem INTO)
70
Exemplos de uso (com INTO)
SELECT TBNAME, NAME, COLTYPE, COLNO +
FROM SYSIBM.SYSCOLUMNS +
WHERE TBNAME = ‘TABCLI’ AND +
COLNO = 1 +
INTO :W-NOMETAB, +
:W-NOMECOL, +
:W-TIPOCOL +
:W-NROCOL
Devolve : Colunas : TBNAME (coloca na variável W-NOMETAB) e
NAME (coloca na variável W-NOMECOL) e
COLTYPE (coloca na variável W-TIPOCOL) e
COLNO (coloca na variável W-NROCOL)
da tabela SYSIBM.SYSCOLUMNS
Linhas : a que tiver TBNAME = ‘TABCLI’ e COLNO = 1
SELECT TBNAME, +
NAME, +
COLNO, +
COLTYPE, +
LENGTH, +
SCALE, +
DEFAULT, +
REMARKS +
FROM SYSIBM.SYSCOLUMNS +
WHERE TBNAME = :CH-TBNAME +
ORDER BY COLNO +
INTO +
:TBNAME-X, +
:NAME-X, +
:COLNO-B, +
:COLTYPE-X, +
:LENGTH-B, +
:SCALE-B, +
:NULLS-X, +
:REMARKS-X
71
Exemplos de Select no DSNTEP2
Função Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Todas
Colunas : Todas
Comando SELECT * FROM DB2T.ZZZ102_SLDCLI;
Resultado
+-------------------------------------------------------------------------------------------------------------+
| CD_AGE_SLD | CD_CLI | NM_CLI | TEL_CLI | VL_SDO_CLI |
+-------------------------------------------------------------------------------------------------------------+
1_| 110 | 920 | MAURO LOPES | 99106925 | 4550.00 |
2_| 110 | 900 | JOSE XAVIER MARQUES | 99106688 | 565.30 |
3_| 80 | 130 | 123 oliveira 4 | 99190011 | 4233.09 |
4_| 40 | 320 | BIA MOREIRA FILHA | 8563212 | 0.00 |
5_| 50 | 130 | VOLTAIRE DA SILVA | 99103607 | 3550.70 |
6_| 40 | 120 | BIA MOREIRA | 8563212 | 0.00 |
+-------------------------------------------------------------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF 6 ROW(S)
Função Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Todas
Colunas : CD_AGE_SLD, CD_CLI
Comando SELECT CD_AGE_SLD, CD_CLI FROM DB2T.ZZZ102_SLDCLI;
Resultado
+---------------------------------+
| CD_AGE_SLD | CD_CLI |
+---------------------------------+
1_| 110 | 920 |
2_| 110 | 900 |
3_| 80 | 130 |
4_| 40 | 320 |
5_| 50 | 130 |
6_| 40 | 120 |
+---------------------------------+
SUCCESSFUL RETRIEVAL OF 6 ROW(S)
Função Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Aquelas cuja coluna CD_CLI tenha 320
Colunas : Todas
Comando SELECT * FROM DB2T.ZZZ102_SLDCLI WHERE CD_CLI = 320;
Resultado
+-------------------------------------------------------------------------------------------------------------+
| CD_AGE_SLD | CD_CLI | NM_CLI | TEL_CLI | VL_SDO_CLI |
+-------------------------------------------------------------------------------------------------------------+
1_| 40 | 320 | BIA MOREIRA FILHA | 8563212 | 0.00 |
+-------------------------------------------------------------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF 1 ROW(S)
Função Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
72
Linhas : Aquelas cuja coluna CD_CLI tenha 320
Colunas : CD_CLI, NM_CLI
Comando
SELECT CD_CLI, NM_CLI FROM DB2T.ZZZ102_SLDCLI WHERE CD_CLI = 320;
Resultado
+------------------------------------------------------+
| CD_CLI | NM_CLI |
+------------------------------------------------------+
1_| 320 | BIA MOREIRA FILHA |
+------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF 1 ROW(S)
Função Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Todas
Colunas : NM_CLI , e a coluna derivada [não existente, sem nome, resultado da aplicação de operação sobre
coluna(s) existentes] resultante da soma entre as colunas VL_SDO_CLI e TEL_CLI
Comando SELECT NM_CLI, (VL_SDO_CLI + TEL_CLI) FROM DB2T.ZZZ102_SLDCLI;
Resultado
+----------------------------------------------------------+
| NM_CLI | |
+----------------------------------------------------------+
1_| MAURO LOPES | 99111475.00 |
2_| JOSE XAVIER MARQUES | 99107253.30 |
3_| 123 oliveira 4 | 99194244.09 |
4_| BIA MOREIRA FILHA | 8563212.00 |
5_| VOLTAIRE DA SILVA | 99107157.70 |
6_| BIA MOREIRA | 8563212.00 |
+----------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF 6 ROW(S)
Função Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Todas (se houver linhas em duplicidade, exibir a primeira e as demais eliminar)
Colunas : CD_CLI
Comando SELECT DISTINCT CD_CLI FROM DB2T.ZZZ102_SLDCLI;
Resultado
+----------------+
| CD_CLI |
+----------------+
1_| 120 |
2_| 130 |
3_| 320 |
4_| 900 |
5_| 920 |
+----------------+
SUCCESSFUL RETRIEVAL OF 5 ROW(S)
73
Função Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Todas (se houver linhas em duplicidade, exibir a primeira e as demais eliminar)
Colunas : CD_AGE_SLD, MINIMO (Coluna derivada resultante da determinação do menor valor existente na
coluna VL_SDO_CLI), sem nome (Coluna derivada resultante da determinação do maior valor existente em
VL_SDO_CLI), MEDIA (Coluna derivada resultante da determinação da média aritmética dos valores existentes
na coluna VL_SDO_CLI)
Observar que CD_AGE_SLD e os mínimo, máximo e média de VL_SDO_CLI devem ser agrupados por
CD_AGE_SLD.
Comando SELECT CD_AGE_SLD, MIN(VL_SDO_CLI) AS MINIMO,
MAX(VL_SDO_CLI), AVG(VL_SDO_CLI) AS MEDIA
FROM DB2T.ZZZ102_SLDCLI
GROUP BY CD_AGE_SLD;
Resultado
+-------------------------------------------------------------------------------+
| CD_AGE_SLD | MINIMO | | MEDIA |
+-------------------------------------------------------------------------------+
1_| 40 | 0.00 | 0.00 | 0.00 |
2_| 50 | 3550.70 | 3550.70 | 3550.70 |
3_| 80 | 4233.09 | 4233.09 | 4233.09 |
4_| 110 | 565.30 | 4550.00 | 2557.65 |
+-------------------------------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF 4 ROW(S)
Função Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Todas , ordenados por nome(NM_CLI)
Colunas : CD_AGE_SLD e NM_CLI
Comando SELECT CD_AGE_SLD, NM_CLI FROM DB2T.ZZZ102_SLDCLI ORDER BY NM_CLI;
Resultado
+------------------------------------------------------+
| CD_AGE_SLD | NM_CLI |
+------------------------------------------------------+
1_| 40 | BIA MOREIRA |
2_| 40 | BIA MOREIRA FILHA |
3_| 110 | JOSE XAVIER MARQUES |
4_| 110 | MAURO LOPES |
5_| 50 | VOLTAIRE DA SILVA |
6_| 80 | 123 oliveira 4 |
+------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF 6 ROW(S)
Função Selecionar
Tabela : DB2T.ZZZ100_CADAGE
Linhas : (a única da tabela resultado)
Colunas : Coluna derivada resultante da determinação de count(*) : quantidade de linhas
Comando SELECT COUNT(*) FROM DB2T.ZZZ100_CADAGE;
Resultado
+----------------+
| |
+----------------+
1_| 33 |
+----------------+
SUCCESSFUL RETRIEVAL OF 1 ROW(S)
74
Função Selecionar
Tabela : DB2T.ZZZ100_CADAGE
Linhas : (a única da tabela resultado)
Colunas : Coluna derivada resultante da determinação de count(distinct NM_AGE) : quantidade de linhas sem
repetição
Comando SELECT COUNT(DISTINCT NM_AGE) FROM DB2T.ZZZ100_CADAGE;
Resultado +----------------+
| |
+----------------+
1_| 29 |
+----------------+
SUCCESSFUL RETRIEVAL OF 1 ROW(S)
Função Selecionar
Tabela : DB2T.ZZZ100_CADAGE
Linhas : (a única da tabela resultado)
Colunas : Coluna derivada resultante da determinação de count(*) where CD_AGE IS NULL : quantidade de
linhas em que CD_AGE é nula.
Comando SELECT COUNT(*) FROM DB2T.ZZZ100_CADAGE WHERE CD_AGE IS NULL;
Resultado +----------------+
| |
+----------------+
1_| 0 |
+----------------+
SUCCESSFUL RETRIEVAL OF 1 ROW(S)
Função Selecionar
Tabela : DB2T.ZZZ100_CADAGE
Linhas : (a única da tabela resultado)
Colunas : Coluna derivada resultante da determinação de count(*) where CD_AGE IS NOT NULL : quantidade
de linhas em que CD_AGE não é nula.
Comando SELECT COUNT(*) FROM DB2T.ZZZ100_CADAGE WHERE CD_AGE IS NOT NULL;
Resultado +----------------+
| |
+----------------+
1_| 29 |
+----------------+
SUCCESSFUL RETRIEVAL OF 1 ROW(S)
Função 1ọ Criar tabela resultado do SELECT CODFUNC FROM FUNCS WHERE DEPTO = ‘VENDAS’ :
Tabela : FUNCS
Linhas : Todas em que a coluna DEPTO tem valor ‘VENDAS’
Colunas : CODFUNC
2ọ Selecionar
Tabela : EMP_ACT
Linhas : todas cuja coluna CODFUNC tenha como valor um código de funcionário que seja um dos que
façam parte da tabela resultado do primeiro SELECT
Colunas : todas
Comando SELECT * FROM EMP_ACT
WHERE CODFUNC IN (SELECT CODFUNC FROM FUNCS WHERE DEPTO = 'VENDAS')
Resultado Tabela resultado com todas as colunas de EMP_ACT e cujas linhas são de funcionários que estejam cadastrados
como sendo do depto de ‘VENDAS’ em FUNCS
75
Função Efetuar Join das tabelas EMP_ACT e EMPLOYEE, selecionando todas as colunas da tabela EMP_ACT, e a
coluna LASTNAME da tabela EMPLOYEE.
Comando SELECT EMP_ACT.*, LASTNAME FROM EMPLOYEE
WHERE EMP_ACT.EMPNO = EMPLOYEE.EMPNO
Resultado Tabela resultado com todas as colunas de EMP_ACT e com a coluna LASTNAME de EMPLOYEE, cujas linhas são
aquelas em que há correspondência entre o codigo do funcionário (EMPNO) nas duas tabelas
Função Efetuar Join das tabelas EMPLOYEE e DEPARTMENT, selecionando EMPNO, LASTNAME e WORKDEPT
na tabela EMPLOYEE e DEPTNO na tabela DEPARTMENT, de todos os funcionários com BIRTHDATE
anterior a 1930.
Comando SELECT EMPNO, LASTNAME, WORKDEPT, DEPTNAME
FROM EMPLOYEE, DEPARTMENT
WHERE WORKDEPT = DEPTNO
AND YEAR(BIRTHDATE) < 1930
Resultado Tabela resultado com 4 colunas e cujas linhas são aquelas em que há correspondência entre o codigo do
departamento nas duas tabelas e em que o ano da data de nascimento do funcionário seja < 1930
Função Efetuar Join das tabelas DB2T.ZZZ101_AGECLI e DB2T.ZZZ100_CADAGE , selecionando codigo de agencia
e nome de agencia.
Comando SELECT CD_AGE_CLI, NM_AGE
FROM DB2T.ZZZ101_AGECLI, DB2T.ZZZ100_CADAGE
WHERE CD_AGE_CLI = CD_AGE;
Ou
SELECT CD_AGE_CLI, NM_AGE
FROM DB2T.ZZZ100_CADAGE, DB2T.ZZZ101_AGECLI
WHERE CD_AGE = CD_AGE_CLI;
Resultado Tabela resultado com agencias e seus respectivos nomes
76
UPDATE
UPDATE - Uso batch no DSNTEP2
***INPUT STATEMENT:
UPDATE DB2T.ZZZ102_SLDCLI
SET VL_SDO_CLI = 11
WHERE VL_SDO_CLI = 0;
RESULT OF SQL STATEMENT:
DSNT400I SQLCODE = 000, SUCCESSFUL EXECUTION
DSNT416I SQLERRD = 0 0 2 -1 0 0 SQL DIAGNOSTIC INFORMATION
DSNT416I SQLERRD = X'00000000' X'00000000' X'00000002' X'FFFFFFFF'
INFORMATION
SUCCESSFUL UPDATE OF 2 ROW(S)
***INPUT STATEMENT:
SELECT CD_CLI, VL_SDO_CLI
FROM DB2T.ZZZ102_SLDCLI;
+-------------------------------------+
| CD_CLI | VL_SDO_CLI |
+-------------------------------------+
1_| 920 | 4550.00 |
2_| 900 | 565.30 |
3_| 130 | 4233.09 |
4_| 320 | 11.00 |
5_| 130 | 3550.70 |
6_| 120 | 11.00 |
+-------------------------------------+
SUCCESSFUL RETRIEVAL OF 6 ROW(S)
77
UPDATE - Uso batch em Cobol
*-------------------------------------------------------
*
* DECLARACAO ESTRUTURA TABELA EPCV05A1_IND_PPT
*
EXEC SQL
INCLUDE EPCV05A1
END-EXEC.
*
* DECLARACAO ESTRUTURA TABELA EPCV10A1_PPT_CRE
*
EXEC SQL
INCLUDE EPCV10A1
END-EXEC.
*
* DECLARACAO ESTRUTURA TABELA EPCV30A1_BRD_LFI
*
EXEC SQL
INCLUDE EPCV30A1
END-EXEC.
*-------------------------------------------------------
*
* ATUALIZACAO DADOS TABELA EPCV05A1_IND_PPT
*
EXEC SQL
UPDATE EPCV05A1_IND_PPT
SET
CD_STA_PPT_CRE = 'LB'
,IC_GAR_CMP = '3'
,TS_ULT_ATU = CURRENT TIMESTAMP
,CD_USU_ULT_ATU = 'APOIO'
,CD_PGM_MAN = 'EPCBX11'
WHERE NO_APV_PPT_CRE BETWEEN 11111111 AND 22222222
END-EXEC
IF SQLCODE NOT EQUAL ZEROS AND 100
MOVE SQLCODE TO W-COD
DISPLAY 'ERRO UPDATE EPCV05A1_IND_PPT. SQLCODE=' W-COD
END-IF
*
* ATUALIZACAO DADOS TABELA EPCV10A1_PPT_CRE
*
EXEC SQL
UPDATE EPCV10A1_PPT_CRE
SET
CD_STA_PPT_CRE = 'LB',
IC_GAR_CMP = '3',
TS_ULT_ATU = CURRENT TIMESTAMP,
CD_USU_ULT_ATU = 'APOIO',
CD_PGM_MAN = 'EPCBX11'
WHERE NO_APV_PPT_CRE BETWEEN 11111111 AND 22222222
END-EXEC
MOVE SQLCODE TO W-COD
IF SQLCODE NOT EQUAL ZEROS AND 100
DISPLAY 'ERRO UPDATE EPCV10A1_PPT_CRE. SQLCODE=' W-COD
ELSE
78
IF SQLCODE EQUAL 100
DISPLAY 'LINHA NAO ACHADA. SQLCODE=' W-COD
ELSE
DISPLAY 'UPDATE OK'
END-IF
END-IF
*
* ATUALIZACAO DADOS TABELA EPCV30A1_BRD_LFI
*
EXEC SQL
UPDATE EPCV30A1_BRD_LFI
SET
CD_STA_BRD_LIB_FIN = 'LB'
,TS_ULT_ATU = CURRENT TIMESTAMP
,CD_USU_ULT_ATU = 'APOIO'
,CD_PGM_MAN = 'EPCBX11'
WHERE NO_APV_PPT_CRE BETWEEN 11111111 AND 22222222
END-EXEC.
MOVE SQLCODE TO W-COD
IF SQLCODE NOT EQUAL ZEROS AND 100
DISPLAY 'ERRO UPDATE EPCV30A1_BRD_LFI. SQLCODE=' W-COD
ELSE
IF SQLCODE EQUAL 100
DISPLAY 'LINHA NAO ACHADA. SQLCODE=' W-COD
ELSE
DISPLAY 'UPDATE OK'
END-IF
END-IF
*-------------------------------------------------------
79
INSERT
PAGE 1
***INPUT STATEMENT:
INSERT INTO DB2T.ZZZ100_CADAGE
(CD_AGE, NM_AGE, END_AGE, TEL_AGE)
VALUES (77,'PARI','RUA XX 555',5555678);
RESULT OF SQL STATEMENT:
DSNT400I SQLCODE = 000, SUCCESSFUL EXECUTION
DSNT416I SQLERRD = 0 0 1 -1 0 0 SQL DIAGNOSTIC INFORMATION
DSNT416I SQLERRD = X'00000000' X'00000000' X'00000001' X'FFFFFFFF'
INFORMATION
SUCCESSFUL INSERT OF 1 ROW(S)
+-----------------------------------------------------------------------------------+
| CD_AGE | NM_AGE | END_AGE | TEL_AGE |
+-----------------------------------------------------------------------------------+
1_| 77 | PARI | RUA XX 555 | 5555678 |
+-----------------------------------------------------------------------------------+
80
INSERT - Uso batch em Cobol
82
DELETE
***INPUT STATEMENT:
DELETE FROM DB2T.ZZZ100_CADAGE
WHERE CD_AGE = 77;
RESULT OF SQL STATEMENT:
DSNT400I SQLCODE = 000, SUCCESSFUL EXECUTION
DSNT416I SQLERRD = 0 0 1 -1 0 0 SQL DIAGNOSTIC INFORMATION
DSNT416I SQLERRD = X'00000000' X'00000000' X'00000001' X'FFFFFFFF'
INFORMATION
SUCCESSFUL DELETE OF 1 ROW(S)
83
DELETE - Uso batch em Cobol
84
WHENEVER
Comando usado para indicar que o programa deseja efetuar tratamento próprio quando ocorrer
determinados tipos de erro.
O comando somente “marca” que o programa deseja efetuar determinado procedimento CASO OCORRA
o(s) erro(s) indicado(s).
A execução efetiva das ações que tratam o(s) erro(s) somente acontece quando ocorrer o(s) erro(s)
indicado(s), se ocorrer.
O comando normalmente é especificado para execução (“marcação”) no início do programa; enquanto ele
não for executado, se ocorrer qualquer erros, o procedimento é o padrão : o DB2 trata.
85
Exemplos :
Indica para desviar para o procedure name NAO-TEM-LINHA se a execução de um comando SQL
subsequente (provavelmente um FETCH) ocasionar um SQLCODE = +100.
86
8 - FUNÇÕES (Built-In)
SINTAXE DESCRIÇÃO / EXEMPLO
ABS(expressao) Retorna o valor absoluto (módulo).
ABS(SALDO)
AVG([DISTINCT] [ALL] expressao) Retorna a média.
AVG(SALARIO)
CEILING(expressao) Retorna o inteiro maior mais proximo do resultado da expressao.
CEILING(3.14) retorna 4
CHAR(|string|coluna| Converte date, time, timestamp, ROWID, valor (floating point,
[,|ISO|USA|EUR|JIS|LOCAL|]) integer, ou decimal) para (string) caracter
CHAR(DATANASC,EUR)
CHAR(DATE(‘2004-11-30’),ISO) retorna ‘2004-11-30’
CHAR(DATE(‘2004-11-30’),USA) retorna ‘11/30/2004’
CHAR(DATE(‘2004-11-30’),EUR) retorna ’30.11.2004’
CHAR(DATE(‘2004-11-30’),JIS) retorna ‘2004:11:30’
CHAR(TIME(‘21.22.23’),ISO) retorna ‘21.22.23’
CHAR(TIME(‘21.22.23’),USA) retorna ‘09.22 PM’
CHAR(TIME(‘21.22.23’),EUR) retorna ‘21.22.23’
CHAR(TIME(‘21.22.23’),JIS) retorna ‘21:22:23’
CONCAT(string1,string2) Concatena 2 strings/colunas. Ex.: CONCAT(TITULO,NOMECLI)
COUNT([DISTINCT] [ALL] expressao/*) Retorna a quantidade (quantas vezes não é nulo).
COUNT(SALARIO)
DATE(string) Retorna a data que consta no string.
DATE(‘2004-11-05’)
DAY(|date|timestamp|) Retorna o dia de uma data ou timestamp
DAY(DATANASC)
DAY(‘DATE(‘2004-11-30’))
DAYOFYEAR(|time|timestamp|string|) Retorna o dia juliano de uma data em um date ou timestamp ou
string (indicando date ou timestamp)
DAYOFYEAR(DATANASC)
DAYOFYEAR(‘DATE(‘2004-11-30’))
DAYOFWEEK(|date|timestamp|) Retorna um número que indica o dia da semana representado na data
informada via date, timestamp ou string (com date ou timestamp)
1=Domingo; 2=Segunda; 3=Terça; 4=Quarta; 5=Quinta; 6=Sexta;
7=Sábado
DAYOFWEEK(DATANASC)
DAYOFWEEK(‘DATE(‘2004-11-30’))
DAYS(|date|timestamp|) Retorna a quantidade de dias transcorridos desde 01/jan/0001 até a
data indicada em date ou timestamp
DAYS(DATANASC)
DAYS(‘DATE(‘2004-11-30’))
EXP(expressao) Retorna expressao ** e
FLOOR(expressao) Retorna o inteiro menor mais proximo do resultado da expressao.
FLOOR(3.14) retorna 3
HEX(coluna) Retorna o conteúdo, em hexadecimal, da coluna especificada. Ex.:
HEX(CD_AGE) = 00000A (Se CD_AGE for 10)
HEX(‘ABC’) = C1C2C3
HOUR(|time|timestamp|) Retorna a hora de um horário em um time ou timestamp
HOUR(TIME(’20.05.00’)) retona 20
LENGTH(|string|coluna|) Retorna os tamanho do string.
LENGTH(NOMECLI)
87
LOCATE(string1,|string2|coluna|) Retorna a posição (ou zero, se não houver) em que string1 está em
string2
LOCATE(‘BER’,’ALBERT’) retorna 3
LOG(expressao) Retorna log neperiano de expressao
89
APÊNDICE I - A Relational Model of Data for Large Shared Data Banks - E. F.
Codd
http://portal.acm.org/
http://portal.acm.org/citation.cfm?id=357980.358007&coll=GUIDE&dl=GUIDE&idx=357980&pa
rt=periodical&WantType=periodical&title=Communications%20of%20the%20ACM&CFID=30679851
&CFTOKEN=8548765
Abstract
Future users of large data banks must be protected from having to know how the data is organized in the
machine (the internal representation). A prompting service which supplies such information is not a
satisfactory solution. Activities of users at terminals and most application programs should remain
unaffected when the internal representation of data is changed and even when some aspects of the external
representation are changed. Changes in data representation will often be needed as' a result of changes in
query, update, and report traffic and natural growth in the types of stored information.
Existing non inferential, formatted data systems provide users with tree-structured files or slightly more
general network models of the data. In Section 1, inadequacies of these models are discussed. A model
based on n-ary relations, a normal form for data base relations, and the concept of a universal data sub
language are introduced. In Section 2, certain operations on relations (other than logical inference) are
discussed and applied to the problems of redundancy and consistency in the user's model.
Key Words and Phrases
data bank, data base, data structure, data organization;, hierarchies of data, network of data, relations, derivability,
redundancy, consistency, composition, join, retrieval language, predicate calculus, security, data integrity
90
APÊNDICE II – Comandos SQL
91
REINDEX Recover corrupted system indexes under standalone PostgreSQL
RESET Restores run-time parameters for session to default values
REVOKE Revokes access privilege from a user, a group or all users.
ROLLBACK To end the current transaction, discard all changes in the current transaction, and
release all locks (optionally release resources and disconnect from the database).
SAVEPOINT To identify a point in a transaction to which you can later roll back.
SELECT To retrieve data from one or more tables, views, or snapshots, assigning the selected
values to host variables.
SET Set run-time parameters for session
SHOW Shows run-time parameters for session
TRUNCATE Empty a table
UPDATE To change existing values in a table or in a view's base table.
WHENEVER To specify handling for error and warning conditions.
92
APÊNDICE III – Programas Exemplo
***********************************************************************************************************************
***********************************************************************************************************************
** *
** TTTTTTTTTTTT AAAAAAAAAA BBBBBBBBBBB TTTTTTTTTTTT RRRRRRRRRRR 9999999999 ZZZZZZZZZZZZ 9999999999 *
** TTTTTTTTTTTT AAAAAAAAAAAA BBBBBBBBBBBB TTTTTTTTTTTT RRRRRRRRRRRR 999999999999 ZZZZZZZZZZZZ 999999999999 *
** TT AA AA BB BB TT RR RR 99 99 ZZ 99 99 *
** TT AA AA BB BB TT RR RR 99 99 ZZ 99 99 *
** TT AA AA BB BB TT RR RR 99 99 ZZ 99 99 *
** TT AAAAAAAAAAAA BBBBBBBBBB TT RRRRRRRRRRRR 999999999999 ZZ 999999999999 *
** TT AAAAAAAAAAAA BBBBBBBBBB TT RRRRRRRRRRR 999999999999 ZZ 999999999999 *
** TT AA AA BB BB TT RR RR 99 ZZ 99 *
** TT AA AA BB BB TT RR RR 99 ZZ 99 *
** TT AA AA BB BB TT RR RR 99 99 ZZ 99 99 *
** TT AA AA BBBBBBBBBBBB TT RR RR 999999999999 ZZZZZZZZZZZ 999999999999 *
** TT AA AA BBBBBBBBBBB TT RR RR 9999999999 ZZZZZZZZZZZZ 9999999999 *
** *
***********************************************************************************************************************
***********************************************************************************************************************
*********************************************
*********************************************
** ******** UPDATE ******** **
** **
** USER ID......... TORI276 **
** DATE............ 12NOV04 14:29 **
** ENDEVOR RC...... 0012 **
** **
** ENVIRONMENT..... DESENV **
** STAGE........... DSV **
** SYSTEM.......... TAB **
** SUBSYSTEM....... TAB **
** ELEMENT......... TABTR9Z9 **
** VV.LL........... 01.01 **
** TYPE............ COBPBD **
** PROC GROUP...... COBPBD **
** PROCESSOR....... GCOBPBD **
** CONWRITE...... RC=0000 **
** ALLOCLST...... RC=0000 **
** PRE........... RC=0000 **
** COMP.......... RC=0000 **
** LKED.......... RC=0000 **
** CPYLOAD....... RC=0000 **
** MNTBND........ RC=0000 **
** **BINDD......... RC=0008 > MAXRC **
** SAVLST........ RC=0000 **
** **
*********************************************
*********************************************
DB2 SQL PRECOMPILER VERSION 7 REL. 1.0 PAGE 1
OPTIONS SPECIFIED: HOST(COB2),APOST,SOURCE
OPTIONS USED - SPECIFIED OR DEFAULTED
APOST
APOSTSQL
ATTACH(TSO)
CONNECT(2)
DEC(15)
FLAG(I)
HOST(COB2)
NOT KATAKANA
LINECOUNT(60)
MARGINS(8,72)
ONEPASS
OPTIONS
PERIOD
SOURCE
STDSQL(NO)
SQL(DB2)
NOXREF
93
DB2 SQL PRECOMPILER VERSION 7 REL. 1.0 PAGE 2
1 ID DIVISION. 00002002
2 PROGRAM-ID. TABTR9Z9. 00003002
3 ENVIRONMENT DIVISION. 00038000
4 CONFIGURATION SECTION. 00039000
5 SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
6 INPUT-OUTPUT SECTION. 00046000
7 FILE-CONTROL.
8 DATA DIVISION. 00066000
9 FILE SECTION.
10 WORKING-STORAGE SECTION. 00095000
11 *---------------------------------------------------------------*
12 * AREA DB2
13 *---------------------------------------------------------------*
14 *
15 01 FILLER PIC X(32) VALUE 'SQLCA'.
16
17 EXEC SQL
18 INCLUDE SQLCA
19 END-EXEC.
20
21 01 FIM-CURSOR PIC X(1) VALUE 'N'.
22
23 01 WS-CADAGE.
24 05 CD-AGE PIC S9(09) COMP.
25 05 NM-AGE PIC X(15).
26 05 END-AGE PIC X(30).
27 05 TEL-AGE PIC S9(09) COMP.
28
29 01 WS-AGECLI.
30 05 CD-AGE-CLI PIC S9(09) COMP.
31 05 CD-CLI PIC S9(09) COMP.
32 05 TP-CLI PIC S9(09) COMP.
33 05 NM-CLI PIC X(35).
34 05 END-CLI PIC X(35).
35 05 COMPL-CLI PIC X(30).
36 05 CID-CLI PIC X(30).
37 05 UF-CLI PIC X(02).
38 05 CEP-CLI PIC S9(09) COMP.
39 05 CMCEP-CLI PIC S9(09) COMP.
40 05 TEL-CLI PIC S9(09) COMP.
41 05 RG-CLI PIC S9(09) COMP.
42 05 CPF-CGC-CLI PIC S9(09) COMP.
43 05 DT-INCL-CLI PIC X(10).
44 05 DT-EXCL-CLI PIC X(10).
45 05 VL-SDO-CLI PIC S9(05)V9(02) COMP-3.
46
47 01 WS-SLDCLI.
48 05 CD-AGE-SLD PIC S9(09) COMP.
49 05 CD-CLI PIC S9(09) COMP.
50 05 NM-CLI PIC X(35).
51 05 TEL-CLI PIC S9(09) COMP.
52 05 VL-SDO-CLI PIC S9(05)V9(02) COMP-3.
53
54 *****************************************************************
55 * AREA DB2
56 *****************************************************************
57
58 EXEC SQL DECLARE C01 CURSOR FOR
DB2 SQL PRECOMPILER VERSION 7 REL. 1.0 PAGE 3
59 SELECT CD_AGE_SLD,
60 CD_CLI,
61 NM_CLI,
62 TEL_CLI,
63 VL_SDO_CLI
64 FROM DB2T.ZZB302_SLDCLI
65 WHERE VL_SDO_CLI > :WS-SLDCLI.VL-SDO-CLI
66 END-EXEC
67 *
68 *---------------------------------------------------------------*
69 PROCEDURE DIVISION. 00479000
70 *---------------------------------------------------------------*
71
72 *---------------------------------------------------------------*
73 001-INICIO SECTION.
74 *---------------------------------------------------------------*
94
75 PERFORM 002-INICIALIZAR.
76 PERFORM 003-PROCESSAR.
77 PERFORM 999-FINALIZAR.
78 STOP RUN.
79
80 *---------------------------------------------------------------*
81 002-INICIALIZAR SECTION.
82 *---------------------------------------------------------------*
83 MOVE 1 TO VL-SDO-CLI OF WS-SLDCLI.
84 EXEC SQL OPEN C01 END-EXEC.
85 IF SQLCODE NOT EQUAL ZEROS
86 DISPLAY 'ERRO NO OPEN CURSOR'
87 STOP RUN
88 END-IF
89 CONTINUE.
90 002-FIM. EXIT.
91
92 *---------------------------------------------------------------*
93 003-PROCESSAR SECTION.
94 *---------------------------------------------------------------*
95
96 MOVE 'N' TO FIM-CURSOR.
97 PERFORM UNTIL FIM-CURSOR = 'S'
98 EXEC SQL FETCH C01
99 INTO :WS-SLDCLI.CD-AGE-SLD,
100 :WS-SLDCLI.CD-CLI,
101 :WS-SLDCLI.NM-CLI,
102 :WS-SLDCLI.TEL-CLI,
103 :WS-SLDCLI.VL-SDO-CLI
104 END-EXEC
105 IF SQLCODE NOT EQUAL ZEROS
106 MOVE 'S' TO FIM-CURSOR
107 ELSE
108 DISPLAY 'FETCH OK'
109 DISPLAY WS-SLDCLI
110 END-IF
111 END-PERFORM
112 CONTINUE.
113 003-FIM. EXIT.
114
115 *---------------------------------------------------------------*
116 999-FINALIZAR SECTION.
DB2 SQL PRECOMPILER VERSION 7 REL. 1.0 PAGE 4
117 *---------------------------------------------------------------*
118
119 DISPLAY 'FIM NORMAL'.
120
121 999-FIM. EXIT.
DB2 SQL PRECOMPILER MESSAGES PAGE 5
DSNH050I I DSNHMAIN WARNINGS HAVE BEEN SUPPRESSED DUE TO LACK OF TABLE DECLARATIONS
DB2 SQL PRECOMPILER STATISTICS PAGE 6
SOURCE STATISTICS
SOURCE LINES READ: 121
NUMBER OF SYMBOLS: 38
SYMBOL TABLE BYTES EXCLUDING ATTRIBUTES: 3216
THERE WERE 1 MESSAGES FOR THIS PROGRAM.
THERE WERE 0 MESSAGES SUPPRESSED BY THE FLAG OPTION.
157248 BYTES OF STORAGE WERE USED BY THE PRECOMPILER.
RETURN CODE IS 0
PP 5688-197 IBM COBOL for MVS & VM 1.2.2 Date 11/12/2004 Time 14:30:35 Page 1
Invocation parameters:
LIB,OBJECT,NOADV,APOST,OFFSET
Options in effect:
NOADATA
NOADV
NOANALYZE
APOST
NOAWO
BUFSIZE(4096)
NOCMPR2
NOCOMPILE(S)
NOCURRENCY
DATA(31)
NODATEPROC
NODBCS
NODECK
95
NODUMP
NODYNAM
NOEXIT
NOFASTSRT
FLAG(I)
NOFLAGMIG
NOFLAGSTD
NOIDLGEN
INTDATE(ANSI)
LANGUAGE(EN)
LIB
LINECOUNT(60)
NOLIST
NOMAP
NONAME
NONUMBER
NUMPROC(NOPFD)
OBJECT
OFFSET
NOOPTIMIZE
OUTDD(SYSOUT)
PGMNAME(COMPAT)
NORENT
RMODE(AUTO)
SEQUENCE
SIZE(MAX)
SOURCE
SPACE(1)
NOSSRANGE
NOTERM
NOTEST
TRUNC(STD)
NOTYPECHK
NOVBREF
NOWORD
NOXREF
YEARWINDOW(1900)
ZWB
PP 5688-197 IBM COBOL for MVS & VM 1.2.2 TABTR9Z9 Date 11/12/2004 Time 14:30:35 Page 2
LineID PL SL ----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7-]--+----8 Map and Cross Referen
000001 ID DIVISION. 00002002
000002 PROGRAM-ID. TABTR9Z9. 00003002
000003 ENVIRONMENT DIVISION. 00038000
000004 CONFIGURATION SECTION. 00039000
000005 SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
000006 INPUT-OUTPUT SECTION. 00046000
000007 FILE-CONTROL.
000008 DATA DIVISION. 00066000
000009 FILE SECTION.
000010 WORKING-STORAGE SECTION. 00095000
000011 *---------------------------------------------------------------*
000012 * AREA DB2
000013 *---------------------------------------------------------------*
000014 *
000015 01 FILLER PIC X(32) VALUE 'SQLCA'.
000016
000017 *****EXEC SQL
000018 ***** INCLUDE SQLCA
000019 *****END-EXEC.
000020 01 SQLCA.
000021 05 SQLCAID PIC X(8).
000022 05 SQLCABC PIC S9(9) COMP-4.
000023 05 SQLCODE PIC S9(9) COMP-4.
000024 05 SQLERRM.
000025 49 SQLERRML PIC S9(4) COMP-4.
000026 49 SQLERRMC PIC X(70).
000027 05 SQLERRP PIC X(8).
000028 05 SQLERRD OCCURS 6 TIMES
000029 PIC S9(9) COMP-4.
000030 05 SQLWARN.
000031 10 SQLWARN0 PIC X.
000032 10 SQLWARN1 PIC X.
000033 10 SQLWARN2 PIC X.
000034 10 SQLWARN3 PIC X.
000035 10 SQLWARN4 PIC X.
000036 10 SQLWARN5 PIC X.
96
000037 10 SQLWARN6 PIC X.
000038 10 SQLWARN7 PIC X.
000039 05 SQLEXT.
000040 10 SQLWARN8 PIC X.
000041 10 SQLWARN9 PIC X.
000042 10 SQLWARNA PIC X.
000043 10 SQLSTATE PIC X(5).
000044
000045 01 FIM-CURSOR PIC X(1) VALUE 'N'.
000046
000047 01 WS-CADAGE.
000048 05 CD-AGE PIC S9(09) COMP.
000049 05 NM-AGE PIC X(15).
000050 05 END-AGE PIC X(30).
000051 05 TEL-AGE PIC S9(09) COMP.
000052
000053 01 WS-AGECLI.
000054 05 CD-AGE-CLI PIC S9(09) COMP.
000055 05 CD-CLI PIC S9(09) COMP.
000056 05 TP-CLI PIC S9(09) COMP.
000057 05 NM-CLI PIC X(35).
PP 5688-197 IBM COBOL for MVS & VM 1.2.2 TABTR9Z9 Date 11/12/2004 Time 14:30:35 Page 3
LineID PL SL ----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7-]--+----8 Map and Cross Referen
000058 05 END-CLI PIC X(35).
000059 05 COMPL-CLI PIC X(30).
000060 05 CID-CLI PIC X(30).
000061 05 UF-CLI PIC X(02).
000062 05 CEP-CLI PIC S9(09) COMP.
000063 05 CMCEP-CLI PIC S9(09) COMP.
000064 05 TEL-CLI PIC S9(09) COMP.
000065 05 RG-CLI PIC S9(09) COMP.
000066 05 CPF-CGC-CLI PIC S9(09) COMP.
000067 05 DT-INCL-CLI PIC X(10).
000068 05 DT-EXCL-CLI PIC X(10).
000069 05 VL-SDO-CLI PIC S9(05)V9(02) COMP-3.
000070
000071 01 WS-SLDCLI.
000072 05 CD-AGE-SLD PIC S9(09) COMP.
000073 05 CD-CLI PIC S9(09) COMP.
000074 05 NM-CLI PIC X(35).
000075 05 TEL-CLI PIC S9(09) COMP.
000076 05 VL-SDO-CLI PIC S9(05)V9(02) COMP-3.
000077
000078 *****************************************************************
000079 * AREA DB2
000080 *****************************************************************
000081
000082 *****EXEC SQL DECLARE C01 CURSOR FOR
000083 ***** SELECT CD_AGE_SLD,
000084 ***** CD_CLI,
000085 ***** NM_CLI,
000086 ***** TEL_CLI,
000087 ***** VL_SDO_CLI
000088 ***** FROM DB2T.ZZB302_SLDCLI
000089 ***** WHERE VL_SDO_CLI > :WS-SLDCLI.VL-SDO-CLI
000090 *****END-EXEC
000091 *
000092 *---------------------------------------------------------------*
000093 77 SQL-TEMP PIC X(18).
000094 77 DSN-TEMP PIC S9(9) COMP-4.
000095 77 DSN-TMP2 PIC S9(18) COMP-3.
000096 77 SQL-NULL PIC S9(9) COMP-4 VALUE +0.
000097 77 SQL-INIT-FLAG PIC S9(4) COMP-4 VALUE +0.
000098 88 SQL-INIT-DONE VALUE +1.
000099 01 SQL-PLIST2.
000100 05 SQL-PLIST-CON PIC S9(9) COMP-4 VALUE +2637824.
000101 05 SQL-CALLTYPE PIC S9(4) COMP-4 VALUE +50.
000102 05 SQL-PROG-NAME PIC X(8) VALUE 'TABTR9Z9'.
000103 05 SQL-TIMESTAMP-1 PIC S9(9) COMP-4 VALUE +394493939.
000104 05 SQL-TIMESTAMP-2 PIC S9(9) COMP-4 VALUE +476459224.
000105 05 SQL-SECTION PIC S9(4) COMP-4 VALUE +1.
000106 05 SQL-CODEPTR PIC S9(9) COMP-4.
000107 05 SQL-VPARMPTR PIC S9(9) COMP-4 VALUE +0.
000108 05 SQL-APARMPTR PIC S9(9) COMP-4 VALUE +0.
000109 05 SQL-STMT-NUM PIC S9(4) COMP-4 VALUE +84.
000110 05 SQL-STMT-TYPE PIC S9(4) COMP-4 VALUE +3.
97
000111 05 SQL-PVAR-LIST2.
000112 10 PRE-SQLDAID PIC X(8) VALUE 'SQLDA —'.
000113 10 PRE-SQLDABC PIC S9(9) COMP-4 VALUE +60.
000114 10 PRE-SQLN PIC S9(4) COMP-4 VALUE +1.
PP 5688-197 IBM COBOL for MVS & VM 1.2.2 TABTR9Z9 Date 11/12/2004 Time 14:30:35 Page 4
LineID PL SL ----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7-]--+----8 Map and Cross Referen
000115 10 PRE-SQLLD PIC S9(4) COMP-4 VALUE +1.
000116 10 PRE-SQLVAR.
000117 12 SQLVAR-BASE1.
000118 15 SQL-PVAR-TYPE1 PIC S9(4) COMP-4 VALUE +484.
000119 15 SQL-PVAR-LEN1 PIC S9(4) COMP-4 VALUE +1794.
000120 15 SQL-PVAR-ADDRS1.
000121 20 SQL-PVAR-ADDR1 PIC S9(9) COMP-4.
000122 20 SQL-PVAR-IND1 PIC S9(9) COMP-4.
000123 15 SQL-PVAR-NAME1.
000124 20 SQL-PVAR-NAMEL1 PIC S9(4) COMP-4 VALUE +0.
000125 20 SQL-PVAR-NAMEC1 PIC X(30) VALUE ' '.
000126 01 SQL-PLIST3.
000127 05 SQL-PLIST-CON PIC S9(9) COMP-4 VALUE +2622464.
000128 05 SQL-CALLTYPE PIC S9(4) COMP-4 VALUE +30.
000129 05 SQL-PROG-NAME PIC X(8) VALUE 'TABTR9Z9'.
000130 05 SQL-TIMESTAMP-1 PIC S9(9) COMP-4 VALUE +394493939.
000131 05 SQL-TIMESTAMP-2 PIC S9(9) COMP-4 VALUE +476459224.
000132 05 SQL-SECTION PIC S9(4) COMP-4 VALUE +1.
000133 05 SQL-CODEPTR PIC S9(9) COMP-4.
000134 05 SQL-VPARMPTR PIC S9(9) COMP-4 VALUE +0.
000135 05 SQL-APARMPTR PIC S9(9) COMP-4 VALUE +0.
000136 05 SQL-STMT-NUM PIC S9(4) COMP-4 VALUE +98.
000137 05 SQL-STMT-TYPE PIC S9(4) COMP-4 VALUE +4.
000138 05 SQL-AVAR-LIST3.
000139 10 PRE-SQLDAID PIC X(8) VALUE 'SQLDA —'.
000140 10 PRE-SQLDABC PIC S9(9) COMP-4 VALUE +236.
000141 10 PRE-SQLN PIC S9(4) COMP-4 VALUE +5.
000142 10 PRE-SQLLD PIC S9(4) COMP-4 VALUE +5.
000143 10 PRE-SQLVAR.
000144 12 SQLVAR-BASE1.
000145 15 SQL-AVAR-TYPE1 PIC S9(4) COMP-4 VALUE +496.
000146 15 SQL-AVAR-LEN1 PIC S9(4) COMP-4 VALUE +4.
000147 15 SQL-AVAR-ADDRS1.
000148 20 SQL-AVAR-ADDR1 PIC S9(9) COMP-4.
000149 20 SQL-AVAR-IND1 PIC S9(9) COMP-4.
000150 15 SQL-AVAR-NAME1.
000151 20 SQL-AVAR-NAMEL1 PIC S9(4) COMP-4 VALUE +0.
000152 20 SQL-AVAR-NAMEC1 PIC X(30) VALUE ' '.
000153 12 SQLVAR-BASE2.
000154 15 SQL-AVAR-TYPE2 PIC S9(4) COMP-4 VALUE +496.
000155 15 SQL-AVAR-LEN2 PIC S9(4) COMP-4 VALUE +4.
000156 15 SQL-AVAR-ADDRS2.
000157 20 SQL-AVAR-ADDR2 PIC S9(9) COMP-4.
000158 20 SQL-AVAR-IND2 PIC S9(9) COMP-4.
000159 15 SQL-AVAR-NAME2.
000160 20 SQL-AVAR-NAMEL2 PIC S9(4) COMP-4 VALUE +0.
000161 20 SQL-AVAR-NAMEC2 PIC X(30) VALUE ' '.
000162 12 SQLVAR-BASE3.
000163 15 SQL-AVAR-TYPE3 PIC S9(4) COMP-4 VALUE +452.
000164 15 SQL-AVAR-LEN3 PIC S9(4) COMP-4 VALUE +35.
000165 15 SQL-AVAR-ADDRS3.
000166 20 SQL-AVAR-ADDR3 PIC S9(9) COMP-4.
000167 20 SQL-AVAR-IND3 PIC S9(9) COMP-4.
000168 15 SQL-AVAR-NAME3.
000169 20 SQL-AVAR-NAMEL3 PIC S9(4) COMP-4 VALUE +0.
000170 20 SQL-AVAR-NAMEC3 PIC X(30) VALUE ' '.
000171 12 SQLVAR-BASE4.
PP 5688-197 IBM COBOL for MVS & VM 1.2.2 TABTR9Z9 Date 11/12/2004 Time 14:30:35 Page 5
LineID PL SL ----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7-]--+----8 Map and Cross Referen
000172 15 SQL-AVAR-TYPE4 PIC S9(4) COMP-4 VALUE +496.
000173 15 SQL-AVAR-LEN4 PIC S9(4) COMP-4 VALUE +4.
000174 15 SQL-AVAR-ADDRS4.
000175 20 SQL-AVAR-ADDR4 PIC S9(9) COMP-4.
000176 20 SQL-AVAR-IND4 PIC S9(9) COMP-4.
000177 15 SQL-AVAR-NAME4.
000178 20 SQL-AVAR-NAMEL4 PIC S9(4) COMP-4 VALUE +0.
000179 20 SQL-AVAR-NAMEC4 PIC X(30) VALUE ' '.
000180 12 SQLVAR-BASE5.
000181 15 SQL-AVAR-TYPE5 PIC S9(4) COMP-4 VALUE +484.
000182 15 SQL-AVAR-LEN5 PIC S9(4) COMP-4 VALUE +1794.
98
000183 15 SQL-AVAR-ADDRS5.
000184 20 SQL-AVAR-ADDR5 PIC S9(9) COMP-4.
000185 20 SQL-AVAR-IND5 PIC S9(9) COMP-4.
000186 15 SQL-AVAR-NAME5.
000187 20 SQL-AVAR-NAMEL5 PIC S9(4) COMP-4 VALUE +0.
000188 20 SQL-AVAR-NAMEC5 PIC X(30) VALUE ' '.
000189
000190 PROCEDURE DIVISION. 00479000
000191 *---------------------------------------------------------------*
000192
000193 *---------------------------------------------------------------*
000194 DSNSQL SECTION.
000195 SQL-SKIP.
000196 GO TO SQL-INIT-END.
000197 SQL-INITIAL.
000198 MOVE 1 TO SQL-INIT-FLAG.
000199 CALL 'DSNHADDR' USING SQL-VPARMPTR OF SQL-PLIST2 SQL-PVAR-LIS
000200 - T2.
000201 CALL 'DSNHADD2' USING SQL-PVAR-ADDRS1 IN
000202 SQL-PVAR-LIST2 VL-SDO-CLI OF WS-SLDCLI SQL-NULL
000203 CALL 'DSNHADDR' USING SQL-CODEPTR OF SQL-PLIST2 SQLCA.
000204 CALL 'DSNHADDR' USING SQL-APARMPTR OF SQL-PLIST3 SQL-AVAR-LIS
000205 - T3.
000206 CALL 'DSNHADD2' USING SQL-AVAR-ADDRS1 IN
000207 SQL-AVAR-LIST3 CD-AGE-SLD OF WS-SLDCLI SQL-NULL CD-CLI OF WS-
000208 - SLDCLI SQL-NULL NM-CLI OF WS-SLDCLI SQL-NULL TEL-CLI OF WS-SL
000209 - DCLI SQL-NULL VL-SDO-CLI OF WS-SLDCLI SQL-NULL.
000210 CALL 'DSNHADDR' USING SQL-CODEPTR OF SQL-PLIST3 SQLCA.
000211 SQL-INIT-END.
000212 CONTINUE.
000213
000214 001-INICIO SECTION.
000215 *---------------------------------------------------------------*
000216 PERFORM 002-INICIALIZAR.
000217 PERFORM 003-PROCESSAR.
000218 PERFORM 999-FINALIZAR.
000219 STOP RUN.
000220
000221 *---------------------------------------------------------------*
000222 002-INICIALIZAR SECTION.
000223 *---------------------------------------------------------------*
000224 MOVE 1 TO VL-SDO-CLI OF WS-SLDCLI.
000225 *****EXEC SQL OPEN C01 END-EXEC.
000226 PERFORM SQL-INITIAL UNTIL SQL-INIT-DONE
000227 CALL 'DSNHLI' USING SQL-PLIST2.
000228 IF SQLCODE NOT EQUAL ZEROS
PP 5688-197 IBM COBOL for MVS & VM 1.2.2 TABTR9Z9 Date 11/12/2004 Time 14:30:35 Page 6
LineID PL SL ----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7-]--+----8 Map and Cross Referen
000229 1 DISPLAY 'ERRO NO OPEN CURSOR'
000230 1 STOP RUN
000231 END-IF
000232 CONTINUE.
000233 002-FIM. EXIT.
000234
000235 *---------------------------------------------------------------*
000236 003-PROCESSAR SECTION.
000237 *---------------------------------------------------------------*
000238
000239 MOVE 'N' TO FIM-CURSOR.
000240 PERFORM UNTIL FIM-CURSOR = 'S'
000241 ***** EXEC SQL FETCH C01
000242 ***** INTO :WS-SLDCLI.CD-AGE-SLD,
000243 ***** :WS-SLDCLI.CD-CLI,
000244 ***** :WS-SLDCLI.NM-CLI,
000245 ***** :WS-SLDCLI.TEL-CLI,
000246 ***** :WS-SLDCLI.VL-SDO-CLI
000247 ***** END-EXEC
000248 1 PERFORM SQL-INITIAL UNTIL SQL-INIT-DONE
000249 1 CALL 'DSNHLI' USING SQL-PLIST3
000250 1 IF SQLCODE NOT EQUAL ZEROS
000251 2 MOVE 'S' TO FIM-CURSOR
000252 1 ELSE
000253 2 DISPLAY 'FETCH OK'
000254 2 DISPLAY WS-SLDCLI
000255 1 END-IF
000256 END-PERFORM
99
000257 CONTINUE.
000258 003-FIM. EXIT.
000259
000260 *---------------------------------------------------------------*
000261 999-FINALIZAR SECTION.
000262 *---------------------------------------------------------------*
000263
000264 DISPLAY 'FIM NORMAL'.
000265
000266 999-FIM. EXIT.
PP 5688-197 IBM COBOL for MVS & VM 1.2.2 TABTR9Z9 Date 11/12/2004 Time 14:30:35 Page 7
PROGRAM GLOBAL TABLE BEGINS AT LOCATION 0000FC FOR 00000C BYTES
THE PGT CONTAINS 000001 CELL(S) FOR ADDRESSABILITY TO THE CGT
PBL1 AT LOCATION 000292 FOR LINE 194
00012C (LIT+0) FFFFFFFC 00001000 00000001 C5D9D9D6 40D5D640 D6D7C5D5 40C3E4D9 E2D6D9C6 ]............ERRO NO OPEN
00014C (LIT+32) C9D440D5 D6D9D4C1 D3C6C5E3 C3C840D6 D2E3C1C2 E3D9F9E9 F9000010 0C000000 ]IM NORMALFETCH OKTABTR9Z9
00016C (LIT+64) 00000001 28000000 01000001 2C000000 01000000 00000000 00000000 00000000 ].........................
00018C (LIT+96) 00000000 00000000 00000000 00800000 00400000 00000000 00000000 00800000 ]................. .......
0001AC (LIT+128) 00000000 00000000 00400000 00000000 00000000 00000000 00400000 000025C0 ]......... ...............
0001CC (LIT+160) 0001C000 08080000 04005501 4000000A 08000004 0043FF01 40000033 09000128 ]............ ...........
0001EC (LIT+192) 01A8FF01 40000008 08000004 004DFF01 40000013 08000004 0030FF80 00000000 ].y.. ........(.. ........
00020C (LIT+224) 00000000 00000000 00000040 00000000 40C00001 40000808 00000400 5502C000 ]........... .... ... ....
00022C (LIT+256) 08080000 040055 ].......
LINE # HEXLOC VERB LINE # HEXLOC VERB LINE # HEXLOC VERB
000196 0002A4 GO 000198 0002A8 MOVE 000199 0002AE CALL
000201 0002E0 CALL 000203 000316 CALL 000204 000344 CALL
000206 000372 CALL 000210 0003E8 CALL 000212 00041C CONTINUE
000216 00041C PERFORM 000217 000434 PERFORM 000218 000450 PERFORM
000219 00046C STOP 000224 00048C MOVE 000226 000492 PERFORM
000227 0004B4 CALL 000228 0004DE IF 000229 0004EA DISPLAY
000230 0004F8 STOP 000232 000510 CONTINUE 000233 000510 EXIT
000239 000516 MOVE 000240 00051A PERFORM 000248 000526 PERFORM
000249 000548 CALL 000250 000572 IF 000251 00057E MOVE
000253 000586 DISPLAY 000254 000594 DISPLAY 000257 0005A2 CONTINUE
000258 0005A2 EXIT 000264 0005A8 DISPLAY 000266 0005B6 EXIT
PP 5688-197 IBM COBOL for MVS & VM 1.2.2 TABTR9Z9 Date 11/12/2004 Time 14:30:35 Page 9
*** TGT MEMORY MAP ***
PGMLOC TGTLOC
100
0006C4 0000AC CALC ROUTINE REGISTER SAVE AREA
0006F8 0000E0 ALTERNATE COLLATING SEQUENCE TABLE PTR.
0006FC 0000E4 ADDRESS OF SORT G.N. ADDRESS BLOCK
000700 0000E8 ADDRESS OF PGT
000704 0000EC CURRENT INTERNAL PROGRAM NUMBER
000708 0000F0 POINTER TO 1ST IPCB
00070C 0000F4 ADDRESS OF THE CLLE FOR THIS PROGRAM
000710 0000F8 POINTER TO ABEND INFORMATION TABLE
000714 0000FC POINTER TO TEST INFO FIELDS IN THE TGT
000718 000100 ADDRESS OF START OF COBOL PROGRAM
00071C 000104 POINTER TO ALTER VNI'S IN CGT
000720 000108 POINTER TO ALTER VN'S IN TGT
000724 00010C POINTER TO FIRST PBL IN THE PGT
000728 000110 POINTER TO FIRST FCB CELL
00072C 000114 WORKING-STORAGE ADDRESS
000730 000118 POINTER TO FIRST SECONDARY FCB CELL
000734 00011C POINTER TO STATIC CLASS INFO BLOCK
PP 5688-197 IBM COBOL for MVS & VM 1.2.2 TABTR9Z9 Date 11/12/2004 Time 14:30:35 Page 10
*** DSA MEMORY MAP ***
DSALOC
C R O S S - R E F E R E N C E T A B L E
_________________________________________
101
10C TABTR9Z9 10C V-CON ] DSNHADD2 DSNHADD2 0 B_TEXT ]
110 TABTR9Z9 110 V-CON ] DSNHLI DSNELI 2C B_TEXT ]
F5C CEEBETBL 4 V-CON ] CEEBXITA $UNRESOLVED(W) ]
F60 CEEBETBL 8 V-CON ] CEEBINT CEEBINT 0 B_TEXT ]
F64 CEEBETBL C V-CON ] CEEBLLST CEEBLLST 0 B_TEXT ]
F68 CEEBETBL 10 V-CON ] CEEUOPT $UNRESOLVED(W) ]
F6C CEEBETBL 14 V-CON ] CEEBTRM CEEBTRM 0 B_TEXT ]
F74 CEEBETBL 1C V-CON ] CEEBPUBT CEEBPUBT 0 B_TEXT ]
F78 CEEBETBL 20 V-CON ] IEWBLIT $UNRESOLVED(W) ]
FDC CEESTART 5C A-CON ] CEEMAIN $UNRESOLVED(W) ]
FEC CEESTART 6C C-LEN ] $NON-RELOCATABLE B_PRV ]
1018 CEESTART 98 A-CON ] CEEFMAIN $UNRESOLVED(W) ]
1024 CEESTART A4 A-CON ] CEEBETBL CEEBETBL 0 B_TEXT ]
1028 CEESTART A8 A-CON ] CEEROOTA $UNRESOLVED(W) ]
102C CEESTART AC A-CON ] CEEROOTD $UNRESOLVED(W) ]
14E8 IGZCBSO 4B8 V-CON ] CEEINT CEEBPIRA 0 B_TEXT ]
14EC IGZCBSO 4BC V-CON ] IGZETUN $UNRESOLVED(W) ]
14F0 IGZCBSO 4C0 V-CON ] IGZEOPT $UNRESOLVED(W) ]
14F4 IGZCBSO 4C4 V-CON ] CEEARLU CEEARLU 0 B_TEXT ]
18A8 CEEBPIRA 260 V-CON ] CEEBPUBT CEEBPUBT 0 B_TEXT ]
1ADC CEEBTRM 6C A-CON ] CEEBPUBT CEEBPUBT 0 B_TEXT ]
1B28 CEEBLLST 10 A-CON ] CEESG000 $UNRESOLVED(W) ]
1B2C CEEBLLST 14 A-CON ] CEESG001 $UNRESOLVED(W) ]
1B30 CEEBLLST 18 A-CON ] CEESG002 $UNRESOLVED(W) ]
1B34 CEEBLLST 1C A-CON ] CEESG003 $UNRESOLVED(W) ]
1B38 CEEBLLST 20 A-CON ] CEESG004 $UNRESOLVED(W) ]
1B3C CEEBLLST 24 A-CON ] CEESG005 CEESG005 0 B_TEXT ]
1B40 CEEBLLST 28 A-CON ] CEESG006 $UNRESOLVED(W) ]
1B44 CEEBLLST 2C A-CON ] CEESG007 $UNRESOLVED(W) ]
1B48 CEEBLLST 30 A-CON ] CEESG008 $UNRESOLVED(W) ]
1B4C CEEBLLST 34 A-CON ] CEESG009 $UNRESOLVED(W) ]
1B50 CEEBLLST 38 A-CON ] CEESG010 $UNRESOLVED(W) ]
1B54 CEEBLLST 3C A-CON ] CEESG011 $UNRESOLVED(W) ]
1B58 CEEBLLST 40 A-CON ] CEESG012 $UNRESOLVED(W) ]
1B5C CEEBLLST 44 A-CON ] CEESG013 $UNRESOLVED(W) ]
1B60 CEEBLLST 48 A-CON ] CEESG014 $UNRESOLVED(W) ]
1B64 CEEBLLST 4C A-CON ] CEESG015 $UNRESOLVED(W) ]
1B68 CEEBLLST 50 A-CON ] CEESG016 $UNRESOLVED(W) ]
PROCESSING OPTIONS:
ALIASES NO
ALIGN2 NO
AMODE UNSPECIFIED
CALL YES
CASE UPPER
COMPAT UNSPECIFIED
DCBS NO
DYNAM NO
EXTATTR UNSPECIFIED
EXITS: NONE
FILL NONE
GID UNSPECIFIED
HOBSET NO
LET 04
LINECT 060
LIST SUMMARY
LISTPRIV NO
MAP NO
MAXBLK 032760
MSGLEVEL 00
OVLY NO
PRINT YES
RES NO
102
REUSABILITY UNSPECIFIED
RMODE UNSPECIFIED
STORENX NO
TERM NO
UID UNSPECIFIED
UPCASE: NO
WKSPACE 000000K,000000K
XCAL NO
XREF YES
***END OF OPTIONS***
AC 000
AMODE ANY
DC NO
EDITABLE YES
EXCEEDS 16MB NO
EXECUTABLE YES
MIGRATABLE YES
OL NO
OVLY NO
PACK,PRIME NO,NO
PAGE ALIGN NO
REFR NO
RENT NO
REUS NO
RMODE 24
SCTR NO
SSI
SYM GENERATED NO
TEST NO
XPLINK NO
MODULE SIZE (HEX) 00001B80
***** E N D O F R E P O R T *****
----------------------
MESSAGE SUMMARY REPORT
103
----------------------
SEVERE MESSAGES (SEVERITY = 12)
NONE
104
Leitura com cursor
IDENTIFICATION DIVISION.
PROGRAM-ID. TABTR9A5.
AUTHOR. FABIO MURASAKI
*****************************************************************
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IMPRESS ASSIGN TO IMPRESS.
*****************************************************************
DATA DIVISION.
FILE SECTION.
FD IMPRESS.
01 LIN-IMPRESS PIC X(133).
WORKING-STORAGE SECTION.
**** AREAS DO RELATORIO *****************************************
01 LIN-CAB1.
05 FILLER PIC X(03) VALUE SPACES.
05 FILLER PIC X(19) VALUE 'BANCO REAL ABN AMRO'.
05 FILLER PIC X(05) VALUE SPACES.
05 FILLER PIC X(19) VALUE 'AGENCIAS ORDEM ALFA'.
05 FILLER PIC X(07) VALUE SPACES.
05 FILLER PIC X(05) VALUE 'PAG. '.
05 CAB1-PAG PIC Z.ZZ9.
01 LIN-DET1.
05 FILLER PIC X(03) VALUE SPACES.
05 FILLER PIC X(16) VALUE 'AGENCIA = '.
05 DET-CODAGE PIC 9(05) VALUE ZEROES.
01 LIN-DET2.
05 FILLER PIC X(03) VALUE SPACES.
05 FILLER PIC X(16) VALUE 'NOME AGENCIA = '.
05 DET-NM-AGE PIC X(35) VALUE SPACES.
01 LIN-DET3.
05 FILLER PIC X(03) VALUE SPACES.
05 FILLER PIC X(16) VALUE 'END. AGENCIA = '.
05 DET-END-AGE PIC X(35) VALUE SPACES.
01 LIN-DET4.
05 FILLER PIC X(03) VALUE SPACES.
05 FILLER PIC X(16) VALUE 'TEL. AGENCIA = '.
05 DET-TEL-AGE.
10 DET-TEL1 PIC 9(04).
10 FILLER PIC X(01) VALUE '-'.
10 DET-TEL2 PIC 9(04).
01 LIN-DET5.
05 FILLER PIC X(03) VALUE SPACES.
05 FILLER PIC X(60) VALUE '-----------------------------
- '-------------------------------'.
01 LIN-BRANCO.
05 FILLER PIC X(133) VALUE SPACES.
**** VARIAVEIS DO RELATORIO *************************************
01 VAR-REL.
05 REL-N-PAG PIC 9(04) VALUE ZEROES.
**** VARIAVEIS **************************************************
01 CONT-LIN PIC 9(02) VALUE ZEROES.
01 CT-DET PIC 9(02) VALUE ZEROES.
01 WS-TEL-AGE PIC 9(09).
01 WS-SQLCODE PIC -9999.
**** AREAS DB2 **************************************************
* SQLCA ---------------------------
77 FILLER PIC X(05) VALUE 'SQLCA'.
EXEC SQL
105
INCLUDE SQLCA
END-EXEC.
* TABELA CADAGE -------------------
77 FILLER PIC X(06) VALUE 'CADAGE'.
01 CADAGE.
05 CD-AGE PIC S9(09) COMP.
05 NM-AGE PIC X(15).
05 END-AGE PIC X(30).
05 TEL-AGE PIC S9(09) COMP.
* CURSOR 1 ------------------------
EXEC SQL
DECLARE C1 CURSOR FOR
SELECT
CD_AGE,
NM_AGE,
END_AGE,
TEL_AGE
FROM
DB2T.ZZA500_CADAGE
ORDER BY
NM_AGE
END-EXEC.
*****************************************************************
PROCEDURE DIVISION.
100-00-PRINCIPAL.
OPEN OUTPUT IMPRESS.
MOVE 50 TO CONT-LIN.
PERFORM 200-00-OPEN-C1
PERFORM UNTIL SQLCODE = 100
PERFORM 210-00-FETCH-C1
IF SQLCODE NOT = 100
IF CONT-LIN = 50
PERFORM 300-00-IMP-CAB
END-IF
PERFORM 310-00-IMP-DET
END-IF
END-PERFORM
PERFORM 220-00-CLOSE-C1
CLOSE IMPRESS.
STOP RUN.
**** OPEN C1 ****************************************************
200-00-OPEN-C1 SECTION.
EXEC SQL
OPEN C1
END-EXEC
IF SQLCODE NOT = ZEROES
MOVE SQLCODE TO WS-SQLCODE
DISPLAY 'ERRO OPEN NO CURSOR'
DISPLAY 'SQLCODE = ' WS-SQLCODE
DISPLAY 'O PROGRAMA SERA CANCELADO'
MOVE 4 TO RETURN-CODE
STOP RUN
END-IF.
200-99-FIM. EXIT.
**** FETCH C1 ***************************************************
210-00-FETCH-C1 SECTION.
EXEC SQL
FETCH C1 INTO
:CADAGE.CD-AGE,
:CADAGE.NM-AGE,
:CADAGE.END-AGE,
:CADAGE.TEL-AGE
END-EXEC
IF SQLCODE NOT = ZEROES AND 100
MOVE SQLCODE TO WS-SQLCODE
DISPLAY 'EP37 - ERRO FETCH'
DISPLAY 'EP37 - SQLCODE = ' WS-SQLCODE
106
DISPLAY 'O PROGRAMA SERA CANCELADO'
MOVE 4 TO RETURN-CODE
STOP RUN
ELSE
IF SQLCODE = ZEROES
MOVE CD-AGE OF CADAGE TO DET-CODAGE
MOVE NM-AGE OF CADAGE TO DET-NM-AGE
MOVE END-AGE OF CADAGE TO DET-END-AGE
MOVE TEL-AGE OF CADAGE TO WS-TEL-AGE
MOVE WS-TEL-AGE(2:4) TO DET-TEL1
MOVE WS-TEL-AGE(6:4) TO DET-TEL2
END-IF
END-IF.
210-99-FIM. EXIT.
**** CLOSE C1 ***************************************************
220-00-CLOSE-C1 SECTION.
EXEC SQL
CLOSE C1
END-EXEC
IF SQLCODE NOT = ZEROES
MOVE SQLCODE TO WS-SQLCODE
DISPLAY 'ERRO CLOSE NO CURSOR'
DISPLAY 'SQLCODE = ' WS-SQLCODE
DISPLAY 'O PROGRAMA SERA CANCELADO'
MOVE 4 TO RETURN-CODE
STOP RUN
END-IF.
220-99-FIM. EXIT.
**** IMPRIME CABECALHO ******************************************
300-00-IMP-CAB SECTION.
ADD 1 TO REL-N-PAG.
MOVE REL-N-PAG TO CAB1-PAG.
WRITE LIN-IMPRESS FROM LIN-CAB1 BEFORE 1.
WRITE LIN-IMPRESS FROM LIN-BRANCO BEFORE 1.
MOVE ZEROES TO CONT-LIN.
300-99-FIM. EXIT.
**** IMPRIME DETALHE ********************************************
310-00-IMP-DET SECTION.
MOVE 1 TO CT-DET.
PERFORM UNTIL CT-DET > 5
EVALUATE CT-DET
WHEN 1 WRITE LIN-IMPRESS FROM LIN-DET1 BEFORE 1
WHEN 2 WRITE LIN-IMPRESS FROM LIN-DET2 BEFORE 1
WHEN 3 WRITE LIN-IMPRESS FROM LIN-DET3 BEFORE 1
WHEN 4 WRITE LIN-IMPRESS FROM LIN-DET4 BEFORE 1
WHEN 5 WRITE LIN-IMPRESS FROM LIN-DET5 BEFORE 1
END-EVALUATE
MOVE SPACES TO LIN-IMPRESS
ADD 1 TO CONT-LIN
ADD 1 TO CT-DET
IF CONT-LIN = 50
WRITE LIN-IMPRESS BEFORE PAGE
PERFORM 300-00-IMP-CAB
END-IF
END-PERFORM.
310-99-FIM. EXIT.
107
APÊNDICE IV – Uso de colunas com NULL
• Se uma coluna de uma tabela for definida com NOT NULL, ela SEMPRE terá um valor; neste caso,
quando for dado um FETCH o valor sempre será trazido para a variável indicada.
▪ Se uma coluna de uma tabela não for definida com NOT NULL, ela pode ter valor ou não numa linha.
Quando for dado um FETCH para uma linha:
➢ se a coluna tiver valor nessa linha, ele será trazido sem problemas
➢ se a coluna NÃO TIVER valor e NÃO TIVER variável indicadora de NULL, ocorrerá SQLCODE
–305
➢ se a coluna NÃO TIVER valor e TIVER variável indicadora de NULL, na variável será colocada
uma indicação se o valor da coluna é NULL ou não
• É necessário que haja (seja definida) uma variável indicadora de NULL para cada coluna que possa ter
NULL; o mais indicado é que essa declaração seja feita próxima do INCLUDE do DCLGEN, de
preferência por meio de outro INCLUDE; se isso não ocorrer, o programador deve declarar
manualmente todas as variáveis indicadoras de NULL para todas as colunas que serão objeto de
FETCH
• A declaração deve ser feita na Working-Storage Section, e a variável deve ser uma half-word com
conteúdo binário, com sinal, da seguinte forma :
• O uso das variáveis indicadoras de NULL na PROCEDURE DIVISION é feita da seguinte forma
(exemplo) :
MOVE ZEROS TO EMAIL-NULL limpar variável indic.de NULL (desnecessário, mas elegante)
MOVE SPACES TO EMAIL limpar variável receptora (se for NULL, não é alterada)
MOVE COD-DESEJADO TO W-COD
EXEC SQL
SELECT T_COD, T_NOME, T_EMAIL
INTO :W-COD, :W-NOME, :W-EMAIL:W-EMAIL-NULL
FROM TABELA
WHERE T-COD = :W-COD
END-EXEC.
IF SQLCODE NOT = ZERO
MOVE SQLCODE TO W-SQLCODE
DISPLAY ‘SELECT DEU ERRO ! SQLCODE=’ W-SQLCODE
ELSE
IF W-TELEF-NULL < 0
DISPLAY ‘TELEFONE NULO’
ELSE
IF W-TELEF-NULL > 0
DISPLAY ‘EMAIL VEIO TRUNCADO’
ELSE
DISPLAY ‘EMAIL VEIO OK’
END-IF
END-IF
108
END-IF
109