Sie sind auf Seite 1von 116

DB2

DB2 Cobol

NOV/2004

SUMRIO
1 Conceitos de Bases de Dados..................................................................................................................5
Armazenamento de dados ......................................................................................................................................5
File-oriented .............................................................................................................................................................................5
Data base oriented ...................................................................................................................................................................5

Base de dados .........................................................................................................................................................6


Data base management system (DBMS) ...............................................................................................................6
Tipos de DBMS .....................................................................................................................................................6
Conceitos relativos a RDBs ..................................................................................................................................8
Entidade ...................................................................................................................................................................................8
Atributo ....................................................................................................................................................................................8
Relacionamento .......................................................................................................................................................................8
Tabelas......................................................................................................................................................................................8
Views.........................................................................................................................................................................................9
ndices.......................................................................................................................................................................................9
Keys.........................................................................................................................................................................................10
Constraints..............................................................................................................................................................................10
Queries....................................................................................................................................................................................12
Data Base Administrator - Administrador de Base de Dados...............................................................................................12
BIND & PLAN.......................................................................................................................................................................13

2 - DB2.........................................................................................................................................................14
Exemplo de estrutura de uma base de dados ......................................................................................................14
Estrutura de uma base de dados DB2..................................................................................................................14
Exemplos de tabelas DB2.....................................................................................................................................15
Arquivos de configurao e controle usados pelo DB2.......................................................................................18
Built-In Data Types ; formatos de Date e Time .................................................................................................23
DB2 no mainframe................................................................................................................................................24
Execuo de comandos DB2 via batch (IKJEFT01 chama DSNTEP2)................................................................................25
Execuo de comandos DB2 via FileAid...............................................................................................................................28
Execuo de comandos DB2 via aplicativo Cobol (IKJEFT01 chama aplicativo Cobol).....................................................29

3 - SQL ........................................................................................................................................................30
Origem ................................................................................................................................................................30
Execuo de comandos SQL : mtodos ..............................................................................................................31
Resumo dos principais comandos SQL .............................................................................................................38
DDL (Data Definition Language) statements .......................................................................................................................38
DCL (Data Control Language) statements ............................................................................................................................38
DML (Data Manipulation Language) statements .................................................................................................................38
Comandos declarativos auxiliares .........................................................................................................................................38
Outros conceitos......................................................................................................................................................................39
(DSPL - Database Stored Procedure Language) statements ............................................................................................39
(TCL - Transaction Control Language) statements .........................................................................................................39
2

4 - DB2 em um programa COBOL ............................................................................................................40


Diferenas no programa e conceitos associados ................................................................................................40
Fluxo do processo de gerao do executvel .....................................................................................................41
Funes do Pr-compilador ................................................................................................................................43
Funes do Binder ..............................................................................................................................................43
Comandos ao Pr-compilador..............................................................................................................................43
INCLUDES.............................................................................................................................................................................43
DECLARE..............................................................................................................................................................................44
DCLGEN............................................................................................................................................................................44

SQLCA / SQLCODE...........................................................................................................................................47
Variveis................................................................................................................................................................ 51

5 Comandos DDL - Rpida viso............................................................................................................52


CREATE............................................................................................................................................................... 52
ALTER.................................................................................................................................................................53
DROP....................................................................................................................................................................53
COMMENT..........................................................................................................................................................53
GRANT.................................................................................................................................................................54
RENAME..............................................................................................................................................................54
REPLACE............................................................................................................................................................54
REVOKE.............................................................................................................................................................. 55

6 Comandos DCL Rpida viso; Transaes de Banco de Dados .....................................................56


Conceito de transao...........................................................................................................................................56
Controle de transao : comandos DCL .............................................................................................................56
COMMIT................................................................................................................................................................................56
SAVEPOINT .........................................................................................................................................................................56
ROLLBACK ..........................................................................................................................................................................56

7 Comandos DML....................................................................................................................................59
SELECT............................................................................................................................................................... 59
SELECT - Uso batch em Cobol .............................................................................................................................................59
SEM cursor.........................................................................................................................................................................59
COM cursor........................................................................................................................................................................61
SELECT uso batch no DSNTEP2.......................................................................................................................................66
................................................................................................................................................................................................66
Parmetros do SELECT (Embedded / Dsntep2) ..................................................................................................................67
Exemplos sintticos do SELECT ..........................................................................................................................................71
Exemplos de uso (sem INTO) ...............................................................................................................................................73
Exemplos de uso (com INTO) ...............................................................................................................................................74
Exemplos de Select no DSNTEP2..........................................................................................................................................75

UPDATE .............................................................................................................................................................. 80
UPDATE - Uso batch no DSNTEP2......................................................................................................................................80
3

UPDATE - Uso batch em Cobol.............................................................................................................................................81


................................................................................................................................................................................................81

INSERT................................................................................................................................................................ 83
INSERT - Uso batch no DSNTEP2........................................................................................................................................83
INSERT - Uso batch em Cobol..............................................................................................................................................84

DELETE............................................................................................................................................................... 86
DELETE - Uso batch no DSNTEP2......................................................................................................................................86
DELETE - Uso batch em Cobol.............................................................................................................................................87

WHENEVER .......................................................................................................................................................88

8 - FUNES (Built-In).............................................................................................................................90
APNDICE I - A Relational Model of Data for Large Shared Data Banks - E. F. Codd .....................93
APNDICE II Comandos SQL .............................................................................................................94
APNDICE III Programas Exemplo ....................................................................................................96
Completo (Fontes + Sadas) ...............................................................................................................................96
Leitura com cursor ...........................................................................................................................................108

APNDICE IV Uso de colunas com NULL .......................................................................................111


APNDICE V Exemplos de tabelas DB2 ............................................................................................112

DB2
DB2/COBOL
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 (cdigo menor, menos funes, menos controles)
Facilidade para aplicaes muito pequenas e rpidas (mais simples, de forma geral)
Desvantagens
Redundncia (deve ser controlada pela aplicao, mas...)
Inconsistncias (validaes deveriam ser feitas pelos aplicativos, mas...)
Dificuldade de compartilhamento de recursos entre aplicativos / usurios (controle de
locks feito por aplicativo)
Programas tem maior ou menor grau de dependncia da view fsica (alteraes nela
implicam em alteraes nos programas; ex.: mudana no tamanho de um campo de
nome)
Data base oriented
Dados armazenados como um conjunto, com o relacionamento especificado durante o design e
tratado pelo DBMS.
Vantagens
Menor redundncia
Menor / Sem inconsistncias
Integrao entre diversos arquivos
Compartilhamento (entre aplicativos / usurios)
Mudanas da view fsica transparentes para o aplicativo
(Mudanas da view lgica transparentes para o aplicativo)
Gerenciamento centralizado
Desvantagens
Custo (software , hardware , peopleware)
Complexidade
Dependncia de ambiente de HW e SW
Dificuldade de recuperao em determinadas falhas

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 informaes

Data base management system (DBMS)


Software que gerencia e controla os dados de um database e os interfaces entre esses dados e os
aplicativos e o sistema operacional.
Data base system = database + DBMS + aplicativos.

