Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila de DB2
Apostila de DB2
1.2. Catálogo
O catálogo é um elemento muito importante no banco de dados DB2. Trata-se na
verdade de um arquivo no qual são armazenadas as definições de todos os elementos: as
tabelas com suas respectivas características e os índices.
OBSERVAÇÕES
Decimal todos os campos numéricos para o DB2 são armazenados no formato
compactado. Portanto, sempre serão acessados no Cobol através de variáveis
COMP-3.
Date os valores definidos como date são armazenados no formato aaaammdd,
compactado. Porém, os comandos de acesso ao DB2 sempre receberão e enviarão
as datas no formato aaaa-mm-dd (depende do adotado pe lo cliente).
Time os comandos de acesso ao DB2 sempre receberão e enviarão os horas no
formato hh:mm:ss.
Valor NULL Null representará a ausência de informação em um determinado
campo. Não será 0 (zero) nem espaço em branco. Por exemplo, na digitação de um
saldo, zero será um valor absolutamente válido porém, deixar o campo sem digitar
nada não será permitido.
Cabeçalho ou Registro 0 Codigo Nome Fone
Registro 1 001 Fulano de Tal 2527070
Registro 2 002 Ciclano da Silva 9714698
Registro 3 003 Jurema Emengarda 2345696
Registro 4 004 Eustákio Parreira 2302156
Registro 5 005 Astrogildo Figueira 2236652
1.5. Chaves
Uma chave é um campo que será utilizado para a criação de um índice e,
consequentemente, utilizado como argumento de pesquisa em uma tabela.
A chave primária será o primeiro índice de uma tabela. É também aquele que torna o
registro único, ou seja, nenhum outro na tabela inteira será igual a ele.
Uma chave estrangeira é constituída de um ou mais campos de uma tabela que se
referem à chave primária de uma outra tabela. Ela indica um relacionamento entre as duas.
Determinaremos para a tabela Produtos o campo Código Produto como sendo chave
primária. Isso quer dizer que ele nunca se repetirá na tabela (haverá apenas um produto de
código 001, um produto de código 002 e assim por diante). Na tabela Fornecedores o campo
Código Fornecedor será a chave primária com as mesmas características. Isso representa que
foram criados até então dois índices diferentes que poderão ser utilizados para localizar
registros de forma mais rápida.
Em um dado momento, pode ser interessante saber quem é o fornecedor de um
determinado produto, bem como obter outras informações deste fornecedor. Primeiramente,
devemos determinar o que há de comum entre os registros das duas tabelas. Observaremos
então que cada uma das tabelas possui um campo destinado a armazenar o código do
fornecedor. Este campo pode ser um elo de ligação entre elas.
Sendo assim, se tomarmos como referência a tabela Produtos, o campo Código
Produto será a chave primária e Código Fornecedor da tabela Fornecedores será uma chave
estrangeira. Uma observação muito importante deve ser levada em consideração: os campos
que são utilizados para ligação entre duas tabelas devem possuir as mesmas propriedades.
Na associação lógica entre as ocorrências das entidades, as chaves primárias e
estrangeiras serão utilizadas como argumentos de um operador relacional da linguagem SQL.
3. A LINGUAGEM SQL
3.1. Introdução
A SQL (Structured Query Language ou Linguagem Estruturada de Consultas)
originou-se inicialmente em 1970 de uma linguagem chamada Sequel. Na verdade, em inglês,
muitas vezes tem seu nome pronunciado como Sequel em lugar de ess cue ell. Hoje ela possui
diversas variações e é utilizada para acesso a muitas bases de dados diferentes.
Pode ser encarada também como uma espécie de linguagem universal para acesso a
bancos de dados. Encontraremos SQL em DB2, Delphi, Access, Visual Basic e na grande
maioria dos gerenciadores de bancos de dados atuais. Isso significa que um programador
conhecedor de SQL tem uma grande vantagem e pode trabalhar em vários ambientes e bases
de dados diferentes.
SPUFI
CONTROL
GRANT fornece um privilégio
REVOKE revoga um privilégio
FORNECEDORES
Codigo Razao Cidade
01 ACME & Pernalonga Associados Bauru
02 Agapê Corp. Pederneiras
03 Itautreco São Paulo
04 Ibeême do Brasil Ltda. Bauru
Exemplos:
Para todos os registros de uma tabela disponibilizando apenas alguns campos
SELECT CODIGO, NOME, PRECO
FROM PRODUTOS
A cláusula BETWEEN (entre) determina todos os registros cujo campo esteja entre o
valor inicial e o valor final especificados, inclusive.
A cláusula LIKE permite que sejam utilizados dois caracteres como curingas para
estabelecer um padrão a ser utilizado na consulta.
O caracter % especifica uma seqüência de caracteres quaisquer e o caracter _
(sublinhado) indica a substituição de um único caracter.
Sendo assim, RAZAO LIKE ‘A%’ traria todos os fornecedores cuja razão social
começa com a letra ‘A’, não importando quais ou quantos caracteres viessem depois. Este
caracter também pode ser utilizado no meio ou no final da cláusula LIKE.
Observe agora outros exemplos dos curingas da cláusula LIKE:
Padrão Exemplos de retorno
‘LU%’ Luiz
Luciane
Luís
Lucas
Luzia
‘LUI_’ Luiz
Luis
‘LU_Z Luiz Roberto
Luíz Carlos
Luiz Augusto
OBSERVAÇÕES
O SELECT anterior trará todos os registros de produtos que satisfaçam a condição
porém, o resultado estará em ordem alfabética de NOME;
As colunas classificadas (através da cláusula ORDER BY) devem obrigatoriamente
ser referenciadas pelo SELECT;
Podemos especificar colunas para o ORDER BY fornecendo o número que indica a
posição de cada uma no SELECT. A única cláusula que permite isso é a ORDER
BY;
ORDER BY classifica uma tabela resultante (conjunto). Sendo assim deve ser
sempre a última linha a aparecer numa instrução SELECT e deve estar sozinha.
Exemplos
O exemplo a seguir grava o valor 10 no campo CODIGO da tabela PRODUTOS em
todos os registros em que o CODIGO é igual a 10.
UPDATE PRODUTOS
SET CODIGO = 10
WHERE CODIGO = 1
3.9. DELETE
Deleta um ou mais registros de uma tabela. O número de registros a ser deletados é
determinado pela condição imposta na cláusula WHERE.
Sintaxe
DELETE FROM <TABELA>
WHERE <CONDIÇÃO>
Deve-se também atentar para a condição estabelecida na cláusula WHERE. Se a
mesma for omitida todos os registros da tabela serão apagados.
3.10. INSERT
Insere uma nova linha na tabela. O comando INSERT permite que não sejam
codificados todos os campos. Os não obrigatórios não requerem que um valor seja
especificado. Se isso acontecer, o DB2 automaticamente atribuirá valor NULL para os
campos. Quando o campo for do tipo DATE e o mesmo permitir a inserção de valores NULL,
deverá ser especificado tal valor, do contrário o DB2 retornará SQLCODE –180 (data
inválida) e a inserção será mal sucedida.
Sintaxe:
INSERT INTO <TABELA>
(CAMPO1, CAMPO2, CAMPO3, CAMPO4, ..., CAMPON)
VALUES
(VALOR1, VALOR2, VALOR3, VALOR4, ..., VALORN)
Exemplo:
Inserindo um novo registro na tabela de fornecedores
INSERT INTO FORNECEDORES
(CODIGO, RAZAO, CIDADE)
VALUES
(05, ‘Filipis’, ‘Bauru’)
OBS Para os dois últimos exemplos, as tabelas devem ter a mesma estrutura
definida.
4. O DB2 E O COBOL
4.1. Linguagem Hospedeira
Os exemplos de comandos SQL vistos até aqui nos serviram para aprender a sintaxe e
funcionamento da linguagem de maneira fácil. Porém, dentro do DB2 essa não é a ,maneira
que utilizaremos para acessar as bases de dados. Na verdade, já vimos que o DB2 é um
software que controla os acessos ao banco de dados, não uma linguagem de programação.
Sendo assim, ele precisa ser acessado a partir de programas codificados em linguagens como
Cobol ou CSP. Observe o esquema a seguir:
PROGRAMA
SQL TABELA
COBOL
DB2
SQLCA
Podemos dizer que o Cobol servirá como linguagem hospedeira para o DB2 e fará
todos os acessos à base de dados através de linguagem SQL.
Todos os comandos do DB2 (SQL) que serão executados dentro de um programa
Cobol deverão ser precedidos da linha EXEC SQL e seguidos por END-EXEC, conforme
sintaxe geral a seguir:
EXEC SQL
<COMANDOS SQL>
END-EXEC
4.2. SQLCA
SQLCA é o nome dado à área de comunicação entre o programa e o DB2. O layout
dessa área precisa ser copiado para o programa, bastando para tanto, incluir na WORKING-
STORAGE SECTION o comando:
EXEC SQL
INCLUDE SQLCA
END-EXEC
Exemplo
1
Job Control Language, é a linguagem que controla a execução de todas as tarefas no mainframe. Neste
caso, não faremos uso da linguagem nativa, mas sim de uma implementada pelo próprio DB2.
DB2 e Linguagem SQL Página 18
MOVE 2904 TO CH-CLI.
EXEC SQL
SELECT CODIGO, NOME, TELEFONE
FROM CLIENTES
WHERE CODIGO = :CH-CLI
4.4. SQLCODE
Como visto anteriormente é o código de retorno da execução de comandos SQL.
Possui quatro posições no formato:
S 9 9 9
Podemos dizer que existem três tipos de SQLCODE, conforme segue:
SQLCODE negativo aconteceu um erro grave ou de hardware no acesso. Pode
exigir o cancelamento do programa.
SQLCODE zero a operação foi concluída com sucesso.
SQLCODE positivo indica warnings (avisos) que podem gerar um caminho
diferente a ser executado pelo programa sem que haja necessariamente
cancelamento.
Exercício 2
Utilizando a tabela PRODUTOS do exercício anterior, codificar um programa
COBOL/SQL que faça a inclusão de um registro nesta tabela.
OBS:
1 – Acessar os valores via console
2 – Codificar as variáveis HOST na WORKING
3 – Carregar a SQLCA
Exercício 3
Ainda utilizando a tabela PRODUTOS, codifique um programa para acessar via
console um código de produto, consistindo conforme seu tamanho. Procurar por esse código
na tabela exibindo os demais dados do produto.
Exercício 4
São dadas as tabelas PEDIDOS e COMPOSIÇÃO conforme segue:
PEDIDOS:
NUMPED DECIMAL (7)
DATAPED DATE
QTDEPED DECIMAL (3)
VLTOTPED DECIMAL (8,2)
COMPOSICAO:
NUMPED DECIMAL (7)
SEQ DECIMAL (1)
CODPROD DECIMAL (4)
PRECOPROD DECIMAL (8,2)
Exercício 6
É dada a tabela VENDAS com a estrutura abaixo relacionada:
NUM_PEDIDO DECIMAL(5)
DATA_VENDA DATE
NUM_NF DECIMAL(7)
VALOR_PEDIDO DECIMAL(8,2)
SITUACAO CHAR(1) (A = ATIVO ou C = CANCELADO ou
R=REAJUSTADO)