Você está na página 1de 316

COBOL Level 1

www.grandeporte.com.br

(11)

4427-4579

(11) 9

9903-3218

Sobre o autor
Prof. Nelson Goncalves
de Oliveira
,
Cientista da Computaco
pelo IMES-SCS,
,
Especialista em Telecomunicaces
pela
,
FAAP-SP, mestrando em cincia da
computaco
pela UFAbc-sp.
,
Iniciou a carreira como desenvolvedor de
software em 1987, especializando-se em
COBOL para Mainframes IBM.
Professor universitrio Desde 2000,
leciona diversas disciplinas nos cursos de
Cincia da Computaco
e Informtica.
,

nelson@grandeporte.com.br

fundou a Grande Porte em 2008 com o


objetivo de difundir essa experincia para
o mercado.

O COBOL tem aberto as portas de


diversas empresas para os nossos
alunos e, mesmo aps 55 anos de
existncia, continua firme e forte
suportando globalmente o comrcio
mundial.

Verso 2.3.5 PDF liberado em 26/04/2015


Fique atento para novas verses em nosso site.

Parte

Desenvolveu o modelo de banco de dados relacional, quando


era pesquisador no laboratrio da IBM em San Jos
Edgar Frank Codd
1923 2003

Verso 2.2.3a

Parte 1

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe?


O que voc no sabe?
Porque importante conhecer estes tpicos?
Quais so os seus temores?
O que voc considera difcil?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos.Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

Presentation

Histria

Uma nova fase !!

Parabns voc concluiu o curso COBOL Level 1, onde seus programas


manipulavam arquivos sequenciais (QSAM) e indexados (VSAM KSDS).
No curso COBOL Level 2 voc dever escrever programas que iro manipular
dados armazenados em tabelas no DB2.
H todo um jargo novo para aprender: modelagem, D.E.R, M.E.R, chave
primria, chave estrangeira, normalizao, SQL, e etc.
Ento vamos comear pelo principio e aprender a ler e a fazer modelos de
dados usando o paradigma relacional.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

Teoria

Defini o de
modelagem de dados

A Modelagem de Dados a atividade de determinar os dados necessrios para


suportar um negcio, organizando-os em uma estrutura que evite a sua redundncia e
facilite sua manuteno pelos sistemas de informao.
uma atividade realizada por Analistas de Sistemas, com o suporte de um
DBA (Data Base Administrator Administrador de Banco de Dados) que conhece as
peculiaridades do SGBD (Sistema Gerenciador de Banco de Dados) e pode sugerir
mudanas no modelo de acordo com o software utilizado (Oracle, DB2, Sybase, SQL
Server, etc), visando utilizar de forma otimizada os recursos desses softwares.
Os produtos da Modelagem de Dados so os modelos: Conceitual, Lgico e
Fsico dos dados. O Modelo Conceitual uma viso de alto nvel cuja finalidade
comunicar a essncia dos dados que se deseja manipular. O Modelo Lgico leva em
conta os limites impostos pelo paradigma de banco de dados escolhido, em nosso
caso esse paradigma o Relacional, agrupando os dados em Entidades e seus
relacionamentos. O Modelo Fsico j traz detalhes da implementao fsica desses
dados no SGBD escolhido.
Esses modelos documentam a camada de dados do sistema de informao
que est sendo desenvolvido e serve para comunicar a todos os profissionais
envolvidos quais so os dados e como eles devem ser implementados.
A vantagem em se desenvolver esses trs modelos evitar uma soluo fsica
prematura da definio da camada de dados em um sistema de informao, o que
pode consumir muito tempo se for necessrio fazer grandes modificaes neste
modelo de dados. mais fcil reprojetar uma casa enquanto ela est ainda no papel.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

Teoria

Modelo conceitual de dados

uma viso macro dos dados do sistema que se deseja desenvolver. Os


dados que do suporte ao negcio so agrupados em Entidades, que podem estar
relacionadas entre si. Vamos fazer algumas definies:
Atributos so os dados que do suporte ao negcio que desejamos modelar,
por exemplo: nome do cliente, endereo do fornecedor, data da venda, etc.
Instncia de atributo so exemplos de dados que o atributo pode conter.
Exemplo: o atributo nome do cliente pode ter as seguintes instncias Jos da Silva,
Joaquim Jos da Silva Xavier, Maria Antonieta, etc.
Entidade so agrupamentos de dados (atributos) sobre algum objeto de
interesse que desejamos modelar. Por exemplo: cliente, fornecedor, empresa,
funcionrio, etc.
Relacionamento so associaes entre as entidades de um modelo. O
relacionamento entre as entidades se d atravs de atributos comuns entre as
entidades. Por exemplo: na entidade Cliente temos o atributo cdigo do cliente e na
entidade Venda, tambm temos o atributo cdigo do cliente, para o qual a venda foi
realizada.

Teoria

Der diagrama
Entidade - relacionamento

a representao do modelo conceitual de dados. Neste diagrama utilizamos


os seguintes smbolos:

Atributo
Atributo identificador
Entidade

Relacionamento

Linha de ligao
www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1
Exemplo de um DER:

1
1:N

Cliente

Faz

Pedido

CArdinalidade

Teoria

Indicam quantas ocorrncias de uma entidade participam, no mnimo e no


mximo, do relacionamento. Ela colocada sobre o relacionamento. No exemplo
acima temos uma cardinalidade 1:N; isso significa que 1 Cliente pode fazer N Pedidos,
mas que cada Pedido de apenas 1 Cliente, dando uma cardinalidade 1:N (leia-se 1
para N).
As cardinalidades representam os tipos de relacionamentos, que podem ser 1:1,
1:N, N:1 ou N:N.
Cardinalidade 1:1 uma instncia da entidade A se relaciona com nenhuma ou
somente uma instncia da entidade B. Exemplo: As entidades Fotografia e Cliente
possuem uma cardinalidade 1:1 porque uma Fotografia exibe apenas 1 Cliente e 1
Cliente possui apenas 1 Fotografia.

1:1
Cliente

Exibe

www.grandeporte.com.br

Fotografia

(11) 4427-4579(11) 9 9903-3218

Parte 1
Em um relacionamento com cardinalidade 1 para 1, existe o lado opcional e o
lado obrigatrio. O atributo que identifica o lado opcional deve aparecer no lado
obrigatrio, para que haja o relacionamento. No exemplo acima, um Cliente pode no
ter Fotografia, que opcional. Porm toda Fotografia pertence a um Cliente, que
obrigatrio. Ento o atributo Cdigo Fotografia deve aparecer na entidade Cliente.
Cardinalidade 1:N uma instncia da entidade A se relaciona com nenhuma,
uma ou muitas instncias da entidade B. Exemplo: As entidades Classificao e
Cliente possuem um relacionamento com cardinalidade 1:N, porque uma Classificao,
por exemplo 5 estrelas, pode classificar muitos Clientes e cada Cliente possui apenas
1 classificao.

N:1
Cliente

Classifica

1
1

Classificao

Em um relacionamento com cardinalidade 1:N ou N:1, o atributo que identifica


o lado 1 deve aparecer no lado N, para que haja o relacionamento. No Exemplo, uma
Classificao pode no ter Cliente relacionado, pode ter 1 ou pode ter muitos, mas um
Cliente pode ter somente uma Classificao.
Cardinalidade N:N uma instncia da entidade A se relaciona com nenhuma,
uma ou muitas instncias da entidade B e vice-versa. Exemplo: As entidades Cliente e
Produto, possuem um relacionamento com cardinalidade N:N porque 1 Cliente pode
comprar muitos Produtos e 1 Produto pode ser comprado por muitos Clientes.

N:N
Cliente

1
N

www.grandeporte.com.br

Compra

N
1

Produto

(11) 4427-4579(11) 9 9903-3218

Parte 1

Em um relacionamento com cardinalidade N:N no h como colocar o atributo


identificador de uma entidade na outra. Por exemplo, no podemos colocar o cdigo
do Cliente na entidade Produto, porque um Produto pode ser comprado por N Clientes.
Da mesma forma no podemos colocar o cdigo do produto no Cliente, porque um
Cliente pode comprar N Produtos.
Assim, um relacionamento com cardinalidade N:N precisa de uma entidade
associativa, que possa receber os atributos identificadores de ambas entidades.
Porm, no DER, no representamos essas entidades associativas, deixando a
cardinalidade N:N. Essa entidade associativa aparecer no Modelo Lgico.

Teoria

Grau do relacionamento

Indica o nmero de entidades que participam de um relacionamento.


Relacionamento Unrio: Tambm conhecido como auto-relacionamento.
quando existe relacionamento entre apenas uma entidade. Por exemplo, uma Pea
formada por nenhuma, uma ou muitas outras Peas.

Pea

N 1
Forma

N:N

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

10

Parte 1

Relacionamento Binrio: quando existe relacionamento entre apenas duas


entidades. Por exemplo, um Fornecedor comercializa Materiais que so utilizados em
diversos Projetos. Observe que temos 3 entidades e dois relacionamentos com grau 2
(binrio).

N:N

Fornecedor

Comercializa

N
1

Material
1 N

Utiliza

N:N

N 1
Projeto

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

11

Parte 1
Relacionamento Ternrio: quando existe relacionamento entre trs
entidades. Por exemplo, um Fornecedor comercializa Materiais que so utilizados em
Projetos especficos. Observe que temos 3 entidades e apenas 1 relacionamento com
grau 3 (ternrio).

Fornecedor

Material
N:N

N 1

N 1

Utiliza

N:N

N:N

Projeto

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

12

Parte 1

Atividade

Trabalho em dupla

a)
Uma Pizzaria precisa de um DER para
organizar seus dados. Foram identificadas as
seguintes entidades e atributos bsicos:

Pedido Nmero Pedido, Data e hora do Pedido.


Cliente Cdigo Cliente, Nome Cliente, Endereo Cliente, Telefone Cliente
Produto Cdigo do Produto, Descrio do Produto, Qtde. Estoque Produto
Entregador Cdigo Entregador, Nome Entregador, Alcunha Entregador
Histrico Cdigo Histrico, Texto Histrico, Data Criao Histrico, Data
ltima Alterao Histrico
Tabela de Preo Nmero Preo, Data Incio Preo, Preo
As seguintes regras devem ser observadas:

Um cliente pode fazer muitos pedidos ao longo do tempo, porm um pedido


pertence a um s cliente.
Um entregador pode entregar muitos pedidos, porm um pedido s pode ser
entregue por um entregador.
Um pedido pode ter muitos produtos e um produto ser solicitado em muitos
pedidos.
Um Cliente possui um histrico e cada histrico de apenas um cliente.
Um produto pode ter seu preo alterado vrias vezes ao longo do tempo, mas
cada preo de apenas um produto.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

13

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

14

Parte 1

Teoria

Modelo lgico de dados

uma viso mais detalhada do modelo de dados. Deriva do modelo conceitual,


possui entidades associativas em lugar de relacionamentos N:N e aglutina as
entidades com relacionamento 1:1 (aglutina o opcional no obrigatrio e elimina a
chave primria do opcional), apresenta apenas relacionamentos 1:N e N:1, adequao
ao padro de nomenclatura para entidades e atributos que devem ser bem
documentados em um dicionrio de dados.
Vamos fazer algumas definies:
Chave Primria (PK = Primary Key) o atributo ou agrupamento de atributos
(concatenao) que identifica de forma nica cada ocorrncia de instncia da entidade.
Por exemplo codprod (cdigo do produto), numnf (nmero da nota fiscal), etc
Chave Candidata o atributo ou agrupamento de atributos que, no sendo
chave primria, tambm identifica de forma nica uma ocorrncia da instncia da
entidade. Tambm conhecida como chave alternativa. Por Exemplo: cpfcli (CPF do
Cliente), cnpjemp (CNPJ da Empresa), etc.
Chave Estrangeira (FK = Foreign Key) o atributo ou agrupamento de
atributos que formam a chave primria de uma entidade em outra entidade, com a qual
faz relacionamento. Por exemplo, o codcli (cdigo do cliente na entidade nota fiscal), o
codprod (cdigo do produto na entidade item da nota fiscal), etc Em geral a chave
estrangeira mantem o mesmo nome da chave primaria de onde se originalizou.

Lgica?
comigo
Mesmo!

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

Teoria

15

Mer modelo
entidade - relacionamento

a representao do modelo lgico de dados. Neste modelo utilizamos os


seguintes smbolos:

Entidade

Nenhum (cardinalidade mnima)


Um

Nenhum ou um
Muitos (cardinalidade mxima)
Nenhum ou muitos
Um ou muitos
Nenhum, um ou muitos

Eu pedi um
rabo de galo!

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

16

Parte 1
Exemplo de M.E.R. (Modelo Entidade Relacionamento)

tabcliente

tabitemvenda

tabvenda

codcli (PK)
nomecli
enderecocli
cpfcli
telefonecli

numitem(PK)
numvenda (FK)
qtdeitem
codprod (FK)

numvenda (PK)
datavenda
codcli (FK)

tabproduto
codprod (PK)
descprod
precovenda
qtdeestoque
Neste MER podemos concluir que pode haver clientes para o qual nenhuma
venda foi feita. Isso significa que a empresa faz um cadastro de clientes em potencial.
H tambm produtos que ainda no foram vendidos e que toda venda possui no
mnimo 1 item vendido.
Os atributos de cada entidade so relacionados em uma planilha, suas chaves
primria (PK) e estrangeira (FK) so identificadas e algumas instncias so colocadas
para verificar se h coerncia com o modelo. Para o nosso exemplo temos:

codcli (PK)
0001
0002
0003
0004

Nomecli
ANTONIA MARIA ROSA
MARCOS VASCONVELOS
JOAQUIM JOSE
JOANA DA ARCA

codprod (PK)
0001
0002
0003
0004

tabcliente
enderecocli
RUA DAS FLORES, 123
RUA DAS OLIVEIRAS, 45
RUA DAS GOIABEIRAS, 432
RUA DAS FIGUEIRAS, 12

tabproduto
descprod
PARAFUSO SEXTAVADO 3/4
PORCA DE ACO NUMERO 12
MARTELO 1,5 KG
ALICATE UNIVERSAL

numvenda (PK)
00001
00002
00003

tabvenda
datavenda
20/05/2009
12/06/2009
30/10/2009

www.grandeporte.com.br

cpfcli
23244454378
23456578733
32145398745
21234589755

precovenda
12.32
10.15
35.78
43.54

telefonecli
49993433
44335566
32226778
43346656

qtdeestoque
1230
230
23
49

codcli (FK)
0002
0002
0001

(11) 4427-4579(11) 9 9903-3218

17

Parte 1

TABVENDA

TABVENDA

TABITEMVENDA

TABPRODUTO

TABPRODUTO

Sempre que no D.E.R. for definido um relacionamento com cardinalidade N:N,


deveremos substitu-lo por uma entidade associativa. O procedimento para isto o
seguinte:
1) desenhar as entidades com cardinalidade N:N e represent-las com os
smbolos do M.E.R. conforme a imagem esquerda.
2) colocar a entidade associativa entre elas e o N que estava nas pontas vai
para o meio invertendo a ordem: o de baixo sobe e o de cima desce.

Simples
assim ?

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

18

Parte 1

numitem (PK)
00001
00002
00003
00004
00005
00006

tabitemvenda
numvenda (FK)
qtdeitem
00001
3
00001
2
00001
3
00002
5
00003
4
00003
1

codprod (FK)
0004
0002
0001
0001
0001
0004

Ao se montar uma chave primria de uma entidade associativa, temos trs


opes, podemos usar um NSU (Nmero Sequencial nico) ou uma chave
concatenada (FK+NSU ou FK+FK).
1. NSU
Uma NSU um nmero natural, comeando de 1 e sempre acrescido de 1 a
cada nova linha (tupla) da tabela. No exemplo acima foi usada uma NSU para a chave
primria de todas as entidades (tabelas).
2. FK+NSU
Na chave primria concatenada, a entidade tabitemvenda recebe o atributo
numvenda como chave estrangeira, concatenada ao numitem para formar uma chave
primria concatenada, como mostra a tabela abaixo:

tabitemvenda
(numvenda (FK) + numitem) (PK)
qtdeitem
0000100001
3
0000100002
2
0000100003
3
0000200001
5
0000300001
4
0000300002
1

codprod (FK)
0004
0002
0001
0001
0001
0004

Observe que o numvenda se repete e o numitem recomea em 1 para cada


novo item, mas concatenados no ocorre repetio, sendo uma chave primria vlida.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

19

Parte 1
3. FK+FK

Outra forma de montar uma chave primria concatenada unir numvenda com
o codprod, como mostra a tabela abaixo.

tabitemvenda
(numvenda (FK) + codprod(FK)) (PK)
0000100004
0000100002
0000100001
0000200001
0000300001
0000300004

www.grandeporte.com.br

qtdeitem
3
2
3
5
4
1

(11) 4427-4579(11) 9 9903-3218

20

Parte 1

Atividade

Trabalho em dupla

Uma Pizzaria precisa de um MER para organizar


seus dados. Foram identificadas as seguintes entidades e
atributos bsicos:

Pedido Nmero Pedido, Data e hora do Pedido.


Cliente Cdigo Cliente, Nome Cliente, Endereo Cliente, Telefone Cliente
Produto Cdigo do Produto, Descrio do Produto, Qtde. Estoque Produto
Entregador Cdigo Entregador, Nome Entregador, Alcunha Entregador
Histrico Cdigo Histrico, Texto Histrico, Data Criao Histrico, Data
ltima Alterao Histrico
Tabela de Preo Nmero Preo, Data Incio Preo, Preo
As seguintes regras devem ser observadas:

Um cliente pode fazer muitos pedidos ao longo do tempo, porm um pedido


pertence a um s cliente.
Um entregador pode entregar muitos pedidos, porm um pedido s pode ser
entregue por um entregador.
Um pedido pode ter muitos produtos e um produto ser solicitado em muitos
pedidos.
Um Cliente possui um histrico e cada histrico de apenas um cliente.
Um produto pode ter seu preo alterado vrias vezes ao longo do tempo, mas
cada preo de apenas um produto.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

21

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

22

Parte 1

www.grandeporte.com.br

ENTREGADOR

PRODUTO

CLIENTE

Faa tabelas, com instncias dos atributos para verificar se a modelagem est
correta.

(11) 4427-4579(11) 9 9903-3218

Parte 1
PRECO

PEDIDO

ITEM

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

23

24

Parte 1

Teoria

modelo fsico de dados

O Modelo Fsico j traz detalhes da implementao fsica desses dados no


SGBD escolhido, tais como o tipo de dado, seu tamanho e domnio.
Domnio so os possveis valores de um atributo. Por exemplo: o atributo
alturaaluno tem como domnio os valores de 0 a 3 metros. Para garantir que o atributo
tenha os valores definidos no Domnio escrevemos restries (constraints), por
exemplo: alturaaluno> 0 andalturaaluno< 3
O nome da Entidade e de seus atributos deve seguir as regras de nomeao
do SGBD, no podendo ter espao em branco, letras acentuadas, hfem e cedilha em
sua formao.
Segue abaixo o modelo fsico da entidade Produto:

ATRIBUTO
CODPROD
DESCPROD
PRECOVENDA
QTDEESTOQUE

TIPO
CHAR(4)
VARCHAR(40)
DECIMAL (8,2)
SMALLINT

Produto
UNICIDADE
UNIQUE

PREENCHIMENTO
NOT NULL
NOT NULL

RESTRICAO

>0
>= 0

Fsico?
comigo
Mesmo!

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

25

Practice

Atividade

Trabalho em dupla

Um Lava-Rpido precisa de um DER para


organizar seus dados. Foram identificadas as seguintes
entidades e atributos bsicos:

Ordem de Servio Nmero OS, Data e hora OS


Veculo Placa veculo, modelo veculo, Cor veculo, Ano veculo
Cliente Cdigo Cliente, Nome Cliente, Endereo Cliente, Telefone Cliente
Servio Cdigo Servio, Descrio Servio
Funcionrio Cdigo Funcionrio, Nome Funcionrio
Tabela de Preo Nmero Preo, Data Incio Preo, Preo
Fotografia do Veculo Nmero da Fotografia, Data Fotografia, Imagem
Fotografia
As seguintes regras devem ser observadas:

Um cliente pode solicitar muitas OS, mas cada OS de apenas 1 cliente.


Uma OS atua sobre apenas um veculo, mas um veculo pode ter muitas OS.
Uma OS pode executar muitos servios e um servio pode ser solicitado por
muitas OS.
Um funcionrio participa de muitas OS e uma OS pode ter a participao de
muitos funcionrios.
Um servio pode ter seu preo alterado vrias vezes ao longo do tempo, mas
cada preo de apenas um servio.
Um veculo pode ter nenhuma ou uma fotografia, mas uma fotografia exibe
apenas um veculo.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

26

Parte 1

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

Atividade

27

Trabalho em dupla

Um Lava-Rpido precisa de um MER para


organizar seus dados. Foram identificadas as seguintes
entidades e atributos bsicos:

Ordem de Servio Nmero OS, Data e hora OS


Veculo Placa veculo, modelo veculo, Cor veculo, Ano veculo
Cliente Cdigo Cliente, Nome Cliente, Endereo Cliente, Telefone Cliente
Servio Cdigo Servio, Descrio Servio
Funcionrio Cdigo Funcionrio, Nome Funcionrio
Tabela de Preo Nmero Preo, Data Incio Preo, Preo
Fotografia do Veculo Nmero da Fotografia, Data Fotografia, Imagem
Fotografia
As seguintes regras devem ser observadas:

Um cliente pode solicitar muitas OS, mas cada OS de apenas 1 cliente.


Uma OS atua sobre apenas um veculo, mas um veculo pode ter muitas OS.
Uma OS pode executar muitos servios e um servio pode ser solicitado por
muitas OS.
Um funcionrio participa de muitas OS e uma OS pode ter a participao de
muitos funcionrios.
Um servio pode ter seu preo alterado vrias vezes ao longo do tempo, mas
cada preo de apenas um servio.
Um veculo pode ter nenhuma ou uma fotografia, mas uma fotografia exibe
apenas um veculo.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

Vai um
MER a?

28

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

29

Faa tabelas, com instncias dos atributos para verificar se a modelagem est
correta.
VEICULO

CLIENTE

SERVICO

FUNCIONARIO

OS

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

30

Parte 1
FUNCOS

SERVOS

PRECO

T MEIO
APERTADO!

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

31

Parte 1

1
Performance

Trabalho em dupla

Atividade

Dado o DER abaixo, representando a camada de


dados de um sistema de informao de uma loja de som
automotivo, referente a uma loja que vende e/ou instala
som automotivo, fazer o MER. Determine as chaves
primrias, estrangeiras e se necessrio, represente as
entidades associativas.

N:N

N:1

tabforpag

N
Paga

tabfornec

1 N

1 N

vende

N:N

N1

N:N

N
tabvenda

1
Gera

Vende

tabcliente

N:N

N1

N
Fornece

tabproduto

www.grandeporte.com.br

tabservico

(11) 4427-4579(11) 9 9903-3218

32

Parte 1

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

33

Faa tabelas, com instncias dos atributos para verificar se a modelagem est
correta.
TABCLIENTE

TABSERVICO

TABPRODUTO

TABFORNEC

TABFORPAG

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

34

Parte 1
TABVENDA

TABPAGAMENTO

TABFORNECIMENTO

TABPRODVENDIDO

TABSERVVENDIDO

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 1

35

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

36

Parte 1

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

regular

www.grandeporte.com.br

ruim

Muito ruim

(11) 4427-4579(11) 9 9903-3218

Parte

Matemtico britnico, esteve envolvido com o trabalho de


Codd no desenvolvimento do modelo relacional. Seu livro
Introduo a Sistemas de Banco de Dados amplamente
reconhecido como texto fundamental para a rea.
Christopher J. Date
1941 (72)

Verso 2.2.3a

Parte 2

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe?


O que voc no sabe?
Porque importante conhecer estes tpicos?
Quais so os seus temores?
O que voc considera difcil?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos.Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 2

Presentation

Histria

Normas e mais normas

Existe outra forma de modelar os dados, s seguir as NORMAS. Codd, Date


e Boyce contriburam muito para o desenvolvimento de um conjunto de regras que
auxiliam na modelagem.
O objetivo primeiro da modelagem a economia de disco, evitando a
redundncia dos dados, mas atualmente com o preo do Gigabyte abaixo de R$ 0,10
e usurios cada vez mais impacientes, o foco mudou para performance.
Mesmo assim, fundamental saber modelar usando essas regras para depois,
racionalmente, colocar redundncia de dados, objetivando uma maior performance.
A XPTO consultoria em desenvolvimento de software conta com voc para
perpetuar sua fama de ter os modelos de dados mais bem equilibrados entre
economia e performance.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 2

Teoria

Normaliza o

Aps o levantamento dos dados (atributos) que daro suporte aos negcios de
um empreendimento preciso organiz-los em entidades e relacion-las entre si.
Para que se evite ao mximo a redundncia de dados, ou seja, ter os mesmos
dados repetidos em vrias entidades, foi elaborado por Edgar Frank Codd (matemtico
britnico) um conjunto de regras, que passou a ser conhecido como Normalizao,
que uma vez seguidas, eliminam essa redundncia de dados.
A motivao para a criao da Normalizao foi a baixa capacidade de
armazenamento das primeiras unidades de disco, como mostra a figura abaixo.

Disco IBM 350


Apresentado em 13/09/1956
Pilha de 40 discos de 24 polegadas
Capacidade 4,4 Megabytes
Aluguel de US$ 35.000,00

Edgar Frank Codd


23/08/1923 18/04/2003

Esse conjunto de regras denominado Formas Normais. Embora existam 7


formas normais, na maioria dos casos apenas as 3 primeiras, propostas originalmente
por Codd em 1970 so usadas.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 2
Para aplicarmos as formas normais, precisamos de um agrupamento de dados
no normalizado. Como exemplo, vamos pegar alguns dados (atributos) de uma Nota
Fiscal, coloc-las em uma tabela e definir instncias para as linhas (tuplas).
Atributos

Instncia 1

Instncia 2

Instncia 3

Nmero NF
1025
1025
1025
Data Emisso NF
25/10/2009
25/10/2009
25/10/2009
CNPJ Cliente
09.154.125/0001-10
09.154.125/0001-10
09.154.125/0001-10
Razo Social Cliente
Chamex Inc Paper
Chamex Inc Paper
Chamex Inc Paper
Endereo Cliente
Rua Davila, 34 - Centro - SP Rua Davila, 34 - Centro - SP Rua Davila, 34 - Centro - SP
Telefone Cliente
11-3221-8844
11-3221-8844
11-3221-8844
CNPJ Transportadora
07.458.478/0001-58
07.458.478/0001-58
07.458.478/0001-58
Razo Social Transportadora
Zaz Traz Transportes
Zaz Traz Transportes
Zaz Traz Transportes
Endereo Transportadora
Av. Angela, 22 - Centro - SBC Av. Angela, 22 - Centro - SBC Av. Angela, 22 - Centro - SBC
Telefone Transportadora
11-4432-8844
11-4432-8844
11-4432-8844
Nmero Item NF
1
2
3
Codigo Produto
1232
3221
8776
Descrio Produto
Scanner HP Super
Computador Bsico
Impressora Jato Tinta HP
Preo Unitrio Produto
450,13
1250,21
333,13
Qtd. Estoque
200
80
127
Qtd. Item NF
5
12
3
Valor total do Item NF
2250,65
15002,52
999,39
Valor total da NF
18252,56
18252,56
18252,56

TUPLA ?

Neste exemplo, temos uma entidade com


18 atributos, trata-se de uma Nota Fiscal (com
dados bsicos) onde foram vendidos 3 produtos
para um mesmo Cliente e transportados pela
mesma Transportadora. Agora vamos aplicar as
regras de normalizao esse agrupamento de
dados no normalizado.

Voc no
quis dizer
SUPLA !

Eu sou a Norma!
Tenho algumas
normas para
voc...

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 2

Primeira forma
normal (1fn)

Teoria

Um agrupamento de dados est na 1FN se no possuir dados em


repetio (ocorrncia).
Observe que no exemplo acima, os dados em destaque (cinza) so digitados
repetidamente, para cada novo item da Nota Fiscal. Para que fiquem na 1FN, ser
necessrio dividir o agrupamento de dados em duas entidades, Nota Fiscal e Item
Nota Fiscal, como mostra a tabela abaixo:
Nota Fiscal
Nmero NF (PK)
1025
Data Emisso NF
25/10/2009
CNPJ Cliente
09.154.125/0001-10
Razo Social Cliente
Chamex Inc Paper
Endereo Cliente
Rua Davila, 34 - Centro - SP
Telefone Cliente
11-3221-8844
CNPJ Transportadora
07.458.478/0001-58
Razo Social Transportadora
Zaz Traz Transportes
Endereo Transportadora
Av. Angela, 22 - Centro - SBC
Telefone Transportadora
11-4432-8844
Valor total da NF
18252,56
Item Nota Fiscal
Nmero Item NF (PK)
Nmero NF (FK)
Codigo Produto
Descrio Produto
Preo Unitrio Produto
Qtd. Estoque
Qtd. Item NF
Valor total do Item NF

1
1025
1232
Scanner HP Super
450,13
200
5
2250,65

2
1025
3221
Computador Bsico
1250,21
80
12
15002,52

3
1025
8776
Impressora Jato Tinta HP
333,13
127
3
999,39

Foram definidas as chaves primrias e estrangeiras das entidades e os dados


da Nota Fiscal agora s aparecem uma vez, pois esto relacionados pela chave
estrangeira Numero NF na entidade Item Nota Fiscal.
C. J. Date

Norma
nmero um!

Uma relao de variveis est


em 1FN, se e somente se, em
todo valor vlido dessa relao
de variveis, cada tupla contm
exatamente um valor para cada
atributo

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 2

Teoria

segunda forma
normal (2fn)

Um agrupamento de dados est na 2FN se estiver na 1FN e todo atributo


no chave depender funcionalmente da chave primria.
O atributo B depende funcionalmente do atributo A, indica-se AB, se quando
se muda o valor de A, tambm muda o valor de B. Por exemplo, A Descrio do
Produto depende funcionalmente do Cdigo do Produto, pois toda vez que o Cdigo
do Produto muda, muda tambm a Descrio do Produto, pois se trata de outro
Produto.
Vamos analisar essas duas entidades e colocar setas a partir dos atributos no
chave em direo ao atributo que dependam funcionalmente.
Nota Fiscal
Nmero NF (PK)
Data Emisso NF
CNPJ Cliente
Razo Social Cliente
Endereo Cliente
Telefone Cliente
CNPJ Transportadora
Razo Social Transportadora
Endereo Transportadora
Telefone Transportadora
Valor total da NF

1025
25/10/2009
09.154.125/0001-10
Chamex Inc Paper
Rua Davila, 34 - Centro - SP
11-3221-8844
07.458.478/0001-58
Zaz Traz Transportes
Av. Angela, 22 - Centro - SBC
11-4432-8844
18252,56

Item Nota Fiscal


Nmero Item NF (PK)
Nmero NF (FK)
Codigo Produto
Descrio Produto
Preo Unitrio Produto
Qtd. Estoque
Qtd. Item NF
Valor total do Item NF

www.grandeporte.com.br

1
1025
1232
Scanner HP Super
450,13
200
5
2250,65

(11) 4427-4579(11) 9 9903-3218

Parte 2

Foram localizados atributos que dependem funcionalmente de outros atributos


no chaves. Esses atributos no chave iro formar outras entidades. O atributo da
qual eles dependem funcionalmente ser a chave primria dessa nova entidade e
chave estrangeirana entidade original. As novas entidades criadas so Cliente,
Transportadora e Produto. Aps a aplicao da 2FN temos:

Nota Fiscal
Nmero NF (PK)
Data Emisso NF
CNPJ Cliente (FK)
CNPJ Transportadora (FK)
Valor total da NF

1025
25/10/2009
09.154.125/0001-10
07.458.478/0001-58
18252,56

Item Nota Fiscal


Nmero Item NF (PK)
Nmero NF (FK)
Codigo Produto (FK)
Qtd. Item NF
Valor total do Item NF

1
1025
1232
5
2250,65

2
1025
3221
12
15002,52

3
1025
8776
3
3075,00

C. J. Date
Norma
nmero dois!

Uma relao de variveis est

em 2FN, se e somente se, est


em

1FN

chave

todo

atributo

no

irredutivelmente

dependente da chave primria

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

10

Parte 2

Teoria

terceira forma
normal (3fn)

Um agrupamento de dados est na 3FN se estiver na 2FN e os atributos


que no so chave no podem depender de forma transitiva de outro atributo
que tambm no chave.
O atributo Valor total do Item NF calculado como sendo o produto entre os
atributos Qtd. Item NF e Preo Unitrio Produto. Temos um atributo no chave que
depende do contedo de outros atributos no chave. Para que o agrupamento de
dados fique na 3FN o atributo Valor total do Item NF deve ser eliminado.
A mesma regra se aplica ao atributo Valor total da NF, que a soma dos totais
dos itens da nota fiscal. Esse atributo tambm deve ser eliminado. Finalmente,
utilizando a notao do MER, temos:

E essa
a Norma
nmero trs!

Cliente
CNPJ Cliente (PK)
Razo Social Cliente
Endereo Cliente
Telefone Cliente

Nota Fiscal
Nmero NF (PK)
Data Emisso NF
CNPJ Cliente (FK)
CNPJ Transportadora (FK)

Transportadora
CNPJ Transportadora (PK)
Razo Social Transportadora
Endereo Transportadora
Telefone Transportadora

C. J. Date
Uma relao de variveis est

Item Nota Fiscal


Nmero Item NF (PK)
Nmero NF (FK)
Codigo Produto (FK)
Qtd. Item NF

Produto
Codigo Produto (PK)
Descrio Produto
Preo Unitrio Produto
Qtd. Estoque

www.grandeporte.com.br

em 3FN, se e somente se, est


em

2FN

todo

atributo

no

chave dependente de forma no


transitiva da chave primria

(11) 4427-4579(11) 9 9903-3218

11

Parte 2

Teoria

O impacto da normaliza o

O objetivo primeiro da Normalizao a economia de espao em disco. Isso


obtido com a criao de mais entidades e o uso abundante de entidades associativas.
O problema da Normalizao Extrema que para se obter informaes dos
modelos de dados, necessrio buscar esses dados em diversas entidades o que
impacta a performance das consultas.
Nos ltimos anos, temos visto uma crescente diminuio de custo dos
dispositivos de armazenamento de massa (HDs, SSDs, etc), e tambm um crescente
aumento na velocidade com que o usurio quer o resultado de sua consulta, o que nos
faz refletir sobre at onde vale a pena Normalizar, e o que vale a pena redundar.
A figura abaixo mostra que necessrio encontrar um ponto de equilbrio entre
a Normalizao extrema e a redundncia total. Este ponto de equilbrio varia em cada
caso, cabendo ao analista de sistemas e o DBA localiz-lo.

Economia
do espaco
,
em disco

Ganho de
Performance

Normalizar

Desnormalizar

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

12

Parte 2

Practice

Atividade

Trabalho em dupla

Normalizar os agrupamentos de dados abaixo,


desenhando um MER com as entidades, relacionamentos,
atributos e chaves.

1) Ordem de Compra (cdigo ordem de compra, data de emisso, cdigo do


fornecedor, nome do fornecedor, endereo do fornecedor, valor total da ordem).
Cada ordem de compra possui um ou vrios itens com os seguintes atributos:
nmero item de compra, cdigo do material, descrio do material, quantidade
comprada, valor unitrio e valor total do item.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 2

13

2) Empregado (Nmero do Empregado, Nome do Empregado, Nmero do


Departamento, Nome do Departamento, Nmero do Gerente, Nome do Gerente,
Nmero do Projeto, Nome do Projeto, Data de Incio do Projeto, Data de Trmino
do Projeto, Nmero de horas trabalhadas no projeto). Vale a pena notar que o
gerente um empregado.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

14

Parte 2

Atividade

Reviso aos pares

Normalizar os agrupamentos de dados abaixo,


desenhando
um
MER
com
as
entidades,
relacionamentos, atributos e chaves, depois pea para
que seu colega corrija.

3) Notas Fiscais (Nmero NF, Srie, Data emisso, Cdigo Cliente, Nome cliente,
Endereo cliente, CNPJ cliente, Cdigo Mercadoria, Descrio Mercadoria,
Quantidade vendida, Preo de venda, Total da venda da Mercadoria e Total
Geral da Nota). Cada nota pode ter mais do que uma mercadoria. O nmero da
nota fiscal recomea em 1 para cada srie da nota fiscal.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 2

15

4) Inscrio (Cdigo do Aluno, Nome do Aluno, Telefone para contato, Ano de


Admisso no curso, Cdigo da Disciplina, Nome da Disciplina, Cdigo do Curso,
Nome do Curso, Data da Matricula na Disciplina). O aluno escolhe qual
disciplina, pertencente ao curso, quer cursar.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

16

Parte 2

Atividade

Flip chart

Normalizar os agrupamentos de dados abaixo,


desenhando um MER com as entidades, relacionamentos,
atributos e chaves, utilize um flip-chart, apresente aos
colegas e anote o melhor entre eles.
5) Paciente (nmero do paciente, nome do paciente,
nmero do quarto, descrio do quarto, nmero de
cmodos no quarto, nmero da cama). Mdico (cdigo do
mdico, nome do mdico, fone do mdico).

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 2

17

Performance

Atividade

Trabalho em dupla

A biblioteca de uma universidade empresta livros


para seus alunos regularmente matriculados. Foram
coletadas as seguintes informaes com a bibliotecria.

1 livro tem 1 ou N autores


1 autor pode escrever 1 ou N livros
1 assunto pode aparecer em 1 ou muitos livros
1 livro pode ter 1 ou N exemplares
1 exemplar sempre de 1 livro
Os exemplares so emprestados aos alunos. Cada exemplar possui um
nmero de identificao nico, chamado TOMBO
O prazo de emprstimo sempre de uma semana, podendo ser renovado,
desde que o livro no esteja reservado por outro aluno
Um aluno pode reservar 1 ou N livros
Para cada dia de atraso na devoluo de um exemplar cobrada uma multa de
um determinado valor
Alunos em atraso no podem pegar novos emprstimos

Fazer um MER para atender as necessidades desse sistema

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

18

Parte 2
Lembre-se
Das trs
Normas

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 2

19

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

20

Parte 2

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

regular

www.grandeporte.com.br

ruim

Muito ruim

(11) 4427-4579(11) 9 9903-3218

Parte

O nome DB2 foi dado para o Sistema de Gerenciamento


de Banco de Dados que a IBM lanou em 1983 baseado em
SQL/DS para seu mainframe. A principio o produto foi
chamado System R que fora iniciado em 1978. O projeto DB2
comeou no inicio dos anos 70 quando Edgar Frank Codd,
trabalhando para IBM descreveu a teoria dos Banco de dados
Relacionais e publicou sua teoria em Junho de 1970.

Verso 2.2.3a

Parte 3

Preparation

3
Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe?


O que voc no sabe?
Porque importante conhecer estes tpicos?
Quais so os seus temores?
O que voc considera difcil?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos.Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 3

Presentation

Histria

Mo na massa!!

Vamos para a Parte Prtica do nosso curso de COBOL Level 2. Voc comear
a usar o DB2 a princpio de forma interativa, depois via programa COBOL.
Para poder usar o DB2 em seu Hrcules, voc precisar se logar no TSO
usando a Procedure IKJJANIN e na tela do OS/390, voc precisar subir o DB2 com o
seguinte comando:

Consegue ver
o hfen do incio?

-DB2N START DB2

Pratique bastante no s aqui na Grande Porte, mas tambm no conforto de


seu lar. Lembre-se que a prtica leva perfeio.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 3

Teoria

Introdu o ao db2

O DB2 um Sistema Gerenciador de Banco de Dados (SGBD) ou Data Base


Management System (DBMS) relacional da IBM. O DB2 a nova tecnologia,
enquanto VSAM a velha.
O VSAM (que a sigla para Virtual Storage Access Method) somente um
mtodo de acesso dados. Nele voc pode ler um arquivo VSAM no mtodo
sequencial (sequential mode) registro por registro, fazer acesso randmico (random
access), saltar (pular) diretamente para um registro em particular. O Skip-sequential
(salto-sequencial) o melhor dos dois mundos, voc pula para o 1 registro desejado,
e ento comeca a leitura sequencial dos registros subsequentes um por um.
O DB2 um pacote de software completo, que permite criar, armazenar,
atualizar e recuperar dados de forma sistemtica. Suas caractersticas so:
a) Abstrao de dados. Ele apresenta uma viso lgica e estruturada dos
dados para o usurio. O usurio no precisa se preocupar sobre os detalhes de
como os dados esto fisicamente armazenados no disco (DASD).
b) Independncia dos dados. O DB2 prov uma camada de
independncia entre a aplicao ou programa COBOL e os dados. Toda vez que a
estrutura dos dados muda (como adicionar uma nova coluna na tabela
Empregado) voc no precisa reescrever o programa COBOL. Essa
independncia dos dados conhecida como arquitetura em duas camadas
(TwoTiers).
c) Segurana dos dados. O DB2 controla o acesso aos dados. Nem todo
mundo pode ver todos os dados. Voc pode v-los somente se obter todos os
privilgios necessrios.
d) Gerenciamento de transaes e concorrncia. O DB2 gerencia todas
as transaes e garante que os dados permaneam consistentes. Ele prov um
mecanismo de travamento, para acesso concorrente aos dados, ou seja, enquanto
uma transao est usando um determinado dado, nenhuma outra tem acesso a
ele.
e) Recuperao de dados. Quando ocorrem crashes (erros fsicos no
disco) o DB2 permite que voc recupere e restaure rapidamente os dados originais.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 3

Teoria

Elementos do db2

STORAGE GROUP (Grupo de Armazenamento)


um conjunto de volumes (discos) que o DB2 utiliza para criar os Tablespaces
e os ndices. Os discos devem ter o mesmo DeviceType (3390). Fisicamente o DB2
utiliza arquivos VSAM. O DB2 fica responsvel pelo gerenciamento do espao alocado.
Ele quem emite os comandos de DELETE/DEFINE CLUSTER. Os discos de um
STORAGE GROUP novo precisam ser dedicados ao DB2.
DATA BASE (Banco de Dados)
um conjunto de Tablespaces, agrupados segundo critrios do DBA, por uma
questo de organizao.
TABLESPACE (Espao de Tabela)
um Dataset fsico VSAM LDS (Linear Data Set) que armazena linhas de uma
ou mais tabelas. Cada Tablespace consiste de um nmero de pginas. Suas pginas
podem ter o tamanho de 4K, 8K, 16K ou 32K. Uma linha de tabela precisa estar toda
em uma pgina. O tamanho da pgina o limite para o tamanho de uma linha. H 3
tipos de Tablespace:
a) Simples: As pginas de seus Datasets podem conter dados de uma ou mais
tabelas.
b) Segmentado: dividido em segmentos (conjuntos de pginas) cada segmento
s pode conter dados de uma tabela. a utilizao recomendada pois permite
ao DB2 uma utilizao melhor de espao.
c) Particionado: Recomendado para tabelas gigantes. dividido em parties
(Datasets VSAM). Requer um ndice Cluster com uma faixa de valores
estabelecidos para cada partio. O DB2 se baseia nesta faixa para saber em
qual partio gravar uma linha.

INDEXSPACE (Espao de ndice)


Um indexspace uma estrutura de armazenamento do DB2 que contm
apenas um ndice. Quando voc cria um ndice, um indexspace definido
automaticamente no mesmo data base da tabela que ele indexa.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 3
TABELAS
As TABELAS so estruturas lgicas mantidas pelo DB2 para representar uma
ENTIDADE. formada por um conjunto de colunas. Exemplo:

Tabela

FUNCIONARIOS

COLUNAS
As COLUNAS so os ATRIBUTOS da ENTIDADE. Nelas esto armazenados
os dados (instncias) da ENTIDADE. O nome e o formato das colunas so mantidos
pelo DB2.
Tabela

FUNCIONARIOS
CODIGO
NOME
ENDERECO
DATAADMISSAO
SALARIO

Colunas

LINHA
Uma LINHA cada conjunto de valores das COLUNAS. Formam uma instncia
da ENTIDADE. Exemplo:

Tabela
Colunas
Linha 1
Linha 2

CODIGO
000010
000023

NOME
PEDRO ALVARES CABRAL
MARIA ANTONIETA

FUNCIONARIOS
ENDERECO
RUA DAS FLORES, 117
RUA GUILHOTINA, 21

DATAADMISSAO SALARIO
01/10/2001
5600.00
30/05/1987
4300.00

NDICES
uma lista ordenada de valores que apontam para os dados nas tabelas.
utilizada para agilizar a leitura dos dados, pois realiza busca binria. Tambm pode ser
usada para forar a unicidade dos dados (UNIQUE INDEX). Pode ser formado por
uma (simples) ou mais colunas (composto). Est armazenado em um VSAM LDS
conhecido como INDEXSPACE. H 3 tipos de ndices:
a) Unique: Fora a unicidade dos dados
b) Normal: Permite a duplicidade dos dados
c) Cluster: Usado para manter a sequncia fsica dos dados na Tablespace.

VIEW
uma tabela virtual, formada por um subconjunto de uma ou mais tabelas, sua
utilizao, em principio nada difere de uma tabela normal. Conforme o caso uma view
pode ser usada somente de leitura.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 3
SINNIMO
um nome alternativo (apelido) para uma Tabela ou View. Uma vez criado,
sua utilizao restrita a um Auth-id.(Proprietrio ou usurio).
LIAS
um nome alternativo (apelido) para uma Tabela ou View. Utilizado mais como
um nome local de uma tabela remota. Seu uso compartilhado.

Todos esses conceitos podem ser vistos na figura abaixo:

DATABASE X
VOLUME 1

TABLESPACE A
VIEW A

TABELA1

VIEW B

TABLESPACE A
INDEXSPACE 1
INDEX 1

TABELA2

INDEX 2

INDEX 1
INDEX 2

INDEXSPACE 2
VOLUME 2

TABLESPACE B

LIAS

TABELA3

TABLESPACE B

INDEXSPACE 3
INDEX 3

VOLUME 3

INDEX 3

SINNIMO

INDEX 4
INDEXSPACE 4

INDEX 4

Igualzinho
L em casa!

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

STORAGE GROUP

Parte 3

Teoria

Tipos de chaves

uma coluna ou conjunto de colunas selecionadas para identificar as linhas da


tabela. As chaves podem identificar linhas dentro da prpria tabela ou linhas de outra
tabela (Foreign Keys).
O DB2 aceita os seguintes tipos de KEYs:
UNIQUE KEY
Chave que identifica de maneira unvoca uma linha da tabela. No existe mais
de uma linha da tabela com a mesma UNIQUE KEY. A UNIQUE KEY tem as seguintes
propriedades:
deve ser no vazia (NOT NULL).
deve possuir um ndice nico (UNIQUE INDEX).
podem ocorrer nenhuma, uma ou muitas vezes na tabela.
PRIMARY KEY
Chave nica escolhida para identificar univocamente cada linha da tabela. A
PRIMARY KEY tem as seguintes propriedades:
deve ser uma UNIQUE KEY.
pode ser formada por mais de uma coluna da tabela (chave primria composta).
podem ocorrer nenhuma ou uma vez na tabela (no obrigatria)
PARENT KEY
uma PRIMARY KEY ou UNIQUE KEY de uma TABELA PAI (tabela PAI a
tabela da posio 1 na relao 1:N do MER). O valor da PARENT KEY ser replicado
nas FOREIGN KEY(chave estrangeira) das tabelas relacionadas (lado N na relao
1:N).

FOREIGN KEY
uma KEY em uma TABELA RELACIONADA (lado N na relao 1:N do MER)
que identifica uma linha da TABELA PAI. As propriedades da FOREIGN KEY so:
podem ocorrer nenhuma, uma ou muitas vezes na tabela.
podem ter contedo vazio (NULL) dependendo da regra de integridade
referencial.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

10

Parte 3

Teoria

Regras de Integridade

O DB2 possui algumas regras de validao de seus dados que so definidos


no momento da definio de suas tabelas. Estas validaes independem dos
programas que atualizam o banco de dados, e so executadas automaticamente
quando se incluem, alteram ou excluem dados das tabelas. As regras de integridade
so:
UNICIDADE.
a regra usada para definir UNIQUE KEYS. Esta regra define que uma ou
mais colunas (KEYS), da tabela no podem repetir valores.
INTEGRIDADE DE VALORES (CHECK CONSTRAINTS)
Esta regra define valores permitidos para colunas de uma tabela.
INTEGRIDADE REFERENCIAL
A INTEGRIDADE REFERENCIAL define a validade de uma FOREIGN KEY. Se
uma FOREIGN KEY no contm NULL, seu valor deve ser o da PARENT KEY da
TABELA PAI. A INTEGRIDADE REFERENCIAL deve ser definida na criao da tabela.
O DB2 testa a INTEGRIDADE REFERENCIAL nos comandos de incluso
(INSERT), alterao (UPDATE) e excluso (DELETE) dos programas conforme
abaixo:
a) INTEGRIDADE NA INCLUSO.
Se uma linha tiver uma coluna FOREIGN KEY com valor NOT NULL, deve
haver uma linha na PARENT TABLE com este valor na PARENT KEY.
b) INTEGRIDADE NA ALTERAO.
Se houver alterao em uma FOREIGN KEY, deve haver na PARENT TABLE
uma PARENT KEY com o novo valor da FOREIGN KEY.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 3

11

c) INTEGRIDADE NA EXCLUSO.
A excluso de linhas com FOREIGN KEY no tem restrio, mas se uma linha
tiver uma coluna com PARENT KEY, uma das 3 regras de excluso abaixo deve ser
definida na criao da tabela:
RESTRICT a excluso no ser efetuada se houver uma TABELA
DEPENDENTE com uma FOREIGN KEY com este valor.
CASCADE O DB2 far a excluso automtica de todas as linhas das
TABELAS DEPENDENTES com este valor na FOREIGN KEY. Se estas
excluses tiverem sucesso, a linha da PARENT TABLE ser excluda.
SET NULL As FOREIGN KEY nas TABELAS DEPENDENTES sero
alteradas para NULL.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

12

Parte 3

Teoria

Tipos de dados

Os formatos dos dados nas colunas de uma tabela DB2 se dividem em 3


grandes grupos:

STRING
NUMERIC
DATETIME

FORMATO STRING
o formato para armazenar caracteres. So eles:

CHAR

Define colunas de caracteres com tamanho fixo com at 255 caracteres.


Exemplo:
CODCLI

CHAR(6)

VARCHAR

Define colunas de caracteres com tamanho varivel. Podem conter at 32.704


caracteres, mas tamanhos acima de 255 tem restries em alguns comandos SQL.
Exemplo:
NOMECLI

VARCHAR(50)

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

13

Parte 3
FORMATOS NUMRICOS

INTEGER

Define colunas para conter nmeros inteiros usando 31 bits mais sinal. Uma
coluna INTEGER pode conter valores na faixa de 2.147.483.648 at +2.147.483.647.
Exemplo:
QUANTIDADE

INTEGER

SMALLINT

Define colunas para conter nmeros inteiros usando 15 bits mais sinal. Uma
coluna SMALLINT pode conter valores na faixa de 32.768 at +32.767. Exemplo:
IDADE

SMALLINT

DECIMAL

O tipo DECIMAL define colunas com nmeros reais (contendo parte inteira e
decimal). O DB2 aceita colunas DECIMAL com at 31 algarismos. Exemplo: Para
definir a coluna PRECO para 6 algarismos inteiros e 2 decimais (valores at
999999,99). Exemplo:
PRECO

DECIMAL(8,2)

REAL

O tipo REAL define colunas com nmeros no formato PONTO FLUTUANTE de


simples preciso. O DB2 usa 32 bits para este formato, e consegue controlar valores
na seguinte faixa:
-3,402 x 1038

-1,175 x 10-37

1,175 x 10-37

3,402 x 1038

Exemplo:
PESO REAL

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

14

Parte 3

DOUBLE

O tipo DOUBLE define colunas com nmeros no formato PONTO FLUTUANTE


de dupla preciso. O DB2 usa 64 bits para este formato, e consegue controlar valores
na seguinte faixa:
-1,79769 x 10 308

-2,225 x 10-307

2,225 x 10 -307

1,79769 x 10308

Exemplo:
MEDIDA DOUBLE

Com tantos formatos numricos, podemos seguir os seguintes critrios para


definir o melhor tipo de dado:
a) Faixa de valores requerido
b) Tipo de composio necessria para os processamentos
c) Comparao entre nmeros de tipos diferentes implica em
overhead necessrio para a converso e riscos maiores devido a
erros induzidos por arredondamento.

Vou criar meu


prprio
formato de
dado numrico.

Ops...

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 3

15

FORMATOS DATETIME
Os formatos DATETIME definem formatos para armazenar datas e horas. Os
valores no formato DATETIME podem fazer parte de expresses aritmticas, isto ,
pode-se somar e subtrair duas variveis com formato DATETIME. So 3 os tipos de
formato DATETIME:

DATE

O tipo DATE define uma coluna com datas. O formato interno um formato
binrio prprio do DB2, mas o contedo da coluna conter DIA, MES e ANO de uma
data. Exemplo:
DATANASCIMENTO

DATE

TIME

O tipo TIME define uma coluna com o horrio. O formato interno um formato
binrio prprio do DB2, mas o contedo da coluna conter HORA, MINUTO e
SEGUNDOS.Exemplo:
HORAPARTIDA

TIME

TIMESTAMP

O tipo TIMESTAMP define uma coluna com a data e hora do dia com preciso
at microssegundos. O formato interno um formato binrio prprio do DB2, mas a
coluna conter ANO, MES, DIA, HORA, MINUTO, SEGUNDOS e
MICROSSEGUNDOS. Exemplo:
DATACRIACAO

www.grandeporte.com.br

TIMESTAMP

(11) 4427-4579(11) 9 9903-3218

16

Parte 3

constantes

Teoria

No DB2 as constantes
APSTROFES. Exemplo:

alfanumricas

devem

ser

colocadas

entre

JOAQUIM JOSE DA SILVA XAVIER


As constantes numricas so escritas sem os apstrofes. As constantes com
decimais devem usar o ponto para separar as decimais. Exemplo:
3.14159
As constantes de DATA e HORA devem ser escritas no formato do exemplo
abaixo, entre apstrofes. Exemplo:
10/30/2010
2010-10-30
30.10.2010
16:35:15

Teoria

MM/DD/AAAA
AAAA-MM-DD
DD.MM.AAAA
HH:MM:SS

formato USA
formato ISO
formato EUR

Special registers

SPECIAL REGISTERS (registradores especiais) so variveis internas do DB2


com informaes do ambiente que os programas podem acessar e usar. A lista
extensa, e apresentamos abaixo uma relao com as mais usadas:

CURRENT DATE
CURRENT TIME
CURRENT TIMESTAMP
USER

Data do sistema operacional no formato DATE


Data do sistema operacional no formato TIME
TIMESTAMP do sistema operacional no formato TIMESTAMP
Usurio do sistema no formato CHAR(8)

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 3

17

Practice

3
Atividade

Reviso aos pares

Associe as caractersticas do DB2 com suas definies

a)
b)
c)
d)
e)

Abstrao de dados
Independncia dos dados
Segurana dos dados
Gerenciamento de transaes e concorrncia
Recuperao de dados

(XXXX) O DB2 controla o acesso aos dados. Nem todo mundo pode ver os dados.
Voc pode v-los somente se obter todos os privilgios necessrios.
(XXXX) O DB2 prove uma camada de independncia entre a aplicao ou programa
COBOL e os dados. Toda vez que a estrutura dos dados muda (como adicionar uma
nova coluna na tabela Empregado) voc no precisa reescrever o programa COBOL.
Essa independncia dos dados conhecida como arquitetura em duas camadas
(TwoTiers).
(XXXX) Quando ocorrem Crashes (erros fsicos no sistema) o DB2 permite que voc
recupere e restaure rapidamente os dados originais.
(XXXX) O DB2 gerencia todas as transaes e garante que os dados permaneam
consistentes. Ele prov um mecanismo de travamento, para acesso concorrente aos
dados, ou seja, enquanto uma transao est usando um determinado dado, nenhuma
outra tem acesso a ele.
(XXXX) Ele apresenta uma viso lgica e estruturada dos dados para o usurio. O
usurio no precisa se preocupar sobre os detalhes de como os dados esto
fisicamente armazenados no disco (DASD).

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

18

Parte 3

Atividade

Reviso aos pares

Associe os elementos do DB2 com o resumo se


suas definies.

a)
b)
c)
d)
e)
f)
g)
h)
i)
j)

StorageGroup
Data Base
Tablespace
Tabelas
Colunas
Linha
ndice
View
Sinnimo
Alias

(XXXX) um nome alternativo para uma tabela ou View. Seu uso compartilhado.
(XXXX) um subconjunto de uma ou mais tabelas. Sua utilizao em principio nada
difere de uma tabela normal.
(XXXX) um DATASET fsico VSAM LDS (linear dataset) que armazena linhas de
uma ou mais tabelas. Pode ser Simples, Segmentada ou Particionada.
(XXXX) So os atributos da Entidade. Seus nomes e formatos so mantidos pelo DB2.
(XXXX) um nome alternativo para uma Tabela ou View, com utilizao restrita.
(XXXX) um conjunto de valores das colunas, formam uma instncia da entidade.
(XXXX) um conjunto de Tablespaces e ndices, agrupados segundo critrios do DBA,
por uma questo de organizao.
(XXXX) um conjunto de volumes (Disco) que o DB2 utiliza para criar os Tablespaces
e os ndices.
(XXXX) So estruturas lgicas mantidas pelo DB2 para representar uma entidade.
(XXXX) uma lista ordenada de valores que apontam para os dados nas Tabelas.
usado para agilizar a leitura dos dados, pois realiza uma busca binria.
www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

19

Parte 3

Ca a-palavras

Atividade

Localize no quadro abaixo as palavras em vermelho.


O DB2 aceita uma grande variedade de tipos de dados,
tais como STRING, NUMERIC e DATETIME. Do primeiro tipo
temos CHAR e VARCHAR, cuja principal diferena que CHAR
armazena sempre o tamanho mximo daSTRING com espaos
direita e o VARCHAR s armazena a STRING informada
ignorando os espaos direita. Do segundo tipo temos
INTEGER, SMALLINT, DECIMAL, REAL, DOUBLE. Apesar de
haver vrios tipos numricos com capacidades diferentes o mais usado o DECIMAL,
pois permite ao desenvolvedor formatar o nmero (casas inteiras decimais) com total
preciso. Do terceiro tipo temos DATE, TIME e TIMESTAMP. Sempre que for
importante registrar o exato momento de um acontecimento (abertura de um
chamado,entrada e sada do estacionamento, incio e trmino de uma chamada
telefnica, etc) usamos TIMESTAMP, pois ele registra o tempo completo (ano, ms,
dia, hora, minuto, segundo e microsegundo).

S
P
I
C
X
R
E
A
L
X
C
T
O

U
E
N
L
C
O
M
M
A
S
O
O
T

B
R
T
O
P
E
N
U
M
E
R
I
C

T
F
O
S
G
E
P
Z
I
T
R
N
A

R
O
I
E
M
P
I
C
C
C
E
P
N

A
R
N
I
C
A
L
L
E
O
S
U
C

C
M
T
E
L
B
U
O
D
M
P
T
E

T
U
E
I
S
T
X
A
A
P
O
D
L

S
N
G
O
M
O
T
W
D
U
N
A
E

www.grandeporte.com.br

E
T
E
U
A
E
Y
R
D
T
D
T
N

L
I
R
T
L
R
S
L
A
E
L
E
V

E
L
O
P
L
E
2
T
X
W
N
T
I

C
V
W
U
I
A
B
E
A
H
G
I
R

T
A
I
T
N
D
D
O
M
M
W
M
O

V
R
D
S
T
R
I
N
G
O
P
E
N

A
C
H
A
R
E
N
A
C
V
3
S
M

L
H
C
L
O
S
P
B
D
E
4
D
E

(11) 4427-4579(11) 9 9903-3218

U
A
O
P
E
N
U
S
I
N
G
S
N

E
R
U
P
D
A
T
E
E
F
G
T
T

20

Parte 3

Atividade

Correndo contra o tempo

Nomeie as chaves como UNIQUE KEY, PRIMARY KEY,


PARENT KEY ou FOREIGN KEY, preenchendo as linhas do M.E.R
abaixo.

5 minutos

funcionario

departamento

codfunc
nomefunc
cpffunc
coddepto

coddepto
nomedepto

chamado
numchamado
datahorachamado
codfunc
textofunc

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

21

Parte 3

Performance

3
Atividade

Todos juntos

Dado o MER abaixo, atribua o melhor formato e


tamanho aos diversos atributos.

cliente
cnpjcliente (PK)
razaosocialcliente
enderecocliente
telefonecliente

notafiscal

transportadora

numeronf(PK)

cnpjtransportadora(PK)

dataemissaonf

razaosocialtransportadora

cnpjcliente(FK)

enderecotransportadora

cnpjtransportadora(FK)

telefonetransportadora

itemnotafiscal

produto

numeroitemnf(PK)

codigoproduto(PK)

numeronf(FK)

descricaoproduto

codigoproduto(FK)

precounitarioproduto

qtdeitemnf

qtdeestoque

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

22

Parte 3

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

regular

www.grandeporte.com.br

ruim

Muito ruim

(11) 4427-4579(11) 9 9903-3218

Parte

Don Chamberlin melhor conhecido como o co-inventor da


linguagem SQL (Structured Query Language), a linguagem de
banco de dados mais utilizada no mundo. Desenvolvida em
meados de 1970 por Chamberlin e Raymond Boyce, a SQL foi a
primeira linguagem comercial de sucesso para banco de dados
relacionais.
Donald Don Chamberlim
1944 - (68)

Verso 2.2.3

Parte 4

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe?


O que voc no sabe?
Porque importante conhecer estes tpicos?
Quais so os seus temores?
O que voc considera difcil?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos.Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 4

Presentation

Histria

Construindo a casa

Para dominar a linguagem SQL precisaremos construir uma infraestrutura de


algumas tabelas relacionadas, que usaremos para brincar de SQL.
Apesar de no ser usada por programadores, importante conhecer a
linguagem SQL DDL, pois pode despertar seu interesse pelo cargo de DBA (Data
Base Administrator), que precisa conhec-la a fundo.
Vamos ento construir nossa casa, onde desenvolveremos nossas habilidades
em SQL DDL.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 4

Teoria

A Linguagem sql
(Structured query language)

A SQL (Structure Query Language ou Linguagem de Consulta Estruturada)


uma linguagem de pesquisa declarativa para banco de dados relacional. Muitas das
caractersticas originais do SQL foram inspiradas na lgebra relacional.
A SQL foi desenvolvida originalmente em 1974 nos laboratrios da IBM em San
Jose (Califrnia) por Donald Don Chamberlin e Raymond F. Boyce, dentro do
projeto SYSTEM R, que tinha por objetivo demonstrar a viabilidade da implementao
do modelo relacional proposto por Edgard Frank Codd. O nome original da linguagem
era SEQUEL, acrnimo para StructuredEnglish Query Language (Linguagem de
Consulta Estruturada em Ingls), vindo da o fato de, at hoje, a sigla em ingls, ser
comumente pronunciada Squel ao invs de s-kiu-l, letra a letra. No entanto, em
portugus a pronuncia mais corrente a letra a letra sse-qu-le.
A linguagem SQL um grande padro em uso dos Sistemas Gerenciadores de
Bancos de Dados. Isso decorre de sua simplicidade e facilidade de uso. Ela se
diferencia de outras linguagens de consulta banco de dados no sentido em que uma
consulta SQL especifica a forma do resultado e no o caminho para chegar at ele.
Ela uma linguagem declarativa em oposio as outras linguagens procedurais. Isto
reduz o ciclo de aprendizado daqueles que iniciam na linguagem.
Embora a SQL tenha sido originalmente criada pela IBM, rapidamente surgiram
vrios dialetos desenvolvidos por outros produtores. Essa expanso levou a
necessidade de ser criado um padro para a linguagem. Essa tarefa foi realizada pela
American
National
Standards
Institute
(ANSI)
em
1986
e
pelo
InternationalOrganization for Standarnization (ISO) em 1987, mas isso no impediu a
proliferao de variaes e extenses produzidas pelos diferentes fabricantes de
Sistemas Gerenciadores de Bancos de Dados.
Os comandos da linguagem SQL podem ser usados em um dos modos abaixo:
SQL Interativo: Os comandos SQL so executadas diretamente em um terminal e
o resultado desses comandos so visualizados no prprio terminal. Utiliza-se um
programa que permite essa interao tal como o QMF e o SPUFI.
Programa com SQL Esttico: Os comandos SQL so codificados em uma
linguagem hospedeira, em nosso caso o COBOL, e aps o processo de
compilao esses comandos ficam imutveis no programa.
Programa com SQL Dinmico: Os comandos SQL so informados ao programa
em tempo de execuo. O comando passado em forma de texto para o DB2 para
ser resolvido e executado.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 4

Teoria

Ambientes para o uso do sql

Os comandos SQL podem ser submetidos ao DB2 pelos seguintes modos:


QMF (QUERY MANAGEMENT FACILITY)
Este um produto da IBM para submeter os comandos SQL para o DB2 e
visualizar os resultados. Abaixo tela inicial do QMF:

O QMF oferece trs estilos de consulta diferentes para o usurio com


diferentes nveis de conhecimento:
Consulta Orientada: um mtodo de consulta fcil de ser utilizar que solicita as
informaes necessrias enquanto voc estiver criando uma consulta. adequada
para iniciantes e usurios ocasionais de QMF que desejam criar uma consulta mas
no conhecem SQL.
SQL (Structured Query Management): Usa a linguagem SQL que descreve
suas solicitaes para os dados no banco de dados.
QBE (Query-By-Example): Um mtodo grfico para consultar, atualizar,
excluir ou inserir dados. Minimiza a sequencia de teclas e economiza tempo ao digitar
uma consulta.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 4

SPUFI
O TSO tem uma opo dentro do menu DB2 (opo D;1) chamado SPUFI
(SQL PROCESSING USING FILE INPUT). O SPUFI tem um menu onde o usurio
especifica um dataset (pode ser um particionado) contendo o texto do comando SQL a
ser executado, e um dataset para receber o resultado do comando (resulttable).
Usando o SPUFI o usurio pode facilmente executar quase todos os comandos SQL.
Abaixo telas do SPUFI.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 4
Programas
Os comandos SQL podem ser codificados dentro de programas escritos em
vrias linguagens, incluindo o COBOL. Exemplo:

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 4

Teoria

Comandos sql

Os comandos SQL se dividem em 4 grandes grupos:


DDL DATA DEFINITION LANGUAGE.
Neste primeiro grupo esto os comandos para criar e alterar a estrutura das
tabelas do DB2. Este grupo de comandos usado geralmente pelo DBA ou pessoal de
suporte. (CREATE, DROP, ALTER)
DML DATA MANIPULATION LANGUAGE
Neste segundo grupo esto os comandos para pesquisar e manipular os
valores existentes nas tabelas do DB2. Este grupo de comandos compe o material
usado em programao dos aplicativos usando DB2. (SELECT, INSERT, UPDATE,
DELETE)
DCL DATA CONTROL LANGUAGE
Neste terceiro grupo esto os comandos para dar ou tirar privilgios de acesso
aos objetos do DB2 (GRANT, REVOKE)
DTL DATA TRANSACTION LANGUAGE
Neste quarto grupo esto os comandos para manipular as transaes enviadas
ao DB2. (COMMIT, ROLLBACK).
Sou DBA,
devo conhecer
SQL DDL e DCL
a fundo.

www.grandeporte.com.br

Sou programador,
devo conhecer
SQL DML e DTL
a fundo.

(11) 4427-4579(11) 9 9903-3218

10

Parte 4

Teoria

SQL DDL

A SQL DDL formada basicamente por trs comandos:


CREATE

Define objetos novos

ALTER

Altera objetos previamente definidos

DROP

Elimina objeto previamente definido

NOMEANDO OBJETOS
Toda Tabela, ndice, Coluna, View, precisa de um nome. A regra para nomear
objetos no DB2 a seguinte:
O primeiro caractere deve ser de A a Z, $, @ ou # os demais caracteres podem
ser de A a Z, $, @, #, de 0 a 9 ou _.
O nome da tabela nico atravs do seu Owner/Creator/Schema. J onome da
coluna deve ser nico na tabela. Exemplo

Owner/Creator/Schema

Nome Simples da Tabela

GPXXNN

TBPROD

Nome Qualificado da Tabela


(Completo)
GPXXNN.TBPROD

Nome da Tabela

Nome da Coluna

TBPROD

DESCPROD

Nome Qualificado da Coluna


(Completo)
TBPROD.DESCPROD

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

11

Parte 4
CRIANDO TABELAS
Apesar de ser tecnicamente possvel, os comandos SQL para criar e alterar
tabelas no so usados em programas COBOL.

O comando SQL para criar uma nova tabela o CREATE TABLE. Podem ser
criadas tabelascom at 750 colunas e 16 terabytes de tamanho total. O comando
define o nome da tabela seguido de uma srie de especificaes de colunas.
Exemplo 1:
CREATE TABLE PRODUTO
(
CODIGO
NOME
PRECO
DEPTOFABR
DATAFABR
)

CHAR(6)
VARCHAR(20)
DECIMAL(8,2)
CHAR(3)
DATE

UNIQUE

NOT NULL,
,
NOT NULL,
,

DEFAULT

Neste exemplo o argumento UNIQUE que aparece em CODIGO indica que o


valor desta coluna no pode se repetir nas linhas da tabela (Unique Key).
O argumento NOT NULL da coluna PRECO indica que nas incluses de novas
linhas na tabela (incluso de novos produtos no cadastro), o PRECO deve sempre ser
informado.
O argumento DEFAULT da coluna DATAFABR indica que nas incluses de
produtos, se a coluna DATAFABR no for informada, o DB2 preencher esta coluna
com o valor default para datas.Os valores default para o DB2 depende do tipo de
dado da coluna, conforme a tabela abaixo:
CHAR
VARCHAR

Espao em Branco

INTEGER
SMALLINT
DECIMAL
REAL
DOUBLE

Zero

DATE

Data Corrente do Sistema

TIME

Hora Corrente do Sistema

TIMESTAMP

Data e Hora Corrente do Sistema

possvel definir um valor default diferente, basta informar esse valor na


sequncia do comando, observe que WITH opcional. Exemplo:
COMISSAO
DECIMAL(8,2) WITH DEFAULT 100
TIMEDOCORACAO VARCHAR(30)
DEFAULT OLARIA F.C.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

12

Parte 4
Exemplo 2:
CREATE TABLE DEPTO
(
CODDEPTO
CHAR(03)
PRIMARY KEY NOT NULL,
NOMEDEPTO
CHAR(10)
NOT NULL,
ENDERDEPTO VARCHAR(60)
)

Neste exemplo a tabela DEPTO esta sendo criada com a chave primria
CODDEPTO.Ser necessrio criar um ndice nico (UNIQUE INDEX) na coluna
CODDEPTO antes de inserir dados na tabela.
Exemplo 3:
CREATE TABLE CHAMADO
(
NUMCHAMADO
DECIMAL(6,0)
TEXTOCHAMADO
VARCHAR(200)
ABERTURACHAMADO
TIMESTAMP
FECHAMENTOCHAMADO TIMESTAMP
PRIMARY KEY (NUMCHAMADO)
)

NOT NULL,
NOT NUll,
DEFAULT ,
,

Neste exemplo, a definio de Chave Primria foi dada no final com PRIMARY
KEY (NUMCHAMADO).

No foi bem isso


que eu quis dizer
com create table!

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 4

13

CHECK CONSTRAINTS (restries)


A verificao de restries em tabelas especifica condies que so avaliadas
para cada linha da tabela no momento da incluso ou alterao de dados. Voc pode
especificar verificaes de restrio para colunas individuais (check) ou para um grupo
de colunas (constraintnome_da_restrio). Voc pode adicion-las usando os
comandos CREATE ou ALTER TABLE.
O exemplo abaixo cria a tabela EMPREGADO com as seguintes restries:
a) Os valores para os nmeros do departamento devem estar entre 10 e 100
inclusive.
b) O cargo do empregado s pode ser um dos seguintes: VENDAS,
GERENTE ou AUXILIAR.
c) Cada empregado que foi admitido antes de 1986 deve ganhar mais de
R$ 40.000,00 de salrio anual.
Exemplo:
CREATE TABLE EMPREGADO
(
MATRICULA
SMALLINT
NOT NULL,
NOME
VARCHAR(40) NOT NULL,
DEPTO
SMALLINT
CHECK (DEPTO BETWEEN 10 AND 100),
CARGO
VARCHAR(8)
CHECK(CARGO IN (VENDAS,GERENTE,AUXILIAR)),
DATAADMIN
DATE,
SALARIO
DECIMAL(7,2),
COMISSAO
DECIMAL(7,2),
PRIMARY KEY (MATRICULA),
CONSTRAINT SALARIOANUAL CHECK (YEAR (DATAADMIN) >= 1986 OR
SALARIO * 12 > 40000))

Quando a verificao sobre uma coluna, coloca-se CHECK imediatamente


aps a definio desta coluna. Quando a verificao sobre um grupo de colunas,
cria-se.umaconstraintnome_da_restrio e no check se informa a verificao desejada.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

14

Parte 4
CRIANDO NDICES
Toda coluna definida como Unique ou Primary Key precisa de um ndice nico,
antes da tabela comear a receber dados. Para a criao de ndices nicos usamos o
comando SQL CREATE UNIQUE INDEX.Exemplo:
CREATE UNIQUE INDEX IDXDEPTO
ON DEPTO (CODDEPTO)

Neste exemplo IDXDEPTO o nome do ndice. ON indica qualtabela ser


indexada e entre os parnteses colocado a coluna que ser indexada, no caso
CODDEPTO.

ndice

Tabela

CODDEPTO

CODDEPTO NOMEDEPTO

001
002
003
004

003
001
004
002

IDXDEPTO

PRODUCAO
PINTURA
FUNILARIA
TAPECARIA

DEPTO

Qualquer coluna no Unique pode tambm ter um ndice. Os ndices


aumentam a performance das pesquisas que usam esta coluna. Exemplo:
CREATE INDEX IDXNOME
ON EMPREGADO (NOMEEMP)

Neste exemplo como pode haver mais de um empregado com o mesmo nome,
a clusula Unique no foi usada.

Tabela

CODDEPTO

NOMEEMP

002
001
004
003

BARNABE ATANASIO
CARLOS MOURA
AMBROSIO TEIXEIRA
BARNABE ATANASIO

EMPREGADO
www.grandeporte.com.br

ndice

NOMEEMP

AMBROSIO TEIXEIRA
BARNABE ATANASIO
BARNABE ATANASIO
CARLOS MOURA

IDXNOME
(11) 4427-4579(11) 99903-3218

Parte 4

15

ALTERANDO TABELAS
O comando SQL para alterar a estrutura de uma tabela o ALTER TABLE.
Este comando pode ser usado tanto para alterar a especificao das colunas j
existentes como para transformar as colunas em PRIMARY KEY ou FOREIGN KEY.
Tambm possvel inserir ou excluir restries. Os exemplos abaixo mostram
algumas dessas possibilidades.
Exemplo 1 transforma a coluna CODIGO, que j era UNIQUE, em PRIMARY KEY.
ALTER TABLE PRODUTO
ADD PRIMARY KEY (CODIGO)

Exemplo 2 transforma a coluna DEPTOFABR, em uma FOREIGN KEY para a tabela


DEPTO. Depois desta alterao, uma linha de PRODUTO somente poder ser
includa se houver na tabela DEPTO uma linha descrevendo o departamento onde
este produto ser fabricado. Tambm foi definida uma restrio para a excluso da
linha do departamento em DEPTO, especificando que se a linha DEPTO for excluda o
DB2 dever inserir NULL na coluna DEPTOFABR dos produtos relacionados.
ALTER TABLE PRODUTO
ADD FOREIGN KEY (DEPTOFABR)
REFERENCES DEPTO (CODDEPTO)
ON DELETE SET NULL

Pode-se tambm usar:


ON DELETE RESTRICT que no permite a excluso da PARENT KEY
enquanto houverem FOREIGN KEY relacionada.
ON DELETECASCADE que exclui todas linhas com essa chave estrangeira
antes de excluir a PARENT KEY.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

16

Parte 4
Exemplo 3 adiciona a coluna TAXAIMP na tabela PRODUTO. As novas colunas so
inseridas no final da estrutura da tabela.
ALTER TABLE PRODUTO
ADD COLUMN TAXAIMP DECIMAL(6,4)

Exemplo 4 exclui a coluna TAXAIMP da tabela PRODUTO.


ALTER TABLE PRODUTO
DROP COLUMN TAXAIMP

Exemplo 5 adiciona uma restrio na tabela PRODUTO.


ALTER TABLE PRODUTO
ADD CONSTRAINT QUANTIDADES CHECK (QTDMAX > QTDMIN)

Exemplo 6 exclui uma restrio da tabela PRODUTO.


ALTER TABLE PRODUTO
DROP CONSTRAINT QUANTIDADES

CRIANDO VISES (VIEW)


Uma viso pode ser criada referenciando de 1 a 255 tabelas, dependendo da
complexidade da instruo SELECT, que no pode conter ORDER BY. Exemplo:
CREATE VIEW VDEPTOSEL
(COD_DEPTO_SEL, NOME_DEPTO_SEL)
AS
SELECT COD_DEPTO, NOME_DEPTO
FROM DEPARTAMENTO
WHERE COD_DEPTO BETWEEN 010 AND 050

Toda vez que a tabela DEPARTAMENTO sofrer alteraes, a VIEW ir refletilas. No possvel inserir dados na VIEW (INSERT), mas podemos alterar (UPDATE)
e excluir (DELETE) dados, o que acarreta alterao e excluso na tabela original.
departamento

vdeptosel

cod_depto cod_gerente

nome_depto

centro_custo

telefone

015
038
052
067

Produo
Marketing
Vendas
SAC

127125
130220
130250
130300

4455-1021
4455-1025
4455-1017
4455-1035

cod_depto_sel
015
038

0141
0525
0084
0092

nome_depto_sel
Produo
Marketing

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

17

Parte 4
HIRARQUIA DE EXCLUSES
A eliminao de qualquer objeto faz com que:

Os objetos dependentes sejam eliminados


As informaes associadas sejam perdidas
As informaes necessrias para recuperao sejam perdidas
Planos/Packages que referenciam os objetos sejam invalidados
A figura a seguir mostra a hierarquia dos objetos:

View

Database

Tablespace

Tabela
ndice

EXCLUINDO TABELAS
Para excluir uma tabela, usa-se o comando DROP TABLE. Exemplo:
DROP TABLE PRODUTO
Caso a tabela seja uma PARENT TABLE, ou seja, fornecedora de chave
estrangeira, a excluso s ser permitida quando a restrio de excluso for SET
NULL ou no houver referncia de sua PRIMARY KEY como FOREIGN KEY na tabela
destino. Ao se excluir uma tabela, todos os seus ndices so tambm excludos.
EXCLUINDO NDICES
Para excluir um ndice, usa-se o comando DROP INDEX. Exemplo:
DROP INDEX IDXPRODUTO
EXCLUINDO VIEW
Para excluir uma VIEW, usa-se o comando DROP VIEW. Exemplo:
DROP VIEW VDEPTOSEL

tab
co
cli
no dcli ( ente
m
en ec PK)
cp dere li
tel fcli cocl
i
efo
ne
cli

tab
nu
ve
nd
da mve
a
co tave nda
dc nd (P
K)
li ( a
FK
)

tab
pro
co
du
de dpro
to
pre scpr d (P
K
o
c
)
qtd ov d
ee end
sto a
qu
e

ta
nu bitem
ve
nu mite
nd
m
qtd ve m(P
a
K
n
e
d
co ite a )
dp m (FK
rod
)
(FK
)

Ol Tabelas,
procuro a tabcliente
Algum a viu?
www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

18

Parte 4

CATALOGO DB2
O CATLOGO DB2 um conjunto de tabelas da IBM para descrever todo o banco de
dados do DB2 o OWNER do CATALOGO SYSIBM. Algumas tabelas podem ser consultadas
como por exemplo:

CATLOGO

Que tipo de informao contm

SYSIBM.SYSCOPY

Cpias e tipos das cpias

SYSIBM.SYSTABLES

Tabela, criador, tipo, qual database, qual tablespace

SYSIBM.SYSCOLUMNS

Coluna, a qual tabela pertence, default, nulidade

SYSIBM.TABAUTH

Autorizao de tabela, view-automatizador, autorizado

SYSIBM.SYSINDEXES

ndices, colunas, tabela, ascendente, descendente

SYSIBM.SYSKEYS

Colunas dos ndices

SYSIBM.SYSPACKAGE

Pacotes, token de consistncia

SYSIBM.SYSDBRM

DBRMs, token de consistncia

SYSIBM.SYSPLAN

Planos, vlido, operativo

SYSIBM.SYSPLANAUTH

Autorizao de planos

CONSULTANDO TABELAS, COLUNAS E NDICES


Para consultar as tabelas existentes no DB2, usamos o comando:
SELECT
FROM

*
SYSIBM.SYSTABLES

Para consultar as tabelas criadas por determinado usurio, usamos o


comando:
SELECT
FROM
WHERE

*
SYSIBM.SYSTABLES
CREATOR
= GPXXNN

Para consultar as colunas de uma determinada tabela, usamos o comando:


SELECT
FROM
WHERE

*
SYSIBM.SYSCOLUMNS
TBNAME
= TABELA AND
TBCREATOR = GPXXNN

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 4

19

Para consultar os ndices criados por determinado usurio, usamos o comando:


SELECT
FROM
WHERE

*
SYSIBM.SYSINDEXES
CREATOR
= GPXXNN

Para consultar as colunas de um determinado ndice, usamos o comando:


SELECT
FROM
WHERE

*
SYSIBM.SYSKEYS
IXCREATOR = GPXXNN AND
IXNAME
= INDICE

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

20

Parte 4

Teoria

Como usar o spufi

Apontando o SPUFI para a instalao de DB2 desejada.


A partir do Menu Principal do TSO, digitar as opes D (DB2 Interactive) e D
(DB2 Defaults). No painel DB2I DEFAULTS, no campo 1 DB2 NAME digitar DB2N e
pressionar a tecla ENTER. No painel COBOL DEFAULTS no mudar nada e
pressionar a tecla ENTER. Isso mudar o SSID para DB2N.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

21

Parte 4
Informando ao SPUFI os arquivos de entrada e sada

A partir do Menu Principal do TSO, digitar as opes D (DB2 Interactive) e 1


(SPUFI). No painel do SPUFI preencher os campos:
1. Entre apstrofes, colocar o nome do arquivo sequencial ou particionado
com o membro entre parenteses, contendo o texto SQL DDL. Usaremos o
arquivo particionado GP.GPXXNN.JCLDATA(membro).
2. Entre apstrofes, colocar o nome do arquivo sequencial, varivel blocado,
para receber o resulttable. Usaremos o arquivo sequencial
GP.GPXXNN.DB2SAI.
3. Deixar NO na opo CHANGE DEFAULTS e pressionar a tecla ENTER
para digitar o comando SQL desejado.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

22

Parte 4
Veja como o SPUFI interage com o DB2

DB2

SPUFI

TSO
GP.GPXXNN.JCLDATA (CREATE1)
PDS

1
4

2
3

GP.GPXXNN.DB2 SAI
PS/VB

1. O TSO envia ao SPUFI um arquivo de entrada contendo comando SQL


2. O SPUFI passa ao DB2 esse comando SQL
3. Aps a execuo, o DB2 DEVOLVE ao SPUFI o resultado do comando SQL
4. O SPUFI grava esse resultado no arquivo de sada e devolve o controle ao TSO

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

23

Parte 4
Digitando o comando SQL, executando e exibindo o resultado

1. Digitar o comando SQL desejado e pressionar a tecla PF3, que sai salvando
2. A mensagem informa que voc terminou de editar o comando SQL e que
precisa pressionar a tecla ENTER para executar o comando. Observe que o
campo 6 est com *, indicando que no entrar novamente na edio (Se
desejar editar novamente, coloque Y neste campo)
3. Agora voc est vendo (BROWSE) o arquivo de sada. Para voltar ao painel do
SPUFI pressione a tecla PF3.
Para comentar os comandos, utilize dois hfens em qualquer coluna. Tudo que
vier na sequncia ser ignorado pelo DB2.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

24

Parte 4

Practice

Atividade

Reviso aos pares

Coloque entre os parentses em qual grupo os


comandos SQL pertencem, depois pea para seu colega
corrig-lo.
DDLData Definition Language
DML Data Manipulation Language
DCL Data Control Language
DTL Data Transaction Language

1. (
2. (
3. (
4. (
5. (
6. (
7. (
8. (
9. (
10. (
11. (

) SELECT
) ROLLBACK
) CREATE
) UPDATE
) ALTER
) DROP
) GRANT
) COMMIT
) REVOKE
) INSERT
) DELETE

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 4

Atividade

25

Trabalho em dupla

Escreva os comandos SQL DDL para atender os


seguintes requisitos.

1) Inserir a coluna PRECOVENDA DECIMAL(9,2) NOT NULL na tabela TBPROD.

2) Tirar a coluna OBSCLIENTE da tabela CADCLI.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

26

Parte 4
3) Criar o ndice IDXENDERECO para a tabela TBCLI coluna ENDCLI.

4) Excluir o ndice IDXCPF.

5) Exibir todos os ndices criados pelo seu usurio.

6) Exibir todas as colunas de todas as tabelas criadas por seu usurio.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

27

Parte 4

Performance

Prtica de laboratrio

Atividade

Criar as cinco tabelas abaixo conforme


layout, com suas Constraints, ndices, Primary
Keys e Foreign Keys com as restries de excluso
indicadas.

IDXCLI
TBCLI
CODCLI (PK)
NOMECLI
ENDCLI
DATANASCCLI
ALTURACLI
CODTIPOCLI (FK)

IDXTIPOPROD
TBTIPOPROD
CODTIPOPROD (PK)
DESCTIPOPROD

IDXPROD
TBPROD
CODPROD (PK)
DESCPROD
PRECOPROD
UNIDPROD
CODTIPOPROD (FK)

IDXVENDA
TBVENDA
NUMVENDA (PK)
DATAHORAVENDA
QTDEVENDA
CODCLI (FK)
CODPROD (FK)

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

SET NULL

RESTRICT

IDXTIPOCLI
TBTIPOCLI
CODTIPOCLI (PK)
DESCTIPOCLI

CASCADE

SET NULL

28

Parte 4
Layout das tabelas

Tabela
Colunas

TBTIPOCLI
CODTIPOCLI
DESCTIPOCLI

CHAR(2)
VARCHAR(30)

UNIQUE

NOT NULL
NOT NULL

Tabela
Colunas

TBTIPOPROD
CODTIPOPROD
DESCTIPOPROD

CHAR(2)
VARCHAR(30)

UNIQUE

NOT NULL
NOT NULL

Tabela
Colunas

TBCLI
CODCLI
NOMECLI
ENDCLI
DATANASCCLI
ALTURACLI
CODTIPOCLI

CHAR(4)
VARCHAR(30)
VARCHAR(40)
DATE
DECIMAL(3,2)
CHAR(2)

UNIQUE

NOT NULL
NOT NULL

TBPROD
CODPROD
DESCPROD
PRECOPROD
UNIDPROD
CODTIPOPROD

CHAR(4)
VARCHAR(30)
DECIMAL(9,2)
VARCHAR(10)
CHAR(2)

UNIQUE

TBVENDA
NUMVENDA
DATAHORAVENDA
QTDEVENDA
CODCLI
CODPROD

CHAR(6)
TIMESTAMP
SMALLINT
CHAR(4)
CHAR(4)

UNIQUE
DEFAULT
>0

Tabela
Colunas

Tabela
Colunas

www.grandeporte.com.br

>= 01/01/1900
>= 1.00

NOT NULL
NOT NULL

>0
KG,PECA,PCT,LITRO

NOT NULL

NOT NULL
NOT NULL

(11) 4427-4579(11) 99903-3218

29

Parte 4

Os membros do arquivo particionado GP.GPXXNN.JCLDATA contero os


comandos SQL DDL para a criao das tabelas, ndices, chaves primria e estrangeira
de acordo com a numerao dada s tabelas (de 1 a 5).
1) Escrever os comandos SQL DDL para a criao das tabelas:
Membro
CREATE1
CREATE2
CREATE3
CREATE4
CREATE5

Tabela
TBTIPOCLI
TBTIPOPROD
TBCLI
TBPROD
TBVENDA

2) Escrever os comandos SQL DDL para a criao dos ndices nicos (UNIQUE
INDEX) para as colunas UNIQUE NOT NULL:
Membro
INDEX1
INDEX2
INDEX3
INDEX4
INDEX5

ndice
IDXTIPOCLI
IDXTIPOPROD
IDXCLI
IDXPROD
IDXVENDA

Tabela
TBTIPOCLI
TBTIPOPROD
TBCLI
TBPROD
TBVENDA

Coluna
CODTIPOCLI
CODTIPOPROD
CODCLI
CODPROD
NUMVENDA

3) Escrever os comandos SQL DDL para alterar as tabelas inserindo as chaves


primrias.
Membro
PRIKEY1
PRIKEY2
PRIKEY3
PRIKEY4
PRIKEY5

Tabela
TBTIPOCLI
TBTIPOPROD
TBCLI
TBPROD
TBVENDA

Primary Key
CODTIPOCLI
CODTIPOPROD
CODCLI
CODPROD
NUMVENDA

4) Escrever os comandos SQL DDL para alterar as tabelas inserindo as chaves


estrangeiras.
Membro
FORKEY3
FORKEY4
FORKEY5

Tabela
TBCLI
TBPROD
TBVENDA

www.grandeporte.com.br

Foreign Key
CODTIPOCLI
CODTIPOPROD
CODCLI
CODPROD

on Delete
SET NULL
SET NULL
CASCADE
RESTRICT

(11) 4427-4579(11) 9 9903-3218

30

Parte 4

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

regular

www.grandeporte.com.br

ruim

Muito ruim

(11) 4427-4579(11) 99903-3218

Parte

Matemtico ingls, desenvolveu a lgica


matemtica
de
Boole,
estabeleceu
uma
representao das interseces e unies de
conjuntos atravs de diagramas que levam o seu
nome.
John Venn
1834- 1923

Verso 2.2.3

Parte 5

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe?


O que voc no sabe?
Porque importante conhecer estes tpicos?
Quais so os seus temores?
O que voc considera difcil?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos.Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

Presentation

Histria

MANIPULANDO OS DADOS

Do ponto de vista do desenvolvedor, a linguagem SQL DML a mais


importante, pois a que permite a manipulao dos dados, importante para os
processos de tomada de deciso por parte do usurio.
Voc aprender a popular as tabelas, atribuindo valores s suas colunas, a
consultar esses dados das mais variadas formas, algumas bem complexas, a alterar
seus valores e a excluir esses dados.
Esta parte do treinamento longa e cobre muitos aspectos da SQL DML.
Dedique-se bastante ao SELECT e suas variantes. Isso vai ajud-lo bastante no
momento de escrever os programas COBOL com SQL.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

Teoria

Sql dml

A linguagem SQL DML (Data Manipulation Language) a mais usada em


programao, para acesso a Banco de Dados Relacionais e a usaremos
extensivamente na linguagem COBOL. So quatro os principais comandos:
INSERT

Para inserir novas linhas

SELECT

Para consultar dados

UPDATE

Para atualizar colunas

DELETE

Para excluir linhas

A seguir veremos em detalhes cada um desses comandos:

Teoria

insert

O comando INSERT usado para inserir novas linhas em uma tabela. Sua
sintaxe bsica :
INSERT INTO tabela
(coluna1, coluna2,...)
VALUES
(valor1, valor2,...)
Este comando SQL define o nome da tabela onde a linha ser inserida, em
seguida dentro de parnteses, uma srie de colunas para as quais sero informados
os valores, e aps o argumento VALUES, os valores de cada coluna, na mesma
ordem de apario das colunas.
Quando se insere uma nova linha em uma tabela, no necessrio fornecer
valores para todas as colunas da linha. Somente as colunas definidas como NOT
NULL devem receber obrigatoriamente valores. As colunas que no recebem valores
na incluso da linha permanecem como colunas inexistentes (valor = NULL) at que
uma alterao (UPDATE) crie esta coluna, a menos que tenha sido definido um valor
default para a coluna.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5
Exemplo 1:
-- INFORMANDO NULL NO VALOR DA COLUNA
INSERT INTO FUNCIONARIOS
(CODIGO, NOME, SALARIO)
VALUES
(00120, JOSE DA SILVA, NULL)
-- NAO INFORMANDO A COLUNA SALARIO
INSERT INTO FUNCIONARIOS
(CODIGO, NOME)
VALUES
(00120, JOSE DA SILVA)
A srie de colunas no comando INSERT pode ser informada em qualquer
ordem, isto , as colunas no INSERT no precisam estar na ordem de sua criao na
tabela, mas os valores informados em VALUES devem estar na ordem das colunas
informadas.
Exemplo 2:
-- NA ORDEM DE CRIACAO DA TABELA
INSERT INTO FUNCIONARIOS
(CODIGO, NOME, SALARIO)
VALUES
(00120, JOSE DA SILVA, 1325.50)
-- EM UMA ORDEM QUALQUER
INSERT INTO FUNCIONARIOS
(NOME, SALARIO, CODIGO)
VALUES
(JOSE DA SILVA,1325.50, 00120)
Nos casos em que o INSERT preenche valores para todas as colunas da
tabela, a sequncia de colunas pode ser omitida, e o comando se simplifica como:
INSERT INTO nome-tabela
VALUES (valor1 , valor2 ,valor3 , ...)
Neste caso ter de ser informado os valores de todas as colunas na sequncia
em que as colunas foram definidas na tabela.
Exemplo 3:
-- COM COLUNAS INFORMADAS
INSERT INTO FUNCIONARIOS
(CODIGO, NOME, SALARIO)
VALUES
(00120,JOSE DA SILVA,1325.50)

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

-- SEM INFORMAR AS COLUNAS


INSERT INTO FUNCIONARIOS
VALUES
(00120, JOSE DA SILVA, 1325.50)
Uma forma interessante e pouco conhecida utilizar o resultado de um
comando SELECT (RESULT TABLE) para inserir dados em uma tabela.
As colunas relacionadas com SELECT devem ser do mesmo tipo e tamanho
daqueles onde seus dados sero inseridos.
Assim, se a tabela TBCLIGERAL tem o seguinte layout:
CODCLI
NOMECLI
FONECLI
SALDOCLI

CHAR(5)
VARCHAR(50)
CHAR(10)
DECIMAL(9,2)

e a tabela TBCLINEG temo seguinte layout:


CODCLI
SALDOCLI

CHAR(5)
DECIMAL(9,2)

e desejarmos carregar a TBCLINEG com os clientes da TBCLIGERAL com saldo


negativo, podemos proceder da seguinte maneira:
-- INFORMANDO AS COLUNAS NO INSERT
INSERT INTO TBCLINEG
(CODCLI, SALDOCLI)
SELECT CODCLI, SALDOCLI
FROM TBCLIGERAL
WHERE SALDOCLI < 0
-- NAO INFORMANDO AS COLUNAS NO INSERT
INSERT INTO TBCLINEG
SELECT CODCLI, SALDOCLI
FROM TBCLIGERAL
WHERE SALDOCLI < 0

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

Teoria

Select

O objetivo do comando SELECT pesquisar dados dentro do DB2. Ele


especifica o formato de uma tabela para conter o resultado da pesquisa e outros
parmetros para definir o processo de pesquisa. O formato bsico do SELECT :
SELECT
FROM
WHERE

colunas
tabela
restrio

No argumento SELECT especificado o conjunto de colunas ou valores,


separados por vrgula, que devero compor a tabela resultado da pesquisa. O
caractere asterisco (*) pode ser usado em colunas para indicar que todas as colunas
da tabela devem ser selecionadas.
No argumento FROM indicam-se os nomes das tabelas de onde sero
retiradas as colunas para formar a tabela resultado.
No argumento WHERE (que opcional) especificam-se os critrios de
pesquisa usando operadores relacionais.
Exemplo1:
SELECT
FROM
WHERE

CODIGO, NOME, SALARIO


FUNCIONARIOS
SALARIO > 1000

Neste exemplo a tabela resultado conter uma relao com o cdigo, nome e
salrio da tabela FUNCIONARIOS, para aqueles cujo SALARIO maior que
R$ 1000,00.

Proibido em
muitas empresas!

Exemplo 2:
SELECT
FROM

*
FUNCIONARIOS

Este exemplo lista todas as colunas da tabela


FUNCIONARIOS. No h restrio (WHERE), portanto todas as
linhas da tabela sero exibidas. Isso consome muita CPU.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

Exemplo 3:
SELECT
FROM

NOME, SALARIO * 12 AS SALARIOANUAL


FUNCIONARIOS

Neste exemplo a tabela resultado conter uma relao com o nome e salrio
anual dos funcionrios da tabela FUNCIONARIOS. Umlias (rtulo)pode ser colocado
para nomear as colunas. AS opcional, podendo ento ser omitido.
Exemplo 4:
SELECT

FROM

PRECOPRODAS LISTA,
PRECOPROD * 0.9 AS DESCONTO,
PRECOPROD * 1.1 AS AUMENTO
TABPRODUTOAS PROD

Outro exemplo do uso de alias. Aqui foram dados lias para as colunas e
tambm para a tabela, artifcio que facilitar a digitao de SELECTs com vrias
tabelas, como veremos adiante.
Exemplo 5:
SELECT CODCLI
NOMECLI
FONECLI
FROM TBCLI

AS CODIGO DO CLIENTE,
AS NOME COMPLETO,
AS TELEFONE RESIDENCIAL

Neste exemplo o lias tem espao em branco, e deve ser informado entre
aspas, observando o limite mximo de 18 caracteres.

A S

PROD

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

10

Parte 5

Os critrios de pesquisa do argumento WHERE envolvem comparaes entre


valores de colunas, variveis, expresses aritmticas ou constantes empregando os
operadores da tabela:

Operador

=
>
<
>
=

<>
>=
<=
<

Descrio

Igual
Maior
Menor
No Maior
No igual

Diferente
Maior ou igual
Menor ou igual
No Menor

O valor deve estar entre os dois limites, inclusive. Exemplos:


BETWEEN

IDADE BETWEEN 1 AND 9


NOME BETWEEN B% AND F%

O valor deve ser um dos fornecidos na lista. Exemplo:


IN
IDADE IN (1, 3, 5, 7, 9)

O valor deve ser semelhante ao indicado. No literal indicado


pode-se usar % para representar um conjunto de caracteres, ou _ para
representar a posio de 1 caractere. Exemplo:
LIKE

NOME
NOME
NOME
NOME
NOME

LIKE
LIKE
LIKE
LIKE
LIKE

CARLA
AN%
%A
%SH%
___E%

Nomes exatamente iguais a CARLA


Nomes iniciando com AN
Nomes Terminando com A
Nomes que contenham SH
Nome com E na posio 4

Se o sinal no estiver presente no teclado, ele pode ser obtido digitando em


hexadecimal o valor 5F.
O operador NOT pode ser usado junto com qualquer dos operadores acima.
Exemplos:
IDADE NOT BETWEEN 1 AND 9
IDADE NOT IN (1, 3, 5, 7, 9)
NOME NOT LIKE %SILVA

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

11

Os operadores lgicos AND e OR podem ser usados na construo restries


com mltiplas condies.
Exemplo 6:
SELECT CODFUNC, NOMEFUNC, FONEFUNC
FROM FUNCIONARIOS
WHERE SALARIOFUNC > 2500 AND CODDEPTOFUNC = 050
Neste exemplo somente os funcionrios com salrio maior que R$ 2500,00 e
que trabalhem no departamento 050 so selecionados.
Vale relembrar que a prioridade dos operadores lgicos :
1. NOT
2. AND
3. OR
Assim as duas restries abaixo produzem resultados diferentes:
WHERE CARGO = PEAO AND SALARIO > 1200 OR DEPTO = 050
WHERE CARGO = PEAO AND (SALARIO > 1200 OR DEPTO = 050)
Exemplo 7:
SELECT NOMEFUNC || , || FONEFUNC
FROM FUNCIONARIOS
Neste exemplo o nome do funcionrio ser concatenado com uma vrgula e um
espao em branco, que por sua vez ser concatenado com seu telefone. Para que a
concatenao ocorra, utilize dois smbolos pipe ||. Se o sinal | no estiver presente no
teclado, ele pode ser obtido digitando em hexadecimal o valor 4F.
Exemplo 8:
SELECT 'CODIGO..:
'MINIMO..:
'MAXIMO..:
'ESTOQUE.:
FROM PRODUTO

'
'
'
'

,
,
,
,

CODPROD,
QTDMIN ,
QTDMAX ,
QTDEST

Neste exemplo uma constante precede a coluna e tambm ser exibida em


cada linha da consulta. As constantes so delimitadas por apstrofes.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

12

Parte 5
Exemplo 9:
SELECT CODFUNC, NOMEFUNC, COMISSAO
FROM FUNCIONARIO
WHERE COMISSAO IS NULL
Neste exemplo foi usado o argumento IS NULL como critrio de seleo da
coluna. Pode-se inverter esse critrio com NOT:
WHERE COMISSAO IS NOT NULL

ELIMINANDO REPETIES DA TABELA RESULTADO


O argumento DISTINCT opcional, e quando especificado a tabela resultado
no conter linhas com valores repetidos para a coluna informada. A sintaxe a
seguinte:
SELECT
FROM
WHERE

DISTINCT coluna
tabela
restrio

O exemplo abaixo lista o cdigo dos produtos vendidos, sem repetio, que
foram vendidos mais de 10 unidades.
Exemplo 10:
SELECT
FROM
WHERE

DISTINCT CODPROD
TBVENDA
QTDVENDA > 10

A palavra chave DISTINCT deve aparecer logo depois do SELECT.


O uso do DISTINCT pode implicar o uso da rea de Sort do DB2. Use
preferencialmente colunas que fazem parte do ndice.

DISTINCT gentleman
There is no other like him
www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

13

Parte 5
OPERAES ARITMTICAS
Os seguintes operadores aritmticos podem ser usados em SQL:
Prioridade
0
1
2

Sinal
( )
* /
+ -

Operao
Parnteses Agrupa expresses
Multiplicao e Diviso
Soma e Subtrao

Exemplo 11:
SELECT NUMEFUNC, SALARIO+COMISSAO AS RENDIMENTOS
FROM FUNCIONARIO
WHERE SALARIO+COMISSAO >= 20000
ARITMTICA com DATE/TIME
Os formatos DATE, TIME e TIMESTAMP armazenam dados como decimal
compactado sem sinal, de acordo com a tabela abaixo:
Tipo de Dado
DATE
TIME
TIMESTAMP

Formato Interno
aaaammdd
hhmmss
aaaammddhhmmssnnnnnn

Os programas s lidam com o formato externo que uma string de caracteres,


de acordo com o padro em uso, como mostra a tabela abaixo:
Padro
ISO
USA
EUR
JIS

Formato
Time
hh.mm.ss
hh.mm AM
hh.mm PM
hh.mm.ss
hh:mm:ss

Tamanho

Tamanho

8 Bytes
8 Bytes

Formato
Date
aaaa-mm-dd
mm/dd/aaaa

8 Bytes
8 Bytes

dd.mm.aaaa
aaaa-mm-dd

10 Bytes
10 Bytes

10 Bytes
10 Bytes

Timestamp usa o formato aaaa-mm-dd-hh-mm-ss-nnnnnn com 26 Bytes.


A subtrao fornece o seguinte resultado:
horrio horrio
data data

===> durao em hhmmss


===> durao em aaaammdd

H tambm a subtrao e adio com DURAO ROTULADA, que um


nmero n seguido da palavra chave YEARS, MONTHS, DAYS, HOURS, MINUTES,
SECONDS ou MICROSECONDS.
horrio durao rotulada
data durao rotulada

www.grandeporte.com.br

===> horrio
===>data

(11) 4427-4579(11) 99903-3218

14

Parte 5
Exemplo 12:
SELECT
FROM

CURRENT DATE - DATAADMISSAO


FUNCIONARIO

Neste exemplo ser exibido no formato aaaammdd o tempo que o funcionrio


tem de empresa.
Exemplo 13:
SELECT
FROM

DATANASCIMENTO + 18 YEARS
TABCLIENTE

Neste exemplo ser exibido no formato de data (de acordo com o padro do
sistema) a data em que o cliente ter 18 anos.
Exemplo 14:
SELECT
FROM

DATAVENCTO + 1 MONTHS 3 DAYS


TABBOLETOS

Neste exemplo ser exibido no formato de data (de acordo com o padro do
sistema) a data de vencimento do boleto somando 1 ms e subtraindo 3 dias.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

15

ORDENAO DA TABELA RESULTADO


Para ordenar as linhas na tabela resultado usamos ORDER BY, sua sintaxe a
seguinte:
SELECT
FROM
WHERE
ORDER BY

DISTINCT colunas
tabela
restrio
colunas ASC

Com esta sintaxe a tabela resultado ser ordenada pelas colunas especificadas
no argumento ORDER BY. O argumento ASC opcional, pode ser DESC, e indica se
a ordenao crescente ou decrescente.
Exemplo 15:
SELECT
DISTINCT NOME
FROM
FUNCIONARIOS
ORDER BY NOME
Neste exemplo listado sem repetio, os nomes dos funcionrios em ordem
alfabtica.
Exemplo 16:
SELECT
NOME,CARGO,DEPTO,SALARIO
FROM
FUNCIONARIOS
ORDER BY 4
Neste exemplo foi usado a posio da coluna no SELECT como argumento do
ORDER BY.
Colunas classificadas no precisam ser referenciadas pelo SELECT.
Nulos so considerados como valor mais alto.
Podemos especicar colunas para o ORDER BY fornecendo um nmero que
indique suas posies na clusula SELECT.
ORDER BY classifica uma tabela resultante.Logo,deve ser a ltima a aparecer
numa instruo SELECT.
ORDER BY pode implicar no uso de rea de Sort do DB2.Use
preferencialmente colunas que fazem parte de ndice.
possvel usar mais de uma coluna para fazer a ordenao:
Exemplo 17:
SELECT
CODCLI,CODPROD
FROM
TBVENDA
ORDER BY CODCLI ASC, CODPROD DESC

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

16

Parte 5
BUILT-IN FUNCTIONS
O DB2 possui um conjunto de funes pr-programadas que podem ser
usadas pelos comandos SQL. Os argumentos passados para as funes podem ser
colunas de uma tabela ou expresses com constantes e variveis no pertencentes ao
DB2.
Quando todos os argumentos no pertencem ao DB2 ou no existe uma tabela
para preencher o argumento FROM do SELECTdeve-se usar a pseudo-tabela
SYSIBM.SYSDUMMY1. Exemplo de um SELECT para obter a data do sistema:
Exemplo 18:
SELECT CURRENT DATE
FROM SYSIBM.SYSDUMMY1
A lista de funes extensa e as principais esto na tabelas abaixo:
Funes de Data/Hora
Devolve um valor DATE contido na expresso
DATE(coluna)
ou coluna do tipo DATE ou TIMESTAMP
Devolve o dia do ms se a expresso for do tipo
DAY(expresso)
DATE, ou a quantidade de dias se a expresso
representar uma diferena de datas.
Devolve um numero inteiro representando o
DAYS(expresso)
numero de dias transcorridos entre o valor DATE
da expresso e o dia 01/01/0001.
Retorna o valor da HORA contido na expresso.
HOUR(expresso)
Expresso deve ter formato TIME ou
TIMESTAMP.
Devolve o valor dos MICROSSEGUNDOS
MICROSECOND(expresso)
contidos na expresso. Expresso precisa ter
formato TIME ou TIMESTAMP.
Devolve o valor dos MINUTOS contidos na
MINUTE(expresso)
expresso. Expresso deve ter formato TIME ou
TIMESTAMP
Devolve o valor do MES contido na expresso.
MONTH(expresso)
Expresso deve ter formato DATE ou
TIMESTAMP
Devolve o valor dos SEGUNDOS contidos na
SECOND(expresso)
expresso. Expresso deve ter formato TIME ou
TIMESTAMP
Devolve o valor do ANO contido na expresso.
YEAR(expresso)
Expresso deve ter formato DATE ou
TIMESTAMP

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5
Funes Agregativas
Obtm a mdia aritmtica dos valores das
AVG(DISTINCT coluna)
colunas ou expresses. Se DISTINCT for usado,
os valores repetidos sero desprezados.
* obtm a quantidade de linhas selecionadas. Se
COUNT(* ou DISTINCT coluna)
DISTINCT for usado, as linhas repetidas no
sero contadas.
Obtm o maior valor contido nas colunas ou
MAX(coluna)
expresses selecionadas.
Obtm o menor valor contido nas colunas ou
MIN(coluna)
expresses selecionadas.
Obtm a soma dos valores das colunas ou
SUM(DISTINCT coluna)
expresses selecionadas. Se DISTINCT for
usado, os valores repetidos no sero somados.

CHAR(expresso)

DECIMAL(expresso,n1,n2)

DIGITS(expresso)

FLOAT(expresso)
HEX(expresso)
INTEGER(expresso)
LENGTH(expresso)

Funes de Converso
Converte o resultado de expresso para
STRING. O resultado de expresso pode estar
nos formatos:INTEGER ou SMALLINT
DECIMAL
REAL ou DOUBLE
Transforma o valor de expresso em valor no
formato DECIMAL, contendo um total de n1
algarismos e n2 decimais.
Retorna o valor da expresso com os algarismos
no formato de um STRING de caracteres,
preenchendo com zeros a esquerda. A
expresso deve estar no formato INTEGER,
SMALLINT ou DECIMAL.
Retorna o valor da expresso ou coluna no
formato FLOAT.
Retorna um STRING de dgitos hexadecimais
com o valor da expresso.
Retorna o valor da expresso no formato
INTEGER
Retorna o numero de caracteres do valor da
expresso (ou coluna)

VALUE(expresso,expresso)

Retorna o valor da primeira expresso cujo valor


COALESCE (expresso,expresso) no for NULL. So duas funes equivalentes.

SUBSTR(string1,inicio,tamanho)

Devolve um STRING extrado de STRING1 a


partir de INICIO. O argumento TAMANHO
opcional, e indica o comprimento do resultado.
Se TAMANHO for omitido, a extrao se inicia
em INICIO at o fim de STRING1.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

17

18

Parte 5
AGRUPANDO LINHAS NO RESULTADO
A tabela resultado pode ter suas linhas agrupadas e resumidas segundo o valor
de uma coluna especifica com a sintaxe:
SELECT
FROM
WHERE
GROUP BY
HAVING

colunas
tabela
restrio
colunas
condio

Com esta sintaxe, cada linha da tabela resultado ser o resumo das linhas
pesquisadas para cada valor das colunas especificadas em GROUP BY. O argumento
HAVING opcional, e se especificado conter as condies de seleo de cada grupo
gerado pelo GROUP BY. WHERE seleciona linhas e HAVING seleciona grupos.
Exemplo 19:
SELECT
FROM
GROUP
HAVING

CARGO,SUM(SALARIO)
FUNCIONARIOS
BY CARGO
SUM(SALARIO) > 10000

Este exemplo lista os cargos e a respectiva soma de salrios da tabela de


funcionrios somente para os cargos cuja soma de salrios superior a R$ 10.000,00.
Exemplo 20:
SELECT
FROM
WHERE
GROUP

DEPTO, SUM(SALARIO),SUM(COMISSAO)
FUNCIONARIOS
CARGO <> GERENTE
BY DEPTO

Este exemplo lista os departamentos e a respectiva soma de salrios e


comisso da tabela de funcionrios somente para os cargos diferentes de GERENTE.
Exemplo 21:
SELECT DEPTO, CARGO, SUM(SALARIO)
FROM FUNCIONARIO
GROUP BY DEPTO, CARGO
Este exemplo lista os departamentos e os cargos dentro do departamento com
a respectiva soma de salriosda tabela de funcionrios.
Podemos fazer GROUP BY sobre mltiplas colunas.Colunas GROUP BY no
precisam ser referenciadas pelo SELECT.Colunas referenciadas pelo SELECT que
no tenham funo aplicada precisam ser agrupadas pelo GROUP BY. Isso um erro
muito frequente.O resultado contm uma linha sumrio para cada grupo.Todos os
valores nulos so considerados como um grupo.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

19

UNINDO SELECTS (UNION e UNION ALL)


Dois ou mais SELECTs podem ser reunidos para formar uma nica tabela
resultado. O comando UNION tem a seguinte sintaxe:
1 Comando SELECT
UNION
2 Comando SELECT
UNION ALL
3 Comando SELECT
Os SELECTs so executados serialmente. A quantidade de colunas precisa ser
igual em todos os SELECTs. O data type das colunas correspondentes deve ser igual.
O tamanho das colunas no precisa ser igual, considerado o tamanho do maior. O
Operador UNION usa as tabelas resultantes e elimina as linhas duplicadas, o que
implica no uso do SORT. O operador UNION ALL tambm une as tabelas, mas no
elimina as linhas duplicadas. Portanto no usa O SORT.

Exemplo 22:
SELECT CODCLISP, NOMECLISP, FONECLISP
FROM TBCLISP
UNION
SELECT CODCLIRJ, NOMECLIRJ, FONECLIRJ
FROM TBCLIRJ
Neste exemplo dois cadastros de clientes so consultados para formas uma
nica tabela resultado. Caso o mesmo cliente esteja em ambos os cadastros com o
mesmo cdigo, nome e telefone, ele no ser repetido.

Exemplo 23:
SELECT CODCLISP AS CODIGO, NOMECLISP, FONECLISP
FROM TBCLISP
UNION ALL
SELECT CODCLIRJ AS CODIGO, NOMECLIRJ, FONECLIRJ
FROM TBCLIRJ
ORDER BY CODIGO
Neste exemplo os mesmos dois cadastros de clientes so consultados para
formas uma nica tabela resultado. Foi atribudo o mesmo lias nas colunas de cdigo
do cliente, o que permitiu o uso de ORDER BY. O uso do UNION ALL faz com que
clientes cadastrados em duplicidade apaream na tabela resultado.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

20

Parte 5

JOIN
O JOIN o processo do SELECT de pesquisar dados em mais de uma tabela.
A tabela resultado conter valores provenientes de colunas das vrias tabelas. Para
que seja possvel esta unio das linhas de vrias tabelas para compor uma linha da
tabela resultado, necessrio que as linhas das vrias tabelas tenham em comum
uma coluna que tenha valores correspondentes.
Para
exemplificar, vamos
usar
DEPARTAMENTO com as seguintes colunas:

tabelas:

FUNCIONARIOS

FUNCIONARIOS
CODFUNC (PK)
NOMEFUNC
DEPTOFUNC(FK)
SALARIOFUNC

DEPARTAMENTO
CODDEPTO (PK)
NOMEDEPTO

Queremos fazer uma relao de funcionrios com o nome do departamento em


que trabalham. A tabela resultado deste SELECT dever conter CODFUNC,
NOMEFUNC tirados da tabela FUNCIONARIOS e conter NOMEDEPTO tirado da
tabela DEPARTAMENTO. Este SELECT dever fazer um JOIN destas duas tabelas
usando como colunas de ligao DEPTOFUNC e CODDEPTO. O SELECT ser o
seguinte:
SELECT
FROM
WHERE

CODFUNC, NOMEFUNC, NOMEDEPTO


FUNCIONARIOS, DEPARTAMENTO
FUNCIONARIOS.DEPTOFUNC = DEPARTAMENTO.CODDEPTO

Podemos usar liaspara as tabelas, o que simplificaria a digitao. O SELECT


com o uso de lias fica:
SELECT
FROM
WHERE

CODFUNC, NOMEFUNC, NOMEDEPTO


FUNCIONARIOS AS TBF, DEPARTAMENTO AS TBD
TBF.DEPTOFUNC = TBD.CODDEPTO

Podemos colocar as seguintes regras para construir um JOIN:


1. As tabelas envolvidas precisam ter uma coluna com valores iguais.
2. A clusula WHERE do SELECT deve especificar esta correspondncia entre
colunas.
3. No necessrio que as colunas do JOIN sejam ligadas como FOREIGN KEY.
Esta declarao s tem finalidade para garantir a INTEGRIDADE RELACIONAL.
4. Note que na clusula WHERE as colunas esto prefixadas pelo nome da tabela
(lias). O esquema de prefixao (nome da tabela, nome da coluna separados por
ponto) usado aqui para definir o JOIN. O esquema de prefixao pode ser usado,
no entanto em qualquer comando SQL para resolver ambiguidades de nomes de
colunas entre varias tabelas.
5. A quantidade mxima de tabelas que podem participar de um JOIN 255 ou
menos, dependendo da complexidade do comando.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

21

Parte 5
OS 7 TIPOS DE JOIN
Dada as tabelas TABCLISP e TABCLIRJ, definidas abaixo:

CREATE TABLE TBCLISP

CREATE TABLE TBCLIRJ

(CODCLISP
NOMECLISP
SALDOCLISP
PRIMARY KEY
)

(CODCLIRJ
NOMECLIRJ
SALDOCLIRJ
PRIMARY KEY
)

CHAR(3) NOT NULL,


VARCHAR(10),
DECIMAL(8,2),
(CODCLISP)

CHAR(3) NOT NULL,


VARCHAR(10),
DECIMAL(8,2),
(CODCLIRJ)

Com o seguinte contedo:

SELECT * FROM TBCLISP

SELECT * FROM TBCLIRJ;

CODCLISP NOMECLISP
SALDOCLISP
---------+---------+---------+-001
ANA
100.00
003
BEATRIZ
300.00
005
CARLA
500.00
008
PEDRO
2800.00
009
JOAO
2900.00
010
JOSE
3000.00

CODCLIRJ NOMECLIRJ
SALDOCLIRJ
---------+---------+---------+-002
DANIEL
200.00
004
ELIZABETE
400.00
006
FABIO
600.00
008
PEDRO
800.00
009
JOAO
900.00
010
JOSE
1000.00

Trata-se de dois cadastros de clientes, um de So Paulo (TBCLISP) e outro do


Rio de Janeiro (TBCLIRJ), mas com clientes em comum.
Usando diagrama de Venn, podemos observar que existe um grupo de linhas
com a mesma chave primria em ambas as tabelas:

TBCLIRJ

TBCLISP
LEFT

001
003
005

008
009
010

002
004
006

RIGHT

Desejamos fazer uma consulta (SELECT) exibindo CODCLISP, NOMECLIRJ e


SALDOCLIRJ, como mostrado abaixo:
SELECT CODCLISP, NOMECLIRJ, SALDOCLIRJ

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

22

Parte 5

1. A B

Interseco (INNER JOIN ou NATURAL JOIN)

Queremos os clientes cadastrados em duplicidade. So aqueles que existem


tanto no TBCLISP quanto no TBCLIRJ.

SELECT CODCLISP, NOMECLIRJ, SALDOCLIRJ


FROM TBCLISP INNER JOIN TBCLIRJ
ON
CODCLISP = CODCLIRJ

2. A B

CODCLISP NOMECLIRJ
SALDOCLIRJ
---------+---------+---------+----008
PEDRO
800.00
009
JOAO
900.00
010
JOSE
1000.00

Unio (FULL OUTER JOIN)

Queremos o cadastro completo.

SELECT CODCLISP, NOMECLIRJ, SALDOCLIRJ


FROM TBCLISP FULL OUTER JOIN TBCLIRJ
ON
CODCLISP = CODCLIRJ

CODCLISP NOMECLIRJ
SALDOCLIRJ
-------+---------+---------+---001
---------- ----------------- DANIEL
200.00
003
---------- ----------------- ELIZABETE
400.00
005
---------- ----------------- FABIO
600.00
008
PEDRO
800.00
009
JOAO
900.00
010
JOSE
1000.00

Quando o cdigo do cliente existe em TBCLISP, mas no existe em TBCLIRJ


ou vice-versa, as colunas so preenchidas com NULL (o DB2 exibe essas colunas
preenchendo o seu tamanho com vrios hfens).

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

23

3. Somente A (LEFT JOIN)


Queremos somente os clientes da TBCLISP e que tambm existam em
TBCLIRJ.

SELECT CODCLISP, NOMECLIRJ, SALDOCLIRJ


FROM
TBCLISP LEFT JOIN TBCLIRJ
ON
CODCLISP = CODCLIRJ

CODCLISP NOMECLIRJ
SALDOCLIRJ
-------+---------+---------+---001
---------- ---------003
---------- ---------005
---------- ---------008
PEDRO
800.00
009
JOAO
900.00
010
JOSE
1000.00

Somente os cdigos dos clientes de So Paulo so exibidos. As colunas


correspondentes aos cdigos dos clientes do Rio de Janeiro so preenchidas com
NULL.

4. Somente B (RIGHT JOIN)


Queremos somente os clientes da TBCLIRJ e que tambm existam em
TBCLISP.

SELECT CODCLISP, NOMECLIRJ, SALDOCLIRJ


FROM
TBCLISP RIGHT JOIN TBCLIRJ
ON
CODCLISP = CODCLIRJ
CODCLISP NOMECLIRJ
SALDOCLIRJ
-------+---------+---------+----------- DANIEL
200.00
-------- ELIZABETE
400.00
-------- FABIO
600.00
008
PEDRO
800.00
009
JOAO
900.00
010
JOSE
1000.00

Somente o nome e o saldo dos clientes do Rio de Janeiro so exibidos. Os


cdigos dos clientes de So Paulo que no existem na TBCLIRJ so preenchidos com
NULL.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

24

Parte 5

5. (A B) B

A menos B

Queremos exclusivamente os clientes de So Paulo. Eles no podem estar


cadastrados na TBCLIRJ.

SELECT
FROM
ON
WHERE

CODCLISP, NOMECLIRJ, SALDOCLIRJ


TBCLISP LEFT JOIN TBCLIRJ
CODCLISP = CODCLIRJ
CODCLIRJ IS NULL

CODCLISP NOMECLIRJ
SALDOCLIRJ
-------+---------+---------+---001
---------- ---------003
---------- ---------005
---------- ----------

Somente os cdigos dos clientes de So Paulo que no existem na TBCLIRJ


so exibidos.Como eles no possuem correspondentes na TBCLIRJ, as colunas
NOMECLIRJ e SALDOCLIRJ so preenchidas com NULL.

6. (A B) A

B menos A

Queremos exclusivamente os clientes do Rio de Janeiro. Eles no podem estar


cadastrados na TBCLISP.

SELECT
FROM
ON
WHERE

CODCLISP, NOMECLIRJ, SALDOCLIRJ


TBCLISP RIGHT JOIN TBCLIRJ
CODCLISP = CODCLIRJ
CODCLISP IS NULL

CODCLISP NOMECLIRJ
SALDOCLIRJ
-------+---------+---------+----------- DANIEL
200.00
-------- ELIZABETE
400.00
-------- FABIO
600.00

Somente as colunas NOMECLIRJ e SALDOCLIRJ, cujos cdigos de cliente


no existem na TBCLISP so exibidas. A coluna CODCLISP ser preenchida com
NULL.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5
7.

(A B) (A B )

25

Unio menos Interseco

Queremos exclusivamente os clientes que no esto cadastrados ao mesmo


tempo em So Paulo e Rio de Janeiro.

SELECT
FROM
ON
WHERE

CODCLISP, NOMECLIRJ, SALDOCLIRJ


TBCLISP FULL OUTER JOIN TBCLIRJ
CODCLISP = CODCLIRJ
CODCLISP IS NULL OR
CODCLIRJ IS NULL

CODCLISP NOMECLIRJ
SALDOCLIRJ
-------+---------+---------+--001
---------- ----------------- DANIEL
200.00
003
---------- ----------------- ELIZABETE
400.00
005
---------- ----------------- FABIO
600.00

Somente as colunas CODCLISP, NOMECLIRJ, SALDOCLIRJ cujos cdigos de


clientes no so comuns so exibidas. As colunas que no possuem correspondente
na outra tabela so preenchidas com NULL.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

26

Parte 5

SUBQUERIES ou SUBSELECTs
O processo de SUBQUERIES acontece quando os elementos de comparao
da clusula WHERE ou HAVING de um SELECT so resultado de um segundo
SELECT. Neste caso usamos um encadeamento de SELECTS, o que configura o uso
de SUB-QUERIES.
Exemplo 24:
Queremos uma lista dos funcionrios do departamento P1 cujo salrio menor
que a mdia dos salrios do departamento P2. Temos aqui o SELECT principal que
produz a lista de funcionrios do departamento P1, e o SELECT auxiliar que calcula a
mdia dos salrios do departamento P2. O SELECT completo com a SUBQUERY fica:
SELECT
FROM
WHERE

NOME,SALARIO
FUNCIONARIOS
DEPTO = P1 AND
SALARIO < (SELECT
FROM
WHERE

AVG(SALARIO)
FUNCIONARIOS
DEPTO = P2)

No exemplo acima, a SUBQUERY produziu somente uma linha. Nos casos em


que a SUBQUERY produz mais de uma linha, existem operandos no SELECT para
decidir o campo de ao da condio do WHERE. Estes operandos so os do quadro:

ALL

A condio do WHERE deve ser satisfeita para TODAS as linhas da


SUBQUERY.

IN
ANY
SOME

A condio do WHERE deve ser satisfeita pelo menos por UMA linha da
SUBQUERY

EXISTS

O WHERE verdadeiro se a SUBQUERY tiver pelo menos UMA linha.

Uma Subquery um SELECT embutido dentro de um SELECT. O resultado de


uma Subquery usado pelo SELECT mais externo. Pode ser usado no WHERE ou no
HAVING. Pode ser encadeado. Deve estar direita do operador na condio de
seleo. Deve ser colocado entre parnteses. Pode retornar uma ou mais linhas e isto
acaba determinando o operador a ser usado na condio de pesquisa. No pode
conter ORDER BY.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

Teoria

27

update

O comando UPDATE usado para alterar valores em uma ou mais linhas de


uma tabela. O comando enumera as colunas e seus novos valores.
UPDATE
SET

WHERE

Tabela
coluna1=valor1,
Coluna2=valor2,
.......
condio

Exemplo 1:
UPDATE
SET

WHERE

FUNCIONARIOS
SALARIO = SALARIO * 1.10,
BONUS = NULL,
COMISSAO = 10.00
DEPTO = P1

Neste exemplo, todos os funcionrios do departamento P1 tero um aumento


de 10% no salrio, perdero o bnus e tero uma valor de comisso igual a R$ 10,00.
Uma Subquery pode ser usada no WHERE para aprimorar a seleo das linhas
alteradas.
Exemplo 2:
UPDATE
SET

FUNCIONARIOS
SALARIO = SALARIO * 1.35,
COMISSAO = 500.00
WHERE CODFUNCNOT IN (SELECT CODFUNC
FROM ADVERTIDOS)
Neste exemplo, todos os funcionrios que no foram advertidos, tero um
aumento de 35% e uma comisso de R$ 500,00.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

28

Parte 5

Teoria

delete

O comando DELETE exclui linhas de uma tabela selecionadas pela clausula


WHERE. Se a clausula WHERE no for especificada em um comando DELETE, todas
as linhas da tabela sero apagadas.
DELETE FROM Tabela
WHERE condio
Exemplo 1:
DELETE FROM FUNCIONARIOS
WHERE CODFUNC = 00120
Uma Subquery pode ser usada no WHERE para aprimorar a seleo das linhas
excludas.
Exemplo 2:
DELETE FROM FUNCIONARIOS
WHERE CODFUNC IN ( SELECT CODFUNC
FROM TABDEMITIDOS
WHERE DATADEMISSAO < YEAR(CURRENT DATE))
Neste exemplo, so excludas as linhas da tabela FUNCIONARIOS cujo cdigo
do funcionrio esteja na tabela TABDEMITIDOS e a data de demisso seja menor que
o ano corrente.

Esta bem, onde


esto as linhas
para deleco
?
,

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

29

Practice

Atividade

TRABALHO EM DUPLA

Descreva o resultado dos SELECTs abaixo:

SELECT CODIGO,NOME
FROM
FUNCIONARIOS

SELECT *
FROM
FUNCIONARIOS

SELECT CODIGO,NOME
FROM
FUNCIONARIOS
WHERE CARGO = VENDAS

SELECT
FROM
WHERE
AND

SELECT NOME,SALARIO
FROM
FUNCIONARIOS
WHERE SALARIO BETWEEN
500 AND 2000

SELECT CODIGO,NOME
FROM
FUNCIONARIOS
WHERE CARGO IN
(VENDAS,COBRANCA)

NOME,SALARIO
FUNCIONARIOS
CARGO = VENDAS
SALARIO > 1000

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

30

Parte 5

SELECT NOME
FROM
FUNCIONARIOS
WHERE NOME LIKE
MARIA%

SELECT NOME,SALARIO
FROM
FUNCIONARIOS
WHERE SALARIO * 12 >
50000

SELECT NOME,
CURRENT DATE
DATADEMISSAO
FROM
FUNCIONARIOS
WHERE DATADEMISSAO
IS NOT NULL

SELECT NOME || -
|| CODDEPTO
10
FROM
FUNCIONARIOS
WHERE SALFUNC > 10000

SELECT NOME, CARGO


FROM
FUNCIONARIOS
WHERE
DATAADMISSAO +
11
10 YEARS
>
CURRENT DATE

SELECT
FROM
12 UNION
SELECT
FROM

NOMEFUNC, CARGO
TABFUNCSP

SELECT
FROM
13 UNION
SELECT
FROM

NOMEFUNC, CARGO
TABFUNCSP
ALL
NOMEFUNC, CARGO
TABFUNCRJ

NOMEFUNC, CARGO
TABFUNCRJ

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

Atividade

31

TRABALHO EM DUPLA

Descreva o resultado dos SELECTs abaixo:

SELECT SUM(SALARIO),
AVG(COMISSAO)
1
FROM
FUNCIONARIOS
WHERE DEPTO = P1

SELECT MAX(SALARIO),
MIN(SALARIO)
2
FROM
FUNCIONARIOS

SELECT CARGO,
SUM(SALARIO)
FUNCIONARIOS
3 FROM
GROUP BY CARGO
HAVING SUM(SALARIO) > 10000

SELECT SALARIO,
DECIMAL(SALARIO,6,1),
INTEGER(SALARIO),
4
HEX(SALARIO),
DIGITS(SALARIO)
FROM
FUNCIONARIOS

SELECT NOME,
LENGTH(NOME)
5
FROM
FUNCIONARIOS

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

32

Parte 5

SELECT SUBSTR(NOME,1,3)
FROM
FUNCIONARIOS

SELECT COUNT(*)
FROM
FUNCIONARIOS

SELECT NOME,
VALUE(COMISSAO,0)
8
FROM
FUNCIONARIOS
WHERE COMISSAO IS NULL
SELECT NOME,
YEAR(DATANASC)
9
FROM
FUNCIONARIOS
WHERE CODFUNC = 0010
SELECT NOME,
YEAR(DATANASC)
FUNCIONARIOS
10 FROM
WHERE YEAR(CURRENT DATE
DATANASC) >= 18

SELECT NOME, SALARIO * 12


FROM
FUNCIONARIOS
WHERE
YEAR(DATAADMISSAO
11
+ 10 YEARS)
>
YEAR(CURRENT DATE)

SELECT NOME, TELEFONE,


COMISSAO + SALARIO
AS BONUS
12
FROM
FUNCIONARIOS
WHERE MONTH(DATAADMISSAO)
= MONTH(CURRENT DATE)

SELECT NOME, TELEFONE


FROM
FUNCIONARIO
13
WHERE SUBSTR(NOME,1,3) =
SIL

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

Atividade

33

Reviso aos pares

Descreva o resultado das Subqueries abaixo:

SELECT
FROM
WHERE

NOME,SALARIO
FUNCIONARIOS
DEPTO = P1 AND SALARIO > ALL
( SELECT SALARIO
FROM FUNCIONARIOS
WHERE DEPTO = P2)

SELECT
FROM
WHERE

NOME,SALARIO
FUNCIONARIOS
DEPTO = P1 AND SALARIO >ANY
( SELECT SALARIO
FROM FUNCIONARIOS
WHERE DEPTO = P2)

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

34

Parte 5

SELECT
FROM
WHERE

NOME,SALARIO
FUNCIONARIOS
DEPTO = P1 AND SALARIO EXISTS
( SELECT SALARIO
FROM FUNCIONARIOS
WHERE DEPTO = P2)

SELECT DEPTO, AVG(SALARIO)


FROM
FUNCIONARIOS
WHERE
CARGO <> GERENTE
GROUP BY DEPTO
HAVING AVG(SALARIO) < ( SELECT AVG(SALARIO)
FROM
FUNCIONARIOS
WHERE CARGO <> GERENTE)
ORDER BY 2 DESC

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

35

Parte 5

Atividade

Reviso aos pares

Dado o MER monte os SELECTs para responder


as questes abaixo:

5
CLIENTE

PEDIDO

MOTOBOY

NUMPED(PK)
DATAPED
CODCLI(FK)
CODBOY(FK)

CODCLI(PK)
NOMECLI
FONECLI

CODBOY(PK)
NOMEBOY
ALCUNHABOY

COMPAGTO
(FK)NUMPED
(FK)CODFORMA
VALORPAGTO

PK

ITEM
(FK)NUMPED
NUMITEM
CODPROD(FK)
QTDPROD

PRODUTO
PK

CODPROD(PK)
DESCPROD
PRECOPROD

FORMAPGTO
CODFORMA(PK)
DESCFORMA

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

36

Parte 5

1) Qual o nome dos clientes que o motoboy Bigode fez entregas ontem?

2) Qual o produto mais vendido?

3) Quantos pedidos foram pagos em cheque este ano?

4) Qual produto nunca foi vendido?

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

37

5) Qual cliente fez mais pedidos?

6) Qual a pizza mais cara?

5
7) Qual a forma de pagamento usada pela cliente Ana Maria?

8) Quantos pedidos foram feitos ontem?

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

38

Parte 5

9) Quantos pedidos foram feitos antes de ontem?

10) A relao de pedidos por motoboy.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

39

Parte 5

Performance

Prtica de laboratrio

Atividade

Utilize as tabelas abaixo para executar os


comandos INSERT, SELECT, DELETE e UPDATE.

IDXCLI
TBCLI
CODCLI (PK)
NOMECLI
ENDCLI
DATANASCCLI
ALTURACLI
CODTIPOCLI (FK)

IDXTIPOPROD
TBTIPOPROD
CODTIPOPROD (PK)
DESCTIPOPROD

IDXPROD
TBPROD
CODPROD (PK)
DESCPROD
PRECOPROD
UNIDPROD
CODTIPOPROD (FK)

IDXVENDA
TBVENDA
NUMVENDA (PK)
DATAHORAVENDA
QTDEVENDA
CODCLI (FK)
CODPROD (FK)

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

SET NULL

RESTRICT

IDXTIPOCLI
TBTIPOCLI
CODTIPOCLI (PK)
DESCTIPOCLI

CASCADE

SET NULL

40

Parte 5

Atividade

INSERT

Monte os INSERTs para popular as tabelas.


Os membros do arquivo particionado GP.GPXXNN.JCLDATA contero os
comandos SQL DML para os INSERTs de acordo com a numerao dada s tabelas
(de 1 a 5).

Membro
INSERT1
INSERT2
INSERT3
INSERT4
INSERT5

Tabela
TBTIPOCLI
TBTIPOPROD
TBCLI
TBPROD
TBVENDA

Qtde. Linhas
5
5
10
10
30

Dica: para digitar vrios comandos SQL no mesmo membro, separe-os usando
ponto-e-vrgula como mostra o exemplo abaixo.

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

Atividade

41

select

Monte os SELECTs para as consultas abaixo.


Os membros do arquivo particionado GP.GPXXNN.JCLDATA contero os
comandos SQL DML para os SELECTs de acordo com a numerao de exerccio.
Membro

Consulta solicitada
Exibir o nome dos clientes com menos de 1.7m de altura

SELECT01

Exibir o nome e o endereo dos clientes do tipo 01

SELECT02

Exibir a descrio dos produtos do tipo 03

SELECT03

Exibir todos os dados (*) de vendas feitos para o cliente 0001

SELECT04

Exibir o preo do produto mais caro (MAX)

SELECT05

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

42

Parte 5
Exibir o nome dos clientes que moram em rua (LIKE)

SELECT06

Exibir a mdia de preo dos produtos do tipo 02

SELECT07

Exibir todos os dados dos produtos (*) em ordem crescente de


descrio (ORDER BY)

SELECT08

Exibir todos os dados dos clientes do tipo 03e (AND) que tenham
mais de 1.7m de altura em ordem decrescente de nome

SELECT09

Exibir quantas vendas foram feitas (COUNT) feitas para o cliente


0001

SELECT10

Exibir a descrio dos produtos do tipo 01, 03 e 05 (IN)

SELECT11

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

43

Exibir o preo dos produtos mais caros por tipo de produto (MAX e
GROUP BY)

SELECT12

Exibir a mdia da altura dos clientes por tipo de cliente (AVG e


GROUP BY)

SELECT13

Exibir o nome e a data de nascimento dos clientes maiores ou iguais


a 18 anos. (YEAR e CURRENT DATE)

SELECT14

Exibir o nome e a descrio do tipo de cliente (JOIN)

SELECT15

Exibir a descrio dos produtos comprados por clientes do tipo 04


(SUB-QUERIE)

SELECT16

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

44

Parte 5
Exibir sem repetio, o nome dos clientes que compraram produtos
do tipo 03em ordem crescente de nome. (JOIN ou SUB-QUERIE)

SELECT17

Exibir o valor de cada compra feita pelo cliente 0002(JOIN)

SELECT18

Exibir o valor do total de compras feitas pelo cliente 0001 no ms e


ano correntes. (JOIN)

SELECT19

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

Parte 5

45

Exibir o nome dos clientes que compraram mais de R$ 1.000,00 em


produtos do tipo 01. (JOIN / SUB-QUERIE)

SELECT20

5
Exibir a descrio do tipo de produto que os clientes do tipo 03`
compraram mais de 10 unidades por compra. (JOIN / SUB-QUERIE)

SELECT21

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

46

Parte 5

Atividade

UPDATE

Monte os UPDATEs para as alteraes abaixo.


Os membros do arquivo particionado GP.GPXXNN.JCLDATA contero os
comandos SQL DML para os UPDATEs de acordo com a numerao dada ao
exerccio.
Membro

Alterao Solicitada
Aumentar o preo dos produtos do tipo 01 em 15%

UPDATE1

Alterar os clientes do tipo 01para tipo 03

UPDATE2

Alterar para tipo 05 os clientes nascidos depois de 1980 com mais


de 1.6m de altura

UPDATE3

Abaixar os preos dos produtos nunca que foram vendidos em 10%

UPDATE4

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

47

Parte 5

Atividade

DELETE

Lembrem-se das
Regras de integridade
Na excluso
Cascade / delete / set null

Monte os DELETEs para as excluses abaixo.


Os membros do arquivo particionado GP.GPXXNN.JCLDATA contero os
comandos SQL DML para os DELETEs de acordo com a numerao dada ao
exerccio.
Membro

Excluso solicitada
Excluir as vendas feitas para os clientes 0005 e 0010

DELETE1

Excluir os clientes que compraram os produtos 0001 e 0003

DELETE2

Excluir os produtos com preo entre R$ 500,00 e R$ 1500,00 e tipo de


produto 01

DELETE3

Excluir os produtos que nunca foram vendidos

DELETE4

www.grandeporte.com.br

(11) 4427-4579(11) 99903-3218

48

Parte 5

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

regular

www.grandeporte.com.br

ruim

Muito ruim

(11) 4427-4579(11) 99903-3218

Parte

Ray Boyce foi um cientista da computao


americano, mais conhecido por suas pesquisas
em banco de dados relacionais. Trabalhou na
IBM onde foi co-desenvolvedor da Forma Normal
Boyce-Codd (em parceria com Edgar Frank
Codd) e da linguagem SQL (com Donald Don
Chamberlim)
Raymond Francis Boyce
1947- 1974

Verso 2.2.3

Parte 6

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe?


O que voc no sabe?
Porque importante conhecer estes tpicos?
Quais so os seus temores?
O que voc considera difcil?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6

Presentation

Histria

O PRIMEIRO PROGRAMA

Chegou o momento de escrevermos o primeiro programa COBOL com DB2.


agora que voc ir aplicar seu conhecimento da SQL DML para que, via programa
COBOL possa manipular os dados armazenados nas tabelas do DB2.
Os arquivos VSAM (Virtual Storage Access Method), vistos no curso de COBOL
Level 1, esto aos poucos sendo substitudos por Banco de Dados armazenados em
DB2. Assim, comum que novos sistemas j nasam com a camada de dados
baseada em Sistemas Gerenciadores de Banco de Dados Relacional.
H todo um jargo novo para aprender aqui, tais como DECLARATION, HOST
VARIABLES, INDICATOR, CURSOR, etc. Acostume-se com eles e utilize esse
linguajar durante seu treinamento. Assim, quando estiver em uma entrevista e utilizar
os termos certos para as situaes certas, mostrar ao entrevistador que voc est
preparado para os desafios de programao COBOL com DB2.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6

Teoria

Programando em cobol

FORMATO DOS COMANDOS


Para codificar um comando SQL em COBOL basta coloc-lo entre as palavras
EXEC SQL e END-EXEC na margem B, como no modelo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
EXEC SQL
COMANDO SQL
END-EXEC

Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
EXEC SQL
DELETE FROM FUNCIONARIOS
WHERE DATAADMISSAO IS NOT NULL
END-EXEC

HOST VARIABLES
Quando se manipula os dados de tabelas em um programa COBOL, preciso
primeiro anunciar (DECLARE) essas tabelas ao programa.
Por exemplo, dada a tabela EMPREGADO abaixo:
IDEMP NOMEEMP SALARIOEMP DATAADMINEMP
integer
char(10)
decimal(7,2)
date
1
JOAO
1000.00
10/05/2000
2
JOSE
2000.00
11/06/2001
3
MARIA
3000.00
12/07/2002
Antes do programa COBOL poder manipular seus dados, preciso declar-la
na WORKING-STORAGE SECTION, como mostrado abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
EXEC SQL
DECLARE EMPREGADO TABLE
(IDEMP
INTEGER,
NOMEEMP
CHAR(10),
SALARIOEMP
DECIMAL(7,2),
DATAADMINEMP
DATE)
END-EXEC

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6
Essa declarao diz ao programa COBOL que ser usada a tabela
EMPREGADO, composta pelas colunas (SQL FIELDS) IDEMP, NOMEEMP,
SALARIOEMP e DATAADMINEMP com seus respectivos tipos de dados. Como essa
declarao um comando SQL, e no um comando COBOL preciso delimit-lo por
EXEC SQL e END-EXEC.
Quando os dados so trazidos dessas colunas para o COBOL, deve haver
variveis correspondentes para receber esses dados. Para cada coluna da tabela
(SQL FIELDS) preciso declarar uma varivel COBOL correspondente (HOST
VARIABLE).
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
EXEC SQL
DECLARE
EMPREGADO TABLE
(ID_EMP
INTEGER,
NOME_EMP
CHAR(10),
SALARIO_EMP
DECIMAL(7,2),
DATAADMIN_EMP
DATE)
END-EXEC.
01

WS-REG-EMPREGADO.
05 WS-ID-EMP
05 WS-NOME-EMP
05 WS-SALARIO-EMP
05 WS-DATAADMIN-EMP

PIC
PIC
PIC
PIC

S9(9) COMP.
X(10).
S9(5)V99 COMP-3.
X(10).

O processo de especificar o nome da tabela, colunas SQL (SQL FIELDS) e as


variveis correspondentes no COBOL (HOST VARIABLES) chamado de
DECLARATIONS.
A tabela abaixo mostra os SQL FIELDS e as HOST VARIABLES
correspondentes. necessrio haver uma compatibilidade completa entre o
formato do dado nas colunas das tabelas (SQL FIELDS) e as varivel do COBOL
(HOST VARIABLE), pois ao contrrio do COBOL que ajusta o formato dos dados nos
MOVEs, o DB2 no faz nenhuma converso de formato nestas operaes.
SQL Field

Tipo de dado SQL

Host Variable

Tipo de dado COBOL

IDEMP

INTEGER (4 Bytes)

WS-IDEMP

PIC S9(9) COMP.

NOMEEMP

CHAR (10 Bytes)

WS-NOMEEMP

PIC X(10).

SALARIOEMP

DECIMAL (4 Bytes)

WS-SALARIOEMP

PIC S9(5)V99 COMP-3.

DATAADMINEMP

DATE (10 bytes)

WS-DATAADMINEMP

PIC X(10).

Qualquer varivel definida no COBOL pode ser usada como HOST VARIABLE,
desde que seu formato seja completamente compativel (tamanho, PICTURE, casas
decimais etc) com a coluna da tabela com a qual troca dados.
Podemos fazer as declaraes das tabelas manualmente, como visto
anteriormente, ou podemos ger-las automaticamente pelo aplicativo chamado
DCLGEN (Declaration Generator Tool).Como mostra as telas a seguir:

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6

Para usar o painel do DCLGEN, a partir do menu principal do TSO, escolhemos


as opes D (DB2I) e 2 (DCLGEN). No painel preenchemos os seguintes campos:
1
4
6

Nome da tabela para a qual vamos criar as variveis hospedeiras


Entre apstrofes, o nome do arquivo particionado e seu membro, que conter a
book das variveis hospedeiras.
ADD quando for criar a book ou REPLACE quando a book j existe e ser
atualizada.

Depois de pressionar a tecla ENTER, o terminal ser notificado com a seguinte


mensagem, indicando o sucesso da operao:

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6
A rea produzida pelo DCLGEN deve ser inserida na WORKING-STORAGE
SECTION do programa COBOL com o seguinte comando:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
EXEC SQL
INCLUDE PRODUTO
END-EXEC

Mostramos abaixo um exemplo de declarao da tabela PRODUTO produzida


pelo DCLGEN:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
******************************************************************
* DCLGEN TABLE(PRODUTO)
*
*
LIBRARY(GP.GPAZ99.JCLDATA(PRODUTO))
*
*
LANGUAGE(COBOL)
*
*
QUOTE
*
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS
*
******************************************************************
EXEC SQL DECLARE PRODUTO TABLE
( CODPROD
CHAR(4) NOT NULL,
DESCPROD
VARCHAR(20) NOT NULL,
UNIDPROD
CHAR(5),
LOCALPROD
CHAR(5),
QTDEST
DECIMAL(5, 0),
QTDMAX
DECIMAL(5, 0),
QTDMIN
DECIMAL(5, 0),
PRECOCOMPRA
DECIMAL(8, 2),
PRECOVENDA
DECIMAL(8, 2),
PERCOMIS
DECIMAL(4, 2)
) END-EXEC.
******************************************************************
* COBOL DECLARATION FOR TABLE PRODUTO
*
******************************************************************
01 DCLPRODUTO.
10 CODPROD
PIC X(4).
10 DESCPROD.
49 DESCPROD-LEN
PIC S9(4) USAGE COMP.
49 DESCPROD-TEXT
PIC X(20).
10 UNIDPROD
PIC X(5).
10 LOCALPROD
PIC X(5).
10 QTDEST
PIC S9(5)V USAGE COMP-3.
10 QTDMAX
PIC S9(5)V USAGE COMP-3.
10 QTDMIN
PIC S9(5)V USAGE COMP-3.
10 PRECOCOMPRA
PIC S9(6)V9(2) USAGE COMP-3.
10 PRECOVENDA
PIC S9(6)V9(2) USAGE COMP-3.
10 PERCOMIS
PIC S9(2)V9(2) USAGE COMP-3.
******************************************************************
* THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 10
*
******************************************************************

Todos os comandos SQL devem portanto usar HOST VARIABLES contidos


dentro destas reas produzidas pelo DCLGEN. No exemplo acima estas variveis
esto na rea DCLPRODUTO.
O nome da varivel hospedeira de nvel 01 sempre ser DCLnome-da-tabela.
Ela ser usada quando se fizer uma leitura (SELECT) de todas as colunas (*) da
tabela.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6

Existe uma equivalncia na declarao de arquivos e tabelas. A figura abaixo


mostra essa equivalencia.

Declaration da Tabela

Definio do Arquivo

Varivel Hospedeira

Varivel Espelho

Precisamos contar ao COBOL sobre os arquivos e tabelas que o programa ir


manipular, bem como as variveis espelho e hospedeira a serem usadas.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

10

Parte 6

Quando usadas nos comando SQL as HOST VARIABLES devem sempre estar
precedidas pelo caractere dois pontos(:). Se o compilador de comandos SQL encontra
o (:) antes de uma palavra, ela interpretada como HOST VARIABLE, caso contrrio
interpretada como nome de coluna de tabela (SQL FIELD).
O exemplo abaixo mostra o de uso de variveis hospedeiras. Um cdigo de
funcionrio passado varivel hospedeira CODEMP e um SELECT faz o contedo
das colunas NOMEEMP e SALARIO carregarem as hospedeiras :NOMEEMP
e :SALARIO, para o funcionrio 000001. Depois essas variveis so exibidas na
SYSOUT pelo comando DISPLAY.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
MOVE 000001 TO CODEMP
EXEC SQL
SELECT NOMEEMP, SALARIO
INTO :NOMEEMP, :SALARIO
FROM EMPREGADOS
WHERE CODEMP = :CODEMP
END-EXEC
DISPLAY CODIGO..: CODEMP
DISPLAY NOME....: NOMEEMP
DISPLAY SALARIO.: SALARIO

Observe que a varivel hospedeira precisou usar os dois pontos (:) apenas no
comando SQL, isto , entre EXEC-SQL e END-EXEC. No COBOL, a varivel
hospedeira no precisa dos dois pontos (:).
EXEC SQL
DECLARE JULIETA
TABLE

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6

Teoria

11

Include x copy

Use COPY para inserir book de arquivos, variveis e rotinas em seu programa.
Lembre-se que possvel usar REPLACING para substituir coringas por strings que
voc precisa. Exemplo:

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
COPY BK001D1 REPLACING ==::== BY ==WS-==.

Use INCLUDE para inserir as books de tabelas (DECLARATIONS) criadas pelo


DCLGEN ou por voc mesmo. S assim o compilador reconhecer que se trata de
cdigo especifico a ser tratado como SQL.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
EXEC SQL
INCLUDE BK002TP
END-EXEC

E
CO n t o
PY
de eu di
de
ss
bo
v
a
e
o
r
tab
ela iveis k de a ele
ar
s, m
pa
h
as ospe quivo ra fa
de
ele
z
e
n iras INCL er
om
par
UD
E
eo
a
u vi a s
ue
...

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

12

Parte 6

Teoria

TESTE DE ERRO NOS


COMANDOS SQL(SQLCODE)

Sempre que um comando SQL executado, um cdigo de retorno gerado


automaticamente, semelhante ao FILE STATUS para os arquivos. preciso declarar
uma book de variveis chamada SQLCA (SQL Communication Area) que contm as
variveis que armazenam esse retorno.
A principal varivel da SQLCA a SQLCODE, que ser testada pelos
comandos do COBOL. Para declarar a SQLCA na WORKING-STORAGE dos
programas usamos a seguinte sintaxe:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
EXEC SQL
INCLUDE SQLCA
END-EXEC

Esse INCLUDE carrega a seguinte rea (BOOK de variveis):


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 SQLCA.
05 SQLCAID
PIC X(8).
05 SQLCABC
PIC S9(9) COMP-4.
05 SQLCODE
PIC S9(9) COMP-4.
05 SQLERRM.
49 SQLERRML PIC S9(4) COMP-4.
49 SQLERRMC PIC X(70).
05 SQLERRP
PIC X(8).
05 SQLERRD
OCCURS 6 TIMES
PIC S9(9) COMP-4.
05 SQLWARN.
10 SQLWARN0 PIC X.
10 SQLWARN1 PIC X.
10 SQLWARN2 PIC X.
10 SQLWARN3 PIC X.
10 SQLWARN4 PIC X.
10 SQLWARN5 PIC X.
10 SQLWARN6 PIC X.
10 SQLWARN7 PIC X.
05 SQLEXT.
10 SQLWARN8 PIC X.
10 SQLWARN9 PIC X.
10 SQLWARNA PIC X.
10 SQLSTATE PIC X(5).

Nem sempre o SQLCODE suficiente para descobrir o motivo do no sucesso


na execuo de um comando SQL. A varivel SQLERRMC adiciona informaes que
ajudam na anlise do erro (mensagem de erro).

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6

13

Se a varivel SQLWARN0 for igual a (espao em branco), ento as variveis


de SQLWARN1 a SQLWARN6 esto em branco.
Mas se a varivel SQLWARN0 for igual a W, significa que alguns SQLWARN
foram setados para W:
SQLWARN1
SQLWARN2
SQLWARN3
SQLWARN4
SQLWARN5
SQLWARN6

A string assinaladana varivel Host foi truncada


Nulos ignorados no clculo de uma funo de coluna
Nmero de colunas maior que o de variveis HOST
UPDATE ou DELETE PREPARED sem clusula WHERE
Instruo SQL/DS invlida no DB2
Valor da Data ou Timestamp corrigidas de um valor invlido
resultante de uma operao aritmtica.

Os valores a serem testados no SQLCODEso:

SQLCODE = 0

Execuo com sucesso.

SQLCODE < 0

Comando no foi executado. O codigo do erro o valor do


SQLCODE.

SQLCODE > 0

O comando foi executado, com um WARNING dado pelo valor


do SQLCODE.

0
Os cdigos de erro dados pelo SQLCODE podem ser encontrados no manual
de erros da IBM (DB2 MESSAGES AND CODES), mas a seguir temos alguns valores
importantes, que todo programador precisa saber:
SQLCODE = +100 Linha pesquisada no existe
SQLCODE = 0

Sucesso na execuo do comando SQL

SQLCODE = -545 H valores que no satisfazem as (CHECK CONSTRAINTS)


SQLCODE = -803 Linha com esta PRIMARY KEY j existe

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

14

Parte 6
necessrio testar o cdigo de retorno para todos os comandos SQL
executveis (Os comandos DECLARE no so executveis). Como a varivel
SQLCODE binria (PIC S9(9) COMP-4) necessrio mov-la para uma varivel
formatada para poder ser exibida. Usaremos a varivel WS-SQLCODE, como mostra
o exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
EXEC SQL
INCLUDE SQLCA
END-EXEC
77 WS-SQLCODE
PIC +9(9).
PROCEDURE
DIVISION.
.
.
.
EXEC SQL
INSERT INTO PRODUTO
(CODPROD, DESCPROD, QTDMIN, QTDMAX, QTDEST)
VALUES
(:CODPROD, :DESCPROD, :QTDMIN, :QTDMAX, :QTDEST)
END-EXEC
EVALUATE SQLCODE
WHEN
0
ADD 1 TO WS-CT-GRAV
WHEN -803
DISPLAY "PRODUTO JA EXISTE"
WHEN -545
DISPLAY "PRODUTO COM DADOS INVALIDOS"
WHEN OTHER
MOVE "ERRO INSERT PRODUTO" TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
GO TO
9000-ERRO-DB2
END-EVALUATE
.
.
.
9000-ERRO-DB2.
DISPLAY *-------------------------------------------------*
DISPLAY *
ERRO AO ACESSAR O DB2
*
DISPLAY *-------------------------------------------------*
DISPLAY MENSAGEM......: WS-MSG
DISPLAY SQLCODE.......: WS-SQLCODE
DISPLAY SQL MESSAGE...: SQLERRMC
DISPLAY *-------------------------------------------------*
DISPLAY *
TERMINO ANORMAL DO PROGRAMA
*
DISPLAY *-------------------------------------------------*
MOVE +12 TO RETURN-CODE
STOP RUN
.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

15

Parte 6

Teoria

WHENEVER

A clusula WHENEVER (sempre que) do DB2 pode ser usada para substituir
os testes do SQLCODE, ela define uma ao no programa para onde a execuo
continuar quando ocorrer uma condio de erro apontada no WHENEVER.
O WHENEVER no entanto somente intercepta 3 condies de erro:

SQLWARNING

Intercepta SQLCODE positivo diferente de +100 ou


SQLWAR0 = W

SQLERROR

Intercepta SQLCODE negativo

NOT FOUND

Intercepta SQLCODE = +100

Tambm s podem ser programadas 2 aes para processar os erros


interceptados:

GO TO pargrafo

a execuo se desvia para o pargrafo

CONTINUE

a execuo continua na prxima sentena

A instruo WHENEVER substituda por cdigos IF...ELSE...END-IF pelo


pr-compilador. O pr-compilador insere a condio equivalente logo aps cada
instruo SQL do programa fonte.
Como resultado das definies acima, a sintaxe do WHENEVER pode ser uma
das seguintes:

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
EXEC SQL
WHENEVER condicao
GO TO paragrafo
END-EXEC
ou
EXEC SQL
WHENEVER condicao
CONTINUE
END-EXEC

www.grandeporte.com.br

SQLWARNING
SQLERROR
0

100

NOT FOUND

(11) 4427-4579(11) 9 9903-3218

16

Parte 6
Exemplos:

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6

Teoria

17

Procedure division com


ou sem Pargrafo principal

possvel no criar um pargrafo principal na PROCEDURE DIVISION


porque o pr-compilador acrescenta uma SECTION (DSNSQL SECTION) com os
pargrafos SQL-SKIP, SQL-INITIAL e SQL-INITIEND. O pargrafo SQL-INITIAL varia
em funo dos comandos SQL e das tabelas em uso pelo programa. Abaixo temos um
exemplo para o programa de carga (INSERT).

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*-------------------------------------------------------------*
PROCEDURE
DIVISION.
*-------------------------------------------------------------*
*000-ROTINA-PRINCIPAL.
DSNSQL SECTION.
SQL-SKIP.
GO TO SQL-INIT-END.
SQL-INITIAL.
MOVE 1 TO SQL-INIT-FLAG.
CALL 'DSNHADDR' USING SQL-VPARMPTR OF SQL-PLIST2 SQL-PVAR-LIS
T2.
CALL 'DSNHADDR' USING SQL-PVAR-ADDRS OF SQL-PLIST2 CODPROD OF
DCLPRODUTO SQL-NULL DESCPROD OF DCLPRODUTO SQL-NULL UNIDPROD
OF DCLPRODUTO SQL-NULL LOCALPROD OF DCLPRODUTO SQL-NULL QTDES
T OF DCLPRODUTO SQL-NULL QTDMAX OF DCLPRODUTO SQL-NULL QTDMIN
OF DCLPRODUTO SQL-NULL PRECOCOMPRA OF DCLPRODUTO SQL-NULL PRE
COVENDA OF DCLPRODUTO SQL-NULL PERCOMIS OF DCLPRODUTO SQL-NUL
L
CALL 'DSNHADDR' USING SQL-CODEPTR OF SQL-PLIST2 SQLCA.
SQL-INIT-END.
PERFORM 010-INICIALIZAR
PERFORM 030-PROCESSAR
UNTIL CADPRDD1-EOF
PERFORM 040-TERMINO
STOP RUN
.

Porm se for colocado no pargrafo principal, o compilador produzir uma


INFORMATIONAL MESSAGE (no erro) com os seguintes dizeres:
the paragraph or section prior to paragraph or section
000-ROTINA-PRINCIPAL did not contain any statements.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

18

Parte 6

Teoria

Incluindo linhas na tabela

A sntaxe do comando para incluir linhas em uma tabela a mesma vista nos
conceitos de SQL DML, somente acrescentando que os argumentos informados em
VALUES podem ser constantes ou HOST VARIABLES.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
EXEC SQL
INSERT INTO tabela
(coluna1, coluna2, ...)
VALUES
(:variavel1,:variavel2, ...)
END-EXEC
IF SQLCODE NOT = 0
MOVE ERRO NO INSERT
MOVE SQLCODE
GO TO 9000-ERRO-DB2
END-IF

TO WS-MSG
TO WS-SQLCODE

Se alguma das colunas do comando INSERT for do tipo VARCHAR,


ahospedeira com LEN (length) precisa ser carregado com o comprimento total do
valor da coluna e a hospedeira com TEXT recebe o contedo alfanumrico. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
MOVE 10
TO DESCRICAO-LEN
MOVE WS-DESCRICAO-M TO DESCRICAO-TEXT
EXEC SQL
INSERT INTO PRODUTO
(CODIGO, DESCRICAO, ...)
VALUES
(:CODIGO, :DESCRICAO, ...)
END-EXEC
EVALUATE SQLCODE
WHEN 0
ADD 1 TO WS-CTINSERIDO
WHEN -803
ADD 1 TO WS-CTDUPLICADO
WHEN ANOTHER
MOVE ERRO NO INSERT
MOVE SQLCODE
GO TO 9000-ERRO-DB2
END-EVALUATE

www.grandeporte.com.br

TO WS-MSG
TO WS-SQLCODE

(11) 4427-4579(11) 9 9903-3218

Parte 6

Exemplo

19

Programa de carga

Objetivo do Programa
Carregar a tabela TBCLIENTE com base em um arquivo sequencial CADCLI.

Macro-Fluxo

CADCLI

EXECARGA

TBCLIENTE

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

20

Parte 6
Layout do Arquivo

Nome do Arquivo

CADCLI

Nome do Registro

REG-CADCLI

Nome do Campo

Tipo e
Tamanho

Descrio

CODCLI-CADCLI

PIC X(04)

Cdigo do cliente

NOMECLI-CADCLI

PIC X(30)

Nome do cliente

ENDCLI-CADCLI

PIC X(40)

Endereo do cliente

FONECLI-CADCLI

PIC X(09)

Telefone do cliente

EMAILCLI-CADCLI

PIC X(50)

E-mail do cliente

CPFCLI-CADCLI

PIC X(11)

CPF do cliente

SALDOCLI-CADCLI

PIC 9(05)V99

Saldo do cliente

BOOK CADCLI

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
******************************************************************
* BOOK DO ARQUIVO
- CADASTRO DE CLIENTE
*
* NOME DA BOOK
- BKEXEAC
*
* NOME DO PDS
- GP.GPXXNN.BOOKLIB
*
* NOME DO ARQUIVO
- CADCLI
*
* TAMANHO DO REGISTRO
- 151 BYTES
*
******************************************************************
01 ::REG-CADCLI.
03 ::CODCLI-CADCLI
PIC X(04).
03 ::NOMECLI-CADCLI
PIC X(30).
03 ::ENDCLI-CADCLI
PIC X(40).
03 ::FONECLI-CADCLI
PIC X(09).
03 ::EMAILCLI-CADCLI
PIC X(50).
03 ::CPFCLI-CADCLI
PIC X(11).
03 ::SALDOCLI-CADCLI
PIC 9(05)V99.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

21

Parte 6
Layout da Tabela

Nome do Tabela

TBCLIENTE

Nome do Campo

Tipo e Tamanho

Complemento

CODCLI

CHAR(04)

UNIQUE NOT NULL

NOMECLI

VARCHAR(30)

NOT NULL

ENDCLI

VARCHAR(40)

FONECLI

CHAR(09)

EMAILCLI

VARCHAR(50)

CPFCLI

CHAR(11)

SALDOCLI

DECIMAL(9,2)
DECLARATION da tabela TBCLIENTE

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
******************************************************************
* DCLGEN TABLE(TBCLIENTE)
*
*
LIBRARY(GP.GPAZ99.BOOKLIB(BKEXETC))
*
*
LANGUAGE(COBOL)
*
*
QUOTE
*
*
DBCSDELIM(NO)
*
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS
*
******************************************************************
EXEC SQL DECLARE TBCLIENTE TABLE
( CODCLI
CHAR(4) NOT NULL,
NOMECLI
VARCHAR(30) NOT NULL,
ENDCLI
VARCHAR(40),
FONECLI
CHAR(9),
EMAILCLI
VARCHAR(50),
CPFCLI
CHAR(11),
SALDOCLI
DECIMAL(9,2)
) END-EXEC.
******************************************************************
* COBOL DECLARATION FOR TABLE TBCLIENTE
*
******************************************************************
01 DCLTBCLIENTE.
10 CODCLI
PIC X(4).
10 NOMECLI.
49 NOMECLI-LEN
PIC S9(4) USAGE COMP.
49 NOMECLI-TEXT
PIC X(30).
10 ENDCLI.
49 ENDCLI-LEN
PIC S9(4) USAGE COMP.
49 ENDCLI-TEXT
PIC X(40).
10 FONECLI
PIC X(9).
10 EMAILCLI.
49 EMAILCLI-LEN
PIC S9(4) USAGE COMP.
49 EMAILCLI-TEXT
PIC X(50).
10 CPFCLI
PIC X(11).
10 SALDOCLI
PIC 9(05)V99.
******************************************************************
* THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 6
*
******************************************************************

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

22

Parte 6
Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
==================================================
==
ESTATISTICA FINAL DE PROCESSAMENTO
==
==================================================
QTDE. PRODUTOS LIDOS CADPRDD1........: ZZ.ZZ9
QTDE. PRODUTOS INSERIDOS TBPRODUTO...: ZZ.ZZ9
QTDE. PRODUTOS DUPLICADOS............: ZZ.ZZ9
QTDE. PRODUTOS INVALIDOS.............: ZZ.ZZ9
==================================================
TEMPO TOTAL DE PROCESSAMENTO.........: HH:MM:SS:CC
==================================================
==
TERMINO NORMAL DO PROGRAMA EXECARGA
==
==================================================

BOOK VARDATA
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*
VARIAVEL DA DATA
*
01 WS-DATA-SISTEMA.
05 WS-ANO
PIC 9(02).
05 WS-MES
PIC 9(02).
05 WS-DIA
PIC 9(02).
01 WS-DATA-JUL.
05 WS-ANO-J
05 WS-DIA-J
01 WS-DATA-SISTEMA-F.
05 WS-DIA
05 FILLER
05 WS-MES
05 FILLER
05 FILLER
05 WS-ANO
77 WS-MES-EXT
77 WS-DIA-SEMANA
77 WS-DIA-SEMANA-F

www.grandeporte.com.br

PIC 9(02).
PIC 9(03).

PIC 9(02).
PIC X(01)
VALUE "/".
PIC 9(02).
PIC X(01)
VALUE "/".
PIC X(02)
VALUE "20".
PIC 9(02).
PIC X(09).
PIC 9.
PIC X(13).

(11) 4427-4579(11) 9 9903-3218

Parte 6

23

BOOK VARTEMPO
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
*
VARIAVEL DO HORARIO
*
*----------------------------------------------------------------*
01 WS-HORARIO-INICIAL.
05 WS-HORA-I
PIC 9(02).
05 WS-MIN-I
PIC 9(02).
05 WS-SEG-I
PIC 9(02).
05 WS-CENT-I
PIC 9(02).
01

01

WS-HORARIO-FINAL.
05 WS-HORA-F
05 WS-MIN-F
05 WS-SEG-F
05 WS-CENT-F
WS-TEMPO-PROCESSAMENTO.
05 WS-HORA-P
05 FILLER

9(02).
9(02).
9(02).
9(02).

05 WS-CENT-P

PIC 9(02).
PIC X(01)
VALUE ":".
PIC 9(02).
PIC X(01)
VALUE ":".
PIC 9(02).
PIC X(01)
VALUE ":".
PIC 9(02).

WS-DIFERENCA

PIC 9(07).

05 WS-MIN-P
05 FILLER
05 WS-SEG-P
05 FILLER

77

PIC
PIC
PIC
PIC

BOOK ROTINA DE CLCULO DO TEMPO DE PROCESSAMENTO


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
* ROTINA PARA CALCULO DO TEMPO DE PROCESSAMENTO BASEADO NA
*
* DIFERENCA EM CENTESIMOS DE SEGUNDO ENTRE O INICIO E O
*
* TERMINO DO PROCESSAMENTO.
*
*----------------------------------------------------------------*
9000-CALCULA-TEMPO-PROC.
COMPUTE WS-DIFERENCA = ( WS-HORA-F * 360000 +
WS-MIN-F * 6000 +
WS-SEG-F * 100 +
WS-CENT-F ) ( WS-HORA-I * 360000 +
WS-MIN-I * 6000 +
WS-SEG-I * 100 +
WS-CENT-I )
COMPUTE WS-HORA-P = WS-DIFERENCA / 360000
COMPUTE WS-DIFERENCA = WS-DIFERENCA - WS-HORA-P * 360000
COMPUTE WS-MIN-P = WS-DIFERENCA / 6000
COMPUTE WS-DIFERENCA = WS-DIFERENCA - WS-MIN-P * 6000
COMPUTE WS-SEG-P = WS-DIFERENCA / 100
COMPUTE WS-DIFERENCA = WS-DIFERENCA - WS-SEG-P * 100
COMPUTE WS-CENT-P = WS-DIFERENCA
.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

24

Parte 6

BOOK ROTINA IMPRIME DATA


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
* ROTINA PARA DETERMINAR E IMPRIMIR
*
*
A) DATA GREGORIANA
*
*
B) DATA JULIANA
*
*
C) DIA DA SEMANA
*
*----------------------------------------------------------------*
9000-IMPRIME-DATA.
ACCEPT WS-DATA-SISTEMA FROM DATE
ACCEPT WS-DATA-JUL
FROM DAY
ACCEPT WS-DIA-SEMANA
FROM DAY-OF-WEEK
EVALUATE WS-DIA-SEMANA
WHEN 1 MOVE "SEGUNDA-FEIRA"
WHEN 2 MOVE "TERCA-FEIRA"
WHEN 3 MOVE "QUARTA-FEIRA"
WHEN 4 MOVE "QUINTA-FEIRA"
WHEN 5 MOVE "SEXTA-FEIRA"
WHEN 6 MOVE "SABADO"
WHEN 7 MOVE "DOMINGO"
END-EVALUATE
MOVE CORR WS-DATA-SISTEMA

TO
TO
TO
TO
TO
TO
TO

TO

EVALUATE WS-MES OF WS-DATA-SISTEMA


WHEN 1 MOVE "JANEIRO"
TO
WHEN 2 MOVE "FEVEREIRO"
TO
WHEN 3 MOVE "MARCO"
TO
WHEN 4 MOVE "ABRIL"
TO
WHEN 5 MOVE "MAIO"
TO
WHEN 6 MOVE "JUNHO"
TO
WHEN 7 MOVE "JULHO"
TO
WHEN 8 MOVE "AGOSTO"
TO
WHEN 9 MOVE "SETEMBRO"
TO
WHEN 10 MOVE "OUTUBRO"
TO
WHEN 11 MOVE "NOVEMBRO"
TO
WHEN 12 MOVE "DEZEMBRO"
TO
END-EVALUATE

WS-DIA-SEMANA-F
WS-DIA-SEMANA-F
WS-DIA-SEMANA-F
WS-DIA-SEMANA-F
WS-DIA-SEMANA-F
WS-DIA-SEMANA-F
WS-DIA-SEMANA-F

WS-DATA-SISTEMA-F

WS-MES-EXT
WS-MES-EXT
WS-MES-EXT
WS-MES-EXT
WS-MES-EXT
WS-MES-EXT
WS-MES-EXT
WS-MES-EXT
WS-MES-EXT
WS-MES-EXT
WS-MES-EXT
WS-MES-EXT

DISPLAY "************************************************"
DISPLAY "* DATA GREGORIANA 1 - "
WS-DATA-SISTEMA-F
"
*"
DISPLAY "* DATA GREGORIANA 2 - "
WS-DIA OF WS-DATA-SISTEMA
" DE "
WS-MES-EXT
" DE 20"
WS-ANO OF WS-DATA-SISTEMA
" *"
DISPLAY "* DATA JULIANA
- "
WS-DIA-J OF WS-DATA-JUL
" DE 20"
WS-ANO-J OF WS-DATA-JUL
"
*"
DISPLAY "* DIA DA SEMANA
- "
WS-DIA-SEMANA-F
"
*"
DISPLAY "************************************************"
.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

25

Parte 6
Programa COBOL

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
ID
DIVISION.
*----------------------------------------------------------------*
PROGRAM-ID.
EXECARGA.
*----------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*----------------------------------------------------------------*
CONFIGURATION
SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT
SECTION.
FILE-CONTROL.
SELECT CADCLI ASSIGN
TO UT-S-CADCLI
FILE STATUS IS FS-CADCLI
.
*----------------------------------------------------------------*
DATA
DIVISION.
*----------------------------------------------------------------*
FILE
SECTION.
FD

CADCLI
RECORDING MODE IS F.
COPY BKEXEAC REPLACING ==::== BY ====.

*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
* BOOK DA VARIAVEL ESPELHO
COPY BKEXEAC REPLACING ==::== BY ==WS-==.
* BOOK DAS VARIAVEIS PARA CALCULO DO TEMPO
COPY VARDATA.
COPY VARTEMPO.
* BOOK DAS VARIAVEIS HOSPEDEIRAS
EXEC SQL
INCLUDE BKEXETC
END-EXEC
* BOOK DAS VARIAVEIS PARA USO DO SQL
EXEC SQL
INCLUDE SQLCA
END-EXEC
01

WS-CONTADORES-COMP.
05 WS-CTLIDO
05 WS-CTINS
05 WS-CTDUP
05 WS-CTINV

www.grandeporte.com.br

PIC
PIC
PIC
PIC

9(04)
9(04)
9(04)
9(04)

COMP.
COMP.
COMP.
COMP.

(11) 4427-4579(11) 9 9903-3218

26

Parte 6

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 WS-CONTADORES-FORMATADOS.
05 WS-CTLIDO-F
PIC ZZZ9.
05 WS-CTINS-F
PIC ZZZ9.
05 WS-CTDUP-F
PIC ZZZ9.
05 WS-CTINV-F
PIC ZZZ9.
01

FS-CADCLI
88 SUCESSO-CAD
88 FIM-ARQ-CAD

PIC X(02).
VALUE "00".
VALUE "10".

77 WS-SQLCODE
PIC +9(9).
77 WS-MSG
PIC X(60).
77 WS-FS
PIC X(02).
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
0000-PRINCIPAL.
PERFORM 1000-INICIALIZAR
PERFORM 2000-PROCESSAR UNTIL FIM-ARQ-CAD
PERFORM 3000-TERMINO
STOP RUN
.
1000-INICIALIZAR.
ACCEPT WS-HORARIO-INICIAL FROM TIME
MOVE 0

TO WS-CTLIDO
WS-CTINS
WS-CTDUP
WS-CTINV

OPEN INPUT CADCLI


IF NOT SUCESSO-CAD
MOVE "ERRO ABERTURA CADCLI"
MOVE FS-CADCLI
PERFORM 9000-ERRO
END-IF

TO WS-MSG
TO WS-FS

PERFORM 1500-LER-CADCLI
.
1500-LER-CADCLI.
READ CADCLI INTO WS-REG-CADCLI
IF SUCESSO-CAD
ADD 1
TO WS-CTLIDO
ELSE
IF NOT FIM-ARQ-CAD
MOVE "ERRO LEITURA CADCLI"
TO WS-MSG
MOVE FS-CADCLI
TO WS-FS
PERFORM 9000-ERRO
END-IF
END-IF
.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6

27

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
2000-PROCESSAR.
*----------------------------------------------------------------*
* MOVER DADOS DA VARIAVEL ESPELHO PARA A HOSPEDEIRA
*----------------------------------------------------------------*
MOVE WS-CODCLI-CADCLI
TO CODCLI
MOVE +30
TO NOMECLI-LEN
MOVE WS-NOMECLI-CADCLI
TO NOMECLI-TEXT
MOVE +40
TO ENDCLI-LEN
MOVE WS-ENDCLI-CADCLI
TO ENDCLI-TEXT
MOVE WS-FONECLI-CADCLI
TO FONECLI
MOVE +50
TO EMAILCLI-LEN
MOVE WS-EMAILCLI-CADCLI
TO EMAILCLI-TEXT
MOVE WS-CPFCLI-CADCLI
TO CPFCLI
MOVE WS-SALDOCLI-CADCLI
TO SALDOCLI
*----------------------------------------------------------------*
* INSERIR OS DADOS DA HOSPEDEIRA NA TABELA (SQL FIELDS)
*----------------------------------------------------------------*
EXEC SQL
INSERT INTO TBCLIENTE
(
CODCLI
, NOMECLI
, ENDCLI
, FONECLI
, EMAILCLI
, CPFCLI
, SALDOCLI
)
VALUES
( :CODCLI
,:NOMECLI
,:ENDCLI
,:FONECLI
,:EMAILCLI
,:CPFCLI
,:SALDOCLI
)
END-EXEC
*----------------------------------------------------------------*
* TESTAR SQLCODE
*----------------------------------------------------------------*
EVALUATE SQLCODE
WHEN 0
ADD 1 TO WS-CTINS
WHEN -803
ADD 1 TO WS-CTDUP
WHEN -545
ADD 1 TO WS-CTINV
WHEN OTHER
MOVE "ERRO INSERT TBCLIENTE"
TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
PERFORM 9000-ERRO-DB2
END-EVALUATE
PERFORM 1500-LER-CADCLI
.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

28

Parte 6

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
3000-TERMINO.
CLOSE CADCLI
IF NOT SUCESSO-CAD
MOVE "ERRO FECHAMENTO CADCLI"
TO WS-MSG
MOVE FS-CADCLI
TO WS-FS
PERFORM 9000-ERRO
END-IF
ACCEPT WS-HORARIO-FINAL FROM TIME
PERFORM 9000-CALCULA-TEMPO-PROC
MOVE
MOVE
MOVE
MOVE

WS-CTLIDO
WS-CTINS
WS-CTDUP
WS-CTINV

TO
TO
TO
TO

WS-CTLIDO-F
WS-CTINS-F
WS-CTDUP-F
WS-CTINV-F

PERFORM 9000-IMPRIME-DATA
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY

"
"
"
"
"=================================================="
"==
ESTATISTICA FINAL DE PROCESSAMENTO
=="
"=================================================="
"QTDE. CLIENTES LIDOS CADCLI..........: " WS-CTLIDO-F
"QTDE. CLIENTES INSERIDOS TBCLIENTE...: " WS-CTINS-F
"QTDE. CLIENTES DUPLICADOS............: " WS-CTDUP-F
"QTDE. CLIENTES INVALIDOS.............: " WS-CTINV-F
"=================================================="
"TEMPO TOTAL DE PROCESSAMENTO.........: "
WS-TEMPO-PROCESSAMENTO
DISPLAY "=================================================="
DISPLAY "==
TERMINO NORMAL DO PROGRAMA EXECARGA
=="
DISPLAY "=================================================="
.
9000-ERRO.
DISPLAY "=================================================="
DISPLAY "MENSAGEM....: " WS-MSG
DISPLAY "FILE STATUS.: " WS-FS
DISPLAY "=================================================="
DISPLAY "==
TERMINO ANORMAL DO PROGRAMA EXECARGA
=="
DISPLAY "=================================================="
MOVE 12
TO RETURN-CODE
STOP RUN
.
9000-ERRO-DB2.
DISPLAY "=================================================="
DISPLAY "MESSAGE..: " WS-MSG
DISPLAY "SQLCODE..: " WS-SQLCODE
DISPLAY "SQLERRMC.: " SQLERRMC
DISPLAY "=================================================="
DISPLAY "==
TERMINO ANORMAL DO PROGRAMA EXECARGA
=="
DISPLAY "=================================================="
MOVE 16
TO RETURN-CODE
STOP RUN
.
* BOOK DA ROTINA 9000-IMPRIME-DATA
COPY IMPDATA.
* BOOK DA ROTINA 9000-CALCULA-TEMPO-PROC
COPY CALCTEMP.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

29

Parte 6

Practice

Prtica de laboratrio

Atividade

Criar a tabela TESTEDCL descrita abaixo e


preencher o quadro com os tipos de dados gerados para
o COBOL pelo DCLGEN. (membro CREATET no
JCLDATA).

Coluna

Tipo DB2

CAMPO01

CHAR(5)

CAMPO02

VARCHAR(20)

CAMPO03

INTEGER

CAMPO04

SMALLINT

CAMPO05

DECIMAL(10,4)

CAMPO06

REAL

CAMPO07

DOUBLE

CAMPO08

DATE

CAMPO09

TIME

CAMPO10

TIMESTAMP

www.grandeporte.com.br

Tipo COBOL

(11) 4427-4579(11) 9 9903-3218

30

Parte 6

Atividade

Reviso aos pares

Fazer a DECLARATION para a tabela TBCLI,


baseado nos tipos dados gerados pelo DCLGEN do
exerccio anterior e nas colunas abaixo.
CODCLI
NOMECLI
ENDCLI
NASCCLI
ALTURACLI
PESOCLI
WORKING-STORAGE

www.grandeporte.com.br

INTEGER
VARCHAR(40)
VARCHAR(60)
DATE
DECIMAL(3,2)
DECIMAL(4,1)

UNIQUENOT NULL
NOT NULL

SECTION.

(11) 4427-4579(11) 9 9903-3218

Parte 6

31

Performance

Atividade

Projeto 1 - carga

Objetivo do Programa

A Metal Screws Inc. est implantando o Sistema Gerenciador de banco de


Dados DB2 e est migrando seus dados de arquivos sequenciais para tabelas em um
banco de dados relacional.
Escrever um programa para ler os produtos do arquivo sequencial CADPRDD1
e carregar a tabela TBPRODUTO.

Macro-Fluxo

CADPRDD1

GPXXNND1

TBPRODUTO

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

32

Parte 6

Layout do Arquivo

Nome do Arquivo

CADPRDD1

Nome do Registro

REG-CADPRDD1

Nome do Campo

Tipo e
Tamanho

Descrio

CODPROD-D1

X(04)

Cdigo

DESCPROD-D1

X(20)

Descrio

UNIDPROD-D1

X(05)

Unidade (caixa, litro, Kg, etc)

LOCALPROD-D1

X(05)

Localizao no estoque

QTDEST-D1

9(05)

Quantidade em estoque

QTDMAX-D1

9(05)

Quantidade mxima em estoque

QTDMIN-D1

9(05)

Quantidade mnima em estoque

PRECOCOMPRA-D1

9(06)V99

Preo de Compra

PRECOVENDA-D1

9(06)V99

Preo de Venda

PERCOMIS-D1

9(02)V99

Percentual de comisso

Layout da Tabela

Nome da tabela

TBPRODUTO

Nome da coluna

Tipo e
Tamanho

Complementos

CODPROD

CHAR(4)

UNIQUE NOT NULL

DESCPROD

VARCHAR(20)

NOT NULL

UNIDPROD

CHAR(5)

LOCALPROD

CHAR(5)

QTDEST

DECIMAL(5,0)

QTDMAX

DECIMAL(5,0)

> QTDMIN

QTDMIN

DECIMAL(5,0)

< QTDMAX

PRECOCOMPRA

DECIMAL(8,2)

>=0

PRECOVENDA

DECIMAL(8,2)

>=0

PERCOMIS

DECIMAL(4,2)

>=0

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6

33

Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
==================================================
==
ESTATISTICA FINAL DE PROCESSAMENTO
==
==================================================
QTDE. PRODUTOS LIDOS CADPRDD1........: ZZ.ZZ9
QTDE. PRODUTOS INSERIDOS TBPRODUTO...: ZZ.ZZ9
QTDE. PRODUTOS DUPLICADOS............: ZZ.ZZ9
QTDE. PRODUTOS INVALIDOS.............: ZZ.ZZ9
==================================================
TEMPO TOTAL DE PROCESSAMENTO.........: HH:MM:SS:CC
==================================================
==
TERMINO NORMAL DO PROGRAMA GPXXNND1
==
==================================================

Observao
Dar carga em tabelas a partir de dados armazenados em arquivos
sequenciais uma atividade comum na implantao de um sistema novo. Execute
os passos abaixo (Lembre-se de que XXNN o seu prefixo de usurio):
1) Edite o membro BK001D1 em sua BOOKLIB com as variveis espelho do
arquivo CADPRDD1. (Usar coringa vazio ::)
2) Copie o membro CREATEP da JCLDATA de seu instrutor para a sua
JCLDATA. Esse membro contm os comandos SQL DDL para a definio
da tabela TBPRODUTO, ndice, chave primria e constraints.
3) Via SPUFI execute o membro CREATEP, criando a tabela TBPRODUTO e
seu ndice IDXPRODUTO.
4) Via DCLGEN crie a DECLARATION para a tabela TBPRODUTO em sua
BOOKLIB no membro BK002TP
5) Edite o programa GPXXNND1 na sua COBLIB.

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

34

Parte 6

Orientao para processamento

Como foi visto, no pode haver um pargrafo principal.


Executa o pargrafo 1000-INICIALIZAR
Executa o pargrafo 2000-PROCESSAR
at que o file status do arquivo CADPRDD1 seja 10
Executar o pargrafo 3000-TERMINO
Encerrar o programa
Pargrafo 1000-INICIALIZAR
Receber o horrio inicial de processamento
Mover zero para os contadores:
produtos lidos
produtos inseridos
produtos duplicados
produtos invlidos
Abrir para leitura o arquivo CADPRDD1
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Ler o primeiro registro do arquivo CADPRDD1 (1100-LER-CADPRDD1)
Pargrafo 1100-LER-CADPRDD1
Ler registro do arquivo CADPRDD1 carregando varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de produtos lidos
Seno
Se file status for diferente de 10 (fim de arquivo)
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

Parte 6

35

Pargrafo 2000-PROCESSAR
Mover os dados da varivel espelho para a hospedeira
Usar EVALUTE aqui,
Inserir o registro na tabela TBPRODUTO (INSERT) e testar SQLCODE:
entendeu ?
se SQLCODE = 0
somar 1 ao contador de produto inserido
se SQLCODE = -803
somar 1 ao contador de produto duplicado
se SQLCODE = -545
somar 1 ao contador de produto invlidos
seno
mover mensagem de erro para varivel da rotina de erro
mover SQLCODE para varivel formatada
executar a rotina de erro para DB2 (9000-ERRO-DB2)
Ler o prximo registro do arquivo CADPRDD1(1100-LER-CADPRDD1)
Pargrafo 3000-TERMINO
Fechar o arquivo CADPRDD1
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Receber o horrio final de processamento
Calcular o tempo de processamento
Exibir SYSOUT de acordo com LAYOUT
Exibir contador de produtos lidos
Exibir contador de produtos inseridos
Exibir contador de produtos duplicado
Exibir contador de produtos invlido
Exibir o tempo total de processamento
Pargrafo 9000-ERRO
Exibir mensagem de erro
Exibir file status
Abendar o programa com RETURN-CODE = 12
Pargrafo 9000-ERRO-DB2
Exibir mensagem de erro
Exibir SQLCODE formatado
Exibir SQLERRMC (mensagem de erro do SQLCODE)
Abendar o programa com RETURN-CODE = 16

www.grandeporte.com.br

(11) 4427-4579(11) 9 9903-3218

36

Parte 6

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

regular

www.grandeporte.com.br

ruim

Muito ruim

(11) 4427-4579(11) 9 9903-3218

Parte

Hugh Darwen um cientista da computao que


trabalhou na IBM do Reino Unido de 1967 at 2004 e
esteve envolvido com a histria do modelo relacional.
Entre 1978 e 1982 ele foi o arquiteto chefe do Business
System 12, um sistema de gerenciamento de dados que
seguia fielmente os princpios do modelo relacional. Ele
trabalhou prximo a Christopher J. Date e representou a
IBM nos comites da ISO SQL at sua aposentadoria da
IBM.
Hugh Darwen
1943 (69 anos)

Verso 2.2.3

Parte 7

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

Presentation

Histria

Lets put it all together

Vamos agora colocar tudo junto. Escreveremos um programa que vai Inserir,
Excluir, Alterar e Consultar dados em uma tabela, tudo em um mesmo programa.
a oportunidade de ver os quatro comandos da SQL DML funcionando junto,
testando seus SQLCODEs especficos, utilizando as variveis hospedeiras (de
tabelas) com variveis espelho (de arquivos) e ainda verificando pelos INDICATORs
se os dados lidos das tabelas esto corretos.
Mas antes, importante entender como o processo de transformar um
programa COBOL com SQL em programa executvel (LOAD MODULE). Trata-se do
processo de Pr-Compilao, Compilao, Link-edio e Bind. Entenda bem esse
processo, pois sempre que voc diz a algum mais experiente que sabe programar
COBOL com SQL ele vai logo perguntando: Voc sabe o que BIND?
Ento vamos por tudo junto, ou em ingls Lets put it all together.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

Teoria

Compilando Cobol + sql(DB2)

Programas COBOL com comandos SQL estticos passam por um processo de


compilao formado por quarto passos: Pr-compilao, Compilao, Link-edio e Bind. A
figura abaixo ilustra esses passos:

Programa Fonte
COBOL
+
SQL

GP.GPXXNN.COBLIB
(GPXXNND1)

p
GP.GPXXNN.JOBLIB
(COMPBDB2)

1. Passo
PRE-COMPILE

BOOKs

GP.GPXXNN.BOOKLIB
(GPXXNND1)

TIMESTAMP

TIMESTAMP

Programa fonte
modificado
s COBOL

DBRM
Acessos DB2
s SQL

SYS2.DB2.DBRMLIB.DATA
(GPXXNND1)

SPOOL

2. Passo
COMPILE

PROGRAMA
OBJETO

3. Passo
LINK-EDIT

LIBRARY

SD.ST
? JOBID
S SYSPRINT

4. Passo
BIND

PLAN
COLLECTION

GP.GERAL.LOADLIB
(GPXXNND1)

TIMESTAMP

LOAD MODULE

www.grandeporte.com.br

TIMESTAMP
PACKAGE

SYSIBM.SYSPACKAGES

(11) 4427-4579 (11) 9 9903-3218

Parte 7
1

Passo Processo de Pr-Compilao


a) Primeiro ele verifica se h erros (anlise sinttica) nos comandos SQL.
b) Segundo ele faz o INCLUDE das reas (book de variveis), valida as variveis
hospedeiras (host variables) e adiciona variveis de trabalho (para uso interno)
na WORKING-STORAGE SECTION. Uma dessas variveis contm a literal
Timestamp chamada Token de Consistncia.
c) Terceiro ele insere cdigo fonte compatvel com o COBOL, usado para evocar
o DB2, convertendo as instrues EXEC SQL...END-EXEC em comentrio,
substituindo-as por CALL.
d) Quarto ele extrai todos os comandos SQL do programa fonte, colocando-os
em um membro com o mesmo nome do programa no arquivo particionado em
SYS2.DB2.DBRMLIB.DATA. Esse membro contm o DBRM (Data Base
Request Module) com o mesmo Token de Consistncia.

2 Passo Compilao
O Programa fonte modificado pelo pr-compilador ento compilado. O
cdigo verificado em busca de erros e uma verso compilada (Programa Objeto)
criada.
3 Passo Link-edio
O programa objeto link-editado junto com os calls estticos do programa
fonte e os mdulos run-time (em tempo de execuo) do DB2 para criar o programa
executvel LOAD MODULE (Mdulo de Carga). Este LOAD MODULE contm o
mesmo Token de Consistncia que foi gerado na Pr-Compilao.
4 Passo BIND DB2 (Vinculo com DB2)
O processo de BIND l o DBRM que foi criado e prepara um caminho de
acesso (access path) aos dados. Esse caminho de acesso, junto com o Token de
Consistncia, armazenado no catalogo do DB2 (SYSIBM.SYSPACKAGES) como
um PACKAGE (pacote). Cada pacote est ligado a uma lista de pacotes ou Collection
(coleo).
O nome da coleo especificado pelo parmetro PACKAGE.
Uma coleo um grupo de pacotes que so inseridos em um ou mais planos.
O parmetro qualifies (qualificador) do BIND usado para direcionar o SQL para um
conjunto especifico de objetos DB2 (Table, View, Alias etc.) identificados por este
nome.
O plano ou pacote de aplicao gerado pelo BIND para definir caminhos de
acesso.
O plano DB2 uma forma executvel de comandos SQL (DBRM). Podemos
definir o plano DB2 como um conjunto de ponteiros para pacotes, e pacotes contm
cdigo de mquina dos melhores caminhos de acesso. O plano criado
separadamente e no tem relao com a compilao.
www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7
Abaixo temos o job de compilao COMPBDB2 seguido de instrues de uso.

1
2

1 substitua GPXXNNPP pelo nome do programa que deseja compilar


2 Substitua GPXXNN pelo seu usurio
3 Esta a instalao do DB2 que ser usada para definir o plano de acesso

Quando eu criei o
primeiro compilador
as coisas eram mais
simples...
Essa IBM !

Amiga !

Grace Hopper e
a traca
, (BUG)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7
Aps a compilao, v ao SPOOL (SD.ST) para analisar o resultado, conforme tela
abaixo:

1
2
3
4
5

1 Quando aparecer somente esses trs arquivos JES2, significa que h erro de
JCL e o JOB deve ser corrigido.
2 Quando aparecer os arquivos PC (precompiler), significa que h erros nos
comandos SQL e o arquivo SYSPRINT COMPDB2B PC deve ser aberto em busca dos erros.
Ateno, a mensagem de notificao ser JCL ERROR, mas no se engane, erro de SQL.
3 Quando aparecer o COB e der MAXCC > 0, h erros no COBOL. Esse arquivo
deve ser aberto e os erros corrigidos.
4 Quando aparece o arquivo LKED, significa que o programa objeto (Load Module)
foi criado e pode ser executado.
5 Quando aparece o arquivo BIND, significa que o plano de acesso foi criado com
sucesso, desde que MAXCC = 0.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

Teoria

EXECUTANDO COBOL + DB2

O JOB de execuo tambm deve apontar para a instalao de DB2 correta, usada
para compilar os programas, como mostra a tela abaixo.

1 substitua GPXXNNPP pelo nmero do programa que deseja executar


2 Substitua GPXXNN pelo seu usurio
3 Esta a instalao do DB2 que ser usada para definir o plano de acesso

Quando um programa COBOL+DB2 executa, o plano e o pacote devem ser


especificados no JOB. Quando o primeiro comando SQL do programa executado, o
DB2 pesquisa na coleo e no Token de Consistncia do plano e do pacote
informado. Se o Token de Consistncia no bater, o DB2 d um SQLCODE = -805.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

10

Parte 7

Teoria

Acessando tabelas com cobol

Para se ler dados de uma tabela em um programa COBOL o comando bsico


usado o SELECT visto anteriormente. O SELECT precisa somente ser ampliado
para definir as HOST VARIABLES que devem receber os dados.
Existem dois processos de leitura no DB2:

o primeiro aplica-se quando o SELECT devolve somente uma linha da


tabela
o segundo processo quando a tabela resultado do SELECT contm mais de
uma linha.

ACESSANDO 1 LINHA DA TABELA


Quando a tabela resultado do SELECT contm somente uma linha, o
parmetro INTO acrescentado ao SELECT suficiente para definir as HOST
VARIABLES de leitura. A sintaxe deste SELECT :

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
......
EXEC SQL
SELECT coluna1
, coluna2
, ...
INTO
:variavel1, :variavel2, ...
FROM
tabela
WHERE restricao
END-EXEC

A varivel do parmetro INTO deve ser uma HOST VARIABLE (portanto


precedida por dois pontos). Alm disso, se a coluna pesquisa for do tipo VARCHAR ou
a sua definio permitir valores NULL, necessrio acrescentar um INDICATOR na
HOST VARIABLE respectiva.
Se o comando SELECT estiver selecionando todas as colunas da tabela
(SELECT *), o argumento INTO pode apontar para o nivel 01 das HOST VARIABLES
como no exemplo:

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

11

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
EXEC SQL
SELECT *
INTO :DCLPRODUTO
FROM PRODUTO
WHERE CODPROD = 0001
END-EXEC
IF SQLCODE = 0
ADD 1 TO WS-CTENCONTRADO
ELSE
IF SQLCODE = 100
ADD 1 TO WS-CTNAOENCONTRADO
ELSE
MOVE ERRO NO SELECT
TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
PERFORM 9000-ERRO-DB2
END-IF
END-IF

ACESSANDO MAIS DE UMA LINHA DA TABELA


Quando o SELECT seleciona mais de uma linha, essa RESULT TABLE no
pode ser carregada na HOST VARIABLE apontada pela clasula INTO, que comporta
apenas uma linha.
Se a lgica da aplicao estiver interessada apenas na primeira linha desta
RESULT TABLE, o parmetro FETCH FIRST ROW ONLY (pegue apenas a primeira
linha) seleciona esta linha. A seguir a sintaxe deste SELECT
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
EXEC SQL
SELECT coluna1 , coluna2, ...
INTO
:variavel, :variavel2, ....
FROM
tabela
WHERE restricao
FETCH FIRST ROW ONLY
END-EXEC

Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
MOVE 000100
TO CODEMP
EXEC SQL
SELECT NOMEEMP, SALARIO
INTO :NOMEEMP, :SALARIO
FROM EMPREGADOS
WHERE CODEMP > :CODEMP
FETCH FIRST ROW ONLY
END-EXEC

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

12

Parte 7
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
IF SQLCODE = 0
ADD 1 TO WS-CTENCONTRADO
ELSE
IF SQLCODE = 100
ADD 1 TO WS-CTNAOENCONTRADO
ELSE
MOVE ERRO NO SELECT TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
PERFORM 9000-ERRO-DB2
END-IF
END-IF

ATUALIZANDO LINHAS DA TABELA


A sntaxe do comando para atualizar linhas em uma tabela a mesma vista no
comando UPDATE de SQL, somente acrescentando que os argumentos informados
em SET podem ser constantes ou HOST VARIABLES.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
EXEC SQL
UPDATE tabela
SET coluna1 = :VARIAVEL1,
coluna2 = :variavel2,
......
WHERE condicao
END-EXEC

Se alguma das colunas do comando UPDATE for do tipo VARCHAR, o


INDICATOR precisa ser carregado com o comprimento real do valor da coluna.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
MOVE 10
TO DESCRICAO-LEN
MOVE WS-DESCPROD
TO DESCRICAO-TEXT
EXEC SQL
UPDATE PRODUTO
SET DESCRICAO = :DESCRICAO
WHERE CODIGO = :CODIGO
END-EXEC
IF SQLCODE = 0
ADD 1 TO WS-CTATUALIZADO
ELSE
IF SQL CODE = -545
ADD 1 TO WS-CTINVALIDO
ELSE
IF SQLCODE = +100
ADD 1 TO WS-CTNAOENCONTRADO
ELSE
MOVE ERRO NO UPDATE TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
PERFORM 9000-ERRO-DB2
END-IF
END-IF
END-IF

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

13

EXCLUINDO LINHAS DA TABELA


A sintaxe do comando para excluir linhas em uma tabela a mesma vista no
comando DELETE de SQL. A Sintaxe para o comando :
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
EXEC SQL
DELETE FROM tabela
WHERE restricao
END-EXEC

Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
MOVE WS-CODPROD
TO CODIGO
EXEC SQL
DELETE FROM PRODUTO
WHERE CODIGO = :CODIGO
END-EXEC
IF SQLCODE = 0
ADD 1 TO WS-CTEXCLUIDO
ELSE
IF SQLCODE = 100
ADD 1 TO WS-CTNAOENCONTRADO
ELSE
MOVE ERRO NO DELETE TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
PERFORM 9000-ERRO-DB2
END-IF
END-IF

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

14

Parte 7

INDICATORS

Teoria

INDICATORS so variveis do programa COBOL usadas nos comandos SQL


para:
Informar o comprimento real dos valores contidos em colunas VARCHAR.
Informar se uma coluna contm NULL.
Informar erros de converso entre o valor das colunas e as HOST VARIABLES.

COBOL (VARIVEL HOSPERDEIRA)

*
INSERT

DELETE

UPDATE

SELECT

FETCH

DB2 (SQL FIELDS - COLUNAS)

* Precisam de INDICATORS
Este INDICATOR receber um dos seguintes valores aps a execuo de um
SELECT:
INDICATOR = -1
INDICATOR = -2
INDICATOR = 0
INDICATOR > 0

Coluna contm NULL


Erro na converso de valores. -2 significa nulo porque um
comando aritmtico no funcionou, tambm causa SQLCODE =
+802
Coluna contm valores normais
Comprimento original dos dados que foram truncados no
momento da carga na HOST VARIABLE ou comprimento de um
VARCHAR

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

15

Os INDICATORS devem ser variveis com formato PIC S9(4) COMP (lembrese que o formato binrio e ocupa 2 bytes na RAM), e quando necessrio deve haver
um INDICATOR para cada coluna da tabela.
O DCLGEN cria automaticamente um INDICATOR para toda coluna VARCHAR.
No exemplo anterior para a coluna DESCPROD foram criadas as variveis
hospedeiras DESCPRODLEN (INDICATOR) e DESCPRODTEXT.
Para solicitar ao DCLGEN a criao de INDICATOR para todas as colunas de
uma tabela, basta colocar YES no campo 12 (INDICATOR VAR), como mostra a figura
abaixo:

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

16

Parte 7
Na declarao da tabela PRODUTO criado um vetor IPRODUTO
(Inome_da_tabela) com seus elementos INDSTRUC(n) onde n varia de 1 at a
quantidade de colunas da tabela, em nosso exemplo 10.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
******************************************************************
* DCLGEN TABLE(PRODUTO)
*
*
LIBRARY(GP.GPAZ99.BOOKLIB(PRODUTO))
*
*
LANGUAGE(COBOL)
*
*
QUOTE
*
*
INDVAR(YES)
*
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS
*
******************************************************************
EXEC SQL DECLARE PRODUTO TABLE
( CODPROD
CHAR(4) NOT NULL,
DESCPROD
VARCHAR(20) NOT NULL,
UNIDPROD
CHAR(5),
LOCALPROD
CHAR(5),
QTDEST
DECIMAL(5, 0),
QTDMAX
DECIMAL(5, 0),
QTDMIN
DECIMAL(5, 0),
PRECOCOMPRA
DECIMAL(8, 2),
PRECOVENDA
DECIMAL(8, 2),
PERCOMIS
DECIMAL(4, 2)
) END-EXEC.
******************************************************************
* COBOL DECLARATION FOR TABLE PRODUTO
*
******************************************************************
01 DCLPRODUTO.
10 CODPROD
PIC X(4).
10 DESCPROD.
49 DESCPROD-LEN
PIC S9(4) USAGE COMP.
49 DESCPROD-TEXT
PIC X(20).
10 UNIDPROD
PIC X(5).
10 LOCALPROD
PIC X(5).
10 QTDEST
PIC S9(5)V USAGE COMP-3.
10 QTDMAX
PIC S9(5)V USAGE COMP-3.
10 QTDMIN
PIC S9(5)V USAGE COMP-3.
10 PRECOCOMPRA
PIC S9(6)V9(2) USAGE COMP-3.
10 PRECOVENDA
PIC S9(6)V9(2) USAGE COMP-3.
10 PERCOMIS
PIC S9(2)V9(2) USAGE COMP-3.
******************************************************************
* INDICATOR VARIABLE STRUCTURE
*
******************************************************************
01 IPRODUTO.
10 INDSTRUC
PIC S9(4) USAGE COMP OCCURS 10 TIMES.
******************************************************************
* THE NUMBER OF COLUMNS DESCRIBED BY THIS DECLARATION IS 10
*
******************************************************************

INDICATOR
INDSTRUC(1)
INDSTRUC(2)
INDSTRUC(3)
INDSTRUC(4)
INDSTRUC(5)
INDSTRUC(6)
INDSTRUC(7)
INDSTRUC(8)
INDSTRUC(9)
INDSTRUC(10)

www.grandeporte.com.br

COLUNA
CODPROD
DESCPROD
UNIDPROD
LOCALPROD
QTDEST
QTDMAX
QTDMIN
PRECOCOMPRA
PRECOVENDA
PERCOMIS

(11) 4427-4579 (11) 9 9903-3218

Parte 7

17

Para se codificar o INDICATOR, basta coloc-lo aps a HOST VARIABLE,


precedido ou no pela palavra INDICATOR.
Sintaxes:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
:variavel1 :indicator1, ...

ou
:variavel1 INDICATOR :indicator1, ...

Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
01

WS-INDICADORES.
05 INDNOMEEMP
05 INDSALARIO

PIC 9S(4) COMP.


PIC 9S(4) COMP.

PROCEDURE
DIVISION.
MOVE 000001
TO CODEMP
EXEC SQL
SELECT CODEMP, NOMEEMP, SALARIO
INTO :CODEMP,
:NOMEEMP INDICATOR :INDNOMEEMP,
:SALARIO INDICATOR :INDSALARIO
FROM EMPREGADOS
WHERE CODEMP = :CODEMP
END-EXEC

Este exemplo l o nome e salrio do empregado 000001. Note que as variveis


NOMEEMP, SALARIO e CODEMP que esto precedidas por (:) so as HOST
VARIABLES, e devem estar includas na rea do INCLUDE da declarao da tabela
EMPREGADO na WORKING-STORAGE SECTION. Tambm a HOST VARIABLE
NOMEEMP esta acompanhada pelo seu INDICATOR INDNOMEEMP.
Se na definio da HOST VARIABLE, houver um sub-nvel da varivel para
servir como INDICATOR, o INDICATOR pode ser omitido na clusula INTO. Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
WORKING-STORAGE
SECTION.
.......
10 NOMEEMP.
49 NOMEEMP-TEXT
PIC X(20).
49 NOMEEMP-LEN
PIC S9(4) COMP.
PROCEDURE
DIVISION.
.......
EXEC SQL
SELECT NOMEEMP, SALARIO
INTO :NOMEEMP, :SALARIO
FROM EMPREGADOS
WHERE CODDEP = :DEPTO
END-EXEC

Ateno, no pode haver vrgula entre a HOST VARIABLE e o seu INDICATOR.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

18

Parte 7
Qual coluna usar o indicator
Verifique no Declaration da tabela as colunas sem o NOT NULL. Elas podem
ento assumir valores nulos, o que obriga o uso de INDICATOR. Aquelas com NOT
NULL tm a garantia do DB2 que jamais recebero valores nulos e, portanto, no
precisam de indicator.
Por exemplo, na declaration abaixo, apenas as colunas CODPROD e
DESCPROD no precisam de indicator:

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
******************************************************************
* DCLGEN TABLE(PRODUTO)
*
*
LIBRARY(GP.GPAZ99.BOOKLIB(PRODUTO))
*
*
LANGUAGE(COBOL)
*
*
QUOTE
*
Achei, so esses *
INDVAR(YES)
*
em vermelho!
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS
*
******************************************************************
EXEC SQL DECLARE PRODUTO TABLE
( CODPROD
CHAR(4) NOT NULL,
DESCPROD
VARCHAR(20) NOT NULL,
UNIDPROD
CHAR(5),
LOCALPROD
CHAR(5),
QTDEST
DECIMAL(5, 0),
QTDMAX
DECIMAL(5, 0),
QTDMIN
DECIMAL(5, 0),
PRECOCOMPRA
DECIMAL(8, 2),
PRECOVENDA
DECIMAL(8, 2),
PERCOMIS
DECIMAL(4, 2)
) END-EXEC.

Mas, nada impede que voc defina e use indicadores para essas colunas,
assim poder tratar os valores positivos do INDICATOR. Por questo de organizao,
coloque as variveis indicadoras na WORKING-STORAGE, prximo dos DCLGENs.
No programa COBOL abaixo, temos um exemplo de uso dos INDICATORS
definidos pelo programador e pelo DCLGEN.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*----------------------------------------------------------------*
PROGRAM-ID.
TESTEIND.
*----------------------------------------------------------------*
DATA
DIVISION.
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
* BOOK COM A DECLARATION DA TABELA TBPRODUTO COM OS INDICATORS
* GERADOS VIA DCLGEN
EXEC SQL
INCLUDE BKTBPROD
END-EXEC
EXEC SQL
INCLUDE SQLCA
END-EXEC

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

19

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
* INDICATORS DEFINIDOS PELO PROGRAMADOR
01 WS-INDICADORES.
03 ICODPROD
PIC S9(04) COMP.
03 IDESCPROD
PIC S9(04) COMP.
03 IUNIDPROD
PIC S9(04) COMP.
03 ILOCALPROD
PIC S9(04) COMP.
03 IQTDEST
PIC S9(04) COMP.
03 IQTDMIN
PIC S9(04) COMP.
03 IQTDMAX
PIC S9(04) COMP.
03 IPRECOCOMPRA
PIC S9(04) COMP.
03 IPRECOVENDA
PIC S9(04) COMP.
03 IPERCOMIS
PIC S9(04) COMP.
77
77

WS-SQLCODE
WS-MSG

PIC +9(9).
PIC X(60).

PROCEDURE
DIVISION.
......
* EXEMPLO DO USO DOS INDICATORS DEFINIDOS PELO PROGRAMADOR
EXEC SQL
SELECT CODPROD
,DESCPROD
,UNIDPROD
,LOCALPROD
,QTDEST
,QTDMIN
,QTDMAX
,PRECOCOMPRA
,PRECOVENDA
,PERCOMIS
INTO :CODPROD
:ICODPROD
,:DESCPROD
:IDESCPROD
,:UNIDPROD
:IUNIDPROD
,:LOCALPROD
:ILOCALPROD
,:QTDEST
:IQTDEST
,:QTDMIN
:IQTDMIN
,:QTDMAX
:IQTDMAX
,:PRECOCOMPRA :IPRECOCOMPRA
,:PRECOVENDA
:IPRECOVENDA
,:PERCOMIS
:IPERCOMIS
FROM TBPRODUTO
WHERE CODPROD = '0300'
END-EXEC
MOVE SQLCODE
TO WS-SQLCODE
DISPLAY "VALOR DO SQLCODE = " WS-SQLCODE
* DISPLAY DOS INDICATORS DEFINIDOS PELO PROGRAMADOR
DISPLAY "ICODPROD
= " ICODPROD,
DISPLAY "IDESCPROD
= " IDESCPROD,
DISPLAY "IUNIDPROD
= " IUNIDPROD,
DISPLAY "ILOCALPROD
= " ILOCALPROD,
DISPLAY "IQTDEST
= " IQTDEST,
DISPLAY "IQTDMIN
= " IQTDMIN,
DISPLAY "IQTDMAX
= " IQTDMAX,
DISPLAY "IPRECOCOMPRA = " IPRECOCOMPRA,
DISPLAY "IPRECOVENDA = " IPRECOVENDA,
DISPLAY "IPERCOMIS
= " IPERCOMIS,
DISPLAY "*---------------------------------------------*"

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

20

Parte 7

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
* EXEMPLO DO USO DOS INDICATORS GERADOS VIA DCLGEN
EXEC SQL
SELECT *
INTO :DCLTBPRODUTO :INDSTRUC
FROM TBPRODUTO
WHERE CODPROD = '0300'
END-EXEC
MOVE SQLCODE
TO WS-SQLCODE
DISPLAY "VALOR DO SQLCODE = " WS-SQLCODE
* DISPLAY DOS INDICATORS DDEFINIDOS PELO PROGRAMADOR
DISPLAY "INDSTRUC(01) = " INDSTRUC(01)
DISPLAY "INDSTRUC(02) = " INDSTRUC(02)
DISPLAY "INDSTRUC(03) = " INDSTRUC(03)
DISPLAY "INDSTRUC(04) = " INDSTRUC(04)
DISPLAY "INDSTRUC(05) = " INDSTRUC(05)
DISPLAY "INDSTRUC(06) = " INDSTRUC(06)
DISPLAY "INDSTRUC(07) = " INDSTRUC(07)
DISPLAY "INDSTRUC(08) = " INDSTRUC(08)
DISPLAY "INDSTRUC(09) = " INDSTRUC(09)
DISPLAY "INDSTRUC(10) = " INDSTRUC(10)
STOP RUN
.

Este o resultado do cdigo compilado e executado exibido na SYSOUT:

O valor 000J significa:


EBCDIC
HEXADECIMAL

000J
FFFD
0001

Observe que o comando DISPLAY converte o contedo da varivel binria


(USAGE COMP) para zonado. O nmero hexadecimal D, no primeiro byte indica que
um nmero negativo. Temos ento o resultado -1 para o INDICATOR, mostrando que
a respectiva coluna contm nulo.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

Exemplo

21

manutenco
,

Objetivo do Programa
Atualizar a tabela TBCLIENTE com base na movimentao registrada no
arquivo sequencial MOVCLIDB.

Macro-Fluxo

MOVCLIDB

EXEMANUT

TBCLIENTE

Observao
No arquivo MOVCLIDB h o campo TIPOMOVTO-DB que indica o tipo de
movimento, conforme abaixo:
I
E
A
C
outro

incluso de novo cliente


excluso de cliente
alterao dos dados do cliente
consulta clientes, exibindo na SYSOUT
erro de movimento, ignorar registro

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

22

Parte 7

Layout da SYSOUT
1
2
3
4
5
6
12345678901234567890123456789012345678901234567890123456789012
==============================================================
==
CONSULTA DE CLIENTE
==
==============================================================
CODIGO....: XXXX
NOME......: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ENDERECO .: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
TELEFONE..: XXXXXXXXX
EMAIL.....: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
CPF.......: XXX.XXX.XXX-XX
SALDO.....: R$ 99.999,99
==============================================================
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
==
ESTATISTICA FINAL DE PROCESSAMENTO
==
==================================================
QTDE. MOVIMENTOS LIDOS MOVCLIDB........: ZZ.ZZ9
QTDE. CLIENTES INSERIDOS TBCLIENTE.....: ZZ.ZZ9
QTDE. CLIENTES EXCLUIDOS TBCLIENTE.....: ZZ.ZZ9
QTDE. CLIENTES ALTERADOS TBCLIENTE.....: ZZ.ZZ9
QTDE. CLIENTES CONSULTADOS TBCLIENTE...: ZZ.ZZ9
QTDE. MOVIMENTOS INVALIDOS.............: ZZ.ZZ9
==================================================
TEMPO TOTAL DE PROCESSAMENTO.........: HH:MM:SS:CC
==================================================
==
TERMINO NORMAL DO PROGRAMA EXEMANUT
==
==================================================

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

23

Parte 7

Layout do Arquivo

Nome do Arquivo

MOVCLIDB

Nome do Registro

REG-MOVCLIDB

Nome do Campo

Tipo e
Tamanho

Descrio

CODCLI-DB

PIC X(04)

Cdigo do cliente

NOMECLI-DB

PIC X(30)

Nome do cliente

ENDCLI-DB

PIC X(40)

Endereo do cliente

FONECLI-DB

PIC X(09)

Telefone do cliente

EMAILCLI-DB

PIC X(50)

E-mail do cliente

CPFCLI-DB

PIC X(11)

CPF do cliente

SALDOCLI-DB

PIC 9(05)V99

Saldo do cliente

TIPOMOVTO-DB

PIC X(01)

Tipo da movimentao

Layout da Tabela

Nome do Tabela

TBCLIENTE

Nome da Coluna

Tipo e Tamanho

Complemento

CODCLI

CHAR(04)

UNIQUE NOT NULL

NOMECLI

VARCHAR(30)

NOT NULL

ENDCLI

VARCHAR(40)

FONECLI

CHAR(09)

EMAILCLI

VARCHAR(50)

CPFCLI

CHAR(11)

SALDOCLI

DECIMAL(7,2)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

24

Parte 7

BOOK BKEXEMC
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
******************************************************************
* BOOK DO ARQUIVO
- MOVIMENTO DE CLIENTE
*
* NOME DA BOOK
- BKEXEMC
*
* NOME DO PDS
- GP.GPXXNN.BOOKLIB
*
* NOME DO ARQUIVO
- MOVCLIDB
*
* TAMANHO DO REGISTRO
- 152 BYTES
*
******************************************************************
01 ::REG-MOVCLIDB.
03 ::CODCLI-DB
PIC X(04).
03 ::NOMECLI-DB
PIC X(30).
03 ::ENDCLI-DB
PIC X(40).
03 ::FONECLI-DB
PIC X(09).
03 ::EMAILCLI-DB
PIC X(50).
03 ::CPFCLI-DB
PIC X(11).
03 ::SALDOCLI-DB
PIC 9(05)V99.
03 ::TIPOMOV-DB
PIC X(01).

Programa COBOL
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*----------------------------------------------------------------*
PROGRAM-ID.
EXEMANUT.
*----------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*----------------------------------------------------------------*
CONFIGURATION
SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT
SECTION.
FILE-CONTROL.
SELECT MOVCLIDB ASSIGN
TO UT-S-MOVCLIDB
FILE STATUS IS FS-MOVCLIDB
.
*----------------------------------------------------------------*
DATA
DIVISION.
*----------------------------------------------------------------*
FILE
SECTION.
*----------------------------------------------------------------*
FD MOVCLIDB
RECORDING MODE IS F.
COPY BKEXEMC REPLACING ==::== BY ====.
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
* BOOK DA VARIAVEL ESPELHO
COPY BKEXEMC REPLACING ==::== BY ==WS-==.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

25

Parte 7
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
* BOOK DAS VARIAVEIS PARA CALCULO DO TEMPO
COPY VARDATA.
COPY VARTEMPO.
* BOOK DAS VARIAVEIS HOSPEDEIRAS DA TABELA TBCLIENTE
EXEC SQL
INCLUDE BKEXETC
END-EXEC
* INDICADORES DA TABELA TBCLIENTE
01 INDICADORES.
05 ICODCLI
05 INOMECLI
05 IENDCLI
05 IFONECLI
05 IEMAILCLI
05 ICPFCLI
05 ISALDOCLI

PIC
PIC
PIC
PIC
PIC
PIC
PIC

S9(4)
S9(4)
S9(4)
S9(4)
S9(4)
S9(4)
S9(4)

COMP.
COMP.
COMP.
COMP.
COMP.
COMP.
COMP.

WS-CONTADORES-COMP.
05 WS-CTLIDO
05 WS-CTINS
05 WS-CTEXC
05 WS-CTINV
05 WS-CTALT
05 WS-CTCON

PIC
PIC
PIC
PIC
PIC
PIC

9(05)
9(05)
9(05)
9(05)
9(05)
9(05)

COMP.
COMP.
COMP.
COMP.
COMP.
COMP.

WS-CONTADORES-FORMATADOS.
05 WS-CTLIDO-F
05 WS-CTINS-F
05 WS-CTEXC-F
05 WS-CTINV-F
05 WS-CTALT-F
05 WS-CTCON-F

PIC
PIC
PIC
PIC
PIC
PIC

ZZ.ZZ9.
ZZ.ZZ9.
ZZ.ZZ9.
ZZ.ZZ9.
ZZ.ZZ9.
ZZ.ZZ9.

FS-MOVCLIDB
88 SUCESSO-MOVCLIDB
88 FIM-ARQ-MOVCLIDB

PIC X(02).
VALUE "00".
VALUE "10".

* AREA DE VARIAVEIS PARA O DB2


EXEC SQL
INCLUDE SQLCA
END-EXEC
01

01

01

77 WS-SALDOCLI-F
PIC ZZ.ZZ9,99.
77 WS-SQLCODE
PIC +9(9).
77 WS-MSG
PIC X(60).
77 WS-FS
PIC X(02).
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
0000-EXEMANUT.
PERFORM 1000-INICIALIZAR
PERFORM 2000-PROCESSAR
UNTIL FS-MOVCLIDB = '10'
PERFORM 3000-TERMINO
STOP RUN
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

26

Parte 7
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
1000-INICIALIZAR.
ACCEPT WS-HORARIO-INICIAL FROM TIME
INITIALIZE WS-CONTADORES-COMP
OPEN INPUT MOVCLIDB
IF NOT SUCESSO-MOVCLIDB
MOVE "ERRO ABERTURA MOVCLIDB"
TO WS-MSG
MOVE FS-MOVCLIDB
TO WS-FS
PERFORM 9000-ERRO
END-IF
PERFORM 1500-LER-MOVCLIDB
.
1500-LER-MOVCLIDB.
READ MOVCLIDB INTO WS-REG-MOVCLIDB
IF SUCESSO-MOVCLIDB
ADD 1
TO WS-CTLIDO
ELSE
IF NOT FIM-ARQ-MOVCLIDB
MOVE "ERRO LEITURA MOVCLIDB"
TO WS-MSG
MOVE FS-MOVCLIDB
TO WS-FS
PERFORM 9000-ERRO
END-IF
END-IF
.
2000-PROCESSAR.
EVALUATE WS-TIPOMOVTO-DB
WHEN "I" PERFORM 2100-INCLUSAO
WHEN "E" PERFORM 2200-EXCLUSAO
WHEN "A" PERFORM 2300-ALTERACAO
WHEN "C" PERFORM 2400-CONSULTAR
WHEN OTHER
ADD 1 TO WS-CTINV
END-EVALUATE
PERFORM 1500-LER-MOVCLIDB
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

27

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
2100-INCLUSAO.
MOVE WS-CODCLI-DB
TO CODCLI
MOVE +30
TO NOMECLI-LEN
MOVE WS-NOMECLI-DB
TO NOMECLI-TEXT
MOVE +40
TO ENDCLI-LEN
MOVE WS-ENDCLI-DB
TO ENDCLI-TEXT
MOVE WS-FONECLI-DB
TO FONECLI
MOVE +50
TO EMAILCLI-LEN
MOVE WS-EMAILCLI-DB
TO EMAILCLI-TEXT
MOVE WS-CPFCLI-DB
TO CPFCLI
MOVE WS-SALDOCLI-DB
TO SALDOCLI
EXEC SQL
INSERT INTO TBCLIENTE
( CODCLI
, NOMECLI
, ENDCLI
, FONECLI
, EMAILCLI
, CPFCLI
, SALDOCLI
)
VALUES
( :CODCLI
, :NOMECLI
, :ENDCLI
, :FONECLI
, :EMAILCLI
, :CPFCLI
, :SALDOCLI
)
END-EXEC
EVALUATE SQLCODE
WHEN 0
ADD 1
WHEN -803 ADD 1
WHEN -545 ADD 1
WHEN OTHER
MOVE "ERRO

TO WS-CTINS
TO WS-CTINV
TO WS-CTINV

INSERT NA TABELA TBCLIENTE"


TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
PERFORM 9000-ERRO-DB2
END-EVALUATE
.
2200-EXCLUSAO.
MOVE WS-CODCLI-DB

TO CODCLI

EXEC SQL
DELETE FROM TBCLIENTE
WHERE CODCLI = :CODCLI
END-EXEC
EVALUATE SQLCODE
WHEN 0
ADD 1 TO WS-CTEXC
WHEN +100 ADD 1 TO WS-CTINV
WHEN OTHER
MOVE "ERRO DELETE NA TABELA TBCLIENTE"
TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
PERFORM 9000-ERRO-DB2
END-EVALUATE
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

28

Parte 7
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
2300-ALTERACAO.
MOVE WS-CODCLI-DB
TO CODCLI
EXEC SQL
SELECT CODCLI
, NOMECLI
, ENDCLI
, FONECLI
, EMAILCLI
, CPFCLI
, SALDOCLI
INTO :CODCLI
,:NOMECLI
,:ENDCLI
:IENDCLI
,:FONECLI
:IFONECLI
,:EMAILCLI
:IEMAILCLI
,:CPFCLI
:ICPFCLI
,:SALDOCLI
:ISALDOCLI
FROM TBCLIENTE
WHERE CODCLI = :CODCLI
END-EXEC
EVALUATE SQLCODE
WHEN 0
PERFORM 9000-TRATA-INDICATOR
PERFORM 2310-UPDATE
WHEN +100
ADD 1 TO WS-CTINV
WHEN OTHER
MOVE "ERRO SELECT DO UPDATE NA TABELA TBCLIENTE"
TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
PERFORM 9000-ERRO-DB2
END-EVALUATE
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

29

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
2310-UPDATE.
* TESTE DA VARIAVEL ESPELHO
IF WS-NOMECLI-DB
NOT = SPACES
MOVE +30
TO NOMECLI-LEN
MOVE WS-NOMECLI-DB
TO NOMECLI-TEXT
END-IF
IF WS-ENDCLI-DB
NOT = SPACES
MOVE +40
TO ENDCLI-LEN
MOVE WS-ENDCLI-DB
TO ENDCLI-TEXT
END-IF
IF WS-FONECLI-DB
NOT = SPACES
MOVE WS-FONECL-DB
TO FONECLI
END-IF
IF WS-EMAILCLI-DB NOT = SPACES
MOVE +50
TO EMAILCLI-LEN
MOVE WS-EMAILCLI-DB
TO EMAILCLI-TEXT
END-IF
IF WS-CPFCLI-DB NOT = SPACES
MOVE WS-CPFCLI-DB
END-IF

TO CPFCLI

IF WS-SALDOCLI-DB IS NUMERIC
MOVE WS-SALDOCLI-DB
END-IF

TO SALDOCLI

EXEC SQL
UPDATE TBCLIENTE
SET NOMECLI
,ENDCLI
,FONECLI
,EMAILCLI
,CPFCLI
,SALDOCLI
WHERE CODCLI
END-EXEC
EVALUATE SQLCODE
WHEN 0
ADD 1
WHEN +100 ADD 1
WHEN -545 ADD 1
WHEN OTHER
MOVE "ERRO

=
=
=
=
=
=
=

:NOMECLI
:ENDCLI
:FONECLI
:EMAILCLI
:CPFCLI
:SALDOCLI
:CODCLI

TO WS-CTALT
TO WS-CTINV
TO WS-CTINV

UPDATE NA TABELA TBCLIENTE"


TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
PERFORM 9000-ERRO-DB2
END-EVALUATE
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

30

Parte 7
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
2400-CONSULTAR.
MOVE WS-CODCLI-DB
TO CODCLI
EXEC SQL
SELECT CODCLI
, NOMECLI
, ENDCLI
, FONECLI
, EMAILCLI
, CPFCLI
, SALDOCLI
INTO :CODCLI
,:NOMECLI
,:ENDCLI
:IENDCLI
,:FONECLI
:IFONECLI
,:EMAILCLI
:IEMAILCLI
,:CPFCLI
:ICPFCLI
,:SALDOCLI
:ISALDOCLI
FROM TBCLIENTE
WHERE CODCLI = :CODCLI
END-EXEC
EVALUATE SQLCODE
WHEN 0
ADD 1 TO WS-CTCON
PERFORM 9000-TRATA-INDICATOR
PERFORM 9000-EXIBE-CONSULTA
WHEN +100 ADD 1 TO WS-CTINV
WHEN OTHER
MOVE "ERRO CONSULTA NA TABELA TBCLIENTE"
TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
PERFORM 9000-ERRO-DB2
END-EVALUATE
.
3000-TERMINO.
CLOSE MOVCLIDB
IF NOT SUCESSO-MOVCLIDB
MOVE "ERRO FECHAMENTO MOVCLIDB"
TO WS-MSG
MOVE FS-MOVCLIDB
TO WS-FS
PERFORM 9000-ERRO
END-IF
ACCEPT WS-HORARIO-FINAL FROM TIME
PERFORM 9000-CALCULA-TEMPO-PROC
MOVE
MOVE
MOVE
MOVE
MOVE
MOVE

WS-CTLIDO
WS-CTINS
WS-CTEXC
WS-CTINV
WS-CTCON
WS-CTALT

www.grandeporte.com.br

TO
TO
TO
TO
TO
TO

WS-CTLIDO-F
WS-CTINS-F
WS-CTEXC-F
WS-CTINV-F
WS-CTCON-F
WS-CTALT-F

(11) 4427-4579 (11) 9 9903-3218

Parte 7

31

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PERFORM 9000-IMPRIME-DATA
DISPLAY "=================================================="
DISPLAY "==
ESTATISTICA FINAL DE PROCESSAMENTO
=="
DISPLAY "=================================================="
DISPLAY "QTDE. MOVIMENTOS LIDOS MOVCLIDB.... .: " WS-CTLIDO-F
DISPLAY "QTDE. CLIENTES INSERIDOS TBCLIENTE. .: " WS-CTINS-F
DISPLAY "QTDE. CLIENTES EXCLUIDOS TBCLIENTE. .: " WS-CTEXC-F
DISPLAY "QTDE. CLIENTES ALTERADOS TBCLIENTE. .: " WS-CTALT-F
DISPLAY "QTDE. CLIENTES CONSULTADOS TBCLIENTE.: " WS-CTCON-F
DISPLAY "QTDE. MOVIMENTOS INVALIDOS...........: " WS-CTINV-F
DISPLAY "=================================================="
DISPLAY "TEMPO TOTAL DE PROCESSAMENTO.........: "
WS-TEMPO-PROCESSAMENTO
DISPLAY "=================================================="
DISPLAY "==
TERMINO NORMAL DO PROGRAMA EXEMANUT
=="
DISPLAY "=================================================="
.
9000-TRATA-INDICATOR.
* TESTE DOS INDICATORS
IF IENDCLI LESS ZERO
MOVE SPACES
END-IF

TO ENDCLI

IF IFONECLI LESS ZERO


MOVE SPACES
END-IF

TO FONECLI

IF IEMAILCLI LESS ZERO


MOVE SPACES
END-IF

TO EMAILCLI

IF ICPFCLI LESS ZERO


MOVE SPACES
END-IF

TO CPFCLI

IF ISALDOCLI LESS ZERO


MOVE ZEROS
END-IF
.

TO SALDOCLI

9000-EXIBE-CONSULTA.
MOVE SALDOCLI
TO WS-SALDOCLI-F
DISPLAY "=================================================="
DISPLAY "==
CONSULTA DE CLIENTE
=="
DISPLAY "=================================================="
DISPLAY "CODIGO....: " CODCLI
DISPLAY "NOME......: " NOMECLI-TEXT
DISPLAY "ENDERECO .: " ENDCLI-TEXT
DISPLAY "TELEFONE..: " FONECLI
DISPLAY "E-MAIL....: " EMAILCLI-TEXT
DISPLAY "CPF.......: " CPFCLI
DISPLAY "SALDO.....: R$ " WS-SALDOCLI-F
DISPLAY "=================================================="
.
9000-ERRO.
DISPLAY "=================================================="
DISPLAY "MENSAGEM....: " WS-MSG
DISPLAY "FILE STATUS.: " WS-FS
DISPLAY "=================================================="
DISPLAY "==
TERMINO ANORMAL DO PROGRAMA EXEMANUT
=="
DISPLAY "=================================================="
MOVE 12
TO RETURN-CODE
STOP RUN
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

32

Parte 7
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
9000-ERRO-DB2.
DISPLAY "=================================================="
DISPLAY "MESSAGE..: " WS-MSG
DISPLAY "SQLCODE..: " WS-SQLCODE
DISPLAY "SQLERRMC.: " SQLERRMC
DISPLAY "SQLCA....: " SQLCA
DISPLAY "=================================================="
DISPLAY "==
TERMINO ANORMAL DO PROGRAMA EXEMANUT
=="
DISPLAY "=================================================="
MOVE 16
TO RETURN-CODE
STOP RUN
.
* BOOK DA ROTINA PARA CALCULO DE PROCESSAMENTO
COPY CALCTEMP.
* ROTINA QUE EXIBE AS DATAS FORMATADAS
COPY IMPDATA.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

33

Practice

Atividade

Reviso aos pares

Associe as etapas do processo de compilao


com as aes executadas.

a)
b)
c)
d)

Pr-Compilao
Compilao
Link-edio
Bind

Extrair os comandos SQL do programa fonte e coloc-lo em um membro


chamado DBRM ( Data Base Request Module).

Verificar o programa em busca de erros de sintaxe e semntica.

Fazer include das reas (Book das Variveis).

Cria um caminho de acesso (Access Path) as tabelas do DB2,


estabelecendo uma relao entre um programa de aplicaes e seus
dados relacionais.

Verificar se h erros nos comandos SQL.

Ligar o fonte compilado com as funes de acesso a arquivos (CALL) e


mdulos DB2 RUN-TIME para criar um programa objeto (LOAD
MODULE).

Inserir cdigo fonte compatvel com o COBOL para invocar o DB2.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

34

Parte 7

Atividade

Reviso aos pares

Marque com X os argumentos entre SQLCODE e


SQLDML onde o erro pode ocorrer.

SQL DML
SELECT INSERT UPDATE DELETE
0
+100
-803
-545

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

Atividade

35

Trabalho em dupla

Coloque entre os parnteses o valor do


INDICATOR para cada uma das ocorrncias abaixo.

Coluna com valores normais

Comprimento do dado em um VARCHAR

Erro na converso de valores

Coluna com valor NULL

Comprimento original do dado que foi truncado no momento da carga na


HOST Variable

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

36

Parte 7

Atividade

Prtica de laboratrio

Execute os passos abaixo (Lembre-se de que


XXNN o seu prefixo de usurio):

1) Copie o membro COMPBDB2, da JOBLIB de seu instrutor, para a sua


JOBLIB.
2) Alter-lo, substituindo XXNN pelo seu prefixo de usurio. Us-lo para
compilar o programa GPXXNND1 at obter MAXCC = 0.
3) Copie o membro EXECOBD1, da JOBLIB de seu instrutor, para a sua
JOBLIB.
4) Alterar o JOB EXECOBD1, substituindo XXNN pelo seu prefixo de usurio.
5) Executar o JOB e comparar o resultado com os de seus colegas.

Anote abaixo os valores dos contadores que foram exibidos na SYSOUT


==================================================
==
ESTATISTICA FINAL DE PROCESSAMENTO
==
==================================================
QTDE. PRODUTOS LIDOS CADPRDD1........: ___________
QTDE. PRODUTOS INSERIDOS TBPRODUTO...: ___________
QTDE. PRODUTOS DUPLICADOS............: ___________
QTDE. PRODUTOS INVALIDOS.............: ___________
==================================================
TEMPO TOTAL DE PROCESSAMENTO.........: ___________
==================================================
==
TERMINO NORMAL DO PROGRAMA GPXXNND1
==
==================================================

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

37

Parte 7

Performance

Atividade

Projeto 2 - manuten o

Objetivo do Programa

A Metal Screws Inc. implantou um Sistema Gerenciador de banco de Dados


DB2 e j migrou seus dados de produtos que estavam em arquivo sequencial para a
tabela TBPRODUTO.
Precisamos agora escrever um programa para atualizar a tabela TBPRODUTO
com base na movimentao de estoque registrada no arquivo sequencial MOVPRDD2.

Macro-Fluxo

MOVPRDD2

GPXXNND2

TBPRODUTO

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

38

Parte 7

Layout do Arquivo

Nome do Arquivo

MOVPRDD2

Nome do Registro

REG-MOVPRDD2

Nome do Campo

Tipo e
Tamanho

Descrio

CODPROD-D2

X(04)

Cdigo

DESCPROD-D2

X(20)

Descrio

UNIDPROD-D2

X(05)

Unidade (caixa, litro, Kg, etc)

LOCALPROD-D2

X(05)

Localizao no estoque

QTDEST-D2

9(05)

Quantidade em estoque

QTDMAX-D2

9(05)

Qtde mxima em estoque

QTDMIN-D2

9(05)

Qtde mnima em estoque

PRECOCOMPRA-D2

9(06)V99

Preo de Compra

PRECOVENDA-D2

9(06)V99

Preo de Venda

PERCOMIS-D2

9(02)V99

Percentual de comisso

TIPOMOVTO-D2

X(01)

Tipo de movimento (I,E,A,C)

Layout da Tabela

Nome da tabela

TBPRODUTO

Nome da coluna

Tipo e
Tamanho

Complementos

CODPROD

CHAR(4)

UNIQUE NOT NULL

DESCPROD

VARCHAR(20)

NOT NULL

UNIDPROD

CHAR(5)

LOCALPROD

CHAR(5)

QTDEST

DECIMAL(5,0)

QTDMAX

DECIMAL(5,0)

> QTDMIN

QTDMIN

DECIMAL(5,0)

< QTDMAX

PRECOCOMPRA

DECIMAL(8,2)

>=0

PRECOVENDA

DECIMAL(8,2)

>=0

PERCOMIS

DECIMAL(4,2)

>=0

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

39

Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
==
CONSULTA DE PRODUTOS
==
==================================================
CODIGO...................: 9999
DESCRICAO................: XXXXXXXXXXXXXXXXXXXX
UNIDADE DE VENDA.........: XXXXX
LOCALIZACAO NO ESTOQUE...: XXXXX
QTDE. EM ESTOQUE.........: ZZ.ZZ9
QTDE. MAXIMA ARMAZENADA..: ZZ.ZZ9
QTDE. MINIMA ARMAZENADA..: ZZ.ZZ9
PRECO DE COMPRA..........: ZZZ.ZZ9,99
PRECO DE VENDA...........: ZZZ.ZZ9,99
PERCENTUAL DE COMISSAO...:
Z9,99
==================================================
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
==
ESTATISTICA FINAL DE PROCESSAMENTO
==
==================================================
QTDE. PRODUTOS LIDOS MOVPRDD2..........: ZZ.ZZ9
QTDE. PRODUTOS INSERIDOS
TBPRODUTO...: ZZ.ZZ9
QTDE. PRODUTOS EXCLUIDOS
TBPRODUTO...: ZZ.ZZ9
QTDE. PRODUTOS ALTERADOS
TBPRODUTO...: ZZ.ZZ9
QTDE. PRODUTOS CONSULTADOS TBPRODUTO...: ZZ.ZZ9
QTDE. MOVIMENTOS INVALIDOS.............: ZZ.ZZ9
==================================================
TEMPO TOTAL DE PROCESSAMENTO.........: HH:MM:SS:CC
==================================================
==
TERMINO NORMAL DO PROGRAMA GPXXNND2
==
==================================================

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

40

Parte 7
Observao

No arquivo MOVPRDD2 h o campo TIPOMOVTO-D2 que indica o tipo de


movimento, conforme abaixo:
I
E
A
C
outro

incluso de novo produto


excluso de produto
alterao dos dados do produto
consulta produtos, exibindo na SYSOUT
erro de movimento, ignorar registro

Fazer manuteno em tabelas com base em movimentos gravados em


arquivos sequenciais um processamento comum nas empresas. Execute os
passos abaixo (Lembre-se de que XXNN o seu prefixo de usurio):
1) Edite o membro BK002D2 em sua BOOKLIB com as variveis espelho do
arquivo MOVPRDD2.
2) Edite o programa GPXXNND2 em sua COBLIB.
3) Altere o JOB COMPBDB2 para compilar o programa GPXXNND2 e
compilar at obter MAXCC = 0
4) Copiar para seu particionado JCLDATA o membro INSNULL, da JCLDATA
de seu instrutor. Execute-o via SPUFI (opo do TSO D;1). Isso far o
INSERT de linhas com colunas NULL em sua tabela TBPRODUTO.
5) Copie o membro EXECOBD2, da JOBLIB de seu instrutor, para a sua
JOBLIB.
6) Alterar o JOB EXECOBD2, substituindo XXNN pelo seu prefixo de usurio.
7) Executar o JOB e comparar o resultado com os de seus colegas.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

41

Anote abaixo os valores dos contadores que foram exibidos na SYSOUT


==================================================
==
ESTATISTICA FINAL DE PROCESSAMENTO
==
==================================================
QTDE. PRODUTOS LIDOS MOVPRDD2..........: _________
QTDE. PRODUTOS INSERIDOS

TBPRODUTO...: _________

QTDE. PRODUTOS EXCLUIDOS

TBPRODUTO...: _________

QTDE. PRODUTOS ALTERADOS

TBPRODUTO...: _________

QTDE. PRODUTOS CONSULTADOS TBPRODUTO...: _________


QTDE. MOVIMENTOS INVALIDOS.............: _________
==================================================
TEMPO TOTAL DE PROCESSAMENTO.........: ___________
==================================================
==
TERMINO NORMAL DO PROGRAMA GPXXNND2
==
==================================================

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

42

Parte 7

Orientao para processamento

Como j foi visto, no pode haver um pargrafo principal.


Executa o pargrafo 1000-INICIALIZAR
Executa o pargrafo 3000-PROCESSAR
at que o file status do arquivo MOVPRDD2 seja 10
Executar o pargrafo 4000-TERMINO
Encerrar o programa
Pargrafo 1000-INICIALIZAR
Receber o horrio inicial de processamento
Mover zero para os contadores:
movimento lido
produto inserido
produto excludo
produto alterado
produto consultado
movimento invlido
Abrir para leitura o arquivo MOVPRDD2
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Ler o primeiro registro do arquivo MOVPRDD2 (2000-LER-MOVPRDD2)
Pargrafo 2000-LER-MOVPRDD2
Ler registro do arquivo MOVPRDD2 carregando varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de produto lido
Seno
Se file status for diferente de 10 (fim de arquivo)
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

43

Pargrafo 3000-PROCESSAR
Se WS-TIPOMOVTO-D2 = I
executar a rotina de incluso (3100-INCLUSAO)
Se WS-TIPOMOVTO-D2 = E
executar a rotina de excluso (3200-EXCLUSAO)
Se WS-TIPOMOVTO-D2 = A
executar a rotina de alterao (3300-ALTERACAO)
Se WS-TIPOMOVTO-D2 = C
executar a rotina de consulta (3400-CONSULTAR)
Seno
Somar 1 ao contador de movimento invlido
Ler o prximo registro do arquivo MOVPRDD2 (2000-LER-MOVPRDD2)
Pargrafo 3100-INCLUSAO
Mover os dados da varivel espelho para a hospedeira
Inserir a linha na tabela TBPRODUTO (INSERT) e testar SQLCODE:
se SQLCODE = 0
somar 1 ao contador de produto inserido
se SQLCODE = -803
somar 1 ao contador de produto invlido
se SQLCODE = -545
somar 1 ao contador de produto invlido
seno
mover SQLCODE para varivel formatada
Mover mensagem de erro para varivel da rotina de erro DB2
executar a rotina de erro para DB2 (9000-ERRO-DB2)
Pargrafo 3200-EXCLUSAO
Mover o cdigo do produto da varivel espelho para a hospedeira
Excluir a linha na tabela TBPRODUTO (DELETE) e testar SQLCODE:
se SQLCODE = 0
somar 1 ao contador de produto excludo
se SQLCODE = +100
somar 1 ao contador de movimento invlido
seno
mover SQLCODE para varivel formatada
Mover mensagem de erro para varivel da rotina de erro DB2
executar a rotina de erro para DB2 (9000-ERRO-DB2)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

44

Parte 7
Pargrafo 3300-ALTERACAO
Mover o cdigo do produto da varivel espelho para a hospedeira
Consultar a linha da tabela TBPRODUTO (SELECT) carregando a
varivel hospedeira e testar SQLCODE:
se SQLCODE = 0
executar a rotina 9000-TRATA-INDICATOR
executar a rotina 3310-UPDATE
se SQLCODE = +100
somar 1 ao contador de movimento invlido
seno
mover SQLCODE para varivel formatada
Mover mensagem de erro para varivel da rotina de erro DB2
executar a rotina de erro para DB2 (9000-ERRO-DB2)
Pargrafo 3310-UPDATE
Mover os dados da varivel espelho WS-REG-MOVPRDD2 com
contedo vlido para as respectivas variveis hospedeiras. Um campo
considerado com contedo vlido se for alfanumrico e diferente de SPACES
ou se for numrico e tiver contedo numrico (IS NUMERIC).
Alterar a linha da tabela TBPRODUTO (UPDATE) e testar SQLCODE:
se SQLCODE = 0
somar 1 ao contador de produto alterado
se SQLCODE = +100
somar 1 ao contador de movimento invlido
se SQLCODE = -545
somar 1 ao contador de movimento invlido
seno
mover SQLCODE para varivel formatada
Mover mensagem de erro para varivel da rotina de erro DB2
executar a rotina de erro para DB2 (9000-ERRO-DB2)

Pode parecer conversa de


bbado, mas se o produto
j foi localizado na rotina
3300-ALTERACAO, como ele
no seria mais encontrado
na 3310-UPDATE, dando
SQLCODE +100?

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

45

Pargrafo 3400-CONSULTAR
Mover o cdigo do produto da varivel espelho para a hospedeira
Consultar a linha da tabela TBPRODUTO (SELECT) carregando a
varivel hospedeira e testar SQLCODE:
se SQLCODE = 0
somar 1 ao contador de produto consultado
executar a rotina 9000-TRATA-INDICATOR
executar a rotina 9000-EXIBE-PRODUTO
se SQLCODE = +100
somar 1 ao contador de movimento invlido
seno
mover SQLCODE para varivel formatada
Mover mensagem de erro para varivel da rotina de erro DB2
executar a rotina de erro para DB2 (9000-ERRO-DB2)
Pargrafo 4000-TERMINO
Fechar o arquivo MOVPRDD2
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)
Receber o horrio final de processamento
Calcular o tempo de processamento
Exibir SYSOUT de acordo com LAYOUT
Exibir o contador de movimento lido
Exibir o contador de produto inserido
Exibir o contador de produto excludo
Exibir o contador de produto alterado
Exibir o contador de produto consultado
Exibir o contador de movimento invlido
Exibir o tempo total de processamento
Pargrafo 9000-TRATA-INDICATOR
Se INDICATOR < 0
Mover espaos quando a varivel hospedeira for alfanumrica
ou zeros quando numrica
Pargrafo 9000-EXIBE-PRODUTO
EXIBIR (DISPLAY) as variveis hospedeiras na SYSOUT conforme
layout.
Pargrafo 9000-ERRO
Exibir mensagem de erro
Exibir file status
Abendar o programa com RETURN-CODE = 12

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

46

Parte 7
Pargrafo 9000-ERRO-DB2
Exibir mensagem de erro
Exibir SQLCODE formatado
Exibir SQLERRMC (mensagem de erro do SQLCODE)
Abendar o programa com RETURN-CODE = 16

ENTRE AS ROTINAS
3300-ALTERACAO E
3310-UPDATE UM tempo se
passou, suficiente para
algum ou um aplicativo ter
excluido o produto.
Espera voc chegar em
casa que eu te explico
melhor!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 7

47

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

48

Parte 7

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

Parte

Charles William Backman foi um cientista


da computao particularmente conhecido por
seu trabalho na rea de banco de dados.
Desenvolveu o IDS (Integrated Data Store), um
dos primeiros SGBD que, aps aperfeio-lo,
permitia mltiplos programas acesso ao SGBD
simultaneamente. O IDS evoluiu para o IDMS
(Integrated Database Management Systems),
suportando mainframes IBM.
Charles William Backman
1924 (88 anos)

Verso 2.2.3

Parte 8

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

Presentation

Histria

RELATRIOS, DE NOVO!

Sim, novamente veremos como escrever programa COBOL para a gravao de


relatrio. Porm agora, os dados sero oriundos de uma tabela.
bom poder relembrar das rotinas de impresso de cabealho, detalhe e
impresso de rodap, dos contadores de linha (que j nasce estourado) e de pgina,
da WORKING-STORAGE SECTION enorme com as definies desses mesmos
cabealhos, detalhes e rodaps.
Os cursores permitem emular arquivos sequenciais a partir de tabelas, ento
so usados principalmente em relatrios, mas tambm para Balance Line, Merge, etc.

An
For atomi
mu
lri a de um
o co
n t n
uo
de novo

de novo

lina

80 o
de 1 u 132
/10 d
co
e po lunas
lega
da
www.grandeporte.com.br

de 1 66 linh
/6 d
e po a s
lega
d

rem
a

ser
mic rilha o
ro s
u
erri
lha

(11) 4427-4579 (11) 9 9903-3218

Parte 8

Teoria

cursor

A linguagem SQL trabalha com tabelas e linhas. uma linguagem


desenvolvida para manipular conjuntos. J as linguagens tradicionais trabalham com
arquivos e registros e no conseguem reconhecer tabelas e linhas.
Para simularmos um arquivo com seus registros, trabalha-se com o conceito de
cursor. Assim o programa pode acessar linhas de uma tabela para uma manipulao
qualquer.
O CURSOR criado dentro do programa COBOL atravs do comando
DECLARE, contendo a definio da result table (SELECT). usado para armazenar o
resultado de um SELECT para em seguida ler cada uma dessas linhas.
Um programa pode construir vrios CURSORES, porm cada um deles deve
ter um nome diferente. O roteiro para manipular um cursor :
Declarar o CURSOR, definindo seu nome e o comando SELECT.
(Na WORKING-STORAGE SECTION ou na PROCEDURE DIVISION)
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
*----------------------------------------------------------------*
* NAO CARREGA SQLCODE
*
*----------------------------------------------------------------*
EXEC SQL
DECLARE nome_do_cursor CURSOR FOR
Commando SELECT
END-EXEC

Abrir o cursor com o comando OPEN. Neste instante o SELECT executado.


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
*----------------------------------------------------------------*
* CARREGA SQLCODE
*
*
0 SUCESSO
*
* OUTRO - ERRO
*
*----------------------------------------------------------------*
EXEC SQL
OPEN nome_do_cursor
END-EXEC

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8
Executar uma srie de comandos FETCH para ler cada uma das linhas da
RESULT TABLE.
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
*----------------------------------------------------------------*
* CARREGA SQLCODE
*
*
0 SUCESSO
*
* +100 FIM DO CURSOR
*
* OUTRO - ERRO
*
*----------------------------------------------------------------*
EXEC SQL
FETCH nome_do_cursor
INTO :variavel1,: variavel2, ...
END-EXEC

Fechar o CURSOR, para o DB2 liberar a RESULT TABLE.


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
*----------------------------------------------------------------*
* CARREGA SQLCODE
*
*
0 SUCESSO
*
* OUTRO - ERRO
*
*----------------------------------------------------------------*
EXEC SQL
CLOSE nome_do_cursor
END-EXEC

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

Exemplo de um trecho de programa usando CURSOR:


----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
PERFORM 010-INICIALIZAR
PERFORM 030-PROCESSAR UNTIL SQLCODE = +100
PERFORM 040-TERMINO
STOP RUN
.
010-INICIALIZAR.
MOVE 0

TO WS-CTLIDO

* 1- DECLARACAO DO CURSOR
EXEC SQL
DECLARE LEREMP CURSOR FOR
SELECT CODEMP, NOMEMP
FROM
FUNCIONARIOS
WHERE CODDEPTO = P10
END-EXEC
* 2- ABERTURA DO CURSOR E TESTE DO SQLCODE
EXEC SQL
OPEN LEREMP
END-EXEC
IF SQLCODE NOT = 0
MOVE ERRO ABERTURA CURSOR LEREMP
TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
GO TO 999-ERRO-SQL
END-IF
PERFORM 020-LER-CURSOR
.
020-LER-CURSOR.
* 3- LEITURA DO CURSOR COM FETCH E TESTE DO SQLCODE
EXEC SQL
FETCH LEREMP
INTO :CODEMP, :NOMEEMP INDICATOR :INDNOMEMP
END-EXEC
IF SQLCODE = 0
ADD 1 TO WS-CTLIDO
ELSE
IF SQLCODE NOT = +100
MOVE ERRO LEITURA CURSOR LEREMP
TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
GO TO 999-ERRO-DB2
END-IF
END-IF
.
030-PROCESSAR.
IF INDNOMEMP < 0
MOVE NOME INVALIDO
END-IF

TO NOMEMP

DISPLAY FUNCIONARIO......: CODEMP


DISPLAY NOME.............: NOMEMP
PERFORM 020-LER-CURSOR
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
040-TERMINO.
DISPLAY TOTAL DE LINHAS LIDAS NO CURSOR = WS-CTLIDO
* 4 - FECHAR O CURSOR E TESTAR SQLCODE
EXEC SQL
CLOSE LEREMP
END-EXEC
IF SQLCODE NOT = 0
MOVE ERRO FECHAMENTO CURSOR LEREMP
TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
GO TO 999-ERRO-SQL
END-IF
DISPLAY TERMINO NORMAL DO PROGRAMA
.
999-ERRO-DB2.
DISPLAY MENSAGEM....: WS-MSG
DISPLAY SQLCODE .....: WS-SQLCODE
DISPLAY TERMINO ANORMAL DO PROGRAMA
MOVE +16
TO RETURN-CODE
STOP RUN
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

Exemplo

RELATRIO com cursor

Objetivo do Programa
Gravar o relatrio CLIRELAT com os cliente da tabela TBCLIENTE que no
tenham e-mail.

Macro-Fluxo

TBCLIENTE

EXERELAT

CLIRELAT

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

01
02
03
04
05
06
07
08
09
..
57
58
59
60

1
2
3
4
5
6
7
8
9
0
1
2
3
123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012
DD/MM/AAAA HH:MM:SS
PAG. ZZ9
RELACAO DE CLIENTES SEM E-MAIL
-----------------------------------------------------------------------------------------------------------------------------------SALDO
CODIGO
NOME
ENDERECO
TELEFONE
CPF
---------------------------------------------------------------------------------------------------ZZ.ZZ9,99
XXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
999999999
99999999999
XXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
999999999
99999999999
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
ZZ.ZZ9,99
ZZ.ZZ9,99
XXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
999999999
99999999999
XXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
999999999
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
99999999999
ZZ.ZZ9,99
ZZ.ZZ9,99
XXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
999999999
99999999999
XXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
999999999
99999999999
ZZ.ZZ9,99
ZZ.ZZ9,99
XXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
999999999
99999999999
ZZ.ZZ9,99
XXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
999999999
99999999999
-----------------------------------------------------------------------------------------------------------------------------------APOS O USO REUTILIZE ESSE RELATORIO COMO RASCUNHO - RECLICLE SUAS IDEIAS
INDUSTRIAS JOAQUIM NABUCO LTDA.

10
Parte 8

Layout do Relatrio

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

11

Parte 8
Layout do Arquivo

Nome do Arquivo

CLIRELAT

Nome do Registro

Tipo e Tamanho

Descrio

REG-CLIRELAT

X(132)

Relatrio de 132 colunas

Layout da Tabela

Nome do Tabela

TBCLIENTE

Nome do Campo

Tipo e Tamanho

Complemento

CODCLI

CHAR(04)

UNIQUE NOT NULL

NOMECLI

VARCHAR(30)

NOT NULL

ENDCLI

VARCHAR(40)

FONECLI

CHAR(09)

EMAILCLI

VARCHAR(50)

CPFCLI

CHAR(11)

SALDOCLI

DECIMAL(9,2)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

12

Parte 8

Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
==
ESTATISTICA FINAL DE PROCESSAMENTO
==
==================================================
TOTAL DE CLIENTES LIDOS.......: ZZZ.ZZ9
TOTAL DE CLIENTES IMPRESSOS...: ZZZ.ZZ9
TOTAL DE PAGINAS IMPRESSAS....:
ZZ9
==================================================
TEMPO TOTAL DE PROCESSAMENTO.........: HH:MM:SS:CC
==================================================
==
TERMINO NORMAL DO PROGRAMA EXERELAT
==
==================================================

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

13

Parte 8
Programa COBOL

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
IDENTIFICATION
DIVISION.
*----------------------------------------------------------------*
PROGRAM-ID.
EXERELAT.
*----------------------------------------------------------------*
ENVIRONMENT
DIVISION.
*----------------------------------------------------------------*
CONFIGURATION
SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
INPUT-OUTPUT
SECTION.
FILE-CONTROL.
SELECT CLIRELAT ASSIGN TO UT-S-CLIRELAT
FILE STATUS FS-CLIRELAT.
*----------------------------------------------------------------*
DATA
DIVISION.
*----------------------------------------------------------------*
FILE
SECTION.
*----------------------------------------------------------------*
FD CLIRELAT
LABEL RECORD OMITTED
RECORDING MODE IS F
RECORD CONTAINS 132 CHARACTERS
DATA RECORD REG-CLIRELAT
.
01 REG-CLIRELAT
PIC X(132).
*----------------------------------------------------------------*
WORKING-STORAGE
SECTION.
*----------------------------------------------------------------*
* BOOK DAS VARIAVEIS HOSPEDEIRAS
EXEC SQL
INCLUDE BKEXETC
END-EXEC
* BOOK DA SQLCODE
EXEC SQL
INCLUDE SQLCA
END-EXEC
* BOOK DAS VARIAVEIS PARA CALCULO DO TEMPO DE PROCESSAMENTO
COPY VARTEMPO.
COPY VARDATA.
* CONTADORES COMP
01 WS-CONTADORES-COMP.
03 WS-CTLIDO
03 WS-CTIMP
03 WS-CTPAG
03 WS-CTLINHA
03 WS-PULA

PIC
PIC
PIC
PIC
PIC

* CONTADORES FORMATADOS
01 WS-CONTADORES-FORMATADOS.
03 WS-CTLIDO-F
03 WS-CTIMP-F
03 WS-CTPAG-F

PIC ZZZ.ZZ9.
PIC ZZZ.ZZ9.
PIC ZZ9.

www.grandeporte.com.br

9(06)
9(06)
9(03)
9(02)
9(02)

COMP.
COMP.
COMP.
COMP.
COMP.

(11) 4427-4579 (11) 9 9903-3218

14

Parte 8
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
*----------------------------------------------------------------*
* LAY-OUT DO RELATORIO CLIRELAT
*----------------------------------------------------------------*
* CABECALHO 1
01 WS-CABEC1.
03 WS-DATA-CABEC1
PIC X(10).
03 FILLER
PIC X(01)
VALUE SPACES.
03 WS-HORA-CABEC1
PIC X(08).
03 FILLER
PIC X(40)
VALUE SPACES.
03 FILLER
PIC X(30)
VALUE
"RELACAO DE CLIENTES SEM E-MAIL".
03 FILLER
PIC X(35)
VALUE SPACES.
03 FILLER
PIC X(05)
VALUE "PAG. ".
03 WS-PAG-CABEC1
PIC ZZ9.

* CABECALHO 2
01 WS-CABEC2

* CABECALHO 3
01 WS-CABEC3.
03 FILLER
" CODIGO
03 FILLER
"
03 FILLER
"
03 FILLER
"

TELEFONE

PIC X(132)
VALUE ALL "-".

PIC X(33)
VALUE
NOME
".
PIC X(33)
VALUE
ENDERECO
".
PIC X(33)
VALUE
".
PIC X(33)
VALUE
CPF
".

* CABECALHO 4
01 WS-CABEC4.
03 FILLER

PIC X(33)
VALUE
" ----------------------".
03 FILLER
PIC X(33)
VALUE
"------------------------".
03 FILLER
PIC X(33)
VALUE
"---------------------------".
03 FILLER
PIC X(33)
VALUE
"
------------------- ".

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

15

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
* LINHA DE DETALHE
01 WS-LINDET.
03 FILLER
PIC X(02)
VALUE SPACES.
03 LD-CODCLI
PIC X(04).
03 FILLER
PIC X(06)
VALUE SPACES.
03 LD-NOMECLI
PIC X(30).
03 FILLER
PIC X(05)
VALUE SPACES.
03 LD-ENDCLI
PIC X(40).
03 FILLER
PIC X(05)
VALUE SPACES.
03 LD-FONECLI
PIC X(09).
03 FILLER
PIC X(05)
VALUE SPACES.
03 LD-CPFCLI
PIC X(11).
03 FILLER
PIC X(05)
VALUE SPACES.
03 LD-SALDOCLI
PIC ZZ.ZZ9,99
BLANK WHEN ZERO.
03 FILLER
PIC X(01)
VALUE SPACES.
* RODAPE 1
01 WS-RODAPE1

PIC X(132)
VALUE ALL "-".

* RODAPE 2
01 WS-RODAPE2.
03 FILLER

PIC X(33)
VALUE
"APOS O USO REUTILIZE ESSE RELATOR".
03 FILLER
PIC X(33)
VALUE
"IO COMO RASCUNHO - RECLICLE SUAS ".
03 FILLER
PIC X(33)
VALUE
"IDEIAS
".
03 FILLER
PIC X(33)
VALUE
" INDUSTRIAS JOAQUIM NABUCO LTDA.".

*----------------------------------------------------------------*
* DATA E HORA PARA O RELATORIO
*----------------------------------------------------------------*
01 WS-DATA-SYS.
03 WS-ANO
PIC 9(02).
03 WS-MES
PIC 9(02).
03 WS-DIA
PIC 9(02).
01 WS-DATA-FORMATADA.
03 WS-DIA
03 FILLER
03 WS-MES
03 FILLER
03 WS-ANO
01 WS-HORA-SYS.
03 WS-HORA
03 WS-MINUTO
03 WS-SEGUNDO

www.grandeporte.com.br

PIC 9(02).
PIC X(01)
VALUE "/".
PIC 9(02).
PIC X(03)
VALUE "/20".
PIC 9(02).

PIC 9(02).
PIC 9(02).
PIC 9(02).

(11) 4427-4579 (11) 9 9903-3218

16

Parte 8
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
01 WS-HORA-FORMATADA.
03 WS-HORA
PIC 9(02).
03 FILLER
PIC X(01)
VALUE ":".
03 WS-MINUTO
PIC 9(02).
03 FILLER
PIC X(01)
VALUE ":".
03 WS-SEGUNDO
PIC 9(02).
* INDICADORES PARA TBCLIENTE
01 WS-INDICADORES.
03 IENDCLI
03 IFONECLI
03 ICPFCLI
03 ISALDOCLI
01 FS-CLIRELAT
88 SUCESSO-CLIRELAT

PIC
PIC
PIC
PIC

S9(04)
S9(04)
S9(04)
S9(04)

COMP.
COMP.
COMP.
COMP.

PIC X(02).
VALUE "00".

77 WS-FS
PIC X(02).
77 WS-MSG
PIC X(60).
77 WS-SQLCODE
PIC +9(09).
*----------------------------------------------------------------*
PROCEDURE
DIVISION.
*----------------------------------------------------------------*
0000-EXERELAT.
PERFORM 1000-INICIALIZAR
PERFORM 2000-PROCESSAR
UNTIL SQLCODE = +100
PERFORM 3000-TERMINO
STOP RUN
.
1000-INICIALIZAR.
* CARREGAR VARIAVEIS PARA CALCULO DO TEMPO DE PROCESSAMENTO
ACCEPT WS-HORARIO-INICIAL FROM TIME
* INICIALIZACAO DOS CONTADORES
INITIALIZE WS-CONTADORES-COMP
MOVE 99

TO WS-CTLINHA

* LEITURA DA DATA E HORA PARA O CABECALHO DO RELATORIO


ACCEPT WS-DATA-SYS FROM DATE
ACCEPT WS-HORA-SYS FROM TIME
MOVE CORRESPONDING WS-DATA-SYS TO WS-DATA-FORMATADA
MOVE CORRESPONDING WS-HORA-SYS TO WS-HORA-FORMATADA
* DECLARACAO DO CURSOR PARA SELECIONAR CLIENTES SEM EMAIL
EXEC SQL
DECLARE CLISEMEMAIL CURSOR FOR
SELECT CODCLI
,NOMECLI
,ENDCLI
,FONECLI
,CPFCLI
,SALDOCLI
FROM TBCLIENTE
WHERE EMAILCLI IS NULL
END-EXEC

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

17

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
* ABERTURA DO CURSOR
EXEC SQL
OPEN CLISEMEMAIL
END-EXEC
IF SQLCODE NOT EQUAL 0
MOVE "ERRO AO FECHAR CURSOR"
TO WS-MSG
TO WS-SQLCODE

MOVE SQLCODE
GO TO 9000-ERRO-DB2
END-IF

* ABERTURA DO ARQUIVO DE RELATORIO


OPEN OUTPUT CLIRELAT
IF NOT SUCESSO-CLIRELAT
MOVE "ERRO ABERTURA CLIRELAT"
TO WS-MSG
TO WS-FS

MOVE FS-CLIRELAT
GO TO 9000-ERRO
END-IF
* LEITURA DA PRIMEIRA LINHA DO CURSOR
PERFORM 1500-LER-CLISEMEMAIL
.
1500-LER-CLISEMEMAIL.
EXEC SQL
FETCH CLISEMEMAIL
INTO :CODCLI
,:NOMECLI
,:ENDCLI
:IENDCLI
,:FONECLI
:IFONECLI
,:CPFCLI
:ICPFCLI
,:SALDOCLI
:ISALDOCLI
END-EXEC

IF SQLCODE = 0
ADD 1 TO WS-CTLIDO
PERFORM 1600-TRATA-INDICATOR
ELSE
IF SQLCODE NOT = +100
MOVE "ERRO LEITURA CURSOR CLISEMEMAIL"
TO WS-MSG
MOVE SQLCODE
TO WS-SQLCODE
GO TO 9000-ERRO-DB2
END-IF
END-IF
.
1600-TRATA-INDICATOR.
IF IENDCLI < 0
MOVE ALL "*"
END-IF

TO ENDCLI-TEXT

IF IFONECLI < 0
MOVE ALL "*"
END-IF

TO FONECLI

IF ICPFCLI < 0
MOVE ALL "*"
END-IF

TO CPFCLI

IF ISALDOCLI < 0
MOVE ZEROS
END-IF
.

www.grandeporte.com.br

TO SALDOCLI

(11) 4427-4579 (11) 9 9903-3218

18

Parte 8
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
2000-PROCESSAR.
IF WS-CTLINHA > 59
PERFORM 2100-IMPRIME-CABECALHO
END-IF
PERFORM 2200-IMPRIME-DETALHE
IF WS-CTLINHA = 58
PERFORM 2300-IMPRIME-RODAPE
END-IF
PERFORM 1500-LER-CLISEMEMAIL
.
2100-IMPRIME-CABECALHO.
MOVE WS-DATA-FORMATADA
MOVE WS-HORA-FORMATADA
ADD 1 TO WS-CTPAG
MOVE WS-CTPAG

TO WS-DATA-CABEC1
TO WS-HORA-CABEC1
TO WS-PAG-CABEC1

WRITE REG-CLIRELAT FROM WS-CABEC1 AFTER PAGE


IF NOT SUCESSO-CLIRELAT
MOVE "ERRO IMPRESSAO CABECALHO 1"
TO WS-MSG
MOVE FS-CLIRELAT
TO WS-FS
GO TO 9000-ERRO
END-IF
WRITE REG-CLIRELAT FROM WS-CABEC2
IF NOT SUCESSO-CLIRELAT
MOVE "ERRO IMPRESSAO CABECALHO 2"
TO WS-MSG
MOVE FS-CLIRELAT
TO WS-FS
GO TO 9000-ERRO
END-IF
WRITE REG-CLIRELAT FROM WS-CABEC3
IF NOT SUCESSO-CLIRELAT
MOVE "ERRO IMPRESSAO CABECALHO 3"
TO WS-MSG
MOVE FS-CLIRELAT
TO WS-FS
GO TO 9000-ERRO
END-IF
WRITE REG-CLIRELAT FROM WS-CABEC4
IF NOT SUCESSO-CLIRELAT
MOVE "ERRO IMPRESSAO CABECALHO 4"
TO WS-MSG
MOVE FS-CLIRELAT
TO WS-FS
GO TO 9000-ERRO
END-IF
MOVE 4
TO WS-CTLINHA
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

19

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
2200-IMPRIME-DETALHE.
MOVE CODCLI
TO LD-CODCLI
MOVE NOMECLI-TEXT
TO LD-NOMECLI
MOVE ENDCLI-TEXT
TO LD-ENDCLI
MOVE FONECLI
TO LD-FONECLI
MOVE CPFCLI
TO LD-CPFCLI
MOVE SALDOCLI
TO LD-SALDOCLI
WRITE REG-CLIRELAT FROM WS-LINDET
IF NOT SUCESSO-CLIRELAT
MOVE "ERRO NA IMPRESSAO DO DETALHE."
TO WS-MSG
MOVE FS-CLIRELAT
TO WS-FS
GO TO 9000-ERRO
END-IF
ADD 1 TO WS-CTLINHA
ADD 1 TO WS-CTIMP
.
2300-IMPRIME-RODAPE.
COMPUTE WS-PULA = 59 - WS-CTLINHA
WRITE REG-CLIRELAT FROM WS-RODAPE1 AFTER WS-PULA LINES
IF NOT SUCESSO-CLIRELAT
MOVE "ERRO NA IMPRESSAO DO RODAPE 1"
TO WS-MSG
MOVE FS-CLIRELAT
TO WS-FS
GO TO 9000-ERRO
END-IF
WRITE REG-CLIRELAT FROM WS-RODAPE2
IF NOT SUCESSO-CLIRELAT
MOVE "ERRO NA IMPRESSAO DO RODAPE 2"
TO WS-MSG
MOVE FS-CLIRELAT
TO WS-FS
GO TO 9000-ERRO
END-IF
MOVE 60
.

www.grandeporte.com.br

TO WS-CTLINHA

(11) 4427-4579 (11) 9 9903-3218

20

Parte 8

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
3000-TERMINO.
* VERIFICANDO A NECESSIDADE DE IMPRESSAO DE
* RODAPE NA ULTIMA PAGINA
IF WS-CTLINHA < 60
PERFORM 2300-IMPRIME-RODAPE
END-IF
MOVE WS-CTLIDO
MOVE WS-CTIMP
MOVE WS-CTPAG

TO WS-CTLIDO-F
TO WS-CTIMP-F
TO WS-CTPAG-F

EXEC SQL
CLOSE CLISEMEMAIL
END-EXEC
IF SQLCODE NOT EQUAL 0
MOVE "ERRO AO FECHAR CURSOR"
MOVE SQLCODE
GO TO 9000-ERRO-DB2
END-IF

TO WS-MSG
TO WS-SQLCODE

CLOSE CLIRELAT
IF NOT SUCESSO-CLIRELAT
MOVE "ERRO AO FECHAR CLIRELAT"
TO WS-MSG
MOVE FS-CLIRELAT
TO WS-FS
GO TO 9000-ERRO
END-IF
ACCEPT WS-HORARIO-FINAL FROM TIME
PERFORM 9000-CALCULA-TEMPO-PROC
PERFORM 9000-IMPRIME-DATA
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY
DISPLAY

"
"
"================================================="
"==
ESTATISTICA FINAL DE PROCESSAMENTO
=="
"================================================="
"TOTAL DE CLIENTES LIDOS.......: " WS-CTLIDO-F
"TOTAL DE CLIENTES IMPRESSOS...: " WS-CTIMP-F
"TOTAL DE PAGINAS IMPRESSAS....:
" WS-CTPAG-F
"================================================="
"TEMPO TOTAL DE PROCESSAMENTO.........: "
WS-TEMPO-PROCESSAMENTO
DISPLAY "================================================="
DISPLAY "==
TERMINO NORMAL DO PROGRAMA EXERELAT
=="
DISPLAY "================================================="
.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

21

----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
9000-ERRO.
DISPLAY "*------------------------------------------------*"
DISPLAY " MENSAGEM......: " WS-MSG
DISPLAY " FILE STATUS...: " WS-FS
DISPLAY "*------------------------------------------------*"
DISPLAY "
TERMINO ANORMAL DO PROCESSAMENTO EXERELAT
"
DISPLAY "*------------------------------------------------*"
STOP RUN
.
9000-ERRO-DB2.
DISPLAY "*------------------------------------------------*"
DISPLAY " MENSAGEM......: " WS-MSG
DISPLAY " SQLCODE.......: " WS-SQLCODE
DISPLAY "*------------------------------------------------*"
DISPLAY "
TERMINO ANORMAL DO PROCESSAMENTO EXERELAT
"
DISPLAY "*------------------------------------------------*"
STOP RUN
.
* ROTINA QUE EXIBE AS DATAS FORMATADAS
COPY IMPDATA.
* ROTINA QUE CALCULA TEMPO DE PROCESSAMENTO
COPY CALCTEMP.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

22

Parte 8

Atividade

Trabalho em dupla

Dado
solicitados:

M.E.R

TABFUNC
codfunc(PK)
nomefunc
dataadminfunc
datademissaofunc
coddepto(FK)

abaixo,

monte

os

cursores

TABDEPTO
coddepto(PK)
nomedepto
codgerente(FK)

a) Cursor CVETERANO com o cdigo, nome dos funcionrios e o nome do


departamento que trabalham a mais de 10 anos na empresa, ordenado pelo
nome do departamento.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

23

b) Cursor CGERENTE com o cdigo e o nome do departamento, cdigo, nome e


data de admisso do gerente do departamento.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

24

Parte 8

Atividade

Reviso aos pares

Criar as variveis hospedeiras para receber o


contedo dos cursores criados na atividade anterior.
TABFUNC

a) CVETERANO

codfunc(PK)
nomefunc
dataadminfunc
datademissaofunc
coddepto(FK)

CHAR(4)
VARCHAR(30)
DATE
DATE
CHAR(3)

TABDEPTO
coddepto(PK) CHAR(3)
nomedepto
VARCHAR(20)
codgerente(FK) CHAR(4)

b) CGERENTE

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

25

Performance

Atividade

Projeto 3 - Relatrio

Impresso de relatrio via CURSOR

Objetivo do Programa

A Metal Screws Inc. precisa de um programa que imprima um relatrio de


reposio de estoque, para poder fazer os pedidos aos seus fornecedores.
Escrever um programa selecionando da tabela TBPRODUTO aqueles cuja
quantidade em estoque menor que o limite mnimo em ordem crescente de
descrio. Ler o CURSOR e imprimir o relatrio RELREPO, com 60 linhas por pgina,
contendo cabealho, detalhe e rodap, conforme layout.
Macro-Fluxo

TBPRODUTO

GPXXNND3

RELREPO

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

26

Parte 8

Layout do Arquivo

Nome do Arquivo

RELREPO

Nome do Registro

Tipo e Tamanho

Descrio

REG-RELREPO

X(80)

Relatrio de 80 colunas

Layout da Tabela

Nome da tabela

TBPRODUTO

Nome da coluna

Tipo e Tamanho

Complementos

CODPROD

CHAR(4)

UNIQUE NOT NULL

DESCPROD

VARCHAR(20)

NOT NULL

UNIDPROD

CHAR(5)

LOCALPROD

CHAR(5)

QTDEST

DECIMAL(5,0)

QTDMAX

DECIMAL(5,0)

> QTDMIN

QTDMIN

DECIMAL(5,0)

< QTDMAX

PRECOCOMPRA

DECIMAL(8,2)

>=0

PRECOVENDA

DECIMAL(8,2)

>=0

PERCOMIS

DECIMAL(4,2)

>=0

Layout do Relatrio

1
2
01
02
03
04
05
06
..
57
58
59
60

12345678911234567892123456789312345678941234567895123456789612345678971234567898
12345678901234567890123456789012345678901234567890123456789012345678901234567890
DD/MM/20AAXXHH:MM:SSXXXXXXXXXXX XXREPOSICAO DE ESTOQUEXXXXXXXX
PAG.XZ.ZZ9
-------------------------------------------------------------------------------CODIGO
DESCRICAO
PRECO
%LUCRO
ESTOQUE REPOSICAO
-------------------------------------------------------------------------------XXXX
XXXXXXXXXXXXXXXXXXXX
R$ ***.**9,99
ZZ9,99+ ZZ.ZZ9
ZZ.ZZ9
XXXX
XXXXXXXXXXXXXXXXXXXX
R$ ***.**9,99
ZZ9,99+ ZZ.ZZ9
ZZ.ZZ9
XXXX
XXXXXXXXXXXXXXXXXXXX
R$ ***.**9,99
ZZ9,99+ ZZ.ZZ9
ZZ.ZZ9
XXXX
XXXXXXXXXXXXXXXXXXXX
R$ ***.**9,99
ZZ9,99+ ZZ.ZZ9
ZZ.ZZ9
XXXX
XXXXXXXXXXXXXXXXXXXX
R$ ***.**9,99
ZZ9,99+ ZZ.ZZ9
ZZ.ZZ9
-------------------------------------------------------------------------------INDUSTRIAS SEUNOME S/A.
SERVIMOS BEM PARA SERVIR SEMPRE.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

27

Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
==
ESTATISTICA FINAL DE PROCESSAMENTO
==
==================================================
QTDE. PRODUTOS LIDOS ................: ZZ.ZZ9
QTDE. PRODUTOS IMPRESSOS.............: ZZ.ZZ9
QTDE. PAGINAS........................: ZZ.ZZ9
==================================================
TEMPO TOTAL DE PROCESSAMENTO.........: HH:MM:SS:CC
==================================================
==
TERMINO NORMAL DO PROGRAMA GPXXNND3
==
==================================================

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

28

Parte 8
Observao

Detalhamento do Relatrio
O RELREPO tem 4 linhas de cabealho, a saber:
01

WS-CABEC1, que contm as variveis

WS-DATA-CABEC1
WS-PAG-CABEC1
DD/MM/20AAXXHH:MM:SSXXXXXXXXXXX

XXREPOSICAO DE ESTOQUEXXXXXXXX

PAG.XZ.ZZ9

WS-HORA-CABEC1
02
03
04

WS-CABEC2, que contm 80 traos -


WS-CABEC3, que contm os ttulos das colunas
WS-CABEC4, que contm 80 traos - sobre as colunas

Tem tambm 1 linha de detalhe, WS-LINDET, com as variveis:


LD-CODPROD
LD-DESCPROD
LD-PRECOVENDA
05
06
..
57
58

XXXX
XXXX
XXXX
XXXX
XXXX

XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXX

R$
R$
R$
R$
R$

***.**9,99
***.**9,99
***.**9,99
***.**9,99
***.**9,99

ZZ9,99+
ZZ9,99+
ZZ9,99+
ZZ9,99+
ZZ9,99+

ZZ.ZZ9
ZZ.ZZ9
ZZ.ZZ9
ZZ.ZZ9
ZZ.ZZ9

ZZ.ZZ9
ZZ.ZZ9
ZZ.ZZ9
ZZ.ZZ9
ZZ.ZZ9

LD-LUCRO
LD-QTDEST
LD-QTDREP
Finalmente tem 2 linhas de rodap
59
60

WS-RODAPE1, que contm 80 traos


WS-RODAPE2, que contm uma frase

Ao carregar data e hora pela rotina de inicializao, garantimos que em todas


as pginas do relatrio teremos a mesma data e hora. Isso crtico quando os
relatrios so longos e impressos prximos meia-noite.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

29

O lucro calculado usando a seguinte frmula:


COMPUTE WS-LUCRO = (PRECOVENDA / PRECOCOMPRA 1) * 100
e a varivel WS-LUCRO deve ser declarada como PIC S9(3)V9(6).
A quantidade de reposio calculada usando a seguinte frmula:
COMPUTE WS-QTDREP = QTDMAX - QTDEST
e a varivel WS-QTDREP deve ser declarada como PIC 9(05).
Imprimir relatrios a partir de cursores uma atividade muito comum e precisa
ser perfeitamente dominada. Execute os passos abaixo (lembre-se de que XXNN o
seu prefixo de usurio):
1) Edite o programa GPXXNND3 na sua COBLIB
2) Altere o JOB COMPBDB2 para compilar o programa GPXXNND3 e compile at
obter MAXCC=0.
3) Copiar o membro EXECOBD3, da JOBLIB de seu instrutor, para sua JOBLIB.
4) Alterar o JOB EXECOBD3, substituindo XXNN pelo seu prefixo de usurio
5) Executar o JOB e comparar o resultado com os de seus colegas

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

30

Parte 8
Orientao para processamento

Como j foi visto, no pode haver um pargrafo principal.


Executar o pargrafo 1000-INICIALIZAR
Executar o pargrafo 2000-PROCESSAR
at que o SQLCODE do cursor seja +100
Executar o pargrafo 3000-TERMINO
Encerrar o programa
Pargrafo 1000-INICIALIZAR
Receber o horrio inicial de processamento
Mover zero para os contadores:
produtos lidos
linhas de detalhes impressas
pginas impressas
Mover 99 para o contador de linha (ele comea estourado)
Abrir para gravao o arquivo RELREPO
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para varivel da rotina de erro
Executar a rotina de erro (9000-ERRO)
Definir o cursor REPOSICAO
Abrir o cursor REPOSICAO
Se SQLCODE for diferente de zero
Mover mensagem de erro para varivel da rotina de erro DB2
Mover SQLCODE para a varivel formatada
Executar a rotina de erro DB2 (9000-ERRO-DB2)
Executar o pargrafo 9100-FORMATA-DATA-HORA
Executar o pargrafo 1500-LER-REPOSICAO
Pargrafo 1500-LER-REPOSICAO
Pegar a prxima linha do cursor REPOSICAO (FETCH)
Se SQLCODE for igual a zero
Executar o pargrafo 9000-TRATA-INDICATOR
Somar 1 ao contador de produtos lidos
Seno
Se SQLCODE for diferente de 100
Mover mensagem de erro para varivel da rotina de erro DB2
Mover SQLCODE para varivel formatada
Executar a rotina de erro para DB2 (9000-ERRO-DB2)
Pargrafo 2000-PROCESSAR
Se contador de linha for maior que 59
Executar a rotina 2100-IMPRIME-CABECALHO
Executar a rotina 2200-IMPRIME-DETALHE
Se contador de linha = 58
Executar a rotina 2300-IMPRIME-RODAPE
Executar o pargrafo 1500-LER-REPOSICAO

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

31

Pargrafo 2100-IMPRIME-CABECALHO
Somar 1 ao contador de pginas impressas
Mover o contador de pginas impressas para varivel do WS-CABEC1
Mover a data e a hora formatada para varivel do WS-CABEC1
Gravar registro do RELREPO com base no WS-CABEC1
pulando uma pgina e testar file status
Gravar registro do RELREPO com base no WS-CABEC2 e testar file status
Gravar registro do RELREPO com base no WS-CABEC3 e testar file status
Gravar registro do RELREPO com base no WS-CABEC4 e testar file status
Mover 4 para o contador de linha
Pargrafo 2200-IMPRIME-DETALHE
Mover os dados da varivel hospedeira para as variveis na WS-LINDET
Calcular o lucro e mov-lo para a varivel na WS-LINDET
Calcular a quantidade de reposio e mov-la para a varivel na WS-LINDET
Gravar registro do RELREPO com base na WS-LINDET e testar file status
Somar 1 ao contador de linhas de detalhes impressas
Somar 1 ao contador de linha
Pargrafo 2300-IMPRIME-RODAPE
Calcular quantas linhas precisam ser puladas para chegar na linha 59
Gravar registro do RELREPO com base no WS-RODAPE1
pulando linhas para chegar na linha 59 e testar file status
Gravar registro do RELREPO com base no WS-RODAPE2 e testar file status
Mover 60 para o contador de linha
Pargrafo 3000-TERMINO
Se contador de linha for menor que 60
Executar a rotina 2300-IMPRIME-RODAPE
fim-se
Fechar o arquivo RELREPO
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para varivel da rotina de erro
Executar a rotina de erro (9000-ERRO)
Fechar o cursor REPOSICAO
Se SQLCODE for diferente de zero
Mover mensagem de erro para varivel da rotina de erro DB2
Mover SQLCODE para a varivel formatada
Executar a rotina de erro DB2 (9000-ERRO-DB2)
Receber o horrio final de processamento
Calcular o tempo de processamento
Exibir SYSOUT de acordo com LAYOUT
Exibir o contador de produtos lidos
Exibir o contador de linhas impressas
Exibir o contador de pginas impressas
Exibir o tempo de processamento
Exibir mensagem de termino normal do programa

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

32

Parte 8

Pargrafo 9000-TRATA-INDICATOR
Se o indicator para uma varivel hospedeira numrica for negativo
Mover zeros para a varivel hospedeira
Se o indicator para uma varivel hospedeira alfanumrica for negativo
Mover asteriscos para a varivel hospedeira
Pargrafo 9000-ERRO
Exibir mensagem de erro
Exibir file status
Abendar o programa com RETURN-CODE = 12
Pargrafo 9000-ERRO-DB2
Exibir mensagem de erro
Exibir SQLCODE formatado
Exibir SQLERRMC (mensagem de erro do SQLCODE)
Abendar o programa com RETURN-CODE = 16
Pargrafo 9100-FORMATA-DATA-HORA
Receber a data do sistema
Receber a hora do sistema
Mover correspondentemente a data do sistema para varivel formatada
Mover correspondentemente a hora do sistema para varivel formatada

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 8

33

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

34

Parte 8

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

Parte

um dos precursores dos conceitos de


data warehouse e sistemas de anlise de dados
transacionais. Ele conhecido por suas
convices de que o data warehouse deve ser
desenhado para ser compreensvel e rpido.

Ralph Kimball
1944 (68 anos)

Verso 2.2.3

Parte 9

Preparation

Trocando Ideias

agora que voc fala !!

Antes de iniciarmos, vamos conversar sobre os tpicos apresentados na


capa desta parte. Isso importante para que seu instrutor e seus colegas
saibam como est seu conhecimento sobre o assunto e se voc precisa ou
pode fornecer ajuda aos colegas e instrutor.

O que voc j sabe ?


O que voc no sabe ?
Porque importante conhecer estes tpicos ?
Quais so os seus temores ?
O que voc considera difcil ?

Reflexo

aqui que voc se compromete !!

Depois de falar sobre o assunto com seus colegas e instrutor, escreva,


desenhe, rabisque, diga algo sobre o que voc vai fazer para dominar esses
tpicos. Comprometa-se!

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

Presentation

Histria

Finalizando...

Chegamos a parte final de nosso treinamento com DB2, aqui aprenderemos os


macetes utilizados nos programas batch com DB2, tais como a definio de unidades
lgicas de trabalho, a utilizao de cursor para atualizao e excluso posicionada e a
utilizao de cursor com JOIN.
Continue praticando em sua casa, criando e dando manuteno em tabelas,
desenvolvendo programas batch, fazendo experincias, etc.
Vamos ento parte final de nosso treinamento.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

Teoria

Atualiza o posicionada

Este tipo de atualizao ocorre quando a atualizao feita em uma linha da


RESULT TABLE que foi posicionada por um comando FETCH de um CURSOR. Neste
caso a clusula WHERE do UPDATE no define a condio de seleo da linha, mas
declara que est usando a posio corrente do CURSOR (CURRENT OF).
Para usar uma atualizao posicionada, a declarao do CURSOR precisa
definir que ele ser usado para atualizaes, citando as colunas que sero atualizadas
com a seguinte sintaxe:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
EXEC SQL
DECLARE nome_do_cursor CURSOR FOR
SELECT coluna1, coluna2, ......
FROM
tabela
WHERE restricao
FOR UPDATE OF coluna1, coluna2, ...
END-EXEC

Critrios para a declarao de cursor com atualizao pocisionada:


a) O SELECT deve buscar dados em apenas uma tabela, no permitido o uso
de JOINs.
b) No pode ter a clusula ORDER BY
c) No pode ter a palavra chave DISTINCT
d) No pode ter a clusula GROUP BY ou HAVING
e) No pode ter subqueries em que busquem seus dados na mesma tabela
Quando o cursor for declarado para atualizao com a sintaxe acima, aps
cada FETCH o programa pode atualizar a linha lida com a sintaxe abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
EXEC SQL
UPDATE tabela
SET coluna1 = :valor1,
coluna2 = :valor2,
.......
WHERE CURRENT OF nome_do_cursor
END-EXEC

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

Teoria

Excluso posicionada

Este tipo de atualizao ocorre quando feita a excluso de uma linha da


RESULT TABLE que foi posicionada por um comando FETCH de um CURSOR. Neste
caso a clusula WHERE do DELETE no define a condio de seleo da linha, mas
declara que est usando a posio corrente do CURSOR (CURRENT OF).
Para usar uma excluso posicionada, a declarao do CURSOR precisa definir
que ele ser usado para atualizaes com a seguinte sintaxe:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
EXEC SQL
DECLARE nome_do_cursor CURSOR FOR
SELECT coluna1, coluna2, ......
FROM
tabela
WHERE restricao
FOR UPDATE OF coluna1, coluna2, ...
END-EXEC

Valem os mesmos critrios para a declarao de cursor com atualizao


pocisionada, visto anteriormente. Quando o cursor foi declarado para atualizao com
a sintaxe acima, aps cada FETCH o programa pode excluir a linha lida com a sntaxe
abaixo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
EXEC SQL
DELETE FROM tabela
WHERE CURRENT OF nome_do_cursor
END-EXEC

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

Logical unit of work

Teoria

Uma Logical Unit of Work (LUW) tambm conhecida como UNIT OF WORK ou
UNIT OF RECOVERY, uma sequncia de comandos SQL que o DB2 entende como
uma unidade de consistncia e recuperao. Este conceito importante para que o
DB2 possa garantir a integridade do banco de dados. Ele faz isso tendo certeza de
que toda ou nenhuma das atualizaes em uma Logical Unit of Work seja feita. Uma
grande responsabilidade de qualquer programa BATCH agrupar seus comandos
SQL em LUWs.
Alguns processamentos podem ser divididos em pontos nas quais os dados
esto consistentes. Por exemplo:
Suponha que todo cliente alterado para inativo, deve ter seus pedidos
excludos da base. Assim, uma LUW formada pelo UPDATE do cliente e pelo
DELETE de seus pedidos.
novo ponto de
consistncia

ponto de
consistncia

linha do
tempo

UPDATE

DELETE

incio da
LUW

UPDATE

trmino da
LUW
COMMIT

novo ponto de
consistncia

DELETE

trmino da
LUW
COMMIT

Se o UPDATE ou o DELETE derem SQLCODE < 0, a LUW no est completa


e deve ser emitido um ROLLBACK. Assim, inaceitvel que um processamento seja
interrompido durante uma LUW.
Para o DB2, o final de uma LUW chamada de COMMIT POINT. Esta situao
estabelecida ao trmino normal do programa ou com execuo de uma instruo
COMMIT.
Com a instruo COMMIT:

Todas as atualizaes feitas at ento so validadas


Atualizaes so registradas no LOG do DB2
Liberao de pginas e/ou tablespaces presos (lock) podem ocorrer
Indica-se que uma LUW chegou ao seu final com sucesso
Todos os cursores abertos sem a opo WITH HOLD so fechados

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9
Uma LUW incompleta deve ser desfeita at o ltimo COMMIT POINT. Este
processamento conhecido com ROLLBACK. O ROLLBACK disparado ao trmino
anormal do programa ou com execuo de uma instruo ROLLBACK.
Com a instruo ROLLBACK:

A LUW corrente abandonada


Todas as atualizaes feitas a partir do ltimo COMMIT so desfeitas
Liberao de pginas e/ou tablespaces presos (lock) podem ocorrer
Todos os cursores abertos sem a opo WITH HOLD so fechados

Em geral, nos sistemas Batch que atualizam tabelas do DB2, deve-se estabelecer
as LUW e executar COMMIT e ROLLBACK nos momentos apropriados.

Teoria

CURSORES E COMMIT

Um programa pode ter vrios cursores abertos ao mesmo tempo. Porm


procure sempre manter o menor nmero de cursores abertos simultaneamente, para
otimizar a performance.
Para programas que iro emitir COMMIT e necessitam reposicionar o cursor,
defina o cursor com clusula WITH HOLD.
Exemplo:
----+-*A-1-B--+----2----+----3----+----4----+----5----+----6----+----7--|-+----8
PROCEDURE
DIVISION.
.......
EXEC SQL
DECLARE nome_do_cursor CURSOR WITH HOLD FOR
SELECT coluna1, coluna2, ......
FROM
tabela
WHERE restricao
FOR UPDATE OF coluna1, coluna2, ...
END-EXEC

Um CLOSE nome_do_cursor no implica no fim de uma Logical Unit of Work


(LUW) e portanto no gera um COMMIT.
Uma instruo COMMIT fecha todos os cursores sem opo WITH HOLD e
valida todas as atualizaes efetuadas, encerrando a LUW.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

Practice

Atividade

Prtica de laboratrio

Manuteno no GPAZNND2. Definir no


pargrafo 3000-PROCESSAR uma Logical Unit of
Work (LUW), para executar um COMMIT ou
ROLLBACK.

No pargrafo 3000-PROCESSAR, aps a verificao do tipo de movimento,


fazer:
Se WS-TIPOMOVTO-D2 for I ou E ou A ou C
Se SQLCODE for igual a zero
COMMIT
Seno
ROLLBACK
Fim-se
Fim-se
Executar os passos abaixo, (lembre-se que XXNN o prefixo de seu usurio).
1- Fazer uma cpia de segurana do programa GPXXNND2 copiando-o para a
COBLIB com o nome BKPPGMD2.
2- Editar o programa GPXXNND2 fazendo a manuteno solicitada.
3- Altere o JOB COMPBDB2 para compilar o programa GPXXNND2 e submeter o
JOB at obter MAXCC = 0
4- Executar o JOB EXECOBD2 e comparar o resultado com os seus colegas e
com a primeira execuo do programa.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

10

Parte 9
Anote abaixo os valores dos contadores que foram exibidos na SYSOUT
==================================================
==
ESTATISTICA FINAL DE PROCESSAMENTO
==
==================================================
QTDE. PRODUTOS LIDOS MOVPRDD2..........: _________
QTDE. PRODUTOS INSERIDOS

TBPRODUTO...: _________

QTDE. PRODUTOS EXCLUIDOS

TBPRODUTO...: _________

QTDE. PRODUTOS ALTERADOS

TBPRODUTO...: _________

QTDE. PRODUTOS CONSULTADOS TBPRODUTO...: _________


QTDE. MOVIMENTOS INVALIDOS.............: _________
==================================================
TEMPO TOTAL DE PROCESSAMENTO.........: ___________
==================================================
==
TERMINO NORMAL DO PROGRAMA GPXXNND2
==
==================================================

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

11

Performance

Atividade

PROJETO 4 - ATUALIZACO
,

Atualizao da Tabela TBPRODUTO pelo CURSOR, com base no


arquivo de movimentos MOVPRDD4.

Objetivo do Programa

A Metal Screws Inc. precisa fazer outra manuteno em sua tabela de


produtos. Desta vez as alteraes e excluses esto gravadas no arquivo
MOVPRDD4.
Precisamos ento escrever o programa GPXXNND4 para ler esse movimento e
atualizar a tabela produto usando a tcnica da atualizao e excluso posicionada via
cursor.

Macro-Fluxo

MOVPRDD4

GPXXNND4

TBPRODUTO

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

12

Parte 9

Layout do Arquivo

Nome do Arquivo

MOVPRDD4

Nome do Registro

REG-MOVPRDD4

Nome do Campo

Tipo e
Tamanho

Descrio

CODPROD-D4

X(04)

Cdigo

DESCPROD-D4

X(20)

Descrio

UNIDPROD-D4

X(05)

Unidade (caixa, litro, Kg, etc)

LOCALPROD-D4

X(05)

Localizao no estoque

QTDEST-D4

9(05)

Quantidade em estoque

QTDMAX-D4

9(05)

Qtde mxima em estoque

QTDMIN-D4

9(05)

Qtde mnima em estoque

PRECOCOMPRA-D4

9(06)V99

Preo de Compra

PRECOVENDA-D4

9(06)V99

Preo de Venda

PERCOMIS-D4

9(02)V99

Percentual de comisso

TIPOMOVTO-D4

X(01)

Tipo de movimento (E,A)

Layout da Tabela

Nome da tabela

TBPRODUTO

Nome da coluna

Tipo e
Tamanho

Complementos

CODPROD

CHAR(4)

UNIQUE NOT NULL

DESCPROD

VARCHAR(20)

NOT NULL

UNIDPROD

CHAR(5)

LOCALPROD

CHAR(5)

QTDEST

DECIMAL(5,0)

QTDMAX

DECIMAL(5,0)

> QTDMIN

QTDMIN

DECIMAL(5,0)

< QTDMAX

PRECOCOMPRA

DECIMAL(8,2)

>= 0

PRECOVENDA

DECIMAL(8,2)

>= 0

PERCOMIS

DECIMAL(4,2)

>= 0

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

13

Layout da SYSOUT
1
2
3
4
5
12345678901234567890123456789012345678901234567890
**************************************************
* DATA GREGORIANA 1 - 99/99/2099
*
* DATA GREGORIANA 2 - 99 DE XXXXXXXXX DE 2099
*
* DATA JULIANA
999 DE 2099
*
* DIA DA SEMANA
XXXXXXXXXXXXX
*
**************************************************
1
2
3
4
5
12345678901234567890123456789012345678901234567890
==================================================
==
ESTATISTICA FINAL DE PROCESSAMENTO
==
==================================================
QTDE. MOVIMENTOS LIDOS MOVPRDD4......: ZZ.ZZ9
QTDE. PRODUTOS LIDOS NO CURSOR.......: ZZ.ZZ9
QTDE. PRODUTOS EXCLUIDOS.............: ZZ.ZZ9
QTDE. PRODUTOS ALTERADOS.............: ZZ.ZZ9
QTDE. MOVIMENTOS INVALIDOS...........: ZZ.ZZ9
==================================================
TEMPO TOTAL DE PROCESSAMENTO.........: HH:MM:SS:CC
==================================================
==
TERMINO NORMAL DO PROGRAMA GPXXNND4
==
==================================================

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

14

Parte 9
Observao
Montar um cursor (MANUTENCAO) selecionando da tabela TBPRODUTO
aqueles cuja quantidade em estoque menor que o limite mnimo. Com base no
cursor MANUTENCAO e no arquivo MOVPRDD4, fazer excluses e atualizaes
posicionadas na tabela PRODUTO via cursor.
O campo TIPOMOVTO-M indica o tipo de movimento:
E
excluso de produto (excluso posicionada)
A
alterao dos dados do produto (alterao posicionada)
outro erro de movimento, ignorar registro
1) Edite o membro BK002D4 em sua BOOKLIB com as variveis espelho do
arquivo MOVPRDD4.
2) Edite o programa GPXXNND4 em sua COBLIB.
3) Altere o JOB COMPBDB2 para compilar o programa GPXXNND4 e
compilar at obter MAXCC = 0
4) Copie o membro EXECOBD4, da JOBLIB de seu instrutor, para a sua
JOBLIB.
5) Alterar o JOB EXECOBD4, substituindo XXNN pelo seu prefixo de usurio.
6) Executar o JOB e comparar o resultado com os de seus colegas.
Anote abaixo os valores dos contadores que foram exibidos na SYSOUT
==================================================
==
ESTATISTICA FINAL DE PROCESSAMENTO
==
==================================================
QTDE. MOVIMENTOS LIDOS MOVPRDD4......: _________
QTDE. PRODUTOS LIDOS NO CURSOR.......: _________
QTDE. PRODUTOS EXCLUIDOS.............: _________
QTDE. PRODUTOS ALTERADOS.............: _________
QTDE. MOVIMENTOS INVALIDOS...........: _________
==================================================
TEMPO TOTAL DE PROCESSAMENTO.........: _________
==================================================
==
TERMINO NORMAL DO PROGRAMA GPXXNND4
==
==================================================

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

15

Orientao para processamento


Como j foi visto, no pode haver um pargrafo principal.
Executar o pargrafo 1000-INICIALIZAR
Executar o pargrafo 2000-PROCESSAR
at que o file status do arquivo MOVPRDD4 seja 10
Executar o pargrafo 3000-TERMINO
Encerrar o programa
Pargrafo 1000-INICIALIZAR
Receber o horrio inicial de processamento
Mover zero para os contadores:
registros lidos no arquivo de movimento
produtos lidos no cursor por produto
produtos lidos no cursor em geral
produtos excludos da tabela
produtos alterados da tabela
movimento invlido no arquivo
Abrir para leitura o arquivo MOVPRDD4
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para varivel da rotina de erro
Executar a rotina de erro (9000-ERRO)
Definir o cursor MANUTENCAO com a opo WITH HOLD para atualizao e
excluso pocisionada
Executar o pargrafo 1500-LER-MOVPRDD4
Pargrafo 1500-LER-MOVPRDD4
Ler registro do arquivo MOVPRDD4 carregando a varivel espelho
Se file status for igual a 00 (sucesso)
Somar 1 ao contador de registros lidos no arquivo de movimento
Seno
Se file status for diferente de 10 (fim de arquivo)
Mover mensagem de erro para varivel da rotina de erro
Mover file status para variveis da rotina de erro
Executar rotina de erro (9000-ERRO)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

16

Parte 9
Pargrafo 2000-PROCESSAR
Se WS-TIPOMOVTO-D4 = A OR E
Abrir o cursor MANUTENCAO
Se SQLCODE for diferente de zero
Mover mensagem de erro para varivel da rotina de erro DB2
Mover SQLCODE para a varivel formatada
Executar a rotina de erro DB2 (9000-ERRO-DB2)
Executar o pargrafo 2100-LER- MANUTENCAO (WITH TEST AFTER)
at que WS-CODPROD-D4 = CODPROD ou SQLCODE = +100
Se SQLCODE = 0 (achou o produto no cursor)
exibir mensagem:
Para localizar produto XXXX foram necessrios ler 9999 registros do cursor
zerar o contador de registros lidos no cursor por produto
se WS-TIPOMOVTO-D4 = E
executar o pargrafo 2200-EXCLUSAO
se WS-TIPOMOVTO-D4 = A
executar o pargrafo 2300-ALTERACAO
Seno
Somar 1 ao contador de movimento invlido
Fechar o cursor MANUTENCAO
Se SQLCODE for diferente de zero
Mover mensagem de erro para varivel da rotina de erro DB2
Mover SQLCODE para a varivel formatada
Executar a rotina de erro DB2 (9000-ERRO-DB2)
Seno
Somar 1 ao contador de movimento invlido
Ler o prximo registro do arquivo MOVPRDD4 (1500-LER-MOVPRDD4)
Pargrafo 2100-LER-MANUTENCAO
Pegar a prxima linha do cursor MANUTENCAO (FETCH)
Se SQLCODE for igual a zero
Executar a rotina 9000-TRATA-INDICATOR
Somar 1 ao contador de produtos lidos pelo cursor em geral
Somar 1 ao contador de produtos lidos pelo cursor por produto
Seno
Se SQLCODE for diferente de 100
Mover mensagem de erro para varivel da rotina de erro DB2
Mover SQLCODE para varivel formatada
Executar a rotina de erro para DB2 (9000-ERRO-DB2)

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

17

Pargrafo 2200-EXCLUSAO
Excluir a posio corrente do cursor (DELETE)
Se SQLCODE = 0
Somar 1 ao contador produtos excludos
COMMIT
seno
Se SQLCODE = +100
Somar 1 ao contador movimento invlido
Seno
Mover mensagem de erro para varivel da rotina de erro DB2
Mover SQLCODE para varivel formatada
Executar a rotina de erro para DB2 (9000-ERRO-DB2)
Pargrafo 2300-ALTERACAO
Mover os dados da varivel espelho WS-REG-MOVPRDD4 com contedo
vlido para as respectivas variveis hospedeiras. Um campo considerado
com contedo vlido se for alfanumrico e for diferente de SPACES ou se for
numrico e tiver contedo numrico (IS NUMERIC).
Alterar a posio corrente do cursor (UPDATE)
Se SQLCODE = 0
somar 1 ao contador WS-CTALT
COMMIT
Seno
Se SQLCODE = +100 or -545
somar 1 ao contador WS-CTINV
Seno
Mover mensagem de erro para varivel da rotina de erro DB2
Mover SQLCODE para varivel formatada
executar a rotina 999-ERRO-DB2
Pargrafo 3000-TERMINO
Fechar o arquivo MOVPRDD4
Se file status for diferente de 00
Mover mensagem de erro para varivel da rotina de erro
Mover file status para varivel da rotina de erro
Executar a rotina de erro (9000-ERRO)
Receber o horrio final de processamento
Calcular o tempo de processamento
Exibir SYSOUT de acordo com LAYOUT
Exibir registros lidos no arquivo de movimento
Exibir produtos lidos no cursor em geral
Exibir produtos excludos da tabela
Exibir produtos alterados da tabela
Exibir movimento invlido no arquivo
Exibir o tempo de processamento
Exibir mensagem de termino normal do programa

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

18

Parte 9
Pargrafo 9000-TRATA-INDICATOR
Se o indicator para uma varivel hospedeira numrica for negativo
Mover zeros para a varivel hospedeira
Se o indicator para uma varivel hospedeira alfanumrica for negativo
Mover asteriscos para a varivel hospedeira
Pargrafo 9000-ERRO
Exibir mensagem de erro
Exibir file status
Abendar o programa com RETURN-CODE = 12
Pargrafo 9000-ERRO-DB2
Exibir mensagem de erro
Exibir SQLCODE formatado
Exibir SQLERRMC (mensagem de erro do SQLCODE)
Abendar o programa com RETURN-CODE = 16

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 9

19

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

20

Parte 9

Avaliao

Ento...Como foi ?!?

Estou fera!

Fiz Certo!

Muito Bom

Bom

www.grandeporte.com.br

regular

ruim

Muito ruim

(11) 4427-4579 (11) 9 9903-3218

Parte

ANEXOS

Verso 2.2.3

Parte 10

Sqlcode table

Teoria

Successful Execution SQLCODE


0

SUCCESSFUL EXECUTION

Warning SQLCODE
12

THE UNQUALIFIED COLUMN NAME column-name WAS INTERPRETED AS A CORRELATED REFERENCE

98
100

A DYNAMIC SQL STATEMENT ENDS WITH A SEMICOLON


ROW NOT FOUND FOR FETCH, UPDATE OR DELETE, OR THE RESULT OF A QUERY IS AN EMPTY
TABLE

110

SQL UPDATE TO A DATA CAPTURE TABLE NOT SIGNALED TO ORIGINATING SUBSYSTEM

111

THE SUBPAGES OPTION IS NOT SUPPORTED FOR TYPE 2 INDEXES

117

THE NUMBER OF INSERT VALUES IS NOT THE SAME AS THE NUMBER OF OBJECT COLUMNS

162

TABLESPACE database-name.tablespace-name HAS BEEN PLACED IN CHECK PENDING


THE QUALIFIED COLUMN NAME column-name WAS RESOLVED USING A NON-UNIQUE OR UNEXPOSED
NAME

203
204
206

name IS AN UNDEFINED NAME


column-name IS NOT A COLUMN OF AN INSERTED TABLE, UPDATED TABLE, OR ANY TABLE
IDENTIFIED IN A FROM CLAUSE

218

THE SQL STATEMENT REFERENCING A REMOTE OBJECT CANNOT BE EXPLAINED

219

THE REQUIRED EXPLANATION TABLE table-name DOES NOT EXIST

220

339

THE COLUMN column-name IN EXPLANATION TABLE table-name IS NOT DEFINED PROPERLY


A VALUE WITH DATA TYPE data-type1 CANNOT BE ASSIGNED TO A HOST VARIABLE BECAUSE THE
VALUE IS NOT WITHIN THE RANGE OF THE HOST VARIABLE IN POSITION position-number WITH DATA
TYPE data-type2
THE NULL VALUE HAS BEEN ASSIGNED TO A HOST VARIABLE BECAUSE THE STRING CANNOT BE
TRANSLATED. REASON reason-code, CHARACTER code-point, HOST VARIABLE position-number
THE SQL STATEMENT HAS BEEN SUCCESSFULLY EXECUTED, BUT THERE MAY BE SOME
CHARACTER CONVERSION INCONSISTENCIES

402

LOCATION location IS UNKNOWN

403

THE LOCAL OBJECT REFERENCED BY THE CREATE ALIAS STATEMENT DOES NOT EXIST

535

THE RESULT OF THE POSITIONED UPDATE OR DELETE MAY DEPEND ON THE ORDER OF THE ROWS.

541

THE REFERENTIAL OR UNIQUE CONSTRAINT name HAS BEEN IGNORED BECAUSE IT IS A DUPLICATE

551

auth-id DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION operation ON OBJECT object-name

552

auth-id DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION operation

558

THE WITH GRANT OPTION IS IGNORED


THE ALTER, INDEX, AND REFERENCES PRIVILEGES CANNOT BE GRANTED TO PUBLIC AT ALL
LOCATIONS
A GRANT OF A PRIVILEGE WAS IGNORED BECAUSE THE GRANTEE ALREADY HAS THE PRIVILEGE
FROM THE GRANTOR

304
331

561
562

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10

610
INDEX index-name HAS BEEN PLACED IN RECOVER PENDING
625
626

THE DEFINITION OF TABLE table-name HAS BEEN CHANGED TO INCOMPLETE


DROPPING THE INDEX TERMINATES ENFORCEMENT OF THE UNIQUENESS OF A KEY THAT WAS
DEFINED WHEN THE TABLE WAS CREATED

645

WHERE NOT NULL IS IGNORED BECAUSE THE INDEX KEY CANNOT CONTAIN NULL VALUES

650

THE TABLE BEING CREATED OR ALTERED CANNOT BECOME A DEPENDENT TABLE


TABLE table-name IN PARTITIONED TABLESPACE tspace-name IS NOT AVAILABLE BECAUSE ITS
PARTITIONED INDEX HAS NOT BEEN CREATED

653
658

806

THE SUBPAGES VALUE IS IGNORED FOR THE CATALOG INDEX index-name


THE INTERNAL LENGTH OF THE LIMIT-KEY FIELDS FOR THE PARTITIONED INDEX index-name
EXCEEDS THE LENGTH IMPOSED BY THE INDEX MANAGER
DEFINITION CHANGE OF object object_name MAY REQUIRE SIMILAR CHANGE ON READ-ONLY
SYSTEMS
EXCEPTION ERROR exception-type HAS OCCURRED DURING operation-type OPERATION ON data-type
DATA, POSITION position-number
BIND ISOLATION LEVEL RR CONFLICTS WITH TABLESPACE LOCKSIZE PAGE OR LOCKSIZE ROW
AND LOCKMAX 0

807

THE RESULT OF DECIMAL MULTIPLICATION MAY CAUSE OVERFLOW

863

THE CONNECTION WAS SUCCESSFUL BUT ONLY SBCS WILL BE SUPPORTED


TYPE 1 INDEXES WITH SUBPAGES GREATER THAN 1 CANNOT BECOME GROUP BUFFER POOL
DEPENDENT IN A DATA SHARING ENVIRONMENT
OPERATION COMPLETED SUCCESSFULLY BUT A DISTRIBUTION PROTOCOL VIOLATION HAS BEEN
DETECTED. ORIGINAL SQLCODE=original-sqlcode AND ORIGINAL SQLSTATE=original-sqlstate

664
738
802

2000
30100

Error SQLCODE
-7

STATEMENT CONTAINS THE ILLEGAL CHARACTER character

-10

THE STRING CONSTANT BEGINNING string IS NOT TERMINATED

-29

INTO CLAUSE REQUIRED

-60

INVALID type SPECIFICATION : spec

-84

UNACCEPTABLE SQL STATEMENT

-101

THE STATEMENT IS TOO LONG OR TOO COMPLEX

-102

LITERAL STRING IS TOO LONG. STRING BEGINS string

-103

literal IS AN INVALID NUMERIC LITERAL

-104

ILLEGAL SYMBOL "token". SOME SYMBOLS THAT MIGHT BE LEGAL ARE: token-list

-105

INVALID STRING

-107

THE NAME name IS TOO LONG. MAXIMUM ALLOWABLE SIZE IS size

-109

clause CLAUSE IS NOT PERMITTED

-110

INVALID HEXADECIMAL LITERAL BEGINNING string

-111

A COLUMN FUNCTION DOES NOT INCLUDE A COLUMN NAME

-112

THE OPERAND OF A COLUMN FUNCTION IS ANOTHER COLUMN FUNCTION

-113

INVALID CHARACTER FOUND IN string, REASON CODE - nnn

-114
-115

THE LOCATION NAME location DOES NOT MATCH THE CURRENT SERVER
A PREDICATE IS INVALID BECAUSE THE COMPARISON OPERATOR operator IS FOLLOWED BY A
PARENTHESIZED LIST OR BY ANY OR ALL WITHOUT A SUBQUERY

-117

THE NUMBER OF INSERT VALUES IS NOT THE SAME AS THE NUMBER OF OBJECT COLUMNS

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10

-118

THE OBJECT TABLE OR VIEW OF THE INSERT, DELETE, OR UPDATE STATEMENT IS ALSO IDENTIFIED
IN A FROM CLAUSE

-119

A COLUMN IDENTIFIED IN A HAVING CLAUSE IS NOT INCLUDED IN THE GROUP BY CLAUSE

-120

A WHERE CLAUSE OR SET CLAUSE INCLUDES A COLUMN FUNCTION

-121

-122

THE COLUMN name IS IDENTIFIED MORE THAN ONCE IN THE INSERT OR UPDATE STATEMENT
A SELECT STATEMENT WITH NO GROUP BY CLAUSE CONTAINS A COLUMN NAME AND A COLUMN
FUNCTION IN THE SELECT CLAUSE OR A COLUMN NAME IS CONTAINED IN THE SELECT CLAUSE
BUT NOT IN THE GROUP BY CLAUSE

-125

AN INTEGER IN THE ORDER BY CLAUSE DOES NOT IDENTIFY A COLUMN OF THE RESULT

-126

THE SELECT STATEMENT CONTAINS BOTH AN UPDATE CLAUSE AND AN ORDER BY CLAUSE

-127

DISTINCT IS SPECIFIED MORE THAN ONCE IN A SUBSELECT

-128

INVALID USE OF NULL IN A PREDICATE

-129
-130

THE STATEMENT CONTAINS TOO MANY TABLE NAMES


THE ESCAPE CLAUSE CONSISTS OF MORE THAN ONE CHARACTER, OR THE STRING PATTERN
CONTAINS AN INVALID OCCURRENCE OF THE ESCAPE CHARACTER

-131

STATEMENT WITH LIKE PREDICATE HAS INCOMPATIBLE DATA TYPES

-132

-134

A LIKE PREDICATE IS INVALID BECAUSE THE SECOND OPERAND IS NOT A STRING


A COLUMN FUNCTION IN A SUBQUERY OF A HAVING CLAUSE IS INVALID BECAUSE ALL COLUMN
REFERENCES IN ITS ARGUMENT ARE NOT CORRELATED TO THE GROUP BY RESULT THAT THE
HAVING CLAUSE IS APPLIED TO
IMPROPER USE OF LONG STRING COLUMN column-name OR A HOST VARIABLE OF MAXIMUM
LENGTH GREATER THAN 254

-136

SORT CANNOT BE EXECUTED BECAUSE THE SORT KEY LENGTH IS GREATER THAN 4000 BYTES

-137

RESULT OF CONCATENATION TOO LONG

-138

THE SECOND OR THIRD ARGUMENT OF THE SUBSTR FUNCTION IS OUT OF RANGE

-144

INVALID SECTION NUMBER number


THE OBJECT OF THE INSERT, DELETE, OR UPDATE STATEMENT IS A VIEW FOR WHICH THE
REQUESTED OPERATION IS NOT PERMITTED
THE UPDATE STATEMENT IS INVALID BECAUSE THE CATALOG DESCRIPTION OF COLUMN columnname INDICATES THAT IT CANNOT BE UPDATED
THE DROP clause CLAUSE IN THE ALTER STATEMENT IS INVALID BECAUSE constraint-name IS A
constraint-type

-133

-150
-151
-152
-153
-154
-156

THE CREATE VIEW STATEMENT DOES NOT INCLUDE A REQUIRED COLUMN LIST
THE CREATE VIEW FAILED BECAUSE THE VIEW DEFINITION CONTAINS A UNION, A UNION ALL, OR
A REMOTE OBJECT

-158

THE STATEMENT DOES NOT IDENTIFY A TABLE


ONLY A TABLE NAME CAN BE SPECIFIED IN A FOREIGN KEY CLAUSE. object-name IS NOT THE NAME
OF A TABLE.
THE NUMBER OF COLUMNS SPECIFIED FOR THE VIEW IS NOT THE SAME AS THE NUMBER OF
COLUMNS SPECIFIED BY THE SELECT CLAUSE

-159

DROP OR COMMENT ON token IDENTIFIES A(N) token RATHER THAN A(N) token

-160
-161

THE WITH CHECK OPTION CANNOT BE USED FOR THE SPECIFIED VIEW
THE INSERT OR UPDATE IS NOT ALLOWED BECAUSE A RESULTING ROW DOES NOT SATISFY THE
VIEW DEFINITION

-164

auth-id1 DOES NOT HAVE THE PRIVILEGE TO CREATE A VIEW WITH QUALIFICATION authorization ID

-170

THE NUMBER OF ARGUMENTS SPECIFIED FOR function-name IS INVALID

-171

THE DATA TYPE, LENGTH, OR VALUE OF ARGUMENT nn OF function-name IS INVALID

-173

UR IS SPECIFIED ON THE WITH CLAUSE BUT THE CURSOR IS NOT READ-ONLY

-157

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10

-180

THE STRING REPRESENTATION OF A DATETIME VALUE HAS INVALID SYNTAX

-181

THE STRING REPRESENTATION OF A DATETIME VALUE IS NOT A VALID DATETIME VALUE

-182

AN ARITHMETIC EXPRESSION WITH A DATETIME VALUE IS INVALID


AN ARITHMETIC OPERATION ON A DATE OR TIMESTAMP HAS A RESULT THAT IS NOT WITHIN THE
VALID RANGE OF DATES

-183
-184

-187

AN ARITHMETIC EXPRESSION WITH A DATETIME VALUE CONTAINS A PARAMETER MARKER


THE LOCAL FORMAT OPTION HAS BEEN USED WITH A DATE OR TIME AND NO LOCAL EXIT HAS
BEEN INSTALLED
THE LOCAL DATE LENGTH OR LOCAL TIME LENGTH HAS BEEN INCREASED AND EXECUTING
PROGRAM RELIES ON THE OLD LENGTH
A REFERENCE TO A CURRENT DATE/TIME SPECIAL REGISTER IS INVALID BECAUSE THE MVS TOD
CLOCK IS BAD OR THE MVS PARMTZ IS OUT OF RANGE

-188

THE STRING REPRESENTATION OF A NAME IS INVALID

-189

CCSID ccsid IS UNKNOWN OR INVALID FOR THE DATA TYPE OR SUBTYPE

-191
-197

A STRING CANNOT BE USED BECAUSE IT IS INVALID MIXED DATA


QUALIFIED COLUMN NAMES IN ORDER BY CLAUSE NOT PERMITTED WHEN UNION OR UNION ALL
SPECIFIED

-198

THE OPERAND OF THE PREPARE OR EXECUTE IMMEDIATE STATEMENT IS BLANK OR EMPTY

-199

ILLEGAL USE OF KEYWORD keyword. TOKEN token-list WAS EXPECTED

-203

A REFERENCE TO COLUMN column-name IS AMBIGUOUS

-204

name IS AN UNDEFINED NAME

-205
-206

column-name IS NOT A COLUMN OF TABLE table-name


column-name IS NOT A COLUMN OF AN INSERTED TABLE, UPDATED TABLE, OR ANY TABLE
IDENTIFIED IN A FROM CLAUSE

-208

THE ORDER BY CLAUSE IS INVALID BECAUSE COLUMN name IS NOT PART OF THE RESULT TABLE

-198

THE OPERAND OF THE PREPARE OR EXECUTE IMMEDIATE STATEMENT IS BLANK OR EMPTY

-199

ILLEGAL USE OF KEYWORD keyword. TOKEN token-list WAS EXPECTED

-203

A REFERENCE TO COLUMN column-name IS AMBIGUOUS

-204

name IS AN UNDEFINED NAME

-205
-206

column-name IS NOT A COLUMN OF TABLE table-name


column-name IS NOT A COLUMN OF AN INSERTED TABLE, UPDATED TABLE, OR ANY TABLE
IDENTIFIED IN A FROM CLAUSE

-208

THE ORDER BY CLAUSE IS INVALID BECAUSE COLUMN name IS NOT PART OF THE RESULT TABLE

-219

THE REQUIRED EXPLANATION TABLE table-name DOES NOT EXIST

-220
-221

THE COLUMN column-name IN EXPLANATION TABLE table-name IS NOT DEFINED PROPERLY


"SET OF OPTIONAL COLUMNS" IN EXPLANATION TABLE table-name IS INCOMPLETE. OPTIONAL
COLUMN column-name IS MISSING

-250

THE LOCAL LOCATION NAME IS NOT DEFINED WHEN PROCESSING A THREE-PART OBJECT NAME

-251

TOKEN name IS NOT VALID


THE STRING CONTAINED IN HOST VARIABLE OR PARAMETER position-number IS NOT NULTERMINATED
THE VALUE OF INPUT HOST VARIABLE OR PARAMETER NUMBER position-number CANNOT BE USED
AS SPECIFIED BECAUSE OF ITS DATA TYPE
THE VALUE OF INPUT VARIABLE OR PARAMETER NUMBER position-number IS INVALID OR TOO
LARGE FOR THE TARGET COLUMN OR THE TARGET VALUE
A VALUE CANNOT BE ASSIGNED TO OUTPUT HOST VARIABLE NUMBER position-number BECAUSE
THE DATA TYPES ARE NOT COMPARABLE

-185
-186

-300
-301
-302
-303

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10

-305

A VALUE WITH DATA TYPE data-type1 CANNOT BE ASSIGNED TO A HOST VARIABLE BECAUSE THE
VALUE IS NOT WITHIN THE RANGE OF THE HOST VARIABLE IN POSITION position-number WITH DATA
TYPE data-type2
THE NULL VALUE CANNOT BE ASSIGNED TO OUTPUT HOST VARIABLE NUMBER position-number
BECAUSE NO INDICATOR VARIABLE IS SPECIFIED

-309

A PREDICATE IS INVALID BECAUSE A REFERENCED HOST VARIABLE HAS THE NULL VALUE

-310

DECIMAL HOST VARIABLE OR PARAMETER number CONTAINS NON DECIMAL DATA.


THE LENGTH OF INPUT HOST VARIABLE NUMBER position-number IS NEGATIVE OR GREATER THAN
THE MAXIMUM

-304

-311
-312
-313
-314
-330
-331
-332
-333
-338

UNDEFINED OR UNUSABLE HOST VARIABLE variable-name


THE NUMBER OF HOST VARIABLES SPECIFIED IS NOT EQUAL TO THE NUMBER OF PARAMETER
MARKERS
THE STATEMENT CONTAINS AN AMBIGUOUS HOST VARIABLE REFERENCE
A STRING CANNOT BE USED BECAUSE IT CANNOT BE TRANSLATED. REASON reason-code,
CHARACTER code-point, HOST VARIABLE position-number
A STRING CANNOT BE ASSIGNED TO A HOST VARIABLE BECAUSE IT CANNOT BE TRANSLATED.
REASON reason-code, CHARACTER code-point, POSITION position-number
SYSSTRINGS DOES NOT DEFINE A TRANSLATION FROM CCSID ccsid TO ccsid
THE SUBTYPE OF A STRING VARIABLE IS NOT THE SAME AS THE SUBTYPE KNOWN AT BIND TIME
AND THE DIFFERENCE CANNOT BE RESOLVED BY TRANSLATION

-351

AN ON CLAUSE IS INVALID
THE SQL STATEMENT CANNOT BE EXECUTED FROM AN ASCII BASED DRDA APPLICATION
REQUESTOR TO A V2R2 DB2 SUBSYSTEM
AN UNSUPPORTED SQLTYPE WAS ENCOUNTERED IN POSITION "" ON A PREPARE or DESCRIBE
OPERATION

-400

THE CATALOG HAS THE MAXIMUM NUMBER OF USER DEFINED INDEXES

-401

THE OPERANDS OF AN ARITHMETIC OR COMPARISON OPERATION ARE NOT COMPARABLE

-402

AN ARITHMETIC FUNCTION OR OPERATOR arith-fop IS APPLIED TO CHARACTER OR DATETIME DATA

-404

THE UPDATE OR INSERT STATEMENT SPECIFIES A STRING THAT IS TOO LONG column-name

-405

THE NUMERIC LITERAL literal CANNOT BE USED AS SPECIFIED BECAUSE IT IS OUT OF RANGE

-406

-408

A CALCULATED OR DERIVED NUMERIC VALUE IS NOT WITHIN THE RANGE OF ITS OBJECT COLUMN
AN UPDATE OR INSERT VALUE IS NULL, BUT THE OBJECT COLUMN column-name CANNOT CONTAIN
NULL VALUES
AN UPDATE OR INSERT VALUE IS NOT COMPARABLE WITH THE DATA TYPE OF ITS OBJECT COLUMN
column-name

-409

INVALID OPERAND OF A COUNT FUNCTION

-410

THE FLOATING POINT LITERAL literal CONTAINS MORE THAN 30 CHARACTERS

-411

CURRENT SQLID CANNOT BE USED IN A STATEMENT THAT REFERENCES REMOTE OBJECTS

-412

THE SELECT CLAUSE OF A SUBQUERY SPECIFIES MULTIPLE COLUMNS

-414

A LIKE PREDICATE IS INVALID BECAUSE THE FIRST OPERAND IS NOT A STRING


THE CORRESPONDING COLUMNS, column-number, OF THE OPERANDS OF A UNION OR A UNION ALL
DO NOT HAVE COMPARABLE COLUMN DESCRIPTIONS

-339

-407

-415
-416
-417
-418
-419
-420

AN OPERAND OF A UNION CONTAINS A LONG STRING COLUMN


A STATEMENT STRING TO BE PREPARED INCLUDES PARAMETER MARKERS AS THE OPERANDS OF
THE SAME OPERATOR
A STATEMENT STRING TO BE PREPARED CONTAINS AN INVALID USE OF PARAMETER MARKERS
THE DECIMAL DIVIDE OPERATION IS INVALID BECAUSE THE RESULT WOULD HAVE A NEGATIVE
SCALE
THE VALUE OF A CHARACTER STRING ARGUMENT WAS NOT ACCEPTABLE TO THE function-name
FUNCTION

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10

-421

THE OPERANDS OF A UNION OR UNION ALL DO NOT HAVE THE SAME NUMBER OF COLUMNS

-426

DYNAMIC COMMIT NOT VALID AT AN APPLICATION SERVER WHERE UPDATES ARE NOT ALLOWED
DYNAMIC ROLLBACK NOT VALID AT AN APPLICATION SERVER WHERE UPDATES ARE NOT
ALLOWED
THE NUMBER OF PARAMETERS IN THE PARAMETER LIST DOES NOT MATCH THE NUMBER OF
PARAMETERS EXPECTED FOR STORED PROCEDURE name, AUTHID authid, LUNAME luname. number
PARAMETERS WERE EXPECTED.

-427

-440
-444
-450
-469

USER PROGRAM name COULD NOT BE FOUND


STORED PROCEDURE name, PARAMETER NUMBER number, OVERLAYED STORAGE BEYOND ITS
DECLARED LENGTH

-470

SQL CALL STATEMENT MUST SPECIFY AN OUTPUT HOST VARIABLE FOR PARAMETER number.
SQL CALL STATEMENT SPECIFIED A NULL VALUE FOR INPUT PARAMETER number, BUT THE STORED
PROCEDURE DOES NOT SUPPORT NULL VALUES

-471

SQL CALL FOR STORED PROCEDURE name FAILED DUE TO REASON rc

-500

THE IDENTIFIED CURSOR WAS CLOSED WHEN THE CONNECTION WAS DESTROYED

-501

THE CURSOR IDENTIFIED IN A FETCH OR CLOSE STATEMENT IS NOT OPEN

-502
-503

THE CURSOR IDENTIFIED IN AN OPEN STATEMENT IS ALREADY OPEN


A COLUMN CANNOT BE UPDATED BECAUSE IT IS NOT IDENTIFIED IN THE UPDATE CLAUSE OF THE
SELECT STATEMENT OF THE CURSOR

-504

THE CURSOR NAME cursor-name IS NOT DEFINED

-507

THE CURSOR IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT OPEN

-508

-511

THE CURSOR IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT POSITIONED ON A ROW
THE TABLE IDENTIFIED IN THE UPDATE OR DELETE STATEMENT IS NOT THE SAME TABLE
DESIGNATED BY THE CURSOR
THE TABLE DESIGNATED BY THE CURSOR OF THE UPDATE OR DELETE STATEMENT CANNOT BE
MODIFIED
THE FOR UPDATE CLAUSE CANNOT BE SPECIFIED BECAUSE THE TABLE DESIGNATED BY THE
CURSOR CANNOT BE MODIFIED

-512

STATEMENT REFERENCE TO REMOTE OBJECT IS INVALID

-513

THE ALIAS alias-name MUST NOT BE DEFINED ON ANOTHER LOCAL OR REMOTE ALIAS

-514

THE CURSOR cursor-name IS NOT IN A PREPARED STATE

-516

THE DESCRIBE STATEMENT DOES NOT IDENTIFY A PREPARED STATEMENT


CURSOR cursor-name CANNOT BE USED BECAUSE ITS STATEMENT NAME DOES NOT IDENTIFY A
PREPARED SELECT STATEMENT

-509
-510

-517
-518
-519
-525
-530

THE EXECUTE STATEMENT DOES NOT IDENTIFY A VALID PREPARED STATEMENT


THE PREPARE STATEMENT IDENTIFIES THE SELECT STATEMENT OF THE OPENED CURSOR cursorname
THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE IT WAS IN ERROR AT BIND TIME FOR
SECTION = sectno PACKAGE = pkgname CONSISTENCY TOKEN = X'contoken'

-531

THE INSERT OR UPDATE VALUE OF FOREIGN KEY constraint-name IS INVALID


THE PRIMARY KEY IN A PARENT ROW CANNOT BE UPDATED BECAUSE IT HAS ONE OR MORE
DEPENDENT ROWS IN RELATIONSHIP constraint-name

-532

THE RELATIONSHIP constraint-name RESTRICTS THE DELETION OF ROW WITH RID X'rid-number'

-533

INVALID MULTIPLE-ROW INSERT

-534

THE PRIMARY KEY CANNOT BE UPDATED BECAUSE OF MULTIPLE-ROW UPDATE


THE DELETE STATEMENT IS INVALID BECAUSE TABLE table-name CAN BE AFFECTED BY THE
OPERATION
THE PRIMARY KEY CLAUSE, A FOREIGN KEY CLAUSE, OR A UNIQUE CLAUSE IDENTIFIES COLUMN
column-name MORE THAN ONCE

-536
-537

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10
-538
-539

FOREIGN KEY name DOES NOT CONFORM TO THE DESCRIPTION OF THE PRIMARY KEY OF TABLE
table-name

-545

TABLE table-name DOES NOT HAVE A PRIMARY KEY


THE DEFINITION OF TABLE table-name IS INCOMPLETE BECAUSE IT LACKS A PRIMARY INDEX OR A
REQUIRED UNIQUE INDEX
column-name CANNOT BE A COLUMN OF A PRIMARY KEY OR A UNIQUE CONSTRAINT BECAUSE IT
CAN CONTAIN NULL VALUES
A ROW IN A PARENT TABLE CANNOT BE DELETED BECAUSE THE CHECK CONSTRAINT checkconstraint RESTRICTS THE DELETION
THE CHECK CONSTRAINT SPECIFIED IN THE ALTER TABLE STATEMENT CANNOT BE ADDED
BECAUSE AN EXISTING ROW VIOLATES THE CHECK CONSTRAINT
THE REQUESTED OPERATION IS NOT ALLOWED BECAUSE A ROW DOES NOT SATISFY THE CHECK
CONSTRAINT check-constraint

-546

THE CHECK CONSTRAINT constraint-name IS INVALID

-548
-549

A CHECK CONSTRAINT THAT IS DEFINED WITH column-name IS INVALID


THE statement STATEMENT IS NOT ALLOWED FOR object_type1 object_name BECAUSE THE BIND OPTION
DYNAMICRULES(BIND) IN THE object_type2 IS IN EFFECT

-551

auth-id DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION operation ON OBJECT object-name

-552

auth-id DOES NOT HAVE THE PRIVILEGE TO PERFORM OPERATION operation

-553

auth-id SPECIFIED IS NOT ONE OF THE VALID AUTHORIZATION IDS

-554

AN AUTHORIZATION ID CANNOT GRANT A PRIVILEGE TO ITSELF

-555
-556

AN AUTHORIZATION ID CANNOT REVOKE A PRIVILEGE FROM ITSELF


authid2 CANNOT HAVE THE privilege PRIVILEGE on_object REVOKED BY authid1 BECAUSE THE
REVOKEE DOES NOT POSSESS THE PRIVILEGE OR THE REVOKER DID NOT MAKE THE GRANT

-557

INCONSISTENT GRANT/REVOKE KEYWORD keyword. PERMITTED KEYWORDS ARE keyword-list

-558

INVALID CLAUSE OR COMBINATION OF CLAUSES ON A GRANT OR REVOKE

-559
-567

ALL AUTHORIZATION FUNCTIONS HAVE BEEN DISABLED


bind-type AUTHORIZATION ERROR USING auth-id AUTHORITY PACKAGE = package-name PRIVILEGE =
privilege

-571

THE STATEMENT WOULD RESULT IN A MULTIPLE SITE UPDATE

-574

THE SPECIFIED DEFAULT VALUE CONFLICTS WITH THE COLUMN DEFINITION.


THE NAME OF THE OBJECT TO BE CREATED IS IDENTICAL TO THE EXISTING NAME name OF THE
OBJECT TYPE obj-type

-540
-542
-543
-544

-601
-602
-603

TOO MANY COLUMNS SPECIFIED IN A CREATE INDEX


A UNIQUE INDEX CANNOT BE CREATED BECAUSE THE TABLE CONTAINS ROWS WHICH ARE
DUPLICATES WITH RESPECT TO THE VALUES OF THE IDENTIFIED COLUMNS

-604

A COLUMN DEFINITION SPECIFIES AN INVALID LENGTH, PRECISION, OR SCALE ATTRIBUTE

-607
-611

OPERATION OR OPTION operation IS NOT DEFINED FOR THIS OBJECT


ONLY LOCKMAX 0 CAN BE SPECIFIED WHEN THE LOCK SIZE OF THE TABLESPACE IS TABLESPACE
OR TABLE

-612

column-name IS A DUPLICATE COLUMN NAME

-613
-614

THE PRIMARY KEY OR A UNIQUE CONSTRAINT IS TOO LONG OR HAS TOO MANY COLUMNS
THE INDEX CANNOT BE CREATED BECAUSE THE SUM OF THE INTERNAL LENGTHS OF THE
IDENTIFIED COLUMNS IS GREATER THAN THE ALLOWABLE MAXIMUM

-615

operation-type IS NOT ALLOWED ON A PACKAGE IN USE

-616

obj-type1 obj-name1 CANNOT BE DROPPED BECAUSE IT IS REFERENCED BY obj-type2 obj-name2

-617

A TYPE 1 INDEX CANNOT BE DEFINED ON A TABLE IN A TABLE SPACE WITH LOCKSIZE ROW

-618

OPERATION operation IS NOT ALLOWED ON SYSTEM DATABASES

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

10
-619

Parte 10

-620

OPERATION DISALLOWED BECAUSE THE WORK FILE DATABASE IS NOT STOPPED


KEYWORD keyword IN stmt type STATEMENT IS NOT PERMITTED FOR A TABLE SPACE IN THE WORK
FILE DATABASE

-621

DUPLICATE DBID dbid WAS DETECTED AND PREVIOUSLY ASSIGNED TO database-name

-622

FOR MIXED DATA IS INVALID BECAUSE THE MIXED DATA INSTALL OPTION IS NO

-623

A CLUSTERING INDEX ALREADY EXISTS ON TABLE table-name

-624

TABLE table-name ALREADY HAS A PRIMARY KEY

-625

TABLE table-name DOES NOT HAVE AN INDEX TO ENFORCE THE UNIQUENESS OF THE PRIMARY KEY

-626

THE ALTER STATEMENT IS NOT EXECUTABLE BECAUSE THE PAGE SET IS NOT STOPPED

-627

THE ALTER STATEMENT IS INVALID BECAUSE THE PAGESET HAS USER-MANAGED DATA SETS

-628

THE CLAUSES ARE MUTUALLY EXCLUSIVE.

-629

SET NULL CANNOT BE SPECIFIED BECAUSE FOREIGN KEY name CANNOT CONTAIN NULL VALUES

-630

THE WHERE NOT NULL SPECIFICATION IS INVALID FOR TYPE 1 INDEXES

-631
-632

FOREIGN KEY name IS TOO LONG OR HAS TOO MANY COLUMNS


THE TABLE CANNOT BE DEFINED AS A DEPENDENT OF table-name BECAUSE OF DELETE RULE
RESTRICTIONS

-633

THE DELETE RULE MUST BE delete-rule

-634

THE DELETE RULE MUST NOT BE CASCADE

-635

THE DELETE RULES CANNOT BE DIFFERENT OR CANNOT BE SET NULL

-636

THE PARTITIONING KEYS ARE NOT SPECIFIED IN ASCENDING OR DESCENDING ORDER

-637

DUPLICATE keyword KEYWORD

-638
-639

TABLE table-name CANNOT BE CREATED BECAUSE COLUMN DEFINITION IS MISSING


A NULLABLE COLUMN OF A FOREIGN KEY WITH A DELETE RULE OF SET NULL CANNOT BE A
COLUMN OF THE KEY OF A PARTITIONED INDEX

-640

LOCKSIZE ROW CANNOT BE SPECIFIED BECAUSE TABLE IN THIS TABLESPACE HAS TYPE 1 INDEX

-642

TOO MANY COLUMNS IN UNIQUE CONSTRAINTS

-643

CHECK CONSTRAINT EXCEEDS MAXIMUM ALLOWABLE LENGTH

-644
-646

INVALID VALUE SPECIFIED FOR KEYWORD keyword IN stmt-type TATEMENT


TABLE table-name CANNOT BE CREATED IN PARTITIONED/DEFAULT TABLE SPACE tspace-name
BECAUSE IT ALREADY CONTAINS A TABLE

-647

BUFFERPOOL bp-name CANNOT BE SPECIFIED BECAUSE IT HAS NOT BEEN ACTIVATED

-650

THE ALTER INDEX CANNOT BE EXECUTED, REASON reason

-651

TABLE DESCRIPTION EXCEEDS MAXIMUM SIZE OF OBJECT DESCRIPTOR.

-652

VIOLATION OF INSTALLATION DEFINED EDIT OR VALIDATION PROCEDURE proc-name


TABLE table-name IN PARTITIONED TABLE SPACE tspace-name IS NOT AVAILABLE BECAUSE ITS
PARTITIONED INDEX HAS NOT BEEN CREATED
THE CREATE OR ALTER STOGROUP IS INVALID BECAUSE THE STORAGE GROUP WOULD HAVE BOTH
SPECIFIC AND NON-SPECIFIC VOLUME IDS
INDEX index-name CANNOT BE CREATED ON PARTITIONED TABLE SPACE tspace-name BECAUSE KEY
LIMITS ARE NOT SPECIFIED
INDEX index-name CANNOT BE CREATED ON PARTITIONED TABLE SPACE tspace-name BECAUSE THE
NUMBER OF PART SPECIFICATIONS IS NOT EQUAL TO THE NUMBER OF PARTITIONS OF THE TABLE
SPACE

-653
-655
-660

-661
-662
-663

A PARTITIONED INDEX CANNOT BE CREATED ON A NON-PARTITIONED TABLE SPACE tspace-name


THE NUMBER OF KEY LIMIT VALUES IS EITHER ZERO, OR GREATER THAN THE NUMBER OF
COLUMNS IN THE KEY OF INDEX index-name

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10

11

-665

THE PART CLAUSE OF AN ALTER STATEMENT IS OMITTED OR INVALID

-666

stmt-verb object CANNOT BE EXECUTED BECAUSE function IS IN PROGRESS

-667

THE CLUSTERING INDEX FOR A PARTITIONED TABLE SPACE CANNOT BE EXPLICITLY DROPPED

-668

THE COLUMN CANNOT BE ADDED TO THE TABLE BECAUSE THE TABLE HAS AN EDIT PROCEDURE

-669

A TABLE IN A PARTITIONED TABLE SPACE CANNOT BE EXPLICITLY DROPPED

-670
-671

THE RECORD LENGTH OF THE TABLE EXCEEDS THE PAGE SIZE LIMIT
THE BUFFERPOOL ATTRIBUTE OF THE TABLE SPACE CANNOT BE ALTERED AS SPECIFIED BECAUSE
IT WOULD CHANGE THE PAGE SIZE OF THE TABLE SPACE

-672

OPERATION DROP NOT ALLOWED ON TABLE table_name

-676

A 32K PAGE BUFFERPOOL MAY NOT BE USED FOR AN INDEX

-677
-678

INSUFFICIENT VIRTUAL STORAGE FOR BUFFERPOOL EXPANSION


THE LITERAL literal SPECIFIED FOR THE INDEX LIMIT KEY MUST CONFORM TO THE DATA TYPE datatype OF THE CORRESPONDING COLUMN column-name

-679

THE OBJECT name CANNOT BE CREATED BECAUSE A DROP IS PENDING ON THE OBJECT

-680

TOO MANY COLUMNS SPECIFIED FOR A TABLE


COLUMN column-name IN VIOLATION OF INSTALLATION DEFINED FIELD PROCEDURE. RT: return-code,
RS: reason-code, MSG: message-token

-681
-682
-683

FIELD PROCEDURE procedure-name COULD NOT BE LOADED


INVALID COLUMN TYPE FOR FIELDPROC, BIT DATA, SBCS DATA, OR MIXED DATA OPTION, columnname

-684

THE LENGTH OF LITERAL LIST BEGINNING string IS TOO LONG

-685
-686

INVALID FIELD TYPE, column-name


COLUMN DEFINED WITH A FIELD PROCEDURE CAN NOT COMPARE WITH ANOTHER COLUMN WITH
DIFFERENT FIELD PROCEDURE

-687

FIELD TYPES INCOMPARABLE

-688

INCORRECT DATA RETURNED FROM FIELD PROCEDURE, column-name, msgno

-689

TOO MANY COLUMNS DEFINED FOR A DEPENDENT TABLE

-690

THE STATEMENT IS REJECTED BY DATA DEFINITION CONTROL SUPPORT. REASON reason-code

-691

THE REQUIRED REGISTRATION TABLE table-name DOES NOT EXIST


THE REQUIRED UNIQUE INDEX index-name FOR DDL REGISTRATION TABLE table-name DOES NOT
EXIST
THE COLUMN column-name IN DDL REGISTRATION TABLE OR INDEX table-name (index-name) IS NOT
DEFINED PROPERLY
THE DDL STATEMENT CANNOT BE EXECUTED BECAUSE A DROP IS PENDING ON THE DDL
REGISTRATION TABLE table-name

-692
-693
-694
-713
-715
-716

THE REPLACEMENT VALUE FOR special-register IS INVALID


PROGRAM program-name WITH MARK release-dependency-mark FAILED BECAUSE IT DEPENDS ON
FUNCTIONS OF THE RELEASE FROM WHICH FALLBACK HAS OCCURRED

-717

PROGRAM program-name PRECOMPILED WITH INCORRECT LEVEL FOR THIS RELEASE.


bind-type FOR object-type object-name WITH MARK release-dependency-mark FAILED BECAUSE object-type
DEPENDS ON FUNCTIONS OF THE RELEASE FROM WHICH FALLBACK HAS OCCURRED.

-718

REBIND FOR PACKAGE package-name FAILED BECAUSE IBMREQD OF ibmreqd IS INVALID

-719

BIND ADD ERROR USING auth-id AUTHORITY PACKAGE package-name ALREADY EXISTS
BIND ERROR, ATTEMPTING TO REPLACE PACKAGE = package_name WITH VERSION = version2 BUT
THIS VERSION ALREADY EXISTS
BIND ERROR FOR PACKAGE = pkg-id CONTOKEN = 'contoken'X IS NOT UNIQUE SO IT CANNOT BE
CREATED

-720
-721

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

12
-722
-726
-730
-731

Parte 10

bind-type ERROR USING auth-id AUTHORITY PACKAGE package-name DOES NOT EXIST
BIND ERROR ATTEMPTING TO REPLACE PACKAGE = . THERE ARE ENABLE OR DISABLE ENTRIES
CURRENTLY ASSOCIATED WITH THE PACKAGE
THE PARENT OF A TABLE IN A READ-ONLY SHARED DATABASE MUST ALSO BE A TABLE IN A READONLY SHARED DATABASE

-733

USER-DEFINED DATASET dsname MUST BE DEFINED WITH SHAREOPTIONS(1,3)


THE DATABASE IS DEFINED ON THIS SUBSYSTEM WITH THE ROSHARE READ ATTRIBUTE BUT THE
TABLE SPACE OR INDEX SPACE HAS NOT BEEN DEFINED ON THE OWNING SUBSYSTEM
THE DESCRIPTION OF A TABLE SPACE, INDEX SPACE, OR TABLE IN A ROSHARE READ DATABASE
MUST BE CONSISTENT WITH ITS DESCRIPTION IN THE OWNER SYSTEM

-734

THE ROSHARE ATTRIBUTE OF A DATABASE CANNOT BE ALTERED FROM ROSHARE READ

-735

DATABASE dbid CANNOT BE ACCESSED BECAUSE IT IS NO LONGER A SHARED DATABASE

-736

INVALID OBID obid SPECIFIED

-737

IMPLICIT TABLE SPACE NOT ALLOWED

-741

A WORK FILE DATABASE IS ALREADY DEFINED FOR MEMBER member-name

-742

DSNDB07 IS THE IMPLICIT WORK FILE DATABASE


A STORED PROCEDURE HAS BEEN PLACED IN MUST_ROLLBACK STATE DUE TO SQL OPERATION
name
THE CONNECT STATEMENT IS INVALID BECAUSE THE PROCESS IS NOT IN THE CONNECTABLE
STATE
EXCEPTION ERROR 'exception-type' HAS OCCURRED DURING 'operation-type' OPERATION ON 'data-type'
DATA, POSITION 'position-number'
AN INSERTED OR UPDATED VALUE IS INVALID BECAUSE THE INDEX IN INDEX SPACE indexspacename CONSTRAINS COLUMNS OF THE TABLE SO NO TWO ROWS CAN CONTAIN DUPLICATE VALUES
IN THOSE COLUMNS. RID OF EXISTING ROW IS X'rid'
AN ERROR WAS FOUND IN THE APPLICATION PROGRAM INPUT PARAMETERS FOR THE SQL
STATEMENT. REASON reason
DBRM or PACKAGE NAME location-name.collection-id.dbrm-name.consistency -token NOT FOUND IN PLAN
plan-name. REASON reason
ACCESS DENIED: PACKAGE package-name IS NOT ENABLED FOR ACCESS FROM connection-type
connection-name

-732

-751
-752
-802

-803
-804
-805
-807
-808

-820

THE CONNECT STATEMENT IS NOT CONSISTENT WITH THE FIRST CONNECT STATEMENT
THE RESULT OF AN EMBEDDED SELECT STATEMENT IS A TABLE OF MORE THAN ONE ROW, OR THE
RESULT OF THE SUBQUERY OF A BASIC PREDICATE IS MORE THAN ONE VALUE
THE SQL STATEMENT CANNOT BE PROCESSED BECAUSE A BLANK COLLECTION-ID WAS FOUND IN
THE CURRENT PACKAGESET SPECIAL REGISTER WHILE TRYING TO FORM A QUALIFIED PACKAGE
NAME FOR PROGRAM program-name.consistency-token USING PLAN plan-name
A GROUP BY OR HAVING CLAUSE IS IMPLICITLY OR EXPLICITLY SPECIFIED IN AN EMBEDDED
SELECT STATEMENT OR A SUBQUERY OF A BASIC PREDICATE
THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE THE STATEMENT WILL RESULT IN A
PROHIBITED UPDATE OPERATION
THE PRECOMPILER-GENERATED TIMESTAMP x IN THE LOAD MODULE IS DIFFERENT FROM THE
BIND TIMESTAMP y BUILT FROM THE DBRM z
THE VIEW CANNOT BE PROCESSED BECAUSE THE LENGTH OF ITS PARSE TREE IN THE CATALOG IS
ZERO
THE SQL STATEMENT CANNOT BE PROCESSED BECAUSE catalog-table CONTAINS A VALUE THAT IS
NOT VALID IN THIS RELEASE

-822

THE SQLDA CONTAINS AN INVALID DATA ADDRESS OR INDICATOR VARIABLE ADDRESS

-840

TOO MANY ITEMS RETURNED IN A SELECT OR INSERT LIST

-842

A CONNECTION TO location-name ALREADY EXISTS

-843

THE SET CONNECTION OR RELEASE STATEMENT MUST SPECIFY AN EXISTING CONNECTION


THE NUMBER OF HOST VARIABLES IN THE STATEMENT IS NOT EQUAL TO THE NUMBER OF
DESCRIPTORS

-811

-812
-815
-817
-818
-819

-870

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10
-900
-901
-902

13

THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE THE APPLICATION PROCESS IS NOT
CONNECTED TO AN APPLICATION SERVER
UNSUCCESSFUL EXECUTION CAUSED BY A SYSTEM ERROR THAT DOES NOT PRECLUDE THE
SUCCESSFUL EXECUTION OF SUBSEQUENT SQL STATEMENTS

-908

POINTER TO THE ESSENTIAL CONTROL BLOCK (CT/RDA) HAS VALUE 0, REBIND REQUIRED
UNSUCCESSFUL EXECUTION CAUSED BY AN UNAVAILABLE RESOURCE. REASON reason-code, TYPE
OF RESOURCE resource-type, AND RESOURCE NAME resource-name
UNSUCCESSFUL EXECUTION DUE TO RESOURCE LIMIT BEING EXCEEDED, RESOURCE NAME =
resource-name LIMIT = limit-amount1 CPU SECONDS (limit-amount2 SERVICE UNITS) DERIVED FROM limitsource
THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE THIS FUNCTION IS DISABLED DUE TO A
PRIOR ERROR
bind-type ERROR USING auth-id AUTHORITY BIND, REBIND OR AUTO-REBIND OPERATION IS NOT
ALLOWED

-909

THE OBJECT HAS BEEN DELETED

-910

-913

THE SQL STATEMENT CANNOT ACCESS AN OBJECT ON WHICH A DROP OR ALTER IS PENDING
THE CURRENT UNIT OF WORK HAS BEEN ROLLED BACK DUE TO DEADLOCK OR TIMEOUT. REASON
reason-code, TYPE OF RESOURCE resource-type, AND RESOURCE NAME resource-name
UNSUCCESSFUL EXECUTION CAUSED BY DEADLOCK OR TIMEOUT. REASON CODE reason-code, TYPE
OF RESOURCE resource-type, AND RESOURCE NAME resource-name

-917

BIND PACKAGE FAILED

-918

THE SQL STATEMENT CANNOT BE EXECUTED BECAUSE A CONNECTION HAS BEEN LOST

-919

A ROLLBACK OPERATION IS REQUIRED

-922
-923

AUTHORIZATION FAILURE: error-type ERROR. REASON reason-code


CONNECTION NOT ESTABLISHED: DB2 condition REASON reason-code, TYPE resource-type, NAME resourcename

-924

DB2 CONNECTION INTERNAL ERROR, function-code, return-code, reason-code

-925

COMMIT NOT VALID IN IMS/VS OR CICS ENVIRONMENT

-926
-927

ROLLBACK NOT VALID IN IMS/VS OR CICS ENVIRONMENT


THE LANGUAGE INTERFACE (LI) WAS CALLED WHEN THE CONNECTING ENVIRONMENT WAS NOT
ESTABLISHED. THE PROGRAM SHOULD BE INVOKED UNDER THE DSN COMMAND

-929

FAILURE IN A DATA CAPTURE EXIT: token

-939

ROLLBACK REQUIRED DUE TO UNREQUESTED ROLLBACK OF A REMOTE SERVER


THE SQL STATEMENT FAILED BECAUSE IT WILL CHANGE A TABLE DEFINED WITH DATA CAPTURE
CHANGES, BUT THE DATA CANNOT BE PROPAGATED

-904

-905
-906

-911

-947
-948
-950

DISTRIBUTED OPERATION IS INVALID


THE LOCATION NAME SPECIFIED IN THE CONNECT STATEMENT IS INVALID OR NOT LISTED IN THE
COMMUNICATIONS DATABASE

-965

STORED PROCEDURE procname TERMINATED ABNORMALLY


THE NUMBER OF HOST VARIABLE PARAMETERS FOR A STORED PROCEDURE IS NOT EQUAL TO THE
NUMBER OF EXPECTED HOST VARIABLE PARAMETERS. ACTUAL NUMBER sqldanum, EXPECTED
-2001 NUMBER opnum
EXECUTION FAILED DUE TO A DISTRIBUTION PROTOCOL ERROR THAT WILL NOT AFFECT THE
SUCCESSFUL EXECUTION OF SUBSEQUENT COMMANDS OR SQL STATEMENTS: REASON reason-code
-30000 (sub-code)
EXECUTION FAILED DUE TO A DISTRIBUTION PROTOCOL ERROR THAT CAUSED DEALLOCATION OF
-30020 THE CONVERSATION: REASON <reason-code (sub-code)>

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

14

-30021

-30030

-30040

-30041
-30050

Parte 10

EXECUTION FAILED DUE TO A DISTRIBUTION PROTOCOL ERROR THAT WILL AFFECT THE
SUCCESSFUL EXECUTION OF SUBSEQUENT COMMANDS OR SQL STATEMENTS: MANAGER manager
AT LEVEL level NOT SUPPORTED ERROR
COMMIT REQUEST WAS UNSUCCESSFUL, A DISTRIBUTION PROTOCOL VIOLATION HAS BEEN
DETECTED, THE CONVERSATION HAS BEEN DEALLOCATED. ORIGINAL SQLCODE=original-sqlcode
AND ORIGINAL SQLSTATE=original-sqlstate
EXECUTION FAILED DUE TO UNAVAILABLE RESOURCES THAT WILL NOT AFFECT THE SUCCESSFUL
EXECUTION OF SUBSEQUENT COMMANDS OR SQL STATEMENTS. REASON <reason-code> TYPE OF
RESOURCE <resource-type> RESOURCE NAME <resource-name> PRODUCT ID <pppvvrrm> RDBNAME
<rdbname>
EXECUTION FAILED DUE TO UNAVAILABLE RESOURCES THAT WILL AFFECT THE SUCCESSFUL
EXECUTION OF SUBSEQUENT COMMANDS AND SQL STATEMENTS REASON <reason-code> TYPE OF
RESOURCE <resource-type> RESOURCE NAME <resource-name> PRODUCT ID <pppvvrrm> RDBNAME
<rdbname>
<command-or-SQL-statement-type> COMMAND OR SQL STATEMENT INVALID WHILE BIND PROCESS IN
PROGRESS

-30051 BIND PROCESS WITH SPECIFIED PACKAGE NAME AND CONSISTENCY TOKEN NOT ACTIVE
-30052 PROGRAM PREPARATION ASSUMPTIONS ARE INCORRECT
-30053 OWNER AUTHORIZATION FAILURE
-30060 RDB AUTHORIZATION FAILURE
-30061 RDB NOT FOUND
-30070 <command> COMMAND NOT SUPPORTED ERROR
-30071 <object-type> OBJECT NOT SUPPORTED ERROR
-30072 <parameter>:<subcode> PARAMETER NOT SUPPORTED ERROR
-30073 <parameter>:<subcode> PARAMETER VALUE NOT SUPPORTED ERROR
-30074 REPLY MESSAGE WITH codepoint (svrcod) NOT SUPPORTED ERROR
-30080 COMMUNICATION ERROR code (subcode)
-30090 REMOTE OPERATION INVALID FOR APPLICATION EXECUTION ENVIRONMENT

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10

Teoria

15

MVS abend code

Os ABENDs com a letra S so do sistema e os com a letra U so de usurios.


Os mais comuns esto em destaque.
S001-4

Wrong length record; Input file record length is not equal to the length stated in the DD or the FD.
IO error, damaged tape, device malfunction; With disk, reading a dataset that was allocated but never written to.
Writing to input file; Concatenation of files with different record lengths or record formats.
S001-5
Reading after the end of the file by non-COBOL program. COBOL intercepts this and displays "QSAM error,
status 92". Out of space on output disk file.
S002
With variable format files used for output.
The record is larger than the track size.
The record length is greater than allowed maximum 32,768.
The wrong record length is being used on output.
The 4-byte record length indicator is wrong.
Record greater than 32,768 bytes
S013-10
A dummy file with no blocksize.
S013-14
A library has run out of space in its directory. You have to backup, delete, and restore the library with
IEBCOPY. A dataset is sequential, but the JCL indicates that it is a library.
S013-18
A library member was specified in the JCL but was not found.
S013-20
The block size is not a multiple of record length.
Check record length in program, compare to actual record length of file
S013-34
The block size was found to be 0. A new file is being created but block size was not in the JCL.
S013-40
Reading a file whose JCL has SYSOUT=
S106
The program on the program library was unreadable. Recompile and link.
S122
The job was canceled because it violated some restriction. A dump was requested
S137
A tape has a bad trailer label. Copy the file with IEBGENER, ignoring the error. The copy will be good.
Using LABEL=2 when there's only one dataset on the tape.
S213
A disk dataset was not actually on the volume stated in the VOL=SER=.
A disk dataset was not actually on the volume indicated in the catalog.
S222
The job was cancelled because it violated some restriction. No dump was requested.
S237
The block count on a tape trailer label is wrong. Probably caused by hardware error. Copy the file with
IEBGENER, ignoring the error. The copy will be good. A problem with the second volume of tape or disk.
S313, 314 An Input/output error in the VTOC of a disk volume. Inform support staff.
S322
The job used more CPU time than it should have. Either the estimate is wrong or the program is in an
uncontrollable loop.
S413
A volume was needed that could not be mounted.
S422
Too many job steps.
S513
Two jobs or DDNAMES wanting same tape at same time.
S522
Job was waiting too long.
S613
A bad tape label.
S637
A bad concatenation, different types of devices were used. An unreadable tape mark or label.
S706
The program on the library was not executable. See linkage editor report that put the program on library.
S713
The tape was unexpired and the operator terminated the job.
S714
Labels on the tape were bad.
S722
Too many lines of print.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

16
S804
S806
S80A
S813
S913
SA13
SB14
SB37
SD37
SE37
S0C1

S0C2
S0C4

S0C5
S0C6
S0C7

S0CB
U1002
U1005
U1006
U1017
U1020
U1026
U1034
U1035
U1037
U1056
U1066,
U1075
U1072,
U1073,
U1074
U3000
U4038

Parte 10
Region too small for the program.
Program not on the library. May need a JOBLIB or STEPLIB.
Region too small for the program.
Right tape volume, wrong dataset name.
Right dataset name, wrong tape volume.
Security violation.
Label=n states the wrong number.
No space in a library directory for this member's name.
Insufficient disk space.
Insufficient disk space.
Insufficient disk space. An E37 on tape datasets is most often caused when the number of requested volumes is
exceeded. The default is 5, therefore a request for the sixth volume will fail with a E37.
(Operation Exception)
Executing a program with an unresolved external reference.
Calling a program and the program was not included during link edit.
An uncontrolled loop moved data on top of instructions.
Reading a file that is not open
Your SORTIN DCB was not correct
Mixing compile options RES and NORES in different modules
Privileged Operation. Read/write to unopened file. An uncontrolled loop moved data on top of instructions.
Protection. An uncontrolled loop moved data on top of instructions. referencing a field in a record of a closed file
referencing an item in Linkage-Section when there was no PARM= in the JCL.
Calling/called programs have different length for items passed in Linkage Section
with COBOL Sort, doing a STOP RUN or GOBACK while an input or output procedure is still running
Addressing. Same reasons as for 0C4. Falling through into an ENTRY statement
Transferring control into the middle of a SORT procedure.
Specification. Bad boundary alignment for binary data. See reasons for 0C4
Data Exception. Program attempting to do math on illegal data. Data is not numeric, but should be.
Moving ZEROS to group item whose subordinate items are packed-decimal. Uninitialized packed-decimal
fields. Record description is wrong. Field starts or ends in the wrong place in the record.
Find record description of creating program.
Attempting to divide by 0 and not using ON SIZE ERROR
Conflicting file attributes. See S013.
Executing with modules compiled both with RES and NORES
Subscript out of range
Missing DD statement in JCL for DISPLAY or ACCEPT verb
Problem opening or processing a file.
Check the file status.
COBOL sort failed.
Same as SB37
Conflicting DCB parameters. Same as S013.
Program control falls through the last physical statement in program, which is not GOBACK/STOP RUN.
Program didnt close a file before ending
Conflicting DCB information for file defined as EXTERNAL
Illegal numbers in reference modification

COBOL LE intercepted the ABEND. Messages in SYSDBOUT.


COBOL LE intercepted the ABEND. Messages in CEEDUMP.

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

Parte 10

Teoria

FILE STATUS
'00'
'02'
'04'
'05'
'07'
'10'
'14'
'20'
'21'
'22'
'23'
'24'

17

Tabela de File status

SIGNIFICADO
SUCCESSFUL COMPLETION
DUPLICATE KEY, NON UNIQ. ALT INDX
READ, WRONG LENGTH RECORD
OPEN, FILE NOT PRESENT
CLOSE OPTION INCOMPAT FILE DEVICE OPEN IMPLIES TAPE; TAPE NOT USED
END OF FILE
RRN > RELATIVE KEY DATA
INVALID KEY VSAM KSDS OR RRDS
SEQUENCE ERROR ON WRITE OR CHANGING KEY ON REWRITE'
DUPLICATE KEY
RECORD OR FILE NOT FOUND
BOUNDARY VIOLATION. WRITE PAST END OF KSDS RECORD. COBOL 370: REL: REC#
TOO BIG. OUT OF SPACE ON KSDS/RRDS FILE

'30'
'34'

PERMANENT DATA ERROR. DATA CHECK, PARITY CHK, HARDW


BOUNDARY VIOLATION. WRITE PAST END OF ESDS RECORD OR NO SPACE TO ADD
KSDS/RRDS RECORD. OUT OF SPACE ON SEQUENTIAL FILE

'35'
'37'
'38'
'39'
'41'
'42'
'43'
'44'
'46'
'47'
'48'
'49'
'90'
'91'
'92'

OPEN, FILE NOT PRESENT


OPEN MODE INCOMPAT WITH DEVICE
OPENING FILE CLOSED WITH LOCK
OPEN, FILE ATTRIB CONFLICTING
OPEN, FILE IS OPEN
CLOSE, FILE IS CLOSED
DELETE OR REWRITE & NO GOOD READ FIRST
BOUNDARY VIOLATION/REWRITE REC TOO BIG
SEQUENTIAL READ WITHOUT POSITIONING
READING FILE NOT OPEN AS INPUT/IO/EXTEND
WRITE WITHOUT OPEN IO
DELETE OR REWRITE WITHOUT OPEN IO
UNKNOWN
VSAM - PASSWORD FAILURE
LOGIC ERROR/OPENING AN OPEN FILE OR READING OUTPUT FILE OR WRITE INPUT
FILE OR DEL/REW BUT NO PRIOR READ
VSAM - VIRTSTOR. RESOURCE NOT AVAILABLE
VSAM - SEQUENTIAL READ AFTER END OF FILE OR NO CURRENT REC POINTER FOR
SEQ

'93'
'94'
'95'
'96'
'97'
OTHER

VSAM - INVALID FILE INFORMATION OR OPEN OUTPUT (LOAD) WITH FILE THAT NEVER
CONTAINED DATA
VSAM - MISSING DD STATEMENT IN JCL
VSAM - OPEN OK, FILE INTEGRITY VERIFIED FILE SHOULD BE OK
UNKNOWN REASON

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218

18

Parte 10

Teoria

Tabela ascII

ASCII e a sigla para American Standard Code for Information Interchange. Os


computadores s podem entender nmeros, ento o cdigo ASCII a representao
numrica de caracteres tais como @ A X $, que usado quando se deseja colocar
dados em ordem. utilizada nos micro computadores.
Dec
0
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
59
60

Hex
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C

char
Dec Hex Char Dec Hex Char Dec
NUL (null)
64 40 @ 128 80

192
SOH (start of heading)
65 41 A 129 81

193
STX (start of text)
66 42 B 130 82

194
ETX (end of text)
67 43 C 131 83

195
EOT (end of transmission)
68 44 D 132 84

196
ENQ (enquiry)
69 45
E 133 85

197
ACK (acknowledge)
70 46
F 134 86

198
BEL (bell)
71 47 G 135 87

199
BS (backspace)
72 48 H 136 88

200
TAB (horizontal tab)
73 49
I
137 89

201
LF (line feed)
74 4A
J 138 8A

202
VT (vertical Tab)
75 4B K 139 8B

203
FF (form feed)
76 4C
L 140 8C

204
CR (carriage return)
77 4D M 141 8D

205
SO (shift out)
78 4E N 142 8E

206
SI (shift in)
79 4F O 143 8F

207
DLE (data link escape)
80 50 P 144 90

208
DC1 (device control 1)
81 51 Q 145 91

209
DC2 (device control 2)
82 52 R 146 92

210
DC3 (device control 3)
83 53
S 147 93

211
DC4 (device control 4)
84 54
T 148 94

212
NAK (negative acknowledge)
85 55 U 149 95

213
SYN (synchronous idle)
86 56 V 150 96

214
ETB (end of transmission block)
87 57 W 151 97

215
CAN (cancel)
88 58 X 152 98

216
EM (end of medium)
89 59
Y 153 99

217
SUB (substitute)
90 5A
Z 154 9A

218
ESC (escape)
91 5B
[ 155 9B

219
FS (file separator)
92 5C
\ 156 9C

220
GS (group separator)
93 5D
] 157 9D

221
RS (record separator)
94 5E
^ 158 9E

222
US (unit separator)
95 5F
_ 159 9F

223
Space
96 60
` 160 A0

224
!
97 61
a 161 A1

225
"
98 62 b 162 A2

226
#
99 63
c 163 A3

227
$
100 64 d 164 A4

228
%
101 65 e 165 A5

229
&
102 66
f 166 A6

230
'
103 67
g 167 A7

231
(
104 68 h 168 A8

232
)
105 69
i
169 A9

233
*
106 6A
j
170 AA

234
+
107 6B
k 171 AB

235
,
108 6C
l
172 AC

236
109 6D m 173 AD

237
.
110 6E n 174 AE

238
/
111 6F
o 175 AF

239
0
112 70 p 176 B0

240
1
113 71 q 177 B1

241
2
114 72
r 178 B2

242
3
115 73
s 179 B3

243
4
116 74
t 180 B4

244
5
117 75 u 181 B5
245
6
118 76
v 182 B6
246
7
119 77 w 183 B7
247
8
120 78
x 184 B8
248
9
121 79
y 185 B9

249
:
122 7A
z 186 BA

250
;
123 7B
{ 187 BB

251
<
124 7C
| 188 BC

252

61 3D =
62 3E >
63 3F ?

www.grandeporte.com.br

125 7D
126 7E
127 7F

}
~
del

189 BD
190 BE
191 BF

Hex Char
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
E0 a
E1 b
E2 G
E3 p
E4 S
E5 s
E6
E7
t
E8 f
E9 q
EA W
EB d
EC
ED
EE
EF
F0
F1

F2
F3
F4
F5
F6
F7
F8

F9

FA

FB
FC h

253 FD
254 FE
255 FF

(11) 4427-4579 (11) 9 9903-3218

Parte 10

Teoria

19

Tabela EBCDIC

EBCDIC e a sigla para Extended Binary Coded Decimal Interchange Code, desenvolvida para os Mainframes
no incio dos anos de 1960 e so ainda usadas hoje em dia, principalmente nos Mainframes da IBM.

LOW-VALUES

Dec
0
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
59
60
61
62
63

Hex char
Dec Hex
Char
0 NUL (null)
64 40 SP (space)
1 SOH (start of heading)
65 41
2 STX (start of text)
66 42
3 ETX (end of text)
67 43
4 PF (punch off)
68 44
5 HT (horizontal tab)
69 45
6 LC (lower case)
70 46
7 DEL (delete)
71 47
8 GE
72 48
9 RLF
73 49
A SMM (start of manual message)
74 4A

B VT (vertical tab)
75 4B
.
C FF (form feed)
76 4C
<
D CR (carriage return)
77 4D
(
E SO (shift out)
78 4E
+
F SI (shift in)
79 4F
|
10 DLE (data link escape)
80 50
&
11 DC1 (device control 1)
81 51
12 DC2 (device control 2)
82 52
13 TM (tape mark)
83 53
14 RES (restore)
84 54
15 NL (new line)
85 55
16 BS (back space)
86 56
17 IL (idle)
87 57
18 CAN (cancel)
88 58
19 EM (end of medium)
89 59
1A CC (cursor control)
90 5A
!
1B CU1 (customer use 1)
91 5B
$
1C IFS (interchange file separator)
92 5C
*
1D IGS (interchange group separator)
93 5D
)
1E IRS (interchange record separator)
94 5E
;
1F IUS (interchange unit separator)
95 5F

20 DS (digit select)
96 60
21 SOS (start of significance)
97 61
/
22 FS (field separator)
98 62
23
99 63
24 BYP (bypass)
100 64
25 LF (line feed)
101 65
26 ETB (end of transmission block)
102 66
27 ESC (escape)
103 67
28
104 68
29
105 69
2A SM (set mode)
106 6A

2B CU2 (customer use 2)


107 6B
,
2C
108 6C
%
2D ENQ (enquiry)
109 6D
_
2E ACK (acknowledge)
110 6E
>
2F BEL (bell)
111 6F
?
30
112 70
31
113 71
32 SYN (synchronous idle)
114 72
33
115 73
34 PN (punch on)
116 74
35 RS (reader stop)
117 75
36 UC (upper case)
118 76
37 EOT (end of transmission)
119 77
38
120 78
39
121 79
`
3A
122 7A
:
3B CU3 (customer use 3)
123 7B
#
3C DC4 (device control 4)
124 7C
@
3D NAK (negative acknowledge)
125 7D
'
3E
126 7E
=
3F SUB (substitute)
127 7F
"

www.grandeporte.com.br

Dec Hex Char Dec


Hex Char
128 80
192 C0 {
129 81
a
193 C1 A
130 82
b
194 C2 B
131 83
c
195 C3 C Usados para
132 84
d
196 C4 D representar
133 85
e
197 C5 E
nmeros
134 86
f
198 C6 F
135 87
g
199 C7 G positivos.
136 88
h
200 C8 H
137 89
i
201 C9 I
138 8A
202 CA
139 8B
203 CB
140 8C
204 CC
141 8D
205 CD
142 8E
206 CE
143 8F
207 CF
144 90
208 D0 }
145 91
j
209 D1 J
146 92
k
210 D2 K Usados para
147 93
l
211 D3 L representar
148 94
m
212 D4 M
nmeros
149 95
n
213 D5 N
150 96
o
214 D6 O negativos.
151 97
p
215 D7 P
152 98
q
216 D8 Q
153 99
r
217 D9 R
154 9A
218 DA
155 9B
219 DB
156 9C
220 DC
157 9D
221 DD
158 9E
222 DE
159 9F

223 DF
160 A0
224 E0 \
161 A1
~
225 E1
162 A2
s
226 E2 S
163 A3
t
227 E3 T
164 A4
u
228 E4 U
165 A5
v
229 E5 V
166 A6
w
230 E6 W
167 A7
x
231 E7 X
168 A8
y
232 E8 Y
169 A9
z
233 E9 Z
170 AA
234 EA
171 AB
235 EB
172 AC
236 EC
173 AD
237 ED
174 AE
238 EE
175 AF
239 EF
176 B0
240 F0 0
177 B1
241 F1 1
178 B2
242 F2 2
179 B3
243 F3 3 Usados para
180 B4
244 F4 4
representar
181 B5
245 F5 5
182 B6
246 F6 6 nmeros sem
183 B7
247 F7 7 sinal.
184 B8
248 F8 8
185 B9
249 F9 9
186 BA
250 FA
187 BB
251 FB
188 BC
252 FC
189 BD
253 FD
190 BE
254 FE
HIGH-VALUES
191 BF
255 FF

(11) 4427-4579 (11) 9 9903-3218

20

Parte 10

Teoria

POTNCIA DE 2

1 Byte

2 Bytes

3 Bytes

4 Bytes

www.grandeporte.com.br

(11) 4427-4579 (11) 9 9903-3218