Tipos de DBMS
Hierrquicos
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
Extenso do hierrquico; 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 lgica 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
operaes em um database, e que faz e permite que seja feita pelo DBA sua administrao
Frequentemente RDB e RDBMS so usados sem critrio, para referncia 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 so : tabelas, views, indices, chaves (keys), constraints, funes, etc...
Criado pelo Dr. Edgard F. Codd (IBM) no incio da dcada de 70
As caractersticas do modelo relacional devem ser aplicadas exclusivamente para administrar o
banco de dados (no para armazenar seus dados)
Um RDB assim considerado somente se seguir as seguintes 12 regras :
1. Representao da informao : todas as informaes 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 (identificao /
individualizao = tabela + coluna + primary key da linha
3. Tratamento de NULL : deve ser permitido a qualquer campo (contedo de coluna) a
possibilidade de NO TER contedo (vazio ou nulo) para indicar a ausncia de informao
ou o fato de que no caso ela inaplicvel
4. Catlogo : deve existir um catlogo (com dados a respeito da estrutura do banco de dados
metadados) baseado no modelo relacional, passvel de ser acessado, por pessoas
autorizadas, com a mesma linguagem usada para acessar os dados

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
operaes de (DDL) definio de dados e seus atributos (inclusive views) , operaes de
(DML) manipulao de dados (acesso e atualizao) , administrao de segurana e
integridade, e operaes de controle das transaes (begin, commit, rollback).
6. Atualizao de Views : todas as views que sejam passveis de atualizao, devem ser atualizadas
pelo sistema.
7. Insert, update e delete: o sistema deve permitir operadores insert, update, e delete
8. Independncia fsica de dados : mudanas no armazenamento de dados no nvel fsico no podem
implicar em mudanas nos aplicativos
9. Independncia lgica de dados : mudanas na estrutura lgica (tabelas, colunas, etc) no podem
implicar em mudanas nos aplicativos
10. Independncia de integridade : restries relativas integridade devem ser especificadas
separadamente dos aplicativos e armazenadas no catlogo; mudanas nessas regras no
podem implicar em mudanas nos aplicativos
11. Independncia de distribuio : a distribuio da base de dados, caso ocorra, deve ser
transparente para os usurios (aplicativos que usam a base); caso haja mudana que implique
em mudana de distribuio, os aplicativos devem continuar a rodar sem mudanas
12. No-subverso : se o sistema tiver interface de baixo nvel , a interface no pode ser usada para
subverter o sistema (suas regras), como por exemplo efetuar bypass de verificao de
constraint.

Conceitos relativos a RDBs


Entidade
(substantivo) tem sobre o qual alguma informao armazenada. Ex. cliente, produto
Atributo
(substantivo / adjetivo - qualificativo) caracterstica de (pertencente a) uma entidade. Ex. tipo de cliente
Relacionamento
(verbo / ao) associao existente entre entidades. Ex. cliente compra produto
Tabelas
So 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.

Manipulao 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;

Views
So formas alternativas de visualizar / acessar dados em uma ou mais tabelas.
Uma view , na verdade, uma result table , uma tabela lgica ; ela no tem dados fisicamente, mas
uma mscara 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 - especificao de como os dados so tratados no nvel do aplicativo, podendo
abranger uma ou mais tabelas (, na verdade, uma result table). A transformao do que existe
armazenado para o que o aplicativo necessita feita pelo SGBD.
Physical view - especificao de como os dados esto fisicamente dispostos / armazenados, em
geral num segundo nvel (o primeiro tratado pelo hardware + sistema operacional). A
transformao do que existe armazenado para o que o aplicativo necessita deve ser feita pelo
prprio aplicativo.
Manipulao de VIEWs : exemplos

Criando
CREATE VIEW
AS SELECT
FROM
WHERE

EMPVU10
EMPNO, ENAME,
EMP
DEPTNO = 10;

CREATE VIEW
AS SELECT
FROM
WHERE

EMPVU30
EMPNO NUMERO_EMPREGADO,
EMP
DEPTNO = 30;

JOB

ENAME NOME,

SAL SALARIO

Acessando
SELECT *
FROM
EMPVU10;

ndices
Conjuntos ordenados de pointers para linhas de uma tabela. So baseados nos valores que as colunas
chave contm.
Os ndices so utilizados para : possibilitar acesso atravs de chaves distintas, melhorar a performance,
assegurar a unicidade de chaves.

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 no 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
bsico a uma tabela.
Uma foreign key aquela definida atravs 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 insero de valores com alguns tipos de
inconsistncias. Existem os seguintes tipos de integridade de dados :
Integridade de entidade (Entity Integrity) : assegura que no haja linhas duplicadas numa tabela

Integridade de domnio (Domain Integrity) : restringe o valor de uma coluna por meio de especificao
de tipo, formato, ou faixa de valores possveis. Ex.: salario > 300 e < 1000000
Integridade referencial (Referential integrity) : assegura que linhas no sejam deletadas se estiverem
sendo usadas por outros registros (linhas). Ex.: linha que descreve uma agncia de um banco numa
tabela de agncias, sendo a agncia usada (referenciada) numa tabela de lanamentos.
Integridade definida pelo usurio (User-Defined Integrity) : especifica algum teste ou validao que no
se enquadre em nenhuma das 3 categorias anteriores.
Os constraints so :
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 so exemplos de unique constraints. Por exemplo, um unique
constraint pode ser definido no cdigo de fornecedor de uma tabela de fornecedores, para assegurar
que o mesmo cdigo de fornecedor no seja dado a dois (ou mais) fornecedores.
FOREIGN KEY
Um foreign key constraint serve para prevenir aes que possam destruir dados (com valores
iguais) que efetuem a ligao 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 agncias em que a primary key seja o cdigo
de agncia de um banco (supor agncia 010); e que haja outra tabela com os correntistas das
10

agncias; por meio da integridade referencial, no possvel deletar a linha de uma agncia na
primeira tabela enquanto houver linhas na tabela de correntistas que refiram-se agncia 010.
CHECK
Um table check constraint usado para validar valores que devam ser inseridos numa coluna. Por
meio dele, estabelece-se as restries que definem o domnio das informaes vlidas para uma
coluna.Por exemplo, pode-se definir um table check constraint que impea que seja gravado (por
incluso ou atualizao) um salrio de funcionrio < 180,00.
NOT NULL
Um NOT NULL constraint impede que colunas que devam obrigatoriamente ter contedo, sejam
gravadas sem contedo.
Exemplos de manipulao de constraints :

Para a criao de constraint usa-se o comando CREATE TABLE :


CREATE TABLE EMPLOYEE(
EMPLOYEEID INT NOT NULL,
LNAME VARCHAR(30) NOT NULL,
FNAME VARCHAR(30) NOT NULL,
ADDRESS VARCHAR(100) NOT NULL,
HIREDATE DATETIME NOT NULL,
SALARY MONEY NOT NULL CONSTRAINT CHECK_SALE CHECK (SALARY > 0)

Para adicionar constraint em table j criada, usa-se o comando ALTER TABLE :


ALTER TABLE EMPLOYEE
ADD CONSTRAINT PK_EMPLOYEE PRIMARY KEY (EMPLOYEEID)

Pode-se incluir constraint de primary ou unique key a uma tabela j existente somente se no
houver linhas duplicadas na tabela.

Para deletar constraint j criado em uma table , usa-se o comando ALTER TABLE :
ALTER TABLE EMPLOYEE
DROP CONSTRAINT PK_EMPLOYEE

Para habilitar ou desabilitar constraints de FOREIGN KEY ou CHECK (para efetuar algumas
operaes especficas) usar o comando ALTER TABLE :
ALTER TABLE EMPLOYEE NOCHECK CONSTRAINT CHECK_SALE
11

ALTER TABLE EMPLOYEE CHECK CONSTRAINT CHECK_SALE

Outros exemplos :

CREATE TABLE BOOKS (


BOOKID INT NOT NULL PRIMARY KEY,
AUTHORID INT NOT NULL,
BOOKNAME VARCHAR(100) NOT NULL,
PRICE MONEY NOT NULL
)
CREATE TABLE AUTHORS (
AUTHORID INT NOT NULL PRIMARY KEY,
NAME VARCHAR(100) NOT NULL
)
ALTER TABLE BOOKS
ADD CONSTRAINT FK_AUTHOR
FOREIGN KEY (AUTHORID)
REFERENCES AUTHORS (AUTHORID) ON DELETE CASCADE

Queries
Uma query uma ferramenta / linguagem / comando para a manipulao (recuperao / acesso / obteno)
dos dados em um banco de dados.
Existem diversas linguagens para efetuar queries; em geral, cada SGBD tem a sua.
Uma bastante utilizada nos RDBs o SQL.
Data Base Administrator - Administrador de Base de Dados

Responsvel pela guarda, disponibilidade e acessibilidade das informaes utilizadas nos sistemas de
informao da empresa, tanto em situaes normais quanto de contingncia.
Estuda, analisa, planeja, implanta e acompanha os database systems com base nas necessidades e
objetivos da empresa
Verifica o design de databases para assegurar segurana e eficincia no armazenamento e acesso s
informaes.
Verifica o design de aplicativos para assegurar o uso adequado do database
Verifica a utilizao dos softwares integrados / relacionados ao database para assegurar o uso
adequado do database
Desenvolve e implementa padres de utilizao do database
Prov suporte tcnico para analistas de desenvolvimento e de produo
Recebe notificaes de erro, analisa-as e, caso no seja do aplicativo, providencia correo,
eventualmente atravs de contato com fornecedor(es)
Verifica e monitora o desempenho do database
12

Verifica o impacto de mudanas 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 manuteno a novos softwares relacionados ao database

BIND & PLAN

Processo que constri access paths para tabelas DB2 (mtodo usado para acessar os dados
solicitados via statements SQL)
Viso 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 usurio para manipular os objetos / tabelas indicados no DBRM
Grava um plano (plan)
Responsvel pela guarda, disponibilidade e acessibilidade das informaes utilizadas nos sistemas de
informao da empresa, tanto em situaes normais quanto de contingncia.

13

2 - DB2
Exemplo de estrutura de uma base de dados
INSTNCIA
DATABASE
Arquivos de configurao e de
controle

TABLESPACE
TABLE
DADOS

INDEX

VIEW

Estrutura de uma base de dados DB2


SUB-SISTEMA
DATABASE
TABLE

DADOS

INDEX

Arquivos de configurao e controle

VIEW

STORAGE GROUP

14

Exemplos de tabelas DB2


Creator
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T

Table
ZZA100_CADAGE
ZZA101_AGECLI
ZZA102_SLDCLI
ZZA103_SLDCLI2
ZZA200_CADAGE
ZZA201_AGECLI
ZZA202_SLDCLI
ZZA203_SLDCLI2
ZZA300_CADAGE
ZZA301_AGECLI
ZZA302_SLDCLI
ZZA303_SLDCLI2
ZZA400_CADAGE
ZZA401_AGECLI
ZZA402_SLDCLI
ZZA403_SLDCLI2
ZZA500_CADAGE
ZZA501_AGECLI
ZZA502_SLDCLI
ZZA503_SLDCLI2
ZZA600_CADAGE
ZZA601_AGECLI
ZZA602_SLDCLI
ZZA603_SLDCLI2
ZZA700_CADAGE
ZZA701_AGECLI
ZZA702_SLDCLI
ZZA703_SLDCLI2
ZZA800_CADAGE
ZZA801_AGECLI
ZZA802_SLDCLI
ZZA803_SLDCLI2
ZZA900_CADAGE
ZZA901_AGECLI
ZZA902_SLDCLI
ZZA903_SLDCLI2
ZZB100_CADAGE
ZZB101_AGECLI
ZZB102_SLDCLI
ZZB103_SLDCLI2
ZZB200_CADAGE
ZZB201_AGECLI
ZZB202_SLDCLI
ZZB203_SLDCLI2
ZZB300_CADAGE
ZZB301_AGECLI
ZZB302_SLDCLI
ZZB303_SLDCLI2
ZZB400_CADAGE
ZZB401_AGECLI
ZZB402_SLDCLI
ZZB403_SLDCLI2
ZZB500_CADAGE

Usurio
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO

01
01
01
01
02
02
02
02
03
03
03
03
04
04
04
04
05
05
05
05
06
06
06
06
07
07
07
07
08
08
08
08
09
09
09
09
10
10
10
10
11
11
11
11
12
12
12
12
13
13
13
13
14

15

DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T

ZZB501_AGECLI
ZZB502_SLDCLI
ZZB503_SLDCLI2
ZZB600_CADAGE
ZZB601_AGECLI
ZZB602_SLDCLI
ZZB603_SLDCLI2
ZZB700_CADAGE
ZZB701_AGECLI
ZZB702_SLDCLI
ZZB703_SLDCLI2
ZZB800_CADAGE
ZZB801_AGECLI
ZZB802_SLDCLI
ZZB803_SLDCLI2
ZZB900_CADAGE
ZZB901_AGECLI
ZZB902_SLDCLI
ZZB903_SLDCLI2
ZZC100_CADAGE
ZZC101_AGECLI
ZZC102_SLDCLI
ZZC103_SLDCLI2
ZZC200_CADAGE
ZZC201_AGECLI
ZZC202_SLDCLI
ZZC203_SLDCLI2
ZZC300_CADAGE
ZZC301_AGECLI
ZZC302_SLDCLI
ZZC303_SLDCLI2
ZZC400_CADAGE
ZZC401_AGECLI
ZZC402_SLDCLI
ZZC403_SLDCLI2
ZZC500_CADAGE
ZZC501_AGECLI
ZZC502_SLDCLI
ZZC503_SLDCLI2
ZZC600_CADAGE
ZZC601_AGECLI
ZZC602_SLDCLI
ZZC603_SLDCLI2
ZZC700_CADAGE
ZZC701_AGECLI
ZZC702_SLDCLI
ZZC703_SLDCLI2
ZZC800_CADAGE
ZZC801_AGECLI
ZZC802_SLDCLI
ZZC803_SLDCLI2
ZZC900_CADAGE
ZZC901_AGECLI
ZZC902_SLDCLI
ZZC903_SLDCLI2

ALUNO 14
ALUNO 14
ALUNO 14
ALUNO 15
ALUNO 15
ALUNO 15
ALUNO 15
ALUNO 16
ALUNO 16
ALUNO 16
ALUNO 16
ALUNO 17
ALUNO 17
ALUNO 17
ALUNO 17
ALUNO 18
ALUNO 18
ALUNO 18
ALUNO 18
ALUNO 19
ALUNO 19
ALUNO 19
ALUNO 19
ALUNO 20
ALUNO 20
ALUNO 20
ALUNO 20
ALUNO 21
ALUNO 21
ALUNO 21
ALUNO 21
ALUNO 22
ALUNO 22
ALUNO 22
ALUNO 22
ALUNO 23
ALUNO 23
ALUNO 23
ALUNO 23
ALUNO 24
ALUNO 24
ALUNO 24
ALUNO 24
ALUNO 25
ALUNO 25
ALUNO 25
ALUNO 25
ALUNO 26
ALUNO 26
ALUNO 26
ALUNO 26
PROFESSOR
PROFESSOR
PROFESSOR
PROFESSOR

16

DB2T.ZZCnn0_CADAGE
CD_AGE
NM_AGE
END_AGE
TEL_AGE

INTEGER
CHAR(15)
CHAR(30)
INTEGER

DB2T.ZZCnn1_AGECLI
CD_AGE_CLI
CD_CLI
TP_CLI
NM_CLI
END_CLI
COMPL_CLI
CID_CLI
UF_CLI
CEP_CLI
CMCEP_CLI
TEL_CLI
RG_CLI
CPF_CGC_CLI
DT_INCL_CLI
DT_EXCL_CLI
VL_SDO_CLI

INTEGER
INTEGER
INTEGER
CHAR(35)
CHAR(35)
CHAR(30)
CHAR(30)
CHAR(2)
INTEGER
INTEGER
INTEGER
INTEGER
INTEGER
DATE
DATE
DECIMAL(7,2)

DB2T.ZZCnn2_SLDCLI
CD_AGE_SLD
CD_CLI
NM_CLI
TEL_CLI
VL_SDO_CLI

INTEGER
INTEGER
CHAR(35)
INTEGER
DECIMAL(7,2)

DB2T.ZZCnn3_SLDCLI2
CD_AGE_SLD
CD_CLI
NM_CLI
TEL_CLI
VL_SDO_CLI

INTEGER
INTEGER
CHAR(35)
INTEGER
DECIMAL(15,2)

17

Arquivos de configurao e controle usados pelo DB2

Sgbd DB2

Tem a relao de todas as


tabelas, respectivas colunas,
data types, etc. ...

Arquivos de dados:
tabelas

ACT0001, etc

Base de Dados
Arquivos de controle
SYSIBM.SYSTABLES

SYSIBM.SYSCOLUMNS

SYSIBM.SYSDBAUTH

SYSIBM.SYSTABAUTH

SYSIBM.SYSINDEXES

SYSIBM.SYSRELS

SYSIBM.SYSTABCONST

18

19

SYSCOLUMNS
NAME
TBNAME
TBCREATOR
COLNO
COLTYPE
LENGTH
SCALE
NULLS
COLCARD
HIGH2KEY
LOW2KEY
UPDATES
IBMREQD
REMARKS
DEFAULT
KEYSEQ
FOREIGNKEY
FLDPROC
LABEL
STATSTIME
DEFAULTVALUE
COLCARDF
COLSTATUS
LENGTH2
DATATYPEID
SOURCETYPEID
TYPESCHEMA
TYPENAME
CREATEDTS
TABELA

VARCHAR(18)
VARCHAR(18)
CHAR(8)
SMALLINT
CHAR(8)
SMALLINT
SMALLINT
CHAR(1)
INTEGER
CHAR(8)
CHAR(8)
CHAR(1)
CHAR(1)
VARCHAR(254)
CHAR(1)
SMALLINT
CHAR(1)
CHAR(1)
VARCHAR(30)
TIMESTMP
VARCHAR(512)
FLOAT(8)
CHAR(1)
INTEGER
INTEGER
INTEGER
CHAR(8)
VARCHAR(18)
TIMESTMP

ACT0001
COLUNA
--NRFILIAL
CDCIDADE
CDNOMEFA
TPFRANQU
CDOFERTA
INGRHEAD

DESCRICAO
---NUMERO FILIAL
CODIGO CIDADE
CODIGO NOME FANTASIA
TIPO FRANQUIA
CODIGO OFERTA
INDICADOR GROUP HEAD

SEQ
--1
2
3
4
5
6

TIPO
---DECIMAL
SMALLINT
SMALLINT
SMALLINT
SMALLINT
CHAR

TAM
--3
2
2
2
2
1

NUL
--N
N
N
N
N
N

20

SYSIBM.tabelas
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM

DSNRLST01
IPNAMES
LOCATIONS
LULIST
LUMODES
LUNAMES
MODESELECT
SQLTABLETYPES
SQLTYPEINFO
SYSAUXRELS
SYSCHECKDEP
SYSCHECKS
SYSCHECKS2
SYSCOLAUTH
SYSCOLDIST
SYSCOLDIST_HIST
SYSCOLDISTSTATS
SYSCOLSTATS
SYSCOLUMNS
SYSCOLUMNS_HIST
SYSCONSTDEP
SYSCOPY
SYSDATABASE
SYSDATATYPES
SYSDBAUTH
SYSDBRM
SYSDUMMY1
SYSFIELDS
SYSFOREIGNKEYS
SYSINDEXES
SYSINDEXES_HIST
SYSINDEXPART
SYSINDEXPART_HIST
SYSINDEXSTATS
SYSINDEXSTATS_HIST
SYSJARCONTENTS
SYSJAROBJECTS
SYSJAVAOPTS
SYSKEYCOLUSE
SYSKEYS
SYSLINKS
SYSLOBSTATS
SYSLOBSTATS_HIST
SYSPACKAGE
SYSPACKAUTH
SYSPACKDEP
SYSPACKLIST
SYSPACKSTMT

TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
21

SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM
SYSIBM

SYSPARMS
SYSPKSYSTEM
SYSPLAN
SYSPLANAUTH
SYSPLANDEP
SYSPLSYSTEM
SYSPROCEDURES
SYSPSM
SYSPSMOPTS
SYSRELS
SYSRESAUTH
SYSROUTINEAUTH
SYSROUTINES
SYSROUTINES_OPTS
SYSROUTINES_SRC
SYSSCHEMAAUTH
SYSSEQUENCES
SYSSEQUENCESDEP
SYSSTMT
SYSSTOGROUP
SYSSTRINGS
SYSSYNONYMS
SYSTABAUTH
SYSTABCONST
SYSTABLEPART
SYSTABLEPART_HIST
SYSTABLES
SYSTABLES_HIST
SYSTABLESPACE
SYSTABSTATS
SYSTABSTATS_HIST
SYSTRIGGERS
SYSUSERAUTH
SYSVIEWDEP
SYSVIEWS
SYSVLTREE
SYSVOLUMES
SYSVTREE
USERNAMES

TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
VIEW
VIEW
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE
TABLE

22

Built-In Data Types ; formatos de Date e Time


Dado
Horrio

Obs.
Alfanumrico

Formato DB2
TIME

PIC Cobol
X(8)

Horrio + data

Alfanumrico

TIMESTAMP

X(26)

Data

Alfanumrico

DATE

X(10)

Nmero

Binrio ponto fixo


(16 bits)
2 bytes
Binrio ponto fixo
(32 bits)
4 bytes
Binrio ponto fixo
(64 bits)
8 bytes
Decimal
compactado
Binrio ponto
flutuante
precisao simples
4 bytes
Binrio ponto
flutuante dupla
8 bytes
Tamanho fixo
Carater
Tamanho
variavel Carater

SMALLINT

S9(4)
Ou
S9(4)
S9(9)
Ou
S9(9)

Tamanho fixo Grafico


Tamanho variavel Grafico
Tamanho variavel Grafico
LOB
Tamanho variavel Carater
LOB
Tamanho variavel Binario
LOB

GRAPHIC
VARGRAPHIC
DBCLOB

Pointer

DATALINK

Nmero
Nmero
Nmero
Nmero

Nmero
String
String
String grafico
String grafico
String grafico LOB
String LOB
String LOB

Dado externo

INTEGER

ISO format = hh.mm.ss


EUR format = hh.mm.ss
JIS format = hh:mm:ss
USA format = 00.00 xx

(00.00.00 a 24.00.00)
(00.00.00 a 24.00.00)
(00:00:00 a 24:00:00)
(00.00 a 12.00);
(xx=AM ou PM )
(Pode ser LOCAL format = definido pela instalao)
EUR format = yyyy-mm-dd-hh.mm.ss.xxxxxx
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 instalao)

COMP
COMP-4
COMP
COMP-4

No tem
BIGINT
DECIMAL(p,s)

S9(p-s)V9(s) COMP-3

REAL

COMP-1

DOUBLE
Ou
FLOAT
CHAR(n)

COMP-2

VARCHAR(n)

xxx-LEN PIC S9(4) COMP.


xxx-TEXT PIC X(n).

X(n)

CLOB
BLOB

USAGE POINTER

Obs. LOB = LARGE OBJECT : desenhos, fotos, voz, (teses), (livros), etc...
23

DB2 no mainframe

Sistema
Operacional

Gerenciador DB2

IKJFT01
(TSO batch)
comandos SQL
resultados

comandos SQL
resultados

comandos SQL
resultados

DSNTEP2
(SQL batch)

Aplicativos Cobol Batch

FileAid

Outros Softwares

24

Execuo de comandos DB2 via batch (IKJEFT01 chama DSNTEP2)

SYSTSIN
BASE DE DADOS

Sistema
Operacional

Gerenciador DB2

indica :

Programa=DSNTEP2
Plano=xxxxx
LoadLib=dsn
Etc...

IKJFT01
(TSO batch)

SYSIN
SELECT * FROM
TABELA_CLIENTES

DSNTEP2
(chamado pelo IKJEFT01)

SELECT * FROM
TABELA_CLIENTES
(RESULTADO)

SYSPRINT
(RESULTADO)

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

25

Resultado produzido :
READY
DSN SYSTEM(DB1D)
DSN
RUN PROGRAM(DSNTEP2) PLAN(DSNTEP2)
DSN
END
READY
END

LIB('SYS1.DSNDB1D.RUNLIB.LOAD')

Nome tabela
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

Aps acerto do nome da tabela, job re-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.ZZC900_CADAGE;

26

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 no 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)

27

Execuo de comandos DB2 via FileAid

Comandos

BASE DE DADOS

Sistema
Operacional

Gerenciador DB2

Resultados

FileAid

Comandos
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
Save Edit Criteria Information:
Save Template Criteria On Execute
Criteria Dataset Name ===>
Member
===>
Max Rows to Select

===> 2000

===> NO

(Yes or No)

(* = ALL ROWS)

SEL COLUMN NAME


TYPE(LEN)
ORDER (A/D) WHERE
More: >
--- ------------------ ------------------ -----+---10----+---20----+
S__ CD_AGE
INTEGER
> 5
S__ NM_AGE
CHAR(15)
___ END_AGE
CHAR(30)
___ TEL_AGE
INTEGER
******************************* Bottom of data
********************************
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
000002
10 NOME AG 10
****** ************************** BOTTOM OF DATA
***************************

28

Execuo de comandos DB2 via aplicativo Cobol (IKJEFT01 chama aplicativo Cobol)
SYSTSIN

indica :

Programa=xxxxxxxx
Plano=xxxxx
LoadLib=dsn
Etc...

BASE DE DADOS

Gerenciador
Sistema
DB2
Operacional

IKJEFT01

Aplicativo
(programa xxxxxxxx) (chamado pelo IKJEFT01)

SELECT * FROM
TABELA_CLIENTES

SELECT * FROM
TABELA_CLIENTES
(RESULTADO)

SELECT * FROM
TABELA_CLIENTES
(RESULTADO)

Job submetido em batch:


//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(xxxxxxxx) PLAN(DSVPTAB) LIB('SYS1.DSNDB1D.RUNLIB.LOAD') PARMS('/ALIGN(MID)')
END

29

3 - SQL
Origem
1970 = modelo base de dados relacional (Dr. E. F. Codd da IBM) = como os BD so concebidos (no
como so usados) : tabelas, colunas, linhas, ndices, chaves, relao entre tabelas, metadados, etc
IBM desenvolveu SYSTEM R (prottipo de um BD relacional).
Para a criao e a manipulao dos dados do System R, a IBM desenvolveu o SEQUEL (Structured
English Query Language).
Segunda verso do SEQUEL = SEQUEL/2, depois renomeada para SQL.
Portanto, SQL uma linguagem que prov o interface com um banco de dados (relacional), tanto para a
manipulao de dados quanto para o seu gerenciamento.
O SQL suportado por ampla gama de RDBMS , como por exemplo : Oracle, Sybase, SQL Server,
MySql, DB2.
Apesar de ser / existir um padro, existem diversas implementaes com variaes.
Alguns padres ANSI: SQL1 (1989) , SQL2 (1992) , SQL3.

30

Execuo de comandos SQL : mtodos


Os 3 primeiros mtodos so denominados ESTTICOS : Interativo, Embedded e Module

Interactive SQL (ou invocao direta) : (bulk process) permite que comandos sejam dados em
linha de comando e o resultado aparece na tela.

Embedded SQL : utilizada cdigo simblico em programas elaborados em linguagem hospedeira


(ex. C, Cobol, PL/I)); como tais comandos no so reconhecidos pelo compilador ou montador
hospedeiro, necessrio um pr-compilador (programa que detecta os comandos SQL e os
transforma em chamadas ao SGBD ); normalmente :
comandos SQL so especificados como procedimentos procedurais, delimitados por
EXEC SQL
............. declarao dos procedimentos
END EXEC
declarao de variveis onde dados acessados devem ser colocados feita por
EXEC SQL BEGIN DECLARE SECTION
............. declarao das variveis
END EXEC
Desvantagem : tratamento do conjunto de dados retornados um a um (linha por linha)

Module SQL : os statements SQL so compilados separadamente dos statements do cdigo do


programa na linguagem hospedeira; os dois programas-objeto gerados so linkeditados formando
um nico programa executvel.

Outros mtodos so DINMICOS :

Dynamic SQL : permite a criao dos statements (e sua sintaxe e suas variveis) durante a execuo
do programa : o string com o comando gerado em tempo de execuo e no em tempo de
codificao; 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 mtodo CLI (Call-Level
Interface).

EXEMPLOS :

31

SQL interativo

BASE DE DADOS

(SELECT *
FROM
TABELA_CLIENTE
)

Resultados

SQL Plus
Sistema
Operacional

SGBD
DB2

SELECT * FROM TABELA_CLIENTE

(RESULTADOS)

32

33

SQL dinmico

Consulta

BASE DE DADOS

Resultados

FileAid
Sistema
Operacional

SGBD
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
Save Edit Criteria Information:
Save Template Criteria On Execute
Criteria Dataset Name ===>
Member
===>
Max Rows to Select

===> 2000

===> NO

(Yes or No)

(* = ALL ROWS)

SEL COLUMN NAME


TYPE(LEN)
ORDER (A/D) WHERE
More: >
--- ------------------ ------------------ -----+---10----+---20----+
S__ CD_AGE
INTEGER
> 5
S__ NM_AGE
CHAR(15)
___ END_AGE
CHAR(30)
___ TEL_AGE
INTEGER
******************************* Bottom of data
********************************
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
000002
10 NOME AG 10
****** ************************** BOTTOM OF DATA

34

SQL embedded (aplicao on-line)

Resultados

Dados (informaes
para compor uma
consulta ao BD)

BASE DE DADOS

Sistema
Operacional

SGBD
DB2

(Resultados)

Aplicativo X (rodando sob CICS)


(transforma dados em consulta SQL)
consulta em SQL

(e faz o uso que quiser dos resultados)


Resultados

35

SQL embedded (aplicao batch)

BASE DE DADOS

Avisa que : Programa=X


Plano=xxxxx
LoadLib=dsn
Etc...
(no arquivo com ddname
SYSTSIN)

IKJEFT01
Sistema
Operacional

SGBD
DB2

Consulta
(no cdigo
executvel)

Resultados

Aplicativo X

consulta em SQL

Resultados (faz o uso que quiser deles)

36

SQL batch

BASE DE DADOS

Avisa que :
Programa=DSNTEP2
Plano=xxxxx
LoadLib=dsn
Etc...
(no arquivo com ddname
SYSTSIN)

IKJEFT01
Sistema
Operacional

SGBD
DB2

Resultados
(SYSPRINT)

Consulta
(no arquivo com
ddname SYSIN)

DSNTEP2
consulta em SQL

(RESULTADOS)

37

Resumo dos principais comandos SQL


Principais grupos de comandos SQL : DDL, DML e DCL

Alguns podem ser usados tanto (B) via DSNTEP2 (SQL batch) quanto (E) por programa em linguagem
hospedeira (embedded SQL), podendo apresentar ligeiras diferenas de sintaxe e / ou recursos
Outros podem ser usados somente (E) em embedded SQL

DDL (Data Definition Language) statements


CREATE = criar objetos no database
ALTER = alterar objetos (sua estrutura / caractersticas) do database
DROP = deletar objetos do database
COMMENT = inserir comentrios no data dictionary
GRANT = conceder privilgios de acesso de usurio ao database
RENAME = renomear objetos do database
REVOKE = revogar privilgios concedidos pelo GRANT

DCL (Data Control Language) statements


COMMIT = salvar efetivamente dados alterados / deletados / inseridos
SAVEPOINT = identificar um ponto numa transao para permitir posterior ROLLBACK
ROLLBACK = restaurar o database a um estado anterior (antes do ltimo COMMIT)
RECOVER = efetuar o recover (recuperao) de um database, tablespace, etc
SET TRANSACTION = altera as opes da transao

DML (Data Manipulation Language) statements


SELECT = efetua queries, cria tabela resultado e acessa suas linhas
Sem cursor : para acessar a tabela resultado quando ela devolve com certeza uma nica linha
Com cursor : para acessar a tabela resultado, linha por linha, quando ela devolve n linhas
OPEN = para abrir cursor (E)
FETCH = para acessar linha de cursor (E)
CLOSE = para fechar cursor (E)
INSERT = insere dados numa table
UPDATE = atualiza dados nas linhas de uma table
DELETE = deleta linhas de uma tabela
LOCK TABLE = controlar locks (concorrncia)
TRUNCATE = deleta todos os registros (e espaos alocados para eles) de uma table
WHENEVER = indica (deixa marcado) que o aplicativo deseja tratar determinadas condies que
ocorrerem, indicando o procedimento para onde deve ser feito um desvio (E)

Comandos declarativos auxiliares


INCLUDE = Indica ao pr compilador para buscar statements fonte em LIBs (E)
DECLARE = Para declarar estruturas relativas a tabelas e cursores (E)
Obs.:

DCLGEN = Processo via ISPF ou via IKJEFT01 para declarar estruturas relativas a tabelas (DECLAREs)
e linguagem hospedeira ; se for Cobol, define as variveis com nvel, nome, PIC, etc.

38

Outros conceitos
(DSPL - Database Stored Procedure Language) statements
Linguagens usadas nas stored procedures, para especificao de procedimentos / programas / rotinas a
rodar disparadas por triggers ou outros eventos; como chegaram bem posteriormente ao nascimento das
linguagens de query, ressentem-se pela falta de padres, e, por decorrncia, pela diversidade existente entre
os diversos s fornecedores.
(TCL - Transaction Control Language) statements
Em alguns contextos, comandos DCL so referenciados como TCL.

39

4 - DB2 em um programa COBOL


Diferenas no programa e conceitos associados

Os comandos DB2/SQL so incluidos / misturados / em linha com os comando COBOL

Os comandos DB2/SQL devem ser identificados por meio de delimitadores :


EXEC SQL no incio
comando
END-EXEC no fim

Convm especificar um DECLARE para cada table usada no programa (WorkingStorageSection):


EXEC SQL DECLARE nome_tabela TABLE (estrutura_tabela) END-EXEC
Deve haver a declarao de variveis Cobol para usar como emissoras ou receptoras em FETCHs
ou SELECTs;
Em geral usa-se a ferramenta / procedimento DCLGEN (pelo ISPF ou pelo IKJEFT01) para gerar
DECLARE de estrutura de table e declarao de estrutura Cobol da tabela

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 DECLAREs
Aps toda operao SQL deve-se testar o cdigo de retorno do DB2 referente a ela, disponvel na
varivel SQLCODE, pertencente SQLCA

40

Fluxo do processo de gerao do executvel


FONTE COBOL COM COMANDOS SQL EMBEDDED
(delimitados por EXEC SQL / END-EXEC)

Sada
DCLGEN

(PR-COMPILADOR)

Mensagens (erros / resultados da


anlise dos comandos)

(NO acessa o banco de dados)

Arquivo para BIND


= DBRM
= Data Base Request
Module
(dados para criar um
package)

Fonte cobol com


comandos SQL
asteriscados e transformados
em
comandos cobol CALL

COMPILADOR COBOL
NORMAL

Mensagens
(erros /
resultados da
compilao)
BINDER

Base de dados

Programa Objeto

LINKEDITOR

Data
Base

Mensagens
(erros /
resultados da
linkedio)

PACKAGE
(dados para
executar SQL
esttico)

PROGRAMA
EXECUTVEL

Execuo via DSNTEP2 / IKJEFT01 / Gerenciador DB2


41

42

Funes do Pr-compilador

Resolver os INCLUDEs , buscando-os na library indicada no JCL (ou que seja default); os
INCLUDES equivalem aos COPYs : INCLUDEs referem-se a dados para o DB2/SQL e so
resolvidos em tempo de pr-compilao; COPYs referem-se a dados (ou procedimentos) do Cobol e
so resolvidos em tempo de compilao.
Efetuar validao bsica de sintaxe dos comandos DB2/SQL baseando-se nos DECLARE e no em
dicionrio de dados (NO feita consulta ao banco de dados em tempo de pr-compilao)
Gerar de 2 arquivos :
Fonte COBOL puro (com os statements DB2/SQL transformados em CALLs ou comentados)
DBRM (Data Base Request Module) : membro de um PDS que tem somente os dados DB2/SQL

Funes do Binder

Bind = atar, amarrar, encadernar / empacotar = associao entre (cdigo objeto dos) statements SQL
do programa com o cdigo objeto do programa propriamente dito.
Converter o DBRM gerado pelo em um package ou plano (application plan).
Escolher os caminhos (paths) que sero usados para acessar os dados na base de dados
Efetuar alguma validao de autorizao para efetuar as operaes

Comandos ao Pr-compilador
INCLUDES

Cpia de declaraes de dados de biblioteca


COPYs so buscados pelo compilador em bibliotecas dele (durante a compilao)
INCLUDEs so buscados pelo pr-compilador em bibliotecas dele (durante a pr-compilao)
DATA DIVISION.
FILE SECTION.
...
COPY ...
WORKING-STORAGE SECTION.
...
COPY ...
....
EXEC SQL INCLUDE nome_membro END-EXEC
...
PROCEDURE DIVISION.
...
...
COPY ...
...
EXEC SQL INCLUDE nome_membro END-EXEC
...
EXEC SQL comando ... END-EXEC
...

43

DECLARE
Declara estruturas (lay-outs) de tabelas em SQL (usar na Working-Storage Section).
Deve ser colocado antes de qualquer referncia tabela (inclusive em DECLARE de cursor)
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
No comando ao pr-compilador. funo utilitria do ISPF ou do IKJEFT01
De forma anloga ao COPY (para o momento da compilao), usado para facilidade de
padronizao, o fonte gerado pelo DCLGEN tem sua maior utilidade no fato de que, uma vez
gerado e catalogado, todos os programas que forem utilizar uma tabela podem referenciar
declaraes padronizadas dando INCLUDE de dados fonte gerados por DCLGEN
Essas estruturas catalogadas so geradas por meio de funo utilitria DCLGEN (tem DB2I do
ISPF ou em batch por meio do comando DCLGEN do IKJEFT01)
As declaraes geradas pelo DCLGEN so :
em SQL (declarao da estrutura das tabelas) e
em Cobol (das variveis que iro ser usadas para receber dados na leitura ou para enviar dados
na gravao).
Exemplo de DCLGEN usando IKJEFT01 :
//RUNDB2 EXEC PGM=IKJEFT01,DYNAMNBR=20
//STEPLIB DD DSN=SYS1.DSNDB1D.SDSNLOAD,DISP=SHR
//
DD DSN=SYS1.DSNDB1D.RUNLIB.LOAD,DISP=SHR
//SYSTSPRT DD SYSOUT=*
//SYSOUT
DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DB1D)
DCLGEN TABLE(DB2T.ZZC900_CADAGE) LIBRARY('TORI243.T#RPC.SRC(ZZC900)') LANGUAGE(COBOL)
ACTION(REPLACE) /* OU ACTION(ADD) */ QUOTE
END

O DCLGEN vai gravar o seguinte contedo em DSVAABLB.DB2.COBOL(EPCV01A1):


******************************************************************
* DCLGEN TABLE(DB2DEPC.EPCV01A1_PAM_EPC)
*
*
LIBRARY(DSVAABLB.DB2.DCLGEN(EPCV01A1))
*
*
ACTION(REPLACE)
*
*
LANGUAGE(COBOL)
*
*
STRUCTURE(EPCV01A1)
*
*
APOST
*

44

* ... 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).
10 TS-ULT-ATU
PIC X(26).
10 CD-USU-ULT-ATU
PIC X(8).
10 CD-PGM-MAN
PIC X(8).
******************************************************************
* THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 7
*
******************************************************************

O mais comum que para incorporar as declaraes das estruturas sejam usados INCLUDEs (dos
membros da libraries gerados no DCLGEN); no exemplo, a tabela EPCV01A1 tem INCLUDE do
EPCV01A1 (membro da library gerado pelo DCLGEN) :
WORKING-STORAGE SECTION.
...
EXEC SQL INCLUDE SQLCA END-EXEC
EXEC SQL INCLUDE EPCV01A1 END-EXEC
...
PROCEDURE DIVISION.
...

O fonte gerado pelo pr compilador (que ser a entrada do compilador) o seguinte : :


*****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
*

45

******************************************************************
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).
10 TS-ULT-ATU
PIC X(26).
10 CD-USU-ULT-ATU
PIC X(8).
10 CD-PGM-MAN
PIC X(8).

46

SQLCA / SQLCODE

SQLCA (SQL Communication Area): rea de comunicao entre gerenciador DB2 e aplicativo
Declarao da SQLCA : na Working-Storage Section, em geral via INCLUDE
SQLCODE = varivel pertencente SQLCA
O INCLUDE da SQLCA gera o seguinte conjunto de declaraes :
01 SQLCA.
05 SQLCAID
05 SQLCABC
05 SQLCODE
05 SQLERRM.
49 SQLERRML
49 SQLERRMC
05 SQLERRP
05 SQLERRD
05 SQLWARN.
10 SQLWARN0
10 SQLWARN1
10 SQLWARN2
10 SQLWARN3
10 SQLWARN4
10 SQLWARN5
10 SQLWARN6
10 SQLWARN7
05 SQLEXT.
10 SQLWARN8
10 SQLWARN9
10 SQLWARNA
10 SQLSTATE

PIC X(8).
PIC S9(9) COMP-4.
PIC S9(9) COMP-4.
PIC S9(4) COMP-4.
PIC X(70).
PIC X(8).
OCCURS 6 TIMES
PIC S9(9) COMP-4.
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC

X.
X.
X.
X.
X.
X.
X.
X.

PIC
PIC
PIC
PIC

X.
X.
X.
X(5).

Exemplo de area para receber os return codes do SQL :


77

WS-COD

PIC 9999.

Importante o picture ser desta forma, para aparecer o sinal no display !!!!! Exemplo :
WORKING-STORAGE SECTION.
01 WS-COD PIC -9999.
...
EXEC SQL INCLUDE SQLCA END-EXEC
...
PROCEDURE DIVISION.
...
EXEC SQL comando ... END-EXEC
IF SQLCODE NOT = ZERO
MOVE SQLCODE TO WS-COD
DISPLAY ERRO!!! SQLCODE= WS-COD
END-IF
...

47

CUIDADO !!! Se for dado o DISPLAY direto do SQLCODE, aparece o seguinte :


SQLCODE
-1
-2
-3
-4
-180
-181
-311
-501
-530
-532
-803
-804
-805
-806
-807
-811
-904
-911
-913

exibido
0000J
0000K
0000L
0000M
0018}
0018J
0031J
0050J
0053}
0053K
0080L
0080M
0080N
0080O
0080P
0081J
0090M
0091J
0091L

SQLCODES mais comuns :


SQLCODE
-180 ou -181
-305
-311
-501
-530
-532
-803
-811
-904 ou 911
ou 913

Significado
Varivel para DATE, TIME ou TIMESTAMP errada
Necessrio colocar indicador de NULL
Insert ou Update de VARCHAR : valor do campo LEN invlido
Foi dado Fetch sem ter sido dado Open no cursor
Insert ou Update impossvel por constraint de Integridade Referencial
Delete impossvel por constraint de Integridade Referencial
Insert ou Update tentado com chave duplicada (linha j existente)
Select com tabela resultado com mais de uma linha (sem cursor)
Timeout ou recurso no disponvel (por lock, por exemplo)

48

SQLCA : detalhes

NAME
SQLCAID
SQLCABC
SQLCODE

SQLERRML
SQLERRMC

SQLERRP

SQLERRD
SQLERRD(1)

SQLERRD(2)

SQLERRD(3)

SQLERRD(4)

Data type
Char(8)

Field Values
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.
Integer
Contains the length of the SQLCA, 136.
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.
Smallint
Length indicator for sqlerrmc, in the range 0 through 70. 0 means that the value of sqlerrmc
is not relevant.
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.
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.
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.
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.
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.
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.
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
49

SQLERRD(5)

Integer

SQLERRD(6)

Integer

SQLWARN

Array

SQLWARN0
SQLWARN1

Char(1)
Char(1)

SQLWARN2
SQLWARN3
SQLWARN4

Char(1)
Char(1)
Char(1)

SQLWARN5
SQLWARN6
SQLWARN7

Char(1)
Char(1)
Char(1)

SQLWARN8

Char(1)

SQLWARN9

Char(1)

SQLWARN10

Char(1)

SQLSTATE

Char(5)

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.
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.
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.
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.
Blank if all other indicators are blank; contains W if at least one other indicator is not blank.
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.
Contains W if null values were eliminated from the argument of a function.
Contains W if the number of columns is not equal to the number of host variables.
Contains W if a prepared UPDATE or DELETE statement does not include a WHERE
clause.
Reserved for future use.
Contains W if the result of a date calculation was adjusted to avoid an impossible date.
Reserved for future use.
If CONNECT is invoked and successful, contains 'E' if the DYN_QUERY_MGMT database
configuration parameter is enabled.
Contains W if a character that could not be converted was replaced with a substitution
character.
Contains W if arithmetic expressions with errors were ignored during column function
processing.
Contains W if there was a conversion error when converting a character data value in one of
the fields in the SQLCA.
A return code that indicates the outcome of the most recently executed SQL statement.

50

Variveis

Dentro de embedded SQL statements : utiliza-se nomes de objetos que o SQL aceita ( o prcompilador quem vai analisar / resolver );
Variveis Cobol (que recebero dados de colunas ou das quais sero obtidos os dados para
inserir ou alterar nas colunas) : preceder com dois pontos. Exemplos:
:WS-NOM-CLI
:CODOPER

Nomes de colunas de tabelas : no colocar dois pontos; colocar o nome da coluna onde esteja o
dado desejado. Neste caso, caso seja necessrio qualificar, usar tabela coluna (o prcompilador no aceita OF ou IN). Exemplos:

WS-NOM-CLI

Ateno para as regras a respeito dos nomes de colunas de tabelas e para os nomes de variveis
Cobol, colocadas nos quadros ilustrativos dos exemplos a seguir !!!!
Nomes de colunas de tabelas

Exemplos :
EXEC SQL
SELECT CD_AGE, NM_AGE
FROM CADAGE
INTO :CADAGE.CD-AGE,
:CADAGE.NM-AGE
END-EXEC

VALE underscore, NO VALE hfen


NO TEM dois pontos (:) antes
Dentro de um comando SQL PODEM ser referenciadas
Fora de comando SQL (no meio de comandos Cobol)
NO podem ser referenciadas

Nomes de variveis Cobol

NO VALE Underscore , VALE hfen


TEM QUE TER dois pontos (:) antes
AQUI NO COMANDO SQL : Qualificao com pai filho e no com OF ou IN
FORA DO COMANDO SQL (no meio de comandos Cobol) : qualificao com OF ou IN
E NO com pai filho
EXEC SQL
SELECT CD_AGE, NM_AGE
FROM CADAGE
INTO :WS-CD-AGE,
:WS-NM-AGE
END-EXEC

Nomes de colunas de tabelas


Nomes de variveis Cobol

Declaraes de estruturas de tabelas : na WORKING-STORAGE SECTION


EXEC SQL
DECLARE ......
END-SQL.
51

5 Comandos DDL - Rpida viso


CREATE
Usado para criar objetos no database ; alguns exemplos de objetos :
CREATE
CREATE
CREATE
CREATE
CREATE
CREATE
CREATE
CREATE

CLUSTER
DATABASE
INDEX
PACKAGE
PROCEDURE
TABLE
USER
VIEW

Exemplo : para criao de uma TABLE :


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
);

Exemplos : para criao de INDEX :


CREATE UNIQUE INDEX DEPNUM ON DEPT (DEPNUME ASC);
CREATE INDEX EMPDEP ON EMP (DEPNUME ASC);

Exemplo : para criao de uma VIEW :


CREATE

CREATE
View
Apelido

view [(apelido [, apelido ]...)] AS subconsulta


[WITH CHECK OPTION [CONSTRAINT restrio]]
[WITH READ ONLY];

Cria a view
o nome da view
especifica nomes para as expresses selecionadas pela consulta da
view (O nmero de apelidos deve corresponder ao nmero de
expresses selecionadas pela view).
52

uma instruo SELECT completa (pode-se usar apelidos para as


colunas na lista SELECT).
especifica que somente linhas acessveis view podem ser inseridas ou
atualizadas.
o nome atribudo restrio CHECK OPTION
assegura que as operaes DML no possam ser executadas nesta
view.

Subconsulta
WITH CHECK OPTION
Restrio
WITH READ ONLY

CREATE VIEW
AS SELECT
FROM
WHERE

EMPVU10
EMPNO, ENAME,
EMP
DEPTNO = 10;

JOB

ALTER
Usado para alterar objetos (sua estrutura / caractersticas) do database ; alguns objetos:
ALTER
ALTER
ALTER
ALTER
ALTER
ALTER
ALTER
ALTER

CLUSTER
DATABASE
INDEX
PACKAGE
PROCEDURE
TABLE
USER
VIEW

Exemplo para alterar TABLE, incluindo coluna :


ALTER

TABLE

DEPT ( ADD

DEPSALA

DECIMAL (10,2) );

DROP
Usado deletar objetos do database ; alguns exemplos de objetos :
DROP
DROP
DROP
DROP
DROP
DROP
DROP

CLUSTER
INDEX
PACKAGE
PROCEDURE
TABLE
USER
VIEW

Exemplo para deletar TABLE :


DROP

TABLE

EMP;

COMMENT
Usado para inserir comentrios no data dictionary
53

GRANT
Usado para conceder privilgios de acesso de usurio ao database
Sintaxe:
GRANT <privileges> ON <table name>
TO <grantee> [ { <comma> <grantee> }... ]
[ WITH GRANT OPTION ]

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:
REPLACE

view [(apelido [, apelido ]...)] AS subconsulta


[WITH CHECK OPTION [CONSTRAINT restrio]]
[WITH READ ONLY];

View
Apelido

Subconsulta
WITH CHECK OPTION
Restrio
WITH READ ONLY

o nome da view
especifica nomes para as expresses selecionadas pela consulta da
view (O nmero de apelidos deve corresponder ao nmero de
expresses selecionadas pela view).
uma instruo SELECT completa
especifica que somente linhas acessveis view podem ser inseridas ou
atualizadas.
o nome atribudo restrio CHECK OPTION
assegura que as operaes DML no possam ser executadas nesta
view.

Exemplo :
REPLACE VIEW
AS SELECT
FROM
WHERE

EMPVU10R
EMPNO, ENAME, JOB
EMP
DEPTNO = 10;

54

REVOKE
Usado para revogar privilgios concedidos pelo GRANT
Sintaxe:
REVOKE [ GRANT OPTION FOR ] <privileges> ON <object name>
FROM <grantee> [ { <comma> <grantee> }... ] <drop behavior>

55

6 Comandos DCL Rpida viso; Transaes de Banco de Dados


Conceito de transao

Uma transacao comea quando for executada a primeira instruo SQL executvel.
Ela termina com um dos seguintes eventos:
COMMIT ou ROLLBACK emitida
Instruo DDL (proibido...) ou DCL (COMMIT, SAVEPOINT, ROLLBACK) executada
(commit automtico)
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

Controle de transao : comandos DCL


COMMIT
Sintaxe : COMMIT
Funcao : Torna permanentes todas as alteraes de dados pendentes
SAVEPOINT
Sintaxe : SAVEPOINT nome
Funcao : Marca um ponto de gravao dentro da transao atual, identificando-o com nome
ROLLBACK
Sintaxe : ROLLBACK [TO SAVEPOINT nome]
Funcao :

ROLLBACK (sem parametros) finaliza a transao atual, NAO EFETIVANDO nenhuma alteraao
pendente desde o incio da transao (primeiro comando SQL do programa ou ltimo COMMIT);
ROLLBACK TO SAVEPOINT nome finaliza a transao atual, NAO EFETIVANDO nenhuma
alteracao pendente DESDE o SAVEPOINT indicado (somente efetiva as pendentes ATE o
SAVEPOINT)
Inicio da transacao
INSERT
Chave 15

COMMIT

Final da transacao
UPDATE
Chave 11

SAVEPOINT A

INSERT
Chave 16

DELETE
Chave 12

SAVEPOINT B

ROLLBACK

56

Se o ROLLBACK for solicitado SEM REFERENCIA ao SAVEPOINT,


sero desfeitos :
INSERT chave 15
UPDATE chave 11
INSERT chave 16
DELETE chave 12
portanto, somente sero efetivadas as operaes efetuadas at o COMMIT (que as efetivou)
Se o ROLLBACK for solicitado indicando SAVEPOINT B,
sero desfeitos :
DELETE chave 12
portanto, ficaro efetivadas as operaes :
efetuadas ate o COMMIT +
INSERT chave 15
+
UPDATE chave 11
+
INSERT chave 16
Se o ROLLBACK for solicitado indicando SAVEPOINT A,
sero desfeitos :
UPDATE chave 11
INSERT chave 16
DELETE chave 12
portanto, ficarao efetivadas as operaes :
efetuadas ate o COMMIT +
INSERT chave 15
Estado dos dados antes de COMMIT ou ROLLBACK
O Estado anterior dos dados pode ser recuperado
O usurio atual pode revisar os resultados das operaes DML usando a instruo SELECT.
Outros usurios no podero ver resultados das instrues DML do usurio atual.
As linhas afetadas so bloqueadas, outros usurios no podero alterar os dados dentro das linhas
afetadas.
Estado dos dados aps COMMIT
As alteraes nos dados so feitas permanentemente no banco de dados.
O estado anterior dos dados perdido permanentemente.
Todos os usurios podem ver os resultados.
As linhas afetadas so desbloqueadas, essas linhas esto disponveis para serem manipuladas por outros
usurios.
Todos os savepoints so apagados.
57

Estado dos dados aps o ROLLBACK


Descarte todas as alteraes pendentes usando a instruo ROLLBACK.
As alteraes nos dados so desfeitas.
O estado anterior dos dados restaurado.
As linhas afetadas so desbloqueadas.
Exemplos
UPDATE
SET
WHERE

EMP
DEPTNO = 10
EMPNO = 7782;

COMMIT;
DELETE FROM TEST;
ROLLBACK;
DELETE FROM TEST
WHERE
ID = 100;
SELECT *
FROM TEST
WHERE ID = 100;
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.

**************************************************************

58

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 necessrio.
Sintaxe :
SELECT
[ | DISTINCT ou ALL |
coluna(s)-resultado
FROM tab_origem
[ WHERE condicao-filtro ]
[ GROUP BY coluna(s) ]
[ HAVING coluna(s) ]
[ ORDER coluna(s) ]
INTO varivel-working-storage
[ OPTIMIZE FOR n ROW ]
[ FETCH FIRST [n] ROW ONLY ]

Tem INTO aqui

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.
...

59

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
...
...

60

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 so disponibilizadas (em arquivo tipo texto ou em relatrio /
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 ( semelhana de uma arquivo sequencial ; o cursor como se fosse um arquivo
sequencial virtual : cada linha da tabela resultado seria equivalente a um registro lgico.)

Declarar o Cursor na Working-Storage Section (comando SQL DECLARE)


...
WORKING-STORAGE SECTION.
...
EXEC SQL
DECLARE C1 CURSOR FOR
SELECT CD_AGE, NM_AGE
FROM DB2T.ZZA500_CADAGE
ORDER BY NM_AGE
END-EXEC

Comandar OPEN, FETCH e CLOSE do cursor na Procedure Division :


o Para obter as linhas precisa inicialmente abrir (OPEN) o cursor
o Para acessar cada linha da tabela resultado (aps o OPEN), dar o comando FETCH : ele
disponibilizar uma linha do cursor para o aplicativo processar
o Aps os FETCHs precisa finalizar com CLOSE do cursor
o Precisa clusula INTO no FETCH, para indicar em quais variveis sero colocados os
valores de cada coluna da linha
PROCEDURE DIVISION.
...
EXEC SQL OPEN 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
...
EXEC SQL FETCH C1 INTO
:CADAGE.CD-AGE, :CADAGE.NM-AGE,
END-EXEC
EVALUATE SQLCODE
WHEN
0 DISPLAY LINHA LIDA DA TABELA
WHEN 100 DISPLAY EOF DA TABELA RESULTADO DO SELECT
MOVE S TO W-FLAG-PARAR
WHEN OTHER DISPLAY ERRO NO FETCH
MOVE S TO W-FLAG-PARAR
END-EVALUATE
...

61

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
...

DECLARE , OPEN, CLOSE, FETCH


DECLARE

cursor-name

CURSOR [ WITH HOLD ]


FOR select-statement

cursor-name
Indica o nome do cursor (para referncia no Open, Fetch e Close).
WITH HOLD
Indica que os recursos (linhas) devem ficar disponveis mesmo aps o trmino de uma
transao DB2
Transaes que terminam com COMMIT:
o Cursores que tenham WITH HOLD na definio e que estejam abertos quando for
dado o COMMIT permanecem abertos mesmo depois do COMMIT; ele fica
posicionado na prxima linha a ser acessada
o Aps o COMMIT, somente podem ser dados os comandos FETCH e CLOSE para o
cursor
Transaes que terminam com ROLLBACK: todos os cursores abertos so fechados
(no podem ser usados depois do ROLLBACK)
FOR

Especifica o SELECT que deve ser efetuado para obter uma result table, da qual sero
obtidas as linhas que sero acessadas pelo cursor.
Sintaxe do SELECT declarado no Cursor :
SELECT
[ | DISTINCT ou ALL |
coluna(s)-resultado
FROM tab_origem
[ WHERE condicao-filtro ]
[ GROUP BY coluna(s) ]
[ HAVING coluna(s) ]
[ ORDER coluna(s) ]
INTO varivel-working-storage
[ OPTIMIZE FOR n ROW ]
[ FETCH FIRST [n] ROW ONLY ]

Tem INTO aqui

Exemplos :
62

S DECLARE :
DECLARE C1 CURSOR FOR
SELECT DEPTNO, DEPTNAME, MGRNO
FROM DEPARTMENT
WHERE ADMRDEPT = 'A00';
DECLARE UP_CUR CURSOR FOR
SELECT PROJNO, PRSTDATE, PRENDATE
FROM PROJECT
FOR UPDATE OF PRSTDATE, PRENDATE;

DECLARE + + OPEN + FETCH + CLOSE


...
WORKING-STORAGE SECTION.
...
EXEC SQL
DECLARE C1 CURSOR FOR
SELECT CD_AGE, NM_AGE
FROM DB2T.ZZA500_CADAGE
ORDER BY NM_AGE
END-EXEC
...
...
PROCEDURE DIVISION.
...
...
EXEC SQL OPEN 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
...
EXEC SQL FETCH C1 INTO
:CADAGE.CD-AGE, :CADAGE.NM-AGE,
END-EXEC
Loop de leitura
EVALUATE SQLCODE
WHEN
0 DISPLAY LINHA LIDA DA TABELA
WHEN 100 DISPLAY EOF DA TABELA RESULTADO DO SELECT
MOVE S TO W-FLAG-PARAR
WHEN OTHER DISPLAY ERRO NO FETCH
MOVE S TO W-FLAG-PARAR
END-EVALUATE
...
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
...
...

63

OPEN

nome_cursor

nome_cursor : indica o nome do cursor (declarado por DECLARE).


CLOSE

nome_cursor

nome_cursor : indica o nome do cursor (declarado por DECLARE).


FETCH

nome_cursor

INTO

lista_variveis_receptoras

nome_cursor : indica o nome do cursor (declarado por DECLARE).


INTO

Especifica as variveis dentro das quais ser colocado o contedo de cada coluna
solicitada no DECLARE
Deve haver uma varivel para cada coluna
As variveis devem ser especificadas na mesma ordem em que as colunas foram
especificadas no DECLARE
As variveis deve obrigatoriamente ter PIC compatvel com os data-types da coluna
Se a quantidade de variveis receptoras for menor que a quantidade de colunas, na
varivel SQLWARN3 de SQLDA colocado W
Se a quantidade de variveis receptoras for maior que a quantidade de colunas no
dado nenhum aviso
Ao efetuar uma tentativa de obter linha quando todas j foram obtidas, colocado +100
no SQLCODE e 02000no SQLSTATE ; as variveis receptoras no so 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

64

END-PERFORM
...
EXEC SQL
CLOSE C1
END-EXEC

65

SELECT uso batch no DSNTEP2

Para efetuar Query


Execuo batch de uma query SQL : a query lido via SYSIN e o resultado impresso na SYSPRINT
Resultados (tabela resultado) so devolvidos em spool (SYSPRINT; podem ser direcionados para
DSN=......., mas precisariam ser re-formatados para uso estruturado)
No tem clusula INTO
Em geral usado para desenvolvimento
Sintaxe :
SELECT
[ | DISTINCT | ALL |
coluna(s)-resultado
FROM tab_origem
[ WHERE condicao-filtro ]
[ GROUP BY coluna(s) ]
[ HAVING coluna(s) ]
[ ORDER coluna(s) ]
[ OPTIMIZE FOR n ROW ]
[ FETCH FIRST [n] ROW ONLY ]

No tem INTO aqui


(para SQL batch)

Exemplo :
SELECT CD_AGE_SLD, SLD_CLI AS VALOR_DEBITO
FROM DB2T.ZZZ333_SLDNEG;

66

Parmetros do SELECT (Embedded / Dsntep2)


Importante :
Na especificao de parmetros que sejam uma lista de elementos (para especificar uma relao de colunas,
por exemplo), deve-se colocar vrgula separando um elemento de outro (mas no colocar vrgula aps o
ltimo elemento, antes do prximo parmetro ou do final do comando). Exemplo :
SELECT COLUNA1 , COLUNA2 , COLUNA3

FROM TABEXEMPLO

DISTINCT ou ALL refere-se a QUAIS LINHAS devem formar a tabela resultado


Indica se para trazer linhas com contedo duplicado (ALL) ou no (DISTINCT)
Se for especificado DISTINCT , quando houver linhas com contedo duplicado, somente a primeira
devolvida (entregue) pelo SELECT.
Se for especificado ALL, o SELECT entrega TODAS as linhas, inclusive as que tiverem dados em
duplicidade.
Se no for especificado nenhum dos dois , assume ALL
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_temporrio]
ou
funo
[AS nome_temporrio]
ou
expresso
[AS nome_temporrio]
Pode-se atribuir nomes (temporrios) aos elemento(s) resultado, utilizando a clusula AS :
SELECT COUNT(*) AS QUANTAS_LINS FROM .......

Neste caso a coluna da tabela resultado que ir ter a informao COUNT(*) ter o
nome de QUANTAS_LINS .
Se no fosse especificada a clusula AS com o nome QUANTAS_LINS, a referida
coluna no teria nome
SELECT MAX(SALARIO) AS MAIOR_SALARIO FROM ......
SELECT (SALARIO * 1.2) AS COM_REAJUSTE FROM ......

Se entre os elementos que compem a tabela-resultado for especificado uma funo que faa tratamento
de grupos de linhas , necessrio :
especificar as colunas como coluna(s)-resultado
e
especificar a clusula GROUP BY indicando as mesmas colunas como elementos chave de
agrupamento
As funes que tratam grupos de linhas (funes agregadas) so :

COUNT(coluna)
= retorna o nmero (quantidade) de colunas que sejam NOT NULL .
COUNT(*)
= retorna o nmero (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 somatria de todos os valores que a coluna tenha em todas suas linhas
AVG(coluna) = retorna a mdia aritmtica de todos os valores que a coluna tenha em todas suas linhas

67

FROM tab_origem
pode-se especificar :
nome de uma tabela
nome de mais de uma tabela
outro SELECT (na verdade uma result table)
WHERE condio-filtro (de linhas individuais)

pode-se especificar condicao


ou NOT condicao
pode-se especificar os conectores logicos AND e/ou OR para compor condicoes
a especificao de uma condio deve ser feita da seguinte forma : dado operador operando
dado = pode-se especificar coluna ou funo ou expresso a ser comparada com operando
operador = indica o teste a efetuar; pode ser:
Operador
IS NULL
=
<>

Tipo de comparao
nulo
Igual a
No igual a (diferente de)

<

Menor que

<=
>=
>
>=
<=
LIKE

Menor que ou Igual a (No maior


Maior que ou Igual a (No menor
Maior que
Maior que ou Igual a (No menor
Menor que ou Igual a (No maior
Contenha o valor indicado

OR

Conector de condies lgico OU

AND

Conector de condies lgico E

BETWEEN
IN (X, Y, Z)

Entre 2 valores (faixa de domnios)


Igual a algum valor da lista

que)
que)
que)
que)

Exemplo
CEP IS NULL
CEP = '01313001'
CEP < > '01313001'
CEP < 04000000
AVG(SALDO) < 10000
IDADE < = 16
IDADE > = 21
SALARIO > 2000
SALARIO > = 5000
SALARIO < = 5000
NOME LIKE '%SILVA%'
DATANASC < '1969- 07-21' OR
SALARIO < 16000
DATANASC < '1969- 07-21' AND
SALARIO < 16000
IDADE BETWEEN 16 AND 18
SEXO IN ('M', 'F', 'S', G)

Operador LIKE ::
LIKE
LIKE
LIKE
LIKE
LIKE

%literal%
literal%
%literal
literal_
_literal

:
:
:
:
:

se o contedo tiver a literal em qualquer posio


se o contedo tiver a literal no incio (posio 1)
se o contedo tiver a literal no fim (terminar com ela)
se o contedo tiver a literal em qualquer posio, seguida de qualquer caracter
se o contedo tiver a literal em qualquer posio, precedida de qualquer caracter

operando = depende do operador; pode ser:


| NULL | literal | literal com wildcards | literal AND literal | lista |
GROUP BY coluna(s)-agrupamento
indica-se a(s) coluna(s) cujas linhas devem ser agrupadas para que do grupo seja extraido um resultado.
Obrigatrio se for usada funco(es) na(s) coluna(s) resultado. Deve-se especificar os nomes das colunas
(no de funo) indicados tambm na(s) coluna(s) resultado .
Se usada, a clusula GROUP BY deve seguir a clusula FROM (e a WHERE, se houver), e deve preceder a
clusula ORDER BY.
Pode-se, tambm, agrupar mais de um grupo de colunas.
HAVING condio-filtro (de grupos de linhas)
68

semelhante ao WHERE, mas aplicado a grupos de linhas (relativos a colunas usadas em funes agregadas) ;
as funes agragadas devem ter sido especificadas como coluna(s) resultado.
ORDER coluna(s)-ordenao

Especificar a ordem de classificao.


Pode ser feita atravs do nome da coluna, ou de um inteiro que indique seu nmero, ou uma
expresso.
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 incio (se a ordem solicitada for descendente).
INTO

Nomes das variveis onde sero colocados os valores obtidos da tabela.


Especificar na execuo do DB2 chamado por programa em linguagem hospedeira.
No especificar na execuo 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
FROM
ORDER BY
OPTIMIZE

CODFUNC, NOMEFUNC, SALARIO


TABFUNCS
SALARIO DESC
FOR 20 ROWS;

FETCH FIRST [n] ROW ONLY

Indica que deve ser retornado pelo DB2 somente as n primeiras linhas da tabela resultado.
Pode-se especificar :
FETCH FIRST ROW ONLY
= traz somente a primeira linha
FETCH FIRST ROWS ONLY
= traz somente a primeira linha
FETCH FIRST 1 ROW ONLY
= traz somente a primeira linha
FETCH FIRST 1 ROWS ONLY
= traz somente a primeira linha
FETCH FIRST n ROW ONLY
= traz somente as n primeiras linhas
FETCH FIRST n ROWS ONLY
= traz somente as n primeiras linhas
Exemplos :
Para obter os 10 maiores salrios de uma empresa :
SELECT
CODFUNC, NOMEFUNC, SALARIO
FROM
TABFUNCS
ORDER BY SALARIO DESC
FETCH FIRST 10 ROWS ONLY;

equivalente a
SELECT
FROM

CODFUNC, NOMEFUNC, SALARIO


TABFUNCS A
69

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 salrios de uma empresa :
SELECT
CODFUNC, NOMEFUNC, SALARIO
FROM
TABFUNCS.EMP
ORDER BY SALARIO
FETCH FIRST 5 ROWS ONLY;

70

Exemplos sintticos do SELECT


SELECT coluna(s) FROM tab_origem
Devolve :
Colunas : as indicadas
Linhas : todas (inclusive as duplicadas)
Ordem : chave primria
SELECT ALL coluna(s) FROM tab_origem
Devolve : idem anterior (ALL refere-se a TODAS as linhas, inclusive as duplicadas)
ou seja :
Colunas : as indicadas
Linhas : todas (inclusive as duplicadas)
Ordem : chave primria
SELECT DISTINCT coluna(s) FROM tab_origem
Devolve :
Colunas : as indicadas
Linhas : elimina as que tem dados duplicados na(s) coluna(s)
Se tiver mais de uma linha da result table com dados iguais na(s)
coluna(s) resultado, entrega somente a primeira ocorrncia
Ordem : chave primria
SELECT * FROM tab_origem
Devolve :
Colunas : todas
Linhas : todas (inclusive as duplicadas)
Ordem : chave primria
SELECT ALL * FROM tab_origem
Devolve : idem anterior (ALL refere-se a TODAS as linhas, inclusive as duplicadas)
ou seja :
Colunas : todas
Linhas : todas (inclusive as duplicadas)
Ordem : chave primria
SELECT DISTINCT * FROM tab_origem
Devolve :
Colunas : todas
Linhas : elimina as que tem dados duplicados na(s) coluna(s)
Se tiver mais de uma linha da result table com dados iguais na(s)
coluna(s) resultado, entrega somente a primeira ocorrncia
Ordem : chave primria
SELECT [ | DISTINCT | ALL | ]
{ | * | coluna(s) | }
FROM tab_origem
WHERE condicao-filtro
Devolve :
Colunas : conforme solicitado
Linhas : aquelas que satisfizerem a condio-filtro
Ordem : chave primria
SELECT [ | DISTINCT | ALL | ]
71

{ | * | coluna(s) | }
FROM tab_origem
WHERE condicao-filtro
Devolve :
Colunas : conforme solicitado
Linhas : aquelas que satisfizerem a condio-filtro
Ordem : chave primria
SELECT [ | DISTINCT | ALL | ]
{ | * | coluna(s) | }
FROM tab_origem
GROUP BY coluna(s)
Devolve :
Colunas : conforme solicitado
Linhas : aquelas que satisfizerem a condio-filtro
Ordem : chave primria
SELECT [ | DISTINCT | ALL | ]
{ | * | coluna(s) | }
FROM tab_origem
GROUP BY coluna(s)
WHERE condicao-filtro
Devolve :
Colunas : conforme solicitado
Linhas : aquelas que satisfizerem a condio-filtro
Ordem : chave primria
SELECT [ | DISTINCT | ALL | ]
{ | * | coluna(s) | }
FROM tab_origem
GROUP BY coluna(s)
WHERE condicao-filtro
ORDER coluna(s)
Devolve :
Colunas : conforme solicitado
Linhas : aquelas que satisfizerem a condio-filtro
Ordem : chave primria

72

Exemplos de uso (sem INTO)


SELECT * FROM TABCLI
Devolve :
Colunas : todas da tabela TABCLI
Linhas : todas (inclusive as duplicadas)
Ordem : chave primria
SELECT ALL * FROM TABCLI
Devolve :
Colunas : todas da tabela TABCLI
Linhas : todas (inclusive as duplicadas)
Ordem : chave primria
SELECT DISTINCT * FROM TABCLI
Devolve :
Colunas : todas da tabela TABCLI
Linhas : as que no tiverem dados duplicados +
a primeira de cada grupo que tenha dados duplicados
Ordem : chave primria
SELECT COD_CLI, NOME_CLI FROM TABCLI
Devolve :
Colunas : COD_CLI e NOME_CLI da tabela TABCLI
Linhas : todas (inclusive as duplicadas)
Ordem : chave primria
SELECT ALL COD_CLI, NOME_CLI FROM TABCLI
Devolve :
Colunas : COD_CLI e NOME_CLI da tabela TABCLI
Linhas : (inclusive as duplicadas)
Ordem : chave primria
SELECT DISTINCT COD_CLI, NOME_CLI FROM TABCLI
Devolve :
Colunas : COD_CLI e NOME_CLI da tabela TABCLI
Linhas : as que no tiverem dados duplicados +
a primeira de cada grupo que tenha dados duplicados
Ordem : chave primria
SELECT JOB, MIN(SALARY), MAX(SALARY) FROM EMPLOYEE GROUP BY JOB

Devolve :

Colunas : JOB, valor mnimo de SALARY, valor mximo de SALARY,


da tabela EMPLOYEE
Linhas : TODAS
Ordem : chave primria

73

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 :

SELECT

+
+
+
+
+
+
+

Colunas : TBNAME (coloca na varivel W-NOMETAB) e


NAME (coloca na varivel W-NOMECOL) e
COLTYPE (coloca na varivel W-TIPOCOL) e
COLNO (coloca na varivel W-NROCOL)
da tabela SYSIBM.SYSCOLUMNS
Linhas : a que tiver TBNAME = TABCLI e COLNO = 1

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

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

74

Exemplos de Select no DSNTEP2


Funo

Comando
Resultado

Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Todas
Colunas : Todas
SELECT * FROM DB2T.ZZZ102_SLDCLI;
+-------------------------------------------------------------------------------------------------------------+
|
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)

Funo

Comando
Resultado

Funo

Comando
Resultado

Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Todas
Colunas : CD_AGE_SLD, CD_CLI
SELECT CD_AGE_SLD, CD_CLI FROM DB2T.ZZZ102_SLDCLI;
+---------------------------------+
|
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)

Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Aquelas cuja coluna CD_CLI tenha 320
Colunas : Todas
SELECT * FROM DB2T.ZZZ102_SLDCLI WHERE CD_CLI = 320;
+-------------------------------------------------------------------------------------------------------------+
|
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)

Funo

Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Aquelas cuja coluna CD_CLI tenha 320
Colunas : CD_CLI, NM_CLI
75

Comando
Resultado

Funo

Comando
Resultado

SELECT CD_CLI, NM_CLI FROM DB2T.ZZZ102_SLDCLI WHERE CD_CLI = 320;


+------------------------------------------------------+
|
CD_CLI
|
NM_CLI
|
+------------------------------------------------------+
1_|
320 | BIA MOREIRA FILHA
|
+------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF
1 ROW(S)

Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Todas
Colunas : NM_CLI , e a coluna derivada [no existente, sem nome, resultado da aplicao de operao sobre
coluna(s) existentes] resultante da soma entre as colunas VL_SDO_CLI e TEL_CLI
SELECT NM_CLI, (VL_SDO_CLI + TEL_CLI) FROM DB2T.ZZZ102_SLDCLI;
+----------------------------------------------------------+
|
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)

Funo

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

Funo

5 ROW(S)

Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
76

Comando

Resultado

Linhas : Todas (se houver linhas em duplicidade, exibir a primeira e as demais eliminar)
Colunas : CD_AGE_SLD, MINIMO (Coluna derivada resultante da determinao do menor valor existente na
coluna VL_SDO_CLI), sem nome (Coluna derivada resultante da determinao do maior valor existente em
VL_SDO_CLI), MEDIA (Coluna derivada resultante da determinao da mdia aritmtica dos valores
existentes na coluna VL_SDO_CLI)
Observar que CD_AGE_SLD e os mnimo, mximo e mdia de VL_SDO_CLI devem ser agrupados por
CD_AGE_SLD.
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;
+-------------------------------------------------------------------------------+
|
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)

Funo

Selecionar
Tabela : DB2T.ZZZ102_SLDCLI
Linhas : Todas , ordenados por nome(NM_CLI)
Colunas : CD_AGE_SLD e NM_CLI
FROM DB2T.ZZZ102_SLDCLI
Comando SELECT CD_AGE_SLD, NM_CLI
Resultado

ORDER BY NM_CLI;

+------------------------------------------------------+
|
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)

Funo

Selecionar
Tabela : DB2T.ZZZ100_CADAGE
Linhas : (a nica da tabela resultado)
Colunas : Coluna derivada resultante da determinao de count(*) : quantidade de linhas
Comando SELECT COUNT(*) FROM DB2T.ZZZ100_CADAGE;
Resultado
+----------------+
|
|
+----------------+
1_|
33 |
+----------------+
SUCCESSFUL RETRIEVAL OF

1 ROW(S)

77

Funo

Comando
Resultado

Funo

Comando
Resultado

Funo

Comando
Resultado

Funo

Comando
Resultado

Selecionar
Tabela : DB2T.ZZZ100_CADAGE
Linhas : (a nica da tabela resultado)
Colunas : Coluna derivada resultante da determinao de count(distinct NM_AGE) : quantidade de linhas sem
repetio
SELECT COUNT(DISTINCT NM_AGE) FROM DB2T.ZZZ100_CADAGE;
+----------------+
|
|
+----------------+
1_|
29 |
+----------------+
SUCCESSFUL RETRIEVAL OF

1 ROW(S)

Selecionar
Tabela : DB2T.ZZZ100_CADAGE
Linhas : (a nica da tabela resultado)
Colunas : Coluna derivada resultante da determinao de count(*) where CD_AGE IS NULL : quantidade de
linhas em que CD_AGE nula.
SELECT COUNT(*) FROM DB2T.ZZZ100_CADAGE WHERE CD_AGE IS NULL;
+----------------+
|
|
+----------------+
1_|
0 |
+----------------+
SUCCESSFUL RETRIEVAL OF

1 ROW(S)

Selecionar
Tabela : DB2T.ZZZ100_CADAGE
Linhas : (a nica da tabela resultado)
Colunas : Coluna derivada resultante da determinao de count(*) where CD_AGE IS NOT NULL :
quantidade de linhas em que CD_AGE no nula.
SELECT COUNT(*) FROM DB2T.ZZZ100_CADAGE WHERE CD_AGE IS NOT NULL;
+----------------+
|
|
+----------------+
1_|
29 |
+----------------+
SUCCESSFUL RETRIEVAL OF

1 ROW(S)

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 cdigo de funcionrio que seja um dos que
faam parte da tabela resultado do primeiro SELECT
Colunas : todas
SELECT * FROM EMP_ACT
WHERE CODFUNC IN (SELECT CODFUNC FROM FUNCS WHERE DEPTO = 'VENDAS')
Tabela resultado com todas as colunas de EMP_ACT e cujas linhas so de funcionrios que estejam cadastrados como
sendo do depto de VENDAS em FUNCS

78

Funo
Comando

Efetuar Join das tabelas EMP_ACT e EMPLOYEE, selecionando todas as colunas da tabela EMP_ACT, e a
coluna LASTNAME da tabela EMPLOYEE.
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 so
aquelas em que h correspondncia entre o codigo do funcionrio (EMPNO) nas duas tabelas

Funo
Comando

Efetuar Join das tabelas EMPLOYEE e DEPARTMENT, selecionando EMPNO, LASTNAME e WORKDEPT
na tabela EMPLOYEE e DEPTNO na tabela DEPARTMENT, de todos os funcionrios com BIRTHDATE
anterior a 1930.
SELECT EMPNO, LASTNAME, WORKDEPT, DEPTNAME
FROM EMPLOYEE, DEPARTMENT
WHERE WORKDEPT = DEPTNO
AND YEAR(BIRTHDATE) < 1930

Resultado

Tabela resultado com 4 colunas e cujas linhas so aquelas em que h correspondncia entre o codigo do departamento
nas duas tabelas e em que o ano da data de nascimento do funcionrio seja < 1930

Funo

Efetuar Join das tabelas DB2T.ZZZ101_AGECLI e DB2T.ZZZ100_CADAGE , selecionando codigo de


agencia e nome de agencia.
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;

Comando

Resultado

Tabela resultado com agencias e seus respectivos nomes

79

UPDATE
UPDATE - Uso batch no DSNTEP2

Para efetuar atualizao de dados em tabelas


Atualiza os dados colocando como novo contedo o especificado na clusula SET (literal ou
expresso); pode ser alterado para NULL
Atualiza os dados nas linhas que satisfizerem a(s) condio(es) especificada(s) no WHERE
Se a clusula WHERE for omitida, sero alteradas TODAS as linhas.
Se houver algum erro durante a atualizao, ela interrompida, e as colunas j alteradas no so
restauradas.
Se o update for bem sucedido, colocado na a varivel SQLERRD(3) a quantidade de linhas alteradas.
UPDATE DB2T.ZZZ102_SLDCLI
SET VL_SDO_CLI = 11
WHERE VL_SDO_CLI = 0;
***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)

Se listarmos as linhas aps o UPDATE veremos que foram alteradas :


SELECT CD_CLI, VL_SDO_CLI
FROM DB2T.ZZZ102_SLDCLI;
***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)

80

UPDATE - Uso batch em Cobol

Para efetuar atualizao de dados em tabelas


*------------------------------------------------------*
* 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

81

ELSE
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
*-------------------------------------------------------

82

INSERT
INSERT - Uso batch no DSNTEP2

Utilizado para inserir linhas numa tabela.


INSERT INTO DB2T.ZZZ100_CADAGE
(CD_AGE, NM_AGE, END_AGE, TEL_AGE)
VALUES (77,'PARI','RUA XX 555',5555678);
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)

Se listarmos as linhas aps o INSERT veremos que foram inseridas :


***INPUT STATEMENT:
SELECT *
FROM DB2T.ZZZ100_CADAGE
WHERE CD_AGE = 77;
+-----------------------------------------------------------------------------------+
|
CD_AGE
|
NM_AGE
|
END_AGE
| TEL_AGE
|
+-----------------------------------------------------------------------------------+
1_|
77 | PARI
| RUA XX 555
|
5555678 |
+-----------------------------------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF

1 ROW(S)

83

INSERT - Uso batch em Cobol

Utilizado para inserir linhas numa tabela.


*
* DECLARACAO ESTRUTURA EPCV51A1_LFI_PAT
*
EXEC SQL INCLUDE EPCV51A1 END-EXEC.
*...
PROGRAMA-EPCXB54
SECTION.
PERFORM INICIAR.
PERFORM PROCESSAR.
PERFORM TERMINAR.
IF WS-RETURN-CODE NOT EQUAL ZERO
GO TO ROLLBACKAR
END-IF.
STOP RUN.
ROLLBACKAR.
DISPLAY 'VAI INICIAR O ROLLBACK'
EXEC SQL
ROLLBACK
END-EXEC
DISPLAY 'ROLLBACK EFETUADO'
MOVE WS-RETURN-CODE TO RETURN-CODE.
STOP RUN.
*****************************************************************
...
* --------------------------------------- MOVE DADOS - TABELA 51
MOVE EPCB002-EMPRESA
TO CD-EMP
OF EPCV51A1
MOVE WS-NO-PPT-CRE
TO NO-PPT-CRE
OF EPCV51A1
MOVE 7
TO CD-TPO-VIN-PAT
OF EPCV51A1
MOVE 1
TO CD-SEQ-TPO-VIN-PAT OF EPCV51A1
MOVE EPCB002-VL-LIBERADO TO VL-LIB-FIN
OF EPCV51A1
MOVE SPACES
TO CD-CTL-PAT
OF EPCV51A1
MOVE WS-TS-TB01
TO TS-INC
OF EPCV51A1
MOVE WS-TS-TB01
TO TS-ULT-ATU
OF EPCV51A1
MOVE '51' TO WS-QUALTAB.
* -------------------------------------- INCLUI LINHA - TABELA 51
EXEC SQL
INSERT INTO EPCV51A1_LFI_PAT
(CD_EMP,
NO_PPT_CRE,
CD_TPO_VIN_PAT,
CD_SEQ_TPO_VIN_PAT,
VL_LIB_FIN,
CD_CTL_PAT,
TS_INC,
CD_USU_INC,
TS_ULT_ATU,
CD_USU_ULT_ATU,
CD_PGM_MAN)
VALUES
(:EPCV51A1.CD-EMP,
:EPCV51A1.NO-PPT-CRE,
:EPCV51A1.CD-TPO-VIN-PAT,
:EPCV51A1.CD-SEQ-TPO-VIN-PAT,
:EPCV51A1.VL-LIB-FIN,

84

:EPCV51A1.CD-CTL-PAT,
:EPCV51A1.TS-INC,
'MIGRACAO',
:EPCV51A1.TS-ULT-ATU,
'MIGRACAO',
'EPCBX55')
END-EXEC.
*
MOVE SQLCODE TO WS-SQLC
IF SQLCODE EQUAL ZEROS
DISPLAY 'INSERT OK'
ADD 1 TO WS-INCLUIDOS-TAB51
ELSE
MOVE SQLCODE
TO WS-RETURN-CODE
IF SQLCODE = -803
DISPLAY 'LINHA JA EXISTIA. SQLCODE=' WS-SQLC
ELSE
DISPLAY 'ERRO NO INSERT. SQLCODE=' WS-SQLC
END-IF

85

DELETE
DELETE - Uso batch no DSNTEP2

Utilizado para ELIMINAR linhas de uma tabela.


DELETE FROM DB2T.ZZZ100_CADAGE
WHERE CD_AGE = 77;
***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)

Se listarmos as linhas aps o DELETE veremos que foram deletadas :


***INPUT STATEMENT:
SELECT *
FROM DB2T.ZZZ100_CADAGE
WHERE CD_AGE = 77;
SUCCESSFUL RETRIEVAL OF

0 ROW(S)

86

DELETE - Uso batch em Cobol


Utilizado para ELIMINAR linhas de uma tabela.
*------------------------------------------------------*
* DECLARACAO ESTRUTURA TABELA EPCV00A1_RTT_EPC
*
EXEC
SQL
INCLUDE EPCV00A1
END-EXEC.
*
* DECLARACAO ESTRUTURA TABELA EPCV01A1_PAM_EPC
*
EXEC
SQL
INCLUDE EPCV01A1
END-EXEC.
*------------------------------------------------------*
* DELETE DE LINHA(S) TABELA EPCV00A1_RTT_EPC
*
EXEC SQL
DELETE FROM
EPCV00A1_RTT_EPC
WHERE CD_RNA_BAT = :CD-RNA-BAT
AND
CD_PGM_PCM = :CD-PGM-PCM
END-EXEC.
MOVE
SQLCODE TO W-COD
IF SQLCODE
EQUAL
ZEROS
DISPLAY 'DELETE OK'
ELSE
IF SQLCODE
EQUAL
100
DISPLAY 'LINHA NAO ACHADA. SQLCODE=' W-SQLC
ELSE
DISPLAY 'ERRO NO DELETE. SQLCODE=' W-SQLC
END-IF
END-IF
*
* DELETE DE LINHA(S) TABELA EPCV01A1_PAM_EPC
*
EXEC SQL
DELETE FROM
EPCV01A1_PAM_EPC
WHERE CD_PAM_SIS_EPC
= :EPCV01A1.CD-PAM-SIS-EPC
END-EXEC.
*
EVALUATE SQLCODE
WHEN
0 DISPLAY 'DELETE OK'
WHEN 100 DISPLAY 'LINHA NAO ACHADA. SQLCODE=' W-SQLC
WHEN OTHER DISPLAY 'ERRO NO DELETE. SQLCODE=' W-SQLC
END-EVALUATE

87

WHENEVER
Comando usado para indicar que o programa deseja efetuar tratamento prprio 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 execuo efetiva das aes que tratam o(s) erro(s) somente acontece quando ocorrer o(s) erro(s)
indicado(s), se ocorrer.
O comando normalmente especificado para execuo (marcao) no incio do programa; enquanto ele
no for executado, se ocorrer qualquer erros, o procedimento o padro : o DB2 trata.
Uso para setar :
WHENEVER { | NOT FOUND | SQLERROR | SQLWARNING | }
{ | CONTINUE | GOTO label | GO TO label | }
{ | NOT FOUND | SQLERROR | SQLWARNING | }

Indica em qual condio o programa deseja assumir controle para tratar :


NOT FOUND

Indica que o programa deseja tratar qualquer condio de SQLCODE = +100 ou


SQLSTATE ='02000' resultante de um comando SQL.
SQLERROR

Indica que o programa deseja tratar qualquer condio de SQLCODE negativo resultante de
um comando SQL.
SQLWARNING

Indica que o programa deseja tratar qualquer condio de [SQLWARN0 = 'W'] ou de


[SQLCODE positivo e diferente de +100] resultante de um comando SQL ou SQLSTATE
= 01xxx
{ | CONTINUE

| GOTO label | GO TO label | }

Indica o procedimento a ser efetuado :


CONTINUE

Indica para continuar na instruo seguinte ao comando SQL que gerou a condio (NOT
FOUND ou SQLERROR ou SQLWARNING) : o erro bypassado (a no ser que as
instrues seguintes testem o SQLCODE).
GO TO label
ou
GOTO

label

Indica para onde (qual procedure name deve ser efetuado um desvio em caso de ocorrer a
condio (NOT FOUND ou SQLERROR ou SQLWARNING).
Exemplos :
88

EXEC SQL

WHENEVER SQLERROR GOTO MEU-TRATAMENTO-DE-ERRO

END-EXEC.

Indica para desviar para o procedure name MEU-TRATAMENTO-DE-ERRO se a execuo de um


comando SQL subsequente ocasionar um SQLCODE negativo.
EXEC SQL

WHENEVER NOT FOUND GOTO NAO-TEM-LINHA

END-EXEC.

Indica para desviar para o procedure name NAO-TEM-LINHA se a execuo de um comando SQL
subsequente (provavelmente um FETCH) ocasionar um SQLCODE = +100.

89

8 - FUNES (Built-In)
SINTAXE
ABS(expressao)
AVG([DISTINCT] [ALL] expressao)
CEILING(expressao)
CHAR(|string|coluna|
[,|ISO|USA|EUR|JIS|LOCAL|])

DESCRIO / EXEMPLO
Retorna o valor absoluto (mdulo).
ABS(SALDO)
Retorna a mdia.
AVG(SALARIO)
Retorna o inteiro maior mais proximo do resultado da expressao.
CEILING(3.14) retorna 4
Converte date, time, timestamp, ROWID, valor (floating point,
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)
COUNT([DISTINCT] [ALL] expressao/*)
DATE(string)
DAY(|date|timestamp|)

DAYOFYEAR(|time|timestamp|string|)

DAYOFWEEK(|date|timestamp|)

DAYS(|date|timestamp|)

EXP(expressao)
FLOOR(expressao)
HEX(coluna)

HOUR(|time|timestamp|)
LENGTH(|string|coluna|)
LOCATE(string1,|string2|coluna|)

Concatena 2 strings/colunas. Ex.: CONCAT(TITULO,NOMECLI)


Retorna a quantidade (quantas vezes no nulo).
COUNT(SALARIO)
Retorna a data que consta no string.
DATE(2004-11-05)
Retorna o dia de uma data ou timestamp
DAY(DATANASC)
DAY(DATE(2004-11-30))
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))
Retorna um nmero que indica o dia da semana representado na
data informada via date, timestamp ou string (com date ou
timestamp)
1=Domingo; 2=Segunda; 3=Tera; 4=Quarta; 5=Quinta; 6=Sexta;
7=Sbado
DAYOFWEEK(DATANASC)
DAYOFWEEK(DATE(2004-11-30))
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))
Retorna expressao ** e
Retorna o inteiro menor mais proximo do resultado da expressao.
FLOOR(3.14) retorna 3
Retorna o contedo, em hexadecimal, da coluna especificada. Ex.:
HEX(CD_AGE) = 00000A (Se CD_AGE for 10)
HEX(ABC) = C1C2C3
Retorna a hora de um horrio em um time ou timestamp
HOUR(TIME(20.05.00)) retona 20
Retorna os tamanho do string.
LENGTH(NOMECLI)
Retorna a posio (ou zero, se no houver) em que string1 est em
90

LOG(expressao)

string2
LOCATE(BER,ALBERT) retorna 3
Retorna log neperiano de expressao

LOWER(|string|coluna|)

Retorna o string convertido para minsculo

LTRIM(|string|coluna|)

Retorna o string sem brancos esquerda

Retorna o valor mximo.


MAX(SALARIO)
MICROSECOND(|timestamp|string|)
Retorna os microsegundos de um horrio timestamp ou string
indicando timestamp
MICROSECOND(TIMESTAMP(2004-11-05-22.00.00.000003))
retorna 3
MIN([DISTINCT] [ALL] expressao)
Retorna o valor minimo.
MIN(SALARIO)
MINUTE(|time|timestamp|)
Retorna os minutos de um horrio em um time ou timestamp
MINUTE(TIME(20.05.00)) retona 5
MONTH(|date|timestamp|)
Retorna o mes dia de uma data ou timestamp
MONTH(DATANASC)
MONTH(DATE(2004-11-30))
RAND()
Retorna um nmero aleatrio entre 0 e 1
REPEAT(|string|coluna|,vezes)
Retorna um string composto de n vezes o string informado
RIGHT(|string|coluna|,qtdd)
Retorna os n caracteres mais direita.
RIGHT(NOMECLI)
RTRIM(|string|coluna|)
Retorna o string sem brancos direita
SECOND(|time|timestamp|)
Retorna os segundos de um horrio em um time ou timestamp
SECOND(TIMESTAMP(2004-11-05-22.00.02.000003)) retorna 2
SIGN(expressao)
Retorna 1, 0 ou 1 (se expresso for negativa, zero ou positiva).
Ex.:
SIGN(3.14) retorna 1
SQRT(expressao)
Retorna a raiz quadrada .
SQRT(4) retorna 2
SUBSTR(|string|coluna|,pos.ini,tam) Retorna um substring .
SUBSTR(NOMECLI,2,10)
SUM([DISTINCT] [ALL] expressao)
Retorna a somatoria.
SUM(SALARIO)
TIME(string)
Retorna a hora que consta no string.
TIME(20.05.00)
TIMESTAMP(string)
Retorna o timestamp que consta no string.
TIMESTAMP(2004-11-05-22.00.00.000000)
UPPER(|string|coluna|)
Retorna o string convertido para maisculo
WEEK(|date|timestamp|string|)
Retorna o nmero da semana dentro do ano (sendo Domingo o
primeiro dia da semana).
1=primeira semana; 2=Segunda semana e assim por diante
WEEK(DATE(2004-11-30)) retorna 45
WEEK_ISO(|date|timestamp|string|)
Retorna o nmero da semana dentro do ano (sendo Segundda-Feira
o primeiro dia da semana).
1=primeira semana; 2=Segunda semana e assim por diante
WEEK_ISO(DATE(2004-11-30)) retorna 45
YEAR(|date|timestamp|)
Retorna o ano de uma data ou timestamp
YEAR(DATANASC)
YEAR(DATE(2004-11-30))
MAX([DISTINCT] [ALL] expressao)

91

92

APNDICE I - A Relational Model of Data for Large Shared Data Banks - E. F.


Codd

Reprinted from Communications of the ACM, Vol. 13, No.


6, June 1970, pp. 377-387. Copyright 1970, Association
for Computing Machinery, Inc.

Edgard Frank Codd (1923-2003)


http://portal.acm.org/
http://portal.acm.org/citation.cfm?
id=357980.358007&coll=GUIDE&dl=GUIDE&idx=357980&part=periodical&WantType=periodical&t
itle=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

93

APNDICE II Comandos SQL


ABORT
ALTER
BEGIN
CHECKPOINT
CLOSE
CLUSTER
COMMENT
COMMIT
CONTEXT ALLOCATE
CONTEXT FREE
CONTEXT USE
COPY
CREATE
DECLARE
DECLARE DATABASE
DECLARE STATEMENT
DECLARE TABLE
DELETE
DESCRIBE
DROP
ENABLE THREADS
END
EXECUTE
EXECUTE IMMEDIATE
EXECUTE...END-EXEC
EXPLAIN
FETCH
FREE
GRANT
INSERT
LOAD
LOCK
MOVE
OBJECT CREATE
OBJECT DELETE
OBJECT DEREF
OBJECT FLUSH
OBJECT GET
OBJECT RELEASE
OBJECT SET
OBJECT UPDATE
OPEN
PREPARE
REINDEX
RESET

Aborts the current transaction


Modifies table properties
Begins a transaction in chained mode
Force transaction log checkpoint
To disable a cursor, releasing the resources it holds.
Gives storage clustering advice to the server
Add comment to an object
To end the current transaction, making all database change permanent (optionally
frees resources and disconnects from the database)
To allocate memory for a SQLLIB runtime context.
To free memory for a SQLLIB runtime context.
To specify which SQLLIB runtime context to use for subsequent executable SQL
statements when multiple threads are used.
Copies data between files and tables
Defines a new aggregate function
Defines a cursor for table access, associating it with a query
To declare an identifier for a non-default database to be accessed in subsequent
embedded SQL statements.
To assign a SQL variable name to a SQL statement.
To declare the table structure for semantic checking of embedded SQL statements
To remove rows from a table or from a view's base table.
To initialize a descriptor, a structure holding host variable descriptions.
Removes the definition of an aggregate function
To initialize a process that supports multiple threads.
Commits the current transaction
To execute a prepared dynamic SQL statement.
To prepare and execute a SQL statement with no host variables.
To execute an anonymous PL/SQL block.
Shows statement execution details
Gets rows using a cursor
To free memory allocated in the object cache
Grants access privilege to a user, a group or all users
Inserts new rows into a table or to a view's base table.
Dynamically loads an object file
Explicit lock of a table inside a transaction
Moves cursor position
To create a referenceable object in the cache.
To mark an object as deleted.
To dereference an object.
To transmit persistent objects to server.
To convert an object attribute to a C type.
To "unpin" an object in the cache.
To update object attributes in the cache.
To mark an object in the cache as updated.
To execute the query associated with a cursor.
To parse a dynamic SQL statement.
Recover corrupted system indexes under standalone PostgreSQL
Restores run-time parameters for session to default values
94

REVOKE
ROLLBACK
SAVEPOINT
SELECT
SET
SHOW
TRUNCATE
UPDATE
WHENEVER

Revokes access privilege from a user, a group or all users.


To end the current transaction, discard all changes in the current transaction, and
release all locks (optionally release resources and disconnect from the database).
To identify a point in a transaction to which you can later roll back.
To retrieve data from one or more tables, views, or snapshots, assigning the selected
values to host variables.
Set run-time parameters for session
Shows run-time parameters for session
Empty a table
To change existing values in a table or in a view's base table.
To specify handling for error and warning conditions.

95

APNDICE III Programas Exemplo


Completo (Fontes + Sadas)
***********************************************************************************************************************
***********************************************************************************************************************
**
*
** 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
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
DB2 SQL PRECOMPILER
VERSION 7 REL. 1.0

PAGE 1

PAGE 2

96

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
DB2 SQL PRECOMPILER
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76

ID DIVISION.
PROGRAM-ID.
TABTR9Z9.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
DATA DIVISION.
FILE SECTION.
WORKING-STORAGE SECTION.
*---------------------------------------------------------------*
* AREA
DB2
*---------------------------------------------------------------*
*
01 FILLER
PIC X(32) VALUE 'SQLCA'.

00002002
00003002
00038000
00039000
00046000
00066000
00095000

EXEC
SQL
INCLUDE SQLCA
END-EXEC.
01

FIM-CURSOR

01 WS-CADAGE.
05 CD-AGE
05 NM-AGE
05 END-AGE
05 TEL-AGE

PIC

X(1)

VALUE 'N'.

PIC S9(09) COMP.


PIC X(15).
PIC X(30).
PIC S9(09) COMP.

01 WS-AGECLI.
05 CD-AGE-CLI
05 CD-CLI
05 TP-CLI
05 NM-CLI
05 END-CLI
05 COMPL-CLI
05 CID-CLI
05 UF-CLI
05 CEP-CLI
05 CMCEP-CLI
05 TEL-CLI
05 RG-CLI
05 CPF-CGC-CLI
05 DT-INCL-CLI
05 DT-EXCL-CLI
05 VL-SDO-CLI

PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC

S9(09) COMP.
S9(09) COMP.
S9(09) COMP.
X(35).
X(35).
X(30).
X(30).
X(02).
S9(09) COMP.
S9(09) COMP.
S9(09) COMP.
S9(09) COMP.
S9(09) COMP.
X(10).
X(10).
S9(05)V9(02) COMP-3.

01 WS-SLDCLI.
05 CD-AGE-SLD
05 CD-CLI
05 NM-CLI
05 TEL-CLI
05 VL-SDO-CLI

PIC
PIC
PIC
PIC
PIC

S9(09) COMP.
S9(09) COMP.
X(35).
S9(09) COMP.
S9(05)V9(02) COMP-3.

*****************************************************************
* AREA DB2
*****************************************************************
EXEC SQL DECLARE C01 CURSOR FOR
VERSION 7 REL. 1.0
SELECT CD_AGE_SLD,
CD_CLI,
NM_CLI,
TEL_CLI,
VL_SDO_CLI
FROM DB2T.ZZB302_SLDCLI
WHERE VL_SDO_CLI > :WS-SLDCLI.VL-SDO-CLI
END-EXEC

PAGE 3

*
*---------------------------------------------------------------*
PROCEDURE DIVISION.
00479000
*---------------------------------------------------------------*
*---------------------------------------------------------------*
001-INICIO SECTION.
*---------------------------------------------------------------*
PERFORM 002-INICIALIZAR.
PERFORM 003-PROCESSAR.

97

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
117
*---------------------------------------------------------------*
118
119
DISPLAY 'FIM NORMAL'.
120
121
999-FIM.
EXIT.
DB2 SQL PRECOMPILER
MESSAGES
DSNH050I I
DSNHMAIN WARNINGS HAVE BEEN SUPPRESSED DUE TO LACK OF TABLE DECLARATIONS
DB2 SQL PRECOMPILER
STATISTICS
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
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
NODUMP
NODYNAM
NOEXIT

PAGE 4

PAGE 5
PAGE 6

Time 14:30:35

Page

98

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.
000037
10 SQLWARN6 PIC X.
000038
10 SQLWARN7 PIC X.
000039
05 SQLEXT.
000040
10 SQLWARN8 PIC X.

99

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.
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

100

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.
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 ' '.

101

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 WS000208
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
000257
CONTINUE.
000258
003-FIM.
EXIT.
000259
000260
*---------------------------------------------------------------*
000261
999-FINALIZAR SECTION.
000262
*---------------------------------------------------------------*
000263

102

000264
DISPLAY 'FIM NORMAL'.
000265
000266
999-FIM.
EXIT.
PP 5688-197 IBM COBOL for MVS & VM
1.2.2
TABTR9Z9
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

Date 11/12/2004

Time 14:30:35

Page

LITERAL POOL MAP FOR SYSTEM LITERALS IN THE PGT:


0000FC (LIT+0)
00000001
PP 5688-197 IBM COBOL for MVS & VM
1.2.2
TABTR9Z9
CONSTANT GLOBAL TABLE BEGINS AT LOCATION 000108 FOR 00012B BYTES
LITERAL POOL MAP FOR LITERALS IN THE CGT:

Date 11/12/2004

]....
Time 14:30:35

Page

00012C
00014C
00016C
00018C
0001AC
0001CC
0001EC
00020C
00022C
LINE #
000196
000201
000206
000216
000219
000227
000230
000239
000249
000253
000258

(LIT+0)
FFFFFFFC
(LIT+32)
C9D440D5
(LIT+64)
00000001
(LIT+96)
00000000
(LIT+128)
00000000
(LIT+160)
0001C000
(LIT+192)
01A8FF01
(LIT+224)
00000000
(LIT+256)
08080000
HEXLOC VERB
0002A4 GO
0002E0 CALL
000372 CALL
00041C PERFORM
00046C STOP
0004B4 CALL
0004F8 STOP
000516 MOVE
000548 CALL
000586 DISPLAY
0005A2 EXIT

00001000
D6D9D4C1
28000000
00000000
00000000
08080000
40000008
00000000
040055

00000001
D3C6C5E3
01000001
00000000
00400000
04005501
08000004
00000040

PP 5688-197 IBM COBOL for MVS & VM


1.2.2
*** TGT MEMORY MAP ***
PGMLOC TGTLOC
000618
000660
000664
000668
000669
00066C
000670
000674
000678
00067C
000680
000684
000688
00068C
000690
000692
000694
000696
000698
00069C
0006A0
0006A1
0006A2
0006A4
0006A8
0006AC
0006B0
0006B8
0006C0
0006C4
0006F8
0006FC
000700
000704
000708
00070C
000710

000000
000048
00004C
000050
000051
000054
000058
00005C
000060
000064
000068
00006C
000070
000074
000078
00007A
00007C
00007E
000080
000084
000088
000089
00008A
00008C
000090
000094
000098
0000A0
0000A8
0000AC
0000E0
0000E4
0000E8
0000EC
0000F0
0000F4
0000F8

C5D9D9D6
C3C840D6
2C000000
00800000
00000000
4000000A
004DFF01
00000000

LINE #
000198
000203
000210
000217
000224
000228
000232
000240
000250
000254
000264

40D5D640
D2E3C1C2
01000000
00400000
00000000
08000004
40000013
40C00001

D6D7C5D5
E3D9F9E9
00000000
00000000
00000000
0043FF01
08000004
40000808

HEXLOC VERB
0002A8 MOVE
000316 CALL
0003E8 CALL
000434 PERFORM
00048C MOVE
0004DE IF
000510 CONTINUE
00051A PERFORM
000572 IF
000594 DISPLAY
0005A8 DISPLAY
TABTR9Z9

40C3E4D9
F9000010
00000000
00000000
00400000
40000033
0030FF80
00000400

E2D6D9C6
0C000000
00000000
00800000
000025C0
09000128
00000000
5502C000

]............ERRO NO OPEN
]IM NORMALFETCH OKTABTR9Z9
].........................
]................. .......
]......... ...............
]............ ...........
].y.. ........(.. ........
]........... .... ... ....
].......
LINE # HEXLOC VERB
000199 0002AE CALL
000204 000344 CALL
000212 00041C CONTINUE
000218 000450 PERFORM
000226 000492 PERFORM
000229 0004EA DISPLAY
000233 000510 EXIT
000248 000526 PERFORM
000251 00057E MOVE
000257 0005A2 CONTINUE
000266 0005B6 EXIT

Date 11/12/2004

Time 14:30:35

Page

RESERVED - 72 BYTES
TGT IDENTIFIER
RESERVED - 4 BYTES
TGT LEVEL INDICATOR
RESERVED - 3 SINGLE BYTE FIELDS
32 BIT SWITCH
POINTER TO RUNCOM
POINTER TO COBVEC
POINTER TO PROGRAM DYNAMIC BLOCK TABLE
NUMBER OF FCB'S
WORKING-STORAGE LENGTH
RESERVED - 4 BYTES
ADDRESS OF IGZESMG WORK AREA
ADDRESS OF 1ST GETMAIN BLOCK (SPACE MGR)
RESERVED - 2 BYTES
RESERVED - 2 BYTES
RESERVED - 2 BYTES
MERGE FILE NUMBER
ADDRESS OF CEL COMMON ANCHOR AREA
LENGTH OF TGT
RESERVED - 1 SINGLE BYTE FIELD
PROGRAM MASK USED BY THIS PROGRAM
RESERVED - 2 SINGLE BYTE FIELDS
NUMBER OF SECONDARY FCB CELLS
LENGTH OF THE ALTER VN(VNI) VECTOR
COUNT OF NESTED PROGRAMS IN COMPILE UNIT
DDNAME FOR DISPLAY OUTPUT
RESERVED - 8 BYTES
POINTER TO COM-REG SPECIAL REGISTER
CALC ROUTINE REGISTER SAVE AREA
ALTERNATE COLLATING SEQUENCE TABLE PTR.
ADDRESS OF SORT G.N. ADDRESS BLOCK
ADDRESS OF PGT
CURRENT INTERNAL PROGRAM NUMBER
POINTER TO 1ST IPCB
ADDRESS OF THE CLLE FOR THIS PROGRAM
POINTER TO ABEND INFORMATION TABLE

103

000714
000718
00071C
000720
000724
000728
00072C
000730
000734

0000FC
000100
000104
000108
00010C
000110
000114
000118
00011C

POINTER TO TEST INFO FIELDS IN THE TGT


ADDRESS OF START OF COBOL PROGRAM
POINTER TO ALTER VNI'S IN CGT
POINTER TO ALTER VN'S IN TGT
POINTER TO FIRST PBL IN THE PGT
POINTER TO FIRST FCB CELL
WORKING-STORAGE ADDRESS
POINTER TO FIRST SECONDARY FCB CELL
POINTER TO STATIC CLASS INFO BLOCK

*** VARIABLE PORTION OF TGT ***


000738
000740
000744
000748
000768

000120
000128
00012C
000130
000150

BASE LOCATORS FOR SPECIAL REGISTERS


BASE LOCATORS FOR WORKING-STORAGE
BASE LOCATORS FOR LINKAGE-SECTION
CLLE ADDR. CELLS FOR CALL LIT. SUB-PGMS.
INTERNAL PROGRAM CONTROL BLOCKS

PP 5688-197 IBM COBOL for MVS & VM


1.2.2
*** DSA MEMORY MAP ***
DSALOC
000000
00004C
000058
00005C
000080

TABTR9Z9

Date 11/12/2004

Time 14:30:35

Page

10

REGISTER SAVE AREA


STACK NAB (NEXT AVAILABLE BYTE)
ADDRESS OF INLINE-CODE PRIMARY DSA
ADDRESS OF TGT
PROCEDURE DIVISION RETURNING VALUE

*** VARIABLE PORTION OF DSA ***


000084
00008C
0000A4
0000B8

BACKSTORE CELLS FOR SYMBOLIC REGISTERS


VARIABLE NAME (VN) CELLS FOR PERFORM
PERFORM SAVE CELLS
TEMPORARY STORAGE-2

TGT
LOCATED AT 000618 FOR 00000164 BYTES
SPEC-REG LOCATED AT 000780 FOR 00000049 BYTES
WRK-STOR LOCATED AT 0007D0 FOR 0000039C BYTES
DSA
WILL BE ALLOCATED FOR 000000E8 BYTES
* Statistics for COBOL program TABTR9Z9:
*
Source records = 266
*
Data Division statements = 148
*
Procedure Division statements = 33
End of compilation 1, program TABTR9Z9, no statements flagged.
Return code 0
z/OS V1 R3 BINDER
14:30:37 FRIDAY NOVEMBER 12, 2004
BATCH EMULATOR JOB(TAB#PROP) STEP(NDVRBAT ) PGM= IEWL
IEW2278I B352 INVOCATION PARAMETERS - XREF
IEW2322I 1220 1
B m En0')
IEW2322I 1220 2

IDENTIFY TABTR9Z9('2
NAME

TABTR9Z9(R)
C R O S S - R E F E R E N C E T A B L E
_________________________________________

TEXT CLASS = B_TEXT


--------------- R E F E R E N C E -------------------------- T A R G E T ------------------------------------------CLASS
ELEMENT
]
ELEMENT
]
OFFSET SECT/PART(ABBREV)
OFFSET TYPE ] SYMBOL(ABBREV)
SECTION (ABBREV)
OFFSET CLASS NAME
]
]
]
50 TABTR9Z9
50 V-CON ] IGZCBSO
IGZCBSO
0 B_TEXT
]
BA TABTR9Z9
BA V-CON ] CEESTART
CEESTART
0 B_TEXT
]
DA TABTR9Z9
DA V-CON ] CEESTART
CEESTART
0 B_TEXT
]
DE TABTR9Z9
DE V-CON ] CEEBETBL
CEEBETBL
0 B_TEXT
]
108 TABTR9Z9
108 V-CON ] DSNHADDR
DSNHADDR
0 B_TEXT
]
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)
]

104

FDC
FEC
1018
1024
1028
102C
14E8
14EC
14F0
14F4
18A8
1ADC
1B28
1B2C
1B30
1B34
1B38
1B3C
1B40
1B44
1B48
1B4C
1B50
1B54
1B58
1B5C
1B60
1B64
1B68

CEESTART
CEESTART
CEESTART
CEESTART
CEESTART
CEESTART
IGZCBSO
IGZCBSO
IGZCBSO
IGZCBSO
CEEBPIRA
CEEBTRM
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST
CEEBLLST

5C
6C
98
A4
A8
AC
4B8
4BC
4C0
4C4
260
6C
10
14
18
1C
20
24
28
2C
30
34
38
3C
40
44
48
4C
50

A-CON
C-LEN
A-CON
A-CON
A-CON
A-CON
V-CON
V-CON
V-CON
V-CON
V-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON
A-CON

]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]

CEEMAIN
CEEFMAIN
CEEBETBL
CEEROOTA
CEEROOTD
CEEINT
IGZETUN
IGZEOPT
CEEARLU
CEEBPUBT
CEEBPUBT
CEESG000
CEESG001
CEESG002
CEESG003
CEESG004
CEESG005
CEESG006
CEESG007
CEESG008
CEESG009
CEESG010
CEESG011
CEESG012
CEESG013
CEESG014
CEESG015
CEESG016

$UNRESOLVED(W)
$NON-RELOCATABLE
$UNRESOLVED(W)
CEEBETBL
$UNRESOLVED(W)
$UNRESOLVED(W)
CEEBPIRA
$UNRESOLVED(W)
$UNRESOLVED(W)
CEEARLU
CEEBPUBT
CEEBPUBT
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)
CEESG005
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)
$UNRESOLVED(W)

B_PRV
0 B_TEXT
0 B_TEXT
0 B_TEXT
0 B_TEXT
0 B_TEXT

0 B_TEXT

]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]
]

TEXT CLASS = B_PRV


--------------- R E F E R E N C E -------------------------- T A R G E T ------------------------------------------CLASS
ELEMENT
]
ELEMENT
]
OFFSET SECT/PART(ABBREV)
OFFSET TYPE ] SYMBOL(ABBREV)
SECTION (ABBREV)
OFFSET CLASS NAME
]
]
]
*** NO ADDRESS CONSTANTS FOR THIS CLASS
***
*** E N D O F C R O S S R E F E R E N C E ***

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
REUSABILITY
UNSPECIFIED
RMODE
UNSPECIFIED
STORENX
NO
TERM
NO
UID
UNSPECIFIED
UPCASE:
NO
WKSPACE
000000K,000000K
XCAL
NO
XREF
YES
***END OF OPTIONS***

105

SAVE OPERATION SUMMARY:


MEMBER NAME
LOAD LIBRARY
PROGRAM TYPE
VOLUME SERIAL
MAX BLOCK
DISPOSITION
TIME OF SAVE

TABTR9Z9
DSVAABLB.ENDEVOR.BATCH.LOADLIB
LOAD MODULE
D7S002
32760
ADDED NEW
14.30.38 NOV 12, 2004

SAVE MODULE ATTRIBUTES:


AC
AMODE
DC
EDITABLE
EXCEEDS 16MB
EXECUTABLE
MIGRATABLE
OL
OVLY
PACK,PRIME
PAGE ALIGN
REFR
RENT
REUS
RMODE
SCTR
SSI
SYM GENERATED
TEST
XPLINK
MODULE SIZE (HEX)

000
ANY
NO
YES
NO
YES
YES
NO
NO
NO,NO
NO
NO
NO
NO
24
NO
NO
NO
NO
00001B80

ENTRY POINT AND ALIAS SUMMARY:


NAME:
TABTR9Z9

ENTRY TYPE AMODE C_OFFSET CLASS NAME


MAIN_EP

STATUS

ANY 00000000 B_TEXT

***** E N D

O F

R E P O R T *****

z/OS V1 R3 BINDER
14:30:37 FRIDAY NOVEMBER 12, 2004
BATCH EMULATOR JOB(TAB#PROP) STEP(NDVRBAT ) PGM= IEWL
IEW2008I 0F03 PROCESSING COMPLETED. RETURN CODE = 0.
---------------------MESSAGE SUMMARY REPORT
---------------------SEVERE MESSAGES
NONE

(SEVERITY = 12)

ERROR MESSAGES
NONE

(SEVERITY = 08)

WARNING MESSAGES
NONE

(SEVERITY = 04)

INFORMATIONAL MESSAGES (SEVERITY = 00)

106

2008

2278

2322

**** END OF MESSAGE SUMMARY REPORT ****


ICE143I 0 BLOCKSET
COPY TECHNIQUE SELECTED
ICE000I 0 - CONTROL STATEMENTS FOR 5740-SM1, DFSORT REL 14.0 - 14:30 ON FRI NOV 12, 2004 OPTION COPY,MSGDDN=SYSPRINT,SORTIN=SYSUT1,SORTOUT=SYSUT2
ICE201I 0 RECORD TYPE IS F - DATA STARTS IN POSITION 1
ICE193I 0 ICEAM2 ENVIRONMENT IN EFFECT - ICEAM2 INSTALLATION MODULE SELECTED
ICE088I 0 TAB#PROP.NDVRBAT .
, INPUT LRECL = 80, BLKSIZE = 3120, TYPE = FB
ICE093I 0 MAIN STORAGE = (MAX,4194304,4181086)
ICE156I 0 MAIN STORAGE ABOVE 16MB = (4109862,4109862)
ICE127I 0 OPTIONS: OVFLO=RC0 ,PAD=RC0 ,TRUNC=RC0 ,SPANINC=RC16,VLSCMP=N,SZERO=Y,RESET=Y,VSAMEMT=Y,DYNSPC=256
ICE128I 0 OPTIONS: SIZE=4194304,MAXLIM=1048576,MINLIM=450560,EQUALS=N,LIST=Y,ERET=RC16 ,MSGDDN=SYSPRINT
ICE129I 0 OPTIONS: VIO=N,RESDNT=ALL ,SMF=NO
,WRKSEC=Y,OUTSEC=Y,VERIFY=N,CHALT=N,DYNALOC=N
,ABCODE=MSG
ICE130I 0 OPTIONS: RESALL=4096,RESINV=0,SVC=109 ,CHECK=Y,WRKREL=Y,OUTREL=Y,CKPT=N,STIMER=Y,COBEXIT=COB2
ICE131I 0 OPTIONS: TMAXLIM=4194304,ARESALL=0,ARESINV=0,OVERRGN=16384,CINV=Y,CFW=Y,DSA=0
ICE132I 0 OPTIONS: VLSHRT=N,ZDPRINT=N,IEXIT=N,TEXIT=N,LISTX=N,EFS=NONE
,EXITCK=S,PARMDDN=DFSPARM ,FSZEST=N
ICE133I 0 OPTIONS: HIPRMAX=OPTIMAL,DSPSIZE=MAX ,ODMAXBF=0,SOLRF=Y,VLLONG=N,VSAMIO=N
ICE084I 0 BSAM ACCESS METHOD USED FOR SYSUT2
ICE084I 0 EXCP ACCESS METHOD USED FOR SYSUT1
ICE090I 0 OUTPUT LRECL = 80, BLKSIZE = 6160, TYPE = FB
ICE055I 0 INSERT 0, DELETE 0
ICE054I 0 RECORDS - IN: 13, OUT: 13
ICE751I 0 C5C6C7C8E9C9E5E7EFF0E8
ICE052I 0 END OF DFSORT
READY
EXEC 'DSVAABLB.ENDEVOR.DB2.BIND(TABTR9Z9)'
DSNT212I # BIND AUTHORIZATION ID DB2DTAB IN THE OWNER KEYWORD
IS INVALID
DSNT233I # UNSUCCESSFUL BIND FOR
PACKAGE = AB73.COLDB01.TABTR9Z9.()
READY
END
DSNTIAD - SAMPLE DYNAMIC SQL PROGRAM 2.0
IEBCOPY MESSAGES AND CONTROL STATEMENTS
PAGE
1
IEB1135I IEBCOPY FMID HDZ11G0 SERVICE LEVEL UA07761 DATED 20031212 DFSMS 01.03.00 z/OS
01.04.00 HBB7707 CPU 2064
IEB1035I TAB#PROP NDVRBAT 14:30:39 FRI 12 NOV 2004 PARM=''
COPYMOD INDD=DD1,OUTDD=DD2
SELECT MEMBER=((TABTR9Z9,,R))
IEB190I MAXIMUM BLOCK SIZE IS 32760, MINIMUM BLOCK SIZE IS 1024
IEB1013I COPYING FROM PDS
INDD=DD1
VOL=D7S002 DSN=DSVAABLB.ENDEVOR.BATCH.LOADLIB
IEB1014I
TO PDS OUTDD=DD2
VOL=AABBR2 DSN=DSVAABLB.BATCH.LOADLIB
IEB167I FOLLOWING MEMBER(S) COPIED FROM INPUT DATA SET REFERENCED BY DD1
IEB19AI MEMBER TABTR9Z9 COPIED AND REBLOCKED.
IEB1098I 1 OF 1 MEMBERS COPIED FROM INPUT DATA SET REFERENCED BY DD1
IEB144I THERE ARE 5616 UNUSED TRACKS IN OUTPUT DATA SET REFERENCED BY DD2
IEB149I THERE ARE 538 UNUSED DIRECTORY BLOCKS IN OUTPUT DIRECTORY
IEB147I END OF JOB - 0 WAS HIGHEST SEVERITY CODE

107

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
INCLUDE SQLCA
END-EXEC.

108

* 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
DISPLAY 'O PROGRAMA SERA CANCELADO'
MOVE 4 TO RETURN-CODE
STOP RUN

109

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.

110

APNDICE 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 varivel indicada.

Se uma coluna de uma tabela no for definida com NOT NULL, ela pode ter valor ou no 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 NO TIVER valor e NO TIVER varivel indicadora de NULL : SQLCODE 305
se a coluna NO TIVER valor e TIVER varivel indicadora de NULL, na varivel ser colocada
uma indicao se o valor da coluna NULL ou no

necessrio que haja (seja definida) uma varivel indicadora de NULL para cada coluna que possa ter
NULL; o mais indicado que essa declarao seja feita prxima do INCLUDE do DCLGEN, de
preferncia por meio de outro INCLUDE; se isso no ocorrer, o programador deve declarar
manualmente todas as variveis indicadoras de NULL para todas as colunas que sero objeto de
FETCH

A declarao deve ser feita na Working-Storage Section, e a varivel deve ser uma half-word com
contedo binrio, com sinal, da seguinte forma :
01 EMAIL-NULL PIC S9(4) BINARY VALUE ZERO.

O uso das variveis indicadoras de NULL na PROCEDURE DIVISION feita da seguinte forma
(exemplo) :
MOVE ZEROS TO EMAIL-NULL
limpar varivel indic.de NULL (desnecessrio, mas elegante)
MOVE SPACES TO EMAIL
limpar varivel receptora (se for NULL, no 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
END-IF
111

APNDICE V Exemplos de tabelas DB2


Creator
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T

Table
ZZA100_CADAGE
ZZA101_AGECLI
ZZA102_SLDCLI
ZZA103_SLDCLI2
ZZA200_CADAGE
ZZA201_AGECLI
ZZA202_SLDCLI
ZZA203_SLDCLI2
ZZA300_CADAGE
ZZA301_AGECLI
ZZA302_SLDCLI
ZZA303_SLDCLI2
ZZA400_CADAGE
ZZA401_AGECLI
ZZA402_SLDCLI
ZZA403_SLDCLI2
ZZA500_CADAGE
ZZA501_AGECLI
ZZA502_SLDCLI
ZZA503_SLDCLI2
ZZA600_CADAGE
ZZA601_AGECLI
ZZA602_SLDCLI
ZZA603_SLDCLI2
ZZA700_CADAGE
ZZA701_AGECLI
ZZA702_SLDCLI
ZZA703_SLDCLI2
ZZA800_CADAGE
ZZA801_AGECLI
ZZA802_SLDCLI
ZZA803_SLDCLI2
ZZA900_CADAGE
ZZA901_AGECLI
ZZA902_SLDCLI
ZZA903_SLDCLI2
ZZB100_CADAGE
ZZB101_AGECLI
ZZB102_SLDCLI
ZZB103_SLDCLI2
ZZB200_CADAGE
ZZB201_AGECLI
ZZB202_SLDCLI
ZZB203_SLDCLI2
ZZB300_CADAGE
ZZB301_AGECLI
ZZB302_SLDCLI
ZZB303_SLDCLI2
ZZB400_CADAGE
ZZB401_AGECLI
ZZB402_SLDCLI
ZZB403_SLDCLI2
ZZB500_CADAGE

Usurio
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO
ALUNO

01
01
01
01
02
02
02
02
03
03
03
03
04
04
04
04
05
05
05
05
06
06
06
06
07
07
07
07
08
08
08
08
09
09
09
09
10
10
10
10
11
11
11
11
12
12
12
12
13
13
13
13
14

112

DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T
DB2T

ZZB501_AGECLI
ZZB502_SLDCLI
ZZB503_SLDCLI2
ZZB600_CADAGE
ZZB601_AGECLI
ZZB602_SLDCLI
ZZB603_SLDCLI2
ZZB700_CADAGE
ZZB701_AGECLI
ZZB702_SLDCLI
ZZB703_SLDCLI2
ZZB800_CADAGE
ZZB801_AGECLI
ZZB802_SLDCLI
ZZB803_SLDCLI2
ZZB900_CADAGE
ZZB901_AGECLI
ZZB902_SLDCLI
ZZB903_SLDCLI2
ZZC100_CADAGE
ZZC101_AGECLI
ZZC102_SLDCLI
ZZC103_SLDCLI2
ZZC200_CADAGE
ZZC201_AGECLI
ZZC202_SLDCLI
ZZC203_SLDCLI2
ZZC300_CADAGE
ZZC301_AGECLI
ZZC302_SLDCLI
ZZC303_SLDCLI2
ZZC400_CADAGE
ZZC401_AGECLI
ZZC402_SLDCLI
ZZC403_SLDCLI2
ZZC500_CADAGE
ZZC501_AGECLI
ZZC502_SLDCLI
ZZC503_SLDCLI2
ZZC600_CADAGE
ZZC601_AGECLI
ZZC602_SLDCLI
ZZC603_SLDCLI2
ZZC700_CADAGE
ZZC701_AGECLI
ZZC702_SLDCLI
ZZC703_SLDCLI2
ZZC800_CADAGE
ZZC801_AGECLI
ZZC802_SLDCLI
ZZC803_SLDCLI2
ZZC900_CADAGE
ZZC901_AGECLI
ZZC902_SLDCLI
ZZC903_SLDCLI2

ALUNO 14
ALUNO 14
ALUNO 14
ALUNO 15
ALUNO 15
ALUNO 15
ALUNO 15
ALUNO 16
ALUNO 16
ALUNO 16
ALUNO 16
ALUNO 17
ALUNO 17
ALUNO 17
ALUNO 17
ALUNO 18
ALUNO 18
ALUNO 18
ALUNO 18
ALUNO 19
ALUNO 19
ALUNO 19
ALUNO 19
ALUNO 20
ALUNO 20
ALUNO 20
ALUNO 20
ALUNO 21
ALUNO 21
ALUNO 21
ALUNO 21
ALUNO 22
ALUNO 22
ALUNO 22
ALUNO 22
ALUNO 23
ALUNO 23
ALUNO 23
ALUNO 23
ALUNO 24
ALUNO 24
ALUNO 24
ALUNO 24
ALUNO 25
ALUNO 25
ALUNO 25
ALUNO 25
ALUNO 26
ALUNO 26
ALUNO 26
ALUNO 26
PROFESSOR
PROFESSOR
PROFESSOR
PROFESSOR

113

DB2T.ZZCnn0_CADAGE
CD_AGE
NM_AGE
END_AGE
TEL_AGE

INTEGER
CHAR(15)
CHAR(30)
INTEGER

DB2T.ZZCnn1_AGECLI
CD_AGE_CLI
CD_CLI
TP_CLI
NM_CLI
END_CLI
COMPL_CLI
CID_CLI
UF_CLI
CEP_CLI
CMCEP_CLI
TEL_CLI
RG_CLI
CPF_CGC_CLI
DT_INCL_CLI
DT_EXCL_CLI
VL_SDO_CLI

INTEGER
INTEGER
INTEGER
CHAR(35)
CHAR(35)
CHAR(30)
CHAR(30)
CHAR(2)
INTEGER
INTEGER
INTEGER
INTEGER
INTEGER
DATE
DATE
DECIMAL(7,2)

DB2T.ZZCnn2_SLDCLI
CD_AGE_SLD
CD_CLI
NM_CLI
TEL_CLI
VL_SDO_CLI

INTEGER
INTEGER
CHAR(35)
INTEGER
DECIMAL(7,2)

DB2T.ZZCnn3_SLDCLI2
CD_AGE_SLD
CD_CLI
NM_CLI
TEL_CLI
VL_SDO_CLI

INTEGER
INTEGER
CHAR(35)
INTEGER
DECIMAL(15,2)

114

Modelo Lgico

Modelo Fsico

115

116

Das könnte Ihnen auch gefallen