Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
ÍNDICE
1. Objetivo...................................................................................................................4
2. Introdução................................................................................................................5
3. SGBD/DBMS..........................................................................................................6
4. SQL..........................................................................................................................6
5. O QUE É DB2?.......................................................................................................7
6. Modelo Relacional...................................................................................................8
7. Modelo Não Relacional...........................................................................................9
8. Integridade de Referência......................................................................................10
9. Banco de Dados.....................................................................................................11
10. Aplicações...........................................................................................................11
11. TABELA.............................................................................................................12
12. Linha...................................................................................................................13
13. Coluna.................................................................................................................13
14. Observações........................................................................................................13
15. View....................................................................................................................14
DB2 – Banco de Dados
16. Índice..................................................................................................................14
17. Chave Primária...................................................................................................15
18. Chave Estrangeira...............................................................................................15
19. Exec Sql e End-Exec...........................................................................................16
20. SQLCA...............................................................................................................17
21. Variáveis SQLCA...............................................................................................18
22. Dclgen.................................................................................................................19
23. Tipos de Dados....................................................................................................20
24. VARIÁVEIS INTERNAS DO DB2...................................................................21
25. Variáveis Host.....................................................................................................22
26. QUERY (QMF) ou via JCL (sysout)..................................................................23
27. Select – Where Numérico...................................................................................24
28. Select – Where Alfanumérico.............................................................................25
29. Select – Where Função DATA/HORA/TIMESTAMP........................................26
30. Select – Where NULO........................................................................................28
31. Indicador de nulidade - WORK..........................................................................30
32. Indicador de nulidade – VALUE.........................................................................31
33. OPERADORES DE COMPARAÇÃO NO WHERE.........................................32
34. Operadores para múltiplas condições.................................................................33
35. Operador IN........................................................................................................34
36. Operador BETWEEN.........................................................................................36
37. LIKE...................................................................................................................38
38. FUNÇÕES DE COLUNA..................................................................................40
39. FUNÇÃO DE COLUNA - COUNT (*)..............................................................41
40. FUNÇÃO DE COLUNA - MAX........................................................................43
41. FUNÇÃO DE COLUNA - MIN.........................................................................44
42. FUNÇÃO DE COLUNA - AVG.........................................................................45
43. FUNÇÃO DE COLUNA - SUM........................................................................46
44. INSERT...............................................................................................................47
45. UPDATE.............................................................................................................48
46. DELETE.............................................................................................................49
47. Tratamento de Cursores......................................................................................50
48. Declare Cursor....................................................................................................51
49. Open Cursor........................................................................................................52
50. Fetch Cursor........................................................................................................53
51. Close Cursor.......................................................................................................54
52. ORDER BY........................................................................................................55
53. GROUP BY.........................................................................................................56
54. SELECT DISTINCT...........................................................................................57
55. CURSOR – FOR UPDATE OF..........................................................................58
56. JOIN....................................................................................................................59
57. COMMIT............................................................................................................60
58. ROLLBACK.......................................................................................................61
ELABORADO POR : ULISSES & MORAES INFORMÁTICA - TI
-2-
DB2 – Banco de Dados
1. Objetivo
2. Introdução
Este Manual Oferece uma Visão Geral de Comandos SQL, Conceitos e as Melhores Práticas
de Manipulação de Dados no Banco de Dados DB2.
3. SGBD/DBMS
Um SGBD (Sistema de Gerenciamento de Banco de Dados) ou DBMS (Data Base
Management Sistem) é o software responsável pelo gerenciamento (armazenamento e
recuperação) dos dados no Banco de Dados, em outras palavras é uma coleção de
programas que permitem ao usuário definir, construir e manipular Bases de Dados para as
mais diversas finalidades.
4. SQL
Structure Query Linguage (SQL) representa um conjunto de comandos responsáveis pela
definição das tabelas, comandos e atualizações dos dados em um SGDB, está separada
em 3 (três) grupos.
5. O QUE É DB2?
DB2
DB2
DB2
DB2 DB2
DB2
DB2
DB2
DB2
DB2
DB2
DB2
DB2
DB2 DB2 DB2 DB2
DB2
DB2 DB2 DB2 DB2
6. Modelo Relacional
Características:
3) Acesso interativo
6) Baixa produtividade
8. Integridade de Referência
Garante que qualquer valor apontado pela chave estrangeira tenha um valor
correspondente na chave primaria à qual está associada.
Uma chave estrangeira é nula ou tem valor correspondente na chave primária. Tanto na
inserção como na atualização de linhas, o DB2 força a observação destas regras.
Todas as Tabelas associadas entre si, via regra de integridade de referencia, formam um
conjunto chamado de estrutura referencial ou referencial structure.
Uma tabela com chave primária definida é chamada de parent table ou tabela mãe.
Uma tabela com chave estrangeira definida é chamada de dependent table ou tabela
dependente.
Uma linha de uma parent table é chamada de parent row ou linha mãe se existir pelo
menos uma linha na tabela dependente como chave estrangeira correspondente a sua
chave primária.
Uma linha de uma dependent table é chamada de dependent row ou linha dependente se
existir uma linha mãe com valor de chave primária correspondente a da sua chave
estrangeira, ou seja, a chave estrangeira não deve ter valor nulo para ser uma linha
dependente.
CASCADE: Regra onde todas as linhas dependentes são eliminadas juntamente com a
mãe.
SET NULL: Regra onde as chaves estrangeiras da linha dependentes são atualizadas com
valor nulo após eliminação da mãe.
RESTRICT: Regra onde a eliminação da linha mãe é impedida. Neste caso somente as
linhas que não são mães podem ser eliminadas.
9. Banco de Dados
10. Aplicações
O DB2 pode ser acessado através do IMS, CICS, TSO, e Jobs (Query) BATCH
simultaneamente.
Dados que estiverem em IMS/DM (antigo IMS/DB) podem ser migrados para o DB2.
11. TABELA
Os dados são normalmente sobre uma determinada categoria de assuntos, como por
exemplo, funcionários ou peças.
Tabela(Arquivo) de Empregados
Arquivo Tabela
Registro Linha
Campo Coluna
12. Linha
Uma coleção de dados sobre uma pessoa, um lugar, um evento ou algum outro item.
13. Coluna
É a menor unidade de informação.
14. Observações
Uma linha é a menor unidade para inserção e remoção numa tabela, pode conter
colunas com diferentes tipos de dados, e não possui nome de coluna em
duplicidade.
Um acesso pode ser válido para uma ou mais linhas, dependendo da condição.
15. View
É uma visão lógica, permitindo a representação de dados de uma ou mais tabelas como
sendo uma outra Tabela.
16. Índice
É um conjunto ordenado de ponteiros para dados de uma tabela.
Estes são armazenados separadamente das Tabelas, o usuário não tem acesso a eles.
Quando o índice é único, ele força a unicidade dos dados através dos valores de uma ou
mais colunas escolhidas como chave única. (Chave Primária/Primary Key).
É dividido em 3 tipos:
Normal
A chave primária é um campo ou combinação de campos que identifica cada linha de uma
tabela, exclusivamente.
Ela é índice principal para uma tabela e é utilizada para associar dados entre as tabelas.
A chave primária não pode possuir valores repetidos, não pode ser atualizada e nem
possuir um valor NULO.
Uma ou mais colunas da tabela que indicam a coluna ou as colunas da chave em outra
tabela.
Definir na Work
EXEC SQL
INCLUDE SQLCA
END-EXEC.
EXEC SQL
INCLUDE TABELA1
END-EXEC.
EXEC SQL
INCLUDE TABELA2
END-EXEC.
Criar na Procedure
EXEC SQL
comando
END-EXEC.
20. SQLCA
EXEC SQL
INCLUDE SQLCA
END-EXEC.
Modo que deve ser declarado na Work internamente no programa.
/**-----------------------------------------------------------***
*** AREA DE TRATAMENTO DAS BOOKS DB2 ***
***-----------------------------------------------------------***
*
*****EXEC SQL
***** INCLUDE SQLCA
*****END-EXEC.
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).
Informações em forma de texto sobre algum erro que tenha acontecido durante o
processamento.
SQLERRD (3) Contém a quantidade de linhas que sofreram alteração no último comando
SQL.
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.
Seria uma espécie de 2º. Sqlcode, caso você não consiga identificar que tipo de erro está
acontecendo no seu programa, através do sqlcode, verifique o sqlstate.
22. Dclgen
O DCLGEN é um programa que gera uma codificação de declaração de
variáveis HOST correspondentes às colunas de uma dada tabela.
******************************************************************
* DCLGEN TABLE(DB2.SAGTBS02_CURSOS) *
* LIBRARY(DES.DB2.DCLGEN(SAGTBS02)) * SAGTBS02
* ACTION(REPLACE) *
* LANGUAGE(COBOL) * Nome Lógico da Tabela
* STRUCTURE(SAGTBS02) *
* APOST * DB2
* ... IS THE DCLGEN COMMAND THAT MADE THE FOLLOWING STATEMENTS *
******************************************************************
EXEC SQL DECLARE DB2.SAGTBS02_CURSOS TABLE
( CO_CURSO INTEGER NOT NULL,
NO_CURSO CHAR(25) NOT NULL,
DT_INCLUSAO DATE NOT NULL,
DT_ALTERACAO DATE, DB2.SAGTBS02_CURSOS
DT_EXCLUSAO DATE,
NO_TOPICO CHAR(15) NOT NULL, Nome Físico da Tabela DB2
NO_NIVEL CHAR(15) NOT NULL,
NO_OBJETIVO VARCHAR(150),
NO_DESTINA_SE CHAR(70) NOT NULL,
NO_PRE_REQUIS CHAR(70) NOT NULL,
NU_CARGA_HORA INTEGER NOT NULL,
IC_SEG CHAR(1),
IC_TER CHAR(1),
IC_QUA DATE CHAR(1),
IC_QUI Função CHAR(1), NOT NULL
IC_SEX DATA CHAR(1),
IC_SAB CHAR(1),
IC_DOM Formato DB2 CHAR(1), Indica que a variável host
DT_INICIO DATE NOT NULL, não aceitará conteúdo
DT_FIM DATE NOT NULL, nulo
NO_ANDAMENTO CHAR(35),
VR_CURSO_1 DECIMAL(15, 2) NOT NULL,
VR_CURSO_2 DECIMAL(15, 2) NOT NULL,
VR_CURSO_3 DECIMAL(15, 2) NOT NULL,
IC_SITUACAO CHAR(1)
) END-EXEC.
******************************************************************
* COBOL DECLARATION FOR TABLE DB2.SAGTBS02_CURSOS *
******************************************************************
01 SAGTBS02.
10 CO-CURSO PIC S9(9) USAGE COMP.
10 NO-CURSO PIC X(25).
10 DT-INCLUSAO PIC X(10).
10 DT-ALTERACAO PIC X(10).
10 DT-EXCLUSAO PIC X(10).
10 NO-TOPICO PIC X(15).
10 NO-NIVEL PIC X(15).
10 NO-OBJETIVO.
49 NO-OBJETIVO-LEN PIC S9(4) USAGE COMP.
49 NO-OBJETIVO-TEXT PIC X(150).
10 NO-DESTINA-SE PIC X(70).
10 NO-PRE-REQUISITOS PIC X(70).
10 NU-CARGA-HORA PIC S9(9) USAGE COMP.
10 IC-SEG PIC X(1). Variáveis HOST
10 IC-TER PIC X(1).
10 IC-QUA PIC X(1).
10 IC-QUI PIC X(1).
10 IC-SEX PIC X(1).
10 IC-SAB PIC X(1).
10 IC-DOM PIC X(1).
10 DT-INICIO PIC X(10).
10 DT-FIM PIC X(10).
10 NO-ANDAMENTO PIC X(35).
10 VR-CURSO-1 PIC S9(13)V9(2) USAGE COMP-3.
10 VR-CURSO-2 PIC S9(13)V9(2) USAGE COMP-3.
10 VR-CURSO-3 PIC S9(13)V9(2) USAGE COMP-3.
10 IC-SITUACAO PIC X(1).
******************************************************************
Numérico
Alfanumérico
LONG VARCHAR (N) String de caracteres com tamanho variável com mais de 254
bytes, onde N é o tamanho
Função
Atenção
Para TIMESTAMP só há um formato externo:
YYYY-MM-DD-HH.MM.SS.NNNNNN
Definir na Work
01 WS-DAT-DB2 PIC X(010) VALUE ’01.01.0001’.
Criar na Procedure
EXEC SQL
SET :WS-DAT-DB2 = CURRENT DATE
END-EXEC.
Formato: dd.mm.ssaa
Definir na Work
01 WS-HOR-DB2 PIC X(008) VALUE ’00.00.00’.
Criar na Procedure
EXEC SQL
SET :WS-HOR-DB2 = CURRENT TIME
END-EXEC.
Formato: hh.mm.ss
Definir na Work
01 WS-TIMESTAMP PIC X(026) VALUE SPACES.
Criar na Procedure
EXEC SQL
SET :WS-TIMESTAMP = CURRENT TIMESTAMP
END-EXEC.
Formato: ssaa-mm-dd-hh.mm.ss.nnnnnn
Deve ser precedida por : (dois pontos) quando referenciada em um comando SQL.
Deve ser definida no programa no formato compatível com o tipo da coluna da tabela.
(_) – underscore.
(-) – hífen.
Ex. CODIGO_PROCESSO
:SAGTBS02.CODIGO-PROCESSO
Caso o seu programa trabalhe com tabelas que possuam alguma coluna com o mesmo
nome, na codificação da variável host no comando SQL, devem colocar como prefixo o
item de grupo a qual ela pertence na working-storage.
QUERY
Entrada da instrução SQL
DATA
Resultado devolvido pelo DB2
FORM
Formato do relatório de Saída
REPORT
Relatório montado com base nos dados da área DATA e no formato especificado
em FORM.
Obs: Para as Funções acima (DAY, MONTH, YEAR) as Variáveis HOST declaradas na Work
devem ter o formato S9(4) COMP.
Dependendo de como uma tabela é definida, pode ser permitido que uma ou mais colunas
contenha itens de dados com valor NÃO nulo.
Se a coluna estiver com conteúdo nulo, o DB2 colocará um valor negativo (-1) no campo
de tratamento de nulidade, caso contrário ele será valorizado com zeros (+0).
Caso o DB2 tente colocar um valor negativo no indicador de nulidade, e ele não foi
definido no comando SQL, o DB2 retornará um sqlcode =-305.
Operadores Significado
= IGUAL
<> DIFERENTE
> MAIOR
< MENOR
Operadores Significado
AND E
OR OU
Obs. Em Where que utilizarem AND e OR juntos, sempre fechar as condições com
parênteses.
35. Operador IN
O valor deve coincidir com algum elemento de uma lista.
WHERE DEPT = 38
OR DEPT = 20
OR DEPT = 42
Podemos utilizar também variáveis ao invés de se utilizar valores fixos, atentar para o
formato dos campos, os mesmos devem coincidir exatamente com o formato db2.
É o mesmo que:
Podemos utilizar também variáveis ao invés de se utilizar valores fixos, atentar para o
formato dos campos, os mesmos devem coincidir exatamente com o formato db2.
37. LIKE
Para selecionar linhas que tenha determinados caracteres ou palavras no intervalo do
campo/string.
Select Fornecedor
From Tab.Fornecedores
Jonas....
João....
Select Endereco
From Tab.Enderecos
Função Descrição
SUM Executa o somatório de colunas numéricas
AVG Obtém a media de colunas numéricas
MAX Procura o maior valor de uma coluna
MIN Procura o menor valor de uma coluna
COUNT Informa o numero de linha qualificadas
GROUP BY obtém valores agrupados por uma
característica definida. Todas as colunas
especificadas no GROUP BY formarão o
grupo.
HAVING Impõem uma condição ao agrupamento
definido. Equivale a clausula WHERE, mas
só pode ser usada com o GROUP BY
CHAR Converte o valor para um valor do tipo
string
DATE Converte o valor date em string
DAY Extrai o dia de um valor date o timestamp
DAYS Informa o numero de dias
DECIMAL Converte em valor decimal um valor
numérico
DIGITIS Extrai de um string de caracteres os
valores numéricos
FLOAT Converte na notação float um valor
numérico
ÉX Apresenta a notação hexadecimal de um
valor
HOUR Extrai a hora de um valor date ou
timestamp
INTEGER Converte em integer um valor numérico
LENGTH Informa o numero de caracteres de um
valor
MICROSECOND Informa os microssegundos de um
timestamp
MINUTE Informa os minutos de um timestamp ou
time
MONTH Informa o mês de um item date
SECOND Informa os segundos de um timestamp ou
time
SUBSTR Extrai uma parte de um campo char
TIME Converte em time um valor
VALUE Substitui valores nulos pelo valor fornecido
YEAR Extrai o ano de um item date ou timestamp
, caso não encontre dados na base o sqlcode de retorno será -305 e não +100, como é o
caso do select comum ou fetch do cursor.
Retorna o maior valor encontrado na base para linhas que satisfaçam à condição WHERE.
, caso não encontre dados na base o sqlcode de retorno será -305 e não +100, como é o
caso do select comum ou fetch do cursor.
Retorna o menor valor encontrado na base para linhas que satisfaçam à condição WHERE.
, caso não encontre dados na base o sqlcode de retorno será -305 e não +100, como é o
caso do select comum ou fetch do cursor.
Retorna a Média de valores encontrados na base para linhas que satisfaçam à condição
WHERE.
, caso não encontre dados na base o sqlcode de retorno será -305 e não +100, como é o
caso do select comum ou fetch do cursor.
, caso não encontre dados na base o sqlcode de retorno será -305 e não +100, como é o
caso do select comum ou fetch do cursor.
44. INSERT
Podemos Inserir linhas informando o valor “ NULL “ , ou utilizar as variáveis para controle
de nulidade.
CURRENT DATE
CURRENT TIME
CURRENT TIMESTAMP
ELABORADO POR : ULISSES & MORAES INFORMÁTICA - TI
- 54 -
DB2 – Banco de Dados
45. UPDATE
Mover -1 to WS-TP-PROC-NULL.
Caso Contrário
Mover +0 to WS-TP-PROC-NULL.
46. DELETE
Caso o resultado de um SELECT tenha múltiplas linhas, o programa deve trabalhar com
um CURSOR.
Quando o programa executa o comando OPEN cursor, O DB2 executa o SELECT definido
no DECLARE CURSOR, e a tabela resultante fica presa, esperando pelo processamento.
Abrir
Ler o primeiro
Caso seja definido na Procedure deve ser o primeiro comando a ser executado
antes o OPEN CURSOR
Abertura (open)
Leitura (fetch)
Fechamento (close)
Obs. A cada acesso ao banco de dados Db2 deve-se consistir o sqlcode, assim como é
realizado o tratamento de file-status em arquivo vsam/seqüenciais.
Obs. A cada acesso ao banco de dados Db2 deve-se consistir o sqlcode, assim como é
realizado o tratamento de file-status em arquivo vsam/seqüenciais.
Obs. A cada acesso ao banco de dados Db2 deve-se consistir o sqlcode, assim como é
realizado o tratamento de file-status em arquivo vsam/seqüenciais.
52. ORDER BY
Classifica as linhas selecionadas através de um CURSOR.
ORDER BY 1, 2, 3
53. GROUP BY
Agrupa linhas selecionadas através de um CURSOR, com conceito de quebra.
A atualização deve ser feita na linha que está sendo apontada pelo cursor especificado na
cláusula “WHERE CURRENT OF nome”.
A instrução DECLARE não pode ter a cláusula “FOR UPDATE OF” se a instrução SELECT
contiver:
ORDER BY
GROUP BY
DISTINCT
UNION
FUNÇÃO
JOIN
Definir na Work
EXEC SQL
SELECT cod_func,
nome_func
FROM Db2prd.Cadastro_func
WHERE COD_FUNC IN ( 3, 5, 8)
END-EXEC.
EXEC SQL
END-EXEC.
56. JOIN
EXEC SQL
SELECT A.COD_PRODUTO,
A.NOME_PRODUTO,
A.COD_FORNEC,
A.NOME_FORNEC
FROM DB2PRD.CAD_COMPRAS A,
DB2PRD.CAD_FORNEC B
END-EXEC.
Se não for definida na cláusula WHERE relacionamento entre as tabelas, será feito um
relacionamento NxN.
SELECT DISTINCT
A.NU_GUIA,
A.NU_SEG
FROM TAB_GUIA A
ORDER BY NU_GUIA
END-EXEC.
57. COMMIT
O cursor deve ser definido como cláusula WITH HOLD, para que não se perca o
posicionamento do Mesmo.
END-EXEC.
END-EXEC.
- Melhores Práticas
Check Point - Realizar o COMMIT a cada 500 ou 1.000 registros processados, sempre
armazenar a ultima chave processada, para que no caso de abend seja feito o processo de
Restart .
58. ROLLBACK
O cursor deve ser definido como cláusula WITH HOLD, para que não se perca o
posicionamento do Mesmo.
END-EXEC.
END-EXEC.
- Melhores Práticas
SELECT cad_cod_func,
cad_nome_fuc ,
cad_sit
FROM db2prd.cad_funcionarios
WHERE cad_sit in ( 3, 5, 8 )
END-EXEC.
60. EVITAR
Evitar SELECT com cláusulas:
NOT BETWEEN
NOT LIKE
NOT IN
IS NOT NULL
LIKE
Procure utilizar, na cláusula WHERE, a primeira coluna do índice (caso contrário implicará
na varredura do índice).
61. RECOMENDAÇÕES
- Usar a opção FOR FETCH ONLY em statement SELECT quando não se pretende atualizar
o dado.
- Não confeccionar programa On-Line com statements que façam varredura em tabela.
- Minimizar o uso das cláusulas DISTINCT, ORDER BY, GROUP BY, UNION e JOIN, quando
Estes implicam no processamento de Sort por parte do DB2, principalmente quando a
quantidade de linhas recuperadas for muito grande.
- Programas com atualização DB2 em tabela com milhões de registros realizar tratamento
de Checkpoint.
62. UTILITÁRIOS
De preferência, os campos deste arquivo deverão ter o mesmo formato das coluna DB2.
A utilização de um arquivo que não siga esta orientação implica em utilizar o utilitário com
opção de conversão de campos, o que degrada a performance.
Durante o processo de BIND, o DB2 confere os statements SQL para validar as tabelas,
nomes de coluna, sobre o plano gerado no Diretório e Catálogo DB2.
64. TABLESPACE
Conjunto de datasets Vsam LDS (Linear data sets) que contem dados de uma ou mais
tabelas. Suas páginas pedem ser de 4K ou 32K.
65. SQLCODE’S