Professional Documents
Culture Documents
Tabela DEPT
LINHA
D01 MARKETING 000030
000030 A00
Anotações:
Sistema de Gerência
de Banco de Dados
Anotações:
- A Tabela Relacional
Tabela EMP
Anotações:
O primeiro caracter
precisa ser:
Toda tabela e A-Z, $, @, #
toda coluna
precisam ser Demais caracteres:
nomeadas A-Z, $, @, #, 0-9, _
O nome da
tabela é único
através do Nome da
owner/creator/ coluna é
schema unico na
tabela
Anotações:
Schema/Owner/Creator
Nome simples da Tabela
da Tabela
PROD EMPL
Nome da Tabela
Qualificado(completo)
PROD.EMPL
Nome da Coluna
Qualificado
EMPL.LASTNAME
Anotações:
CHAVE CHAVE
ESTRANGEIRA PRIMÁRIA
EMP ( D E P E N D E N T E ) D E P T (PAI)
NOME DEPT DEPTCOD
CARLOS Z13 INT. Q3A
MARIA A05 REF. Z13
·· · ·
·
· · ·
Um depto. só pode ser
excluído se não tiver
nenhum dependente.
Anotações:
Anotações:
Anotações:
Anotações:
QMF
CICS
DB2
SPUFI
Anotações:
TABLESPACE A
TABELA 1 INDEX 1
TABELA 2 INDEX 2 TS A
IDX1 IDX2 IDX4
TS B IDX3
TABELA 3 INDEX 3
TABELA 4 INDEX 4
DATABASE X
Anotações:
NÃO DB2
TS TS
TS IX IX
Anotações:
• TABLE (Tabelas)
• TABLESPACE
Anotações:
Tipos de TABLESPACE
Anotações:
• INDEX (ÍNDICES)
É uma lista ordenada de valores que apontam para os dados nas tabelas.
Utilizado para agilizar a leitura de dados. Pode ser utilizado t ambém para
forçar a unicidade dos dados.
Tipos:
• VIEW
• É um subconjunto de uma ou mais tabelas.
• Sua utilização, em princípio, nada difere de uma tabela normal.
• Conforme o caso uma VIEW pode ser somente leitura.
Anotações:
• STORAGE GROUP
• SYNONYM (SINÔNIMO)
É um nome alternativo (apelido) para uma tabela ou view. Uma vez criado, sua
utilização é restrita a um Auth-id. (Proprietário ou usuário)
• ÁLIAS
É um nome alternativo (apelido) para uma tabela ou view. Utilizado mais como
nome local de uma tabela remota. Seu uso é compartilhado.
Anotações:
LOG
ATIVA
DDBB22
DATABASES
LOG
ARCHIVE
BSDS IMAGE
COPY
Anotações:
NOTAS:
Anotações:
Anotações:
DB2
TSO Attach IMS Attach CICS Attach
USUÁRIO USUÁRIO
Anotações:
SQL
STRUCTURED
QUERY
LANGUAGE
DB2
Anotações:
Anotações:
• A linguagem SQL :
• NÃO É PROCEDURAL
• É S I MP L E S
Anotações:
• Não é procedural .
Para cada dada pesquisa não precisamos informar os procedimentos
necessários como:
1. zere o contador
2. abra o arquivo
3. leia um registro
4. verifique se satisfaz o critério
5. incremente o contador
6. etc.
Com a instrução SELECT basta dizer:
Anotações:
..União A B UNION
..Intersecção A B JOIN
Anotações:
Anotações:
PRIMARY KEY(ID),
FOREIGN KEY(DEPT) REFERENCES ORG ON DELETE CASCADE)
IN DBYY.TSYY
• ALTER TABLE STAFF ADD COLX DECIMAL (8,2)
Anotações:
Definição
Definição para
para Colunas
Colunas
TIPO DE DADO DESCRIÇÃO FAIXA
SMALLINT Inteiros -32.768 + 32.767
INTEGER Inteiros -2.147.483.648
INT +2.147.483.647
DECIMAL (X,Y) Decimais X=total de dígitos
Y=casas decimais
X <=31
FLOAT (m) precisão simples 5.4e-79 to 7.2e+75
REAL ponto flutuante
FLOAT dupla precisão 5.4e-79 to 7.2e+75
FLOAT (n) ponto flutuante**
DOUBLE PRECISION
** 1 <=m <=21
21 <=n <=53 Para DECIMAL, defina X com número impar
Anotações:
Anotações:
Definição
Definição para
para Colunas
Colunas
TIPO DE DADO DESCRIÇAO TAMANHO
Anotações:
Definição
Definição para
para Colunas
Colunas
Anotações:
Anotações:
Para uma coluna ‘not null with default ‘ o sistema fornece o valor em
caso de omissão.
• Time
• Date Valores Correntes
• Timestamp
Anotações:
Anotações:
Anotações:
X. STAFF
ID NOME DEPT CARGO ANOS SALARIO COMIS
X. ORG
Anotações:
SEQUÊNCIA OBRIGATÓRIA:
Anotações:
Anotações:
Anotações:
SELECT *
FROM X.ORG
Resultado:
Anotações:
• WHERE
Resultado:
20 SANTANA GER -
20 ORSINI VENDAS 612.45
20 JAMES ATEND 128.20
20 SNEIDER ATEND 126.50
Anotações:
= Igual
<> or ¬= Diferente
> Maior
>= Maior ou Igual
< Menor
<= Menor ou Igual
¬> Não maior
¬< Não menor
Anotações:
WHERE DEPT = 20
Anotações:
Resultado:
SANTANA GER -
DANTAS GER -
SOUZA GER -
PLOTZ GER -
Anotações:
Resultado:
Anotações:
Resultado:
Anotações:
Resultado:
Anotações:
Resultado:
Anotações:
não eqüivale a:
Resultado:
Anotações:
equivale a:
NEGAÇÃO: NOT IN
Anotações:
equivale a:
SELECT NOME, CARGO, ANOS
FROM X.STAFF
WHERE ANOS >= 9
AND ANOS <= 11
Anotações:
Exemplos:
1. WHERE NOME LIKE ‘G%’ inclui: GRAHAM
GONZALES
GAFNEY
2. WHERE NOME LIKE ‘%SON’ inclui: WILSON ***
JASON
3. WHERE NOME LIKE ‘%M%N%’ inclui: MOLINARI
4. WHERE NOME LIKE ‘_ _’ inclui: LU (TAM=2
BYTES)
5. WHERE NOME LIKE ‘_R%’ inclui: FRAYE
(R na 2ª posição) GRAHAM
*** VARCHAR
Anotações:
exclui: GRAHAM
GONZALES
GAFNEY
exclui ANOS de 9 a 11
Anotações:
DAVIS VENDAS 5
GAFNEY VENDAS 7
PINHO ATEND 5
VIEIRA GER 10
OBS.:
Primeiro seleciona e depois classifica.
Para pequenos volumes pode ser usado sem problemas.
Anotações:
Anotações:
Anotações:
Anotações:
MÚLTIPLAS -COLUNAS
SELECT DISTINCT DEPT, CARGO DEPT CARGO
10 GER
15 ATEND
15 GER
15 VENDAS
20 ATEND
20 GER
20 VENDAS
38 ATEND
Anotações:
+ SOMA * MULTIPLICAÇÃO
- SUBTRAÇÃO / DIVISÃO
Resultado:
ID SALÁRIO COMIS COL1
10 18357.50 - - (1)
20 18171.25 612.45 18783.70
80 13504.60 128.20 13632.80
190 14252.75 126.50 14379.25
Anotações:
Resultado:
ID SALÁRIO COMIS RENDIMENTOS
Anotações:
Resultado:
NOME COL1
OLIVEIRA 20094.15
GRAHAM 21200.30
Anotações:
EXEMPLO 1:
Resultado:
NOME COL1
GRAHAM 21200.30
OLIVEIRA 20094.15
EXEMPLO 2:
Anotações:
Anotações:
Dados numéricos
Anotações:
EXEMPLO
Resultado:
Anotações:
AVG(SALÁRIO + COMIS)
Anotações:
8 16 19604.190625000
Anotações:
SUM(SALARY)+SUM(BONUS)+SUM(COMM)
VERSUS
SUM(SALARY+BONUS+COMM)
Anotações:
A B
2 5
- 3
4 -
Anotações:
• Podem ser úteis quando usadas com funções de coluna que não
exibem cabeçalhos.
Anotações:
COL1 COL2
513.31 12319.45
Anotações:
Anotações:
Resultado:
15 41269.53 1468.70
20 45928.60 867.15
38 59778.80 1913.30
. . .
. . .
. . .
Anotações:
NOTAS:
• As colunas referenciadas pelo SELECT que não sejam função precisam ser
agrupadas pelo ‘GROUP BY’(ver pagina anterior). O não agrupamento neste
caso gera erro.
Anotações:
Resultado:
20 45928.60 867.15
. . .
. . .
15 41269.53 1468.70
. . .
. . .
38 59778.80 1913.30
Anotações:
S E L E C T . . . F R O M..
WHERE.....
FILTROS
GROUP BY...
HAVING....
Anotações:
DEPT COL1
10 83643.45
15 61929.33 SELECT DEPT, SUM(SALÁRIO)
20 64286.10 FROM X.STAFF
38 77285.55 GROUP BY DEPT
42 58369.05 HAVING SUM(SALÁRIO) > 65000
. .
. . DEPT COL1
. .
10 83643.45
38 77285.55
. .
. .
. .
Anotações:
Anotações:
Anotações:
Anotações:
Anotações:
Anotações:
• Funções STRING
• Funções de Conversão
• Funções Date/Time
Anotações:
Anotações:
Anotações:
Resultado:
DEPTNOME COL1
MATRIZ MATR
CAMPINAS CAMP
RIO RIO
MINAS MINA
BAHIA BAHI
Anotações:
Anotações:
Resultado:
SANTANA 7 GER 6
SILVAl 6 VENDAS 6
DANTAS 6 GER 6
. . . .
. . . .
Anotações:
Anotações:
Resultado :
10 - - 0.00
20 612.45 534.25 612.45
30 - 345.89 345.89
40 846.55 - 846.55
Anotações:
Resultado:
COL1 COL2
17506.7 17506
Anotações:
Anotações:
• Somente subtração
horário - horário = = > duração em hhmmss (packed decimal (6,0))
Anotações:
• Somando/Subtraindo duração
data + ou - duração (data) - - Resulta em data
DATACOL1 + 3 MONTHS
horário +or - duração (tempo) - - Resulta em horário
TEMPCOL1 - 30 MINUTES - 20 SECONDS
timestamp +or - duração (data) - - Resulta em TIMESTAMP
timestamp +or - duração (tempo)
T S T C O L +2 DAYS - 3 HOURS
T M S R C O L +50000 MICROSECONDS
Anotações:
TABLE DT
PRJDOC DATAINI DATAFIM HRINI HRFIM
AX001 19900131 20050331 000000 153000
AX002 19880228 19880831 000000 000000
AX003 19870201 19870201 160000 234159
SELECT PRJCOD, DATAINI + 1 YEAR, DATAFIM - 2 MONTHS ....
Anotações:
Resultado :
COL1 COL2
15.30.00 03.30 PM
Anotações:
Resultado:
31 1 1990
Anotações:
• DAYS
Resultado:
COL1 COL2
00150200 5538
(nº.dias)
• DATE, TIME
Extrai data ou horário de um timestamp
Anotações:
•CURRENT DATE
Data de hoje
• C U R R E N T TIME
Horário corrente
• C U R R E N T TIMESTAMP
SELECT * FROM DT
WHERE DATAINI < CURRENT DATE - 90 DAYS
Anotações:
ID NOME DEPT
10 SANTANA 20
20 ORSINI 20
30 DANTAS 38
40 O’BRIEN 38
50 SOUZA 15
70 ALMEIDA 15
80 JAMES 20
90 KOONITZ 42
. . .
. . .
D E P T C O D DEPTONOME G E R E N T E
10 MATRIZ 160
15 CAMPINAS 50
20 RIO 10
38 MINAS 30
42 BAHIA 100
• Tabelas são relacionadas via dados comuns (domínios)
• J o i n é implementado pela cláusula FROM ou WHERE
• Não faça J OIN de tabelas sem o predicado de join, o resultado é um
produto cartesiano entre as tabelas
Anotações:
X.ORG
DEPTNOME GERENTE DIVISÃO
RIO 10 .
MINAS 30 WESTERN
BAHIA 100 .
. . . Resultado:
Anotações:
Anotações:
Listar
Listar todos
todos empregados,
empregados, ee para
para os
osgerentes,
gerentes, oodepto
deptoque
queeles
elesgerenciam
gerenciam
SELECT DEPTNOME, NOME
FROM X.STAFF LEFT OUTER JOIN X.ORG
ON GERENTE = ID
X. ORG
DEPTNOME G E R E N T E DIVISÃO Resultado:
SÃO PAULO . .
MINAS 30 WESTERN DEPTNOME NOME
BAHIA 100 CPC
RIO 10 WESTERN RIO SANTANA
X. STAFF - ORSINI
MINAS DANTAS
ID NOME - O’BRIEN
10 SANTANA
20 ORSINI BAHIA PLOTZ
30 DANTAS
40 O’BRIEN
100 PLOTZ
•OPÇÕES: LEFT JOIN, RIGHT JOIN e FULL JOIN
Anotações:
Listar
Listaros
osempregados,
empregados,oonome
nomedo
dodepartamento
departamentoaonde
aondetrabalham
trabalhameesseus
eus
respectivos
respectivospedidos
pedidosde
devendas.
vendas.
Resultado:
Anotações:
X.STAFF
CODIGO NOME DEPT CARGO
20 SANTANA 20 GER
20 ORSINI 20 VENDAS
. . . .
. . . .
X.ORG
CODIGO DEPTNOME GERENTE
10 MATRIZ 160 SELECT NOME,DEPTNOME,CODIGO
FROM X.STAFF, X.ORG
10 RIO 10 WHERE CARGO = ‘GER’
. . . AND DEPT = CODIGO
. . .
Anotações:
SOLUÇÃO
• Qualificador correlacionado
Anotações:
Anotações:
SOLUÇÃO:
SELECT E.NOME, E.SALARIO, G.NOME, G.SALARIO
FROM STAFF E, ORG D, STAFF G
WHERE E.DEPT = D.DEPTCOD
AND D.GERENTE = G.ID
AND E.SALARIO > G.SALARIO
Resultado:
NOME SALARIO NOME SALARIO
Anotações:
UNION . .
. .
. .
. .
. .
Anotações:
• O operador UNION ALL também une tabelas mas não elimina linhas
duplicadas. Não chama o sort portanto.
Anotações:
Anotações:
SELECT NOME
FROM X.CANDIDATOS
WHERE ENDEREÇO LIKE ‘%SP’
UNION ALL UNION
SELECT SOBRENOME
FROM X.ENTREVISTADOS
WHERE SIT = ‘REP’
NOME NOME ==>do primeiro SELECT
JACOBS ARANTES
MAR Q U E S JACOBS
ARANTES MAR Q U E S
SILVA SILVA
MAR Q U E S
JACOBS
UNION ALL UNION
- Não faz classificação - Classifica
- Não elimina duplicados - Elimina duplicados
Anotações:
• R E S U L T A D O D E U M A S U B Q U E R Y É U S A D O P E L O S E L E C T “ E X T E R N O”
Anotações:
Resultado:
RREESSUULLTTAADDOO SSOOM MEENNTTEE NOME SALARIO
DDOO SSEELLEECCTT DDEE NNÍ ÍVVEELL RREESSUULLTTAADDOO DDAA SSUUBBQQUUEERRYY SANTANA 18357.50
MAIS
MAIS ALTOALTO RREETTOORRNNAADDOO PPAARRAA OO NNI IVVEELL ORSINI 18171.25
SSUUPPEERRI O
I ORR
Anotações:
Anotações:
Resultado :
NOME SALARIO
MOLINARI 22959.20
Anotações:
Resultado:
20865.862500000
20865.862500000
15482.332500000
15482.332500000
16000.000000000
16000.000000000
Anotações:
Resultado :
NOME SALARIO
FRAYE 21150.00
GRHAM 21000.00
JONES 21234.00
MOLINARE 22959.20
Anotações:
Lista
Listaclassificada
classificadados
dosfuncionários
funcionárioscom
comsalário
saláriomaior
maiorque
queaa
média
médiasalarial
salarialde
dealgum
algumdepartamento
departamento
Resultado:
20865.862500000
20865.862500000
15482.332500000
15482.332500000
Anotações:
Resultado:
NOME SALÁRIO
DANIEL 19260.25
DAVIS 15484.50
EDWARDS 17844.00
. .
. .
Anotações:
Anotações:
Anotações:
Liste
Liste os
os departamentos
departamentos cuja
cuja média
média salarial
salarial éé inferior
inferiorààmedia
mediada
da
companhia,
companhia, com as suas respectivas médias. O salário dos
com as suas respectivas médias. O salário dos gerentes
gerente s
não
não deve
deve ser
ser considerado.
considerado. Ordene
Ordene pela
pela média.
média.
66 16880.175000000
51 16235.200000000
84 15443.000000000
20 15309.530000000
Anotações:
Listar
Listar os
osempregados
empregadoscom
comsalário
saláriosuperior
superiorààmédia
médiade
deseus
seus
respectivos departamentos.
respectivos departamentos.
Anotações:
Anotações:
Liste
Liste os
os gerentes
gerentes ganhando
ganhando menos
menosqueque$18.000
$18.000se seexistir
existir
pelos menos um gerente com salário superior a $22.000.
pelos menos um gerente com salário superior a $22.000.
30 MAR E N C H I 17506.75 38
Anotações:
Anotações:
Resultado:
PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM
............ ................. .... .......... .......... ............. ..............
OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201
OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201
OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............
MA2114 B01 ? 19880920 ?
Anotações:
TESTPROJ
PCOD PNOME DEPT RESP E Q U I P E DATAINI DATAFIM
Resultado:
Anotações:
ANTES:
PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM
............ ................. .... .......... .......... ............. ..............
OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201
OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201
OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............
MA2114 B01 001.00 19880920 19890201
UPDATE RESTPROJ
SET EQUIPE = EQUIPE * 2, DATAFIM = NULL,
DATAINI = ‘1987-06-01’
WHERE DEPT = ‘B01’
PCOD PNOME DEPT R E S P EQUIPE DATAINI DATAFIM
............ ................. .... .......... .......... ............. ..............
OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201
OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201
OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............
MA2114 B01 002.00 19870601 ?
Anotações:
um subconjunto de linhas
UPDATE PESSOAL
SET SALARIO = SALARIO + 300
WHERE CARGO = ‘ATEND’
todas as linhas:
UPDATE PESSOAL
SET ANOS = ANOS + 1
Obs.: Cuidado com este tipo de alteraçao, pois todas as linhas serão
afetadas
Anotações:
ANTES:
PCOD PNOME DEPT RESP EQUIPE DATAINI DATAFIM
............ ................. .... .......... .......... ............. ..............
OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201
OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201
OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............
MA2114 B01 001.00 19880920 19890201
DEPOIS:
PCOD PNOME DEPT RESP E Q U I P E DATAINI DATAFIM
............ ................. .... .......... .......... ............. ..............
OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201
OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201
OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............
Anotações:
ANTES:
PCOD PNOME DEPT RESP EQUIPE DATAINI DATAFIM
............ ................. .... .......... .......... ............. ..............
OP2011 SUP. SISTEMA E21 000320 001.00 19880101 19880201
OP2012 SUP. APLICAÇÃO E21 000330 001.00 19880101 19880201
OP2013 SUP. DB \DC E21 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............
MA2114 B01 001.00 19880920 19890201
DELETE
DELETE FROM
FROM TESTPROJ
TESTPROJ
Obs.: Cuidado com este tipo de deleção, pois todas as linhas ser ão
afetadas
DEPOIS:
PCOD PNOME DEPT RESP EQUIPE DATAINI DATAFIM
Anotações:
Anotações:
COBOL
PLI SQL SQL
embutido
FORTRAN
A S S E MB L E R
C
ARQUIVOS CURSOR
TABELAS
REGISTROS VAR.HOST LINHAS
Anotações:
Anotações:
DELIMITADORES
Anotações:
Anotações:
COBOL
22000 SAL
SQL
Anotações:
• A variável HOST deve ser compatível com a coluna, quanto ao seu tipo
de dado e tamanho.
Anotações:
MATR SNOME
EXEC SQL
UPDATE EMPR
SET SALARIO = SALARIO * :REAJ
WHERE CARGO = :CARGO
END-EXEC.
CARGO REAJ
Anotações:
Anotações:
P A R A R E C E B E R U M VALOR DO DB2
EXEC SQL
SELECT MATR, SOBRENOME
INTO :MATR, :SNOME
FROM EMPR
WHERE DEPT = :DEP
END-EXEC.
Anotações:
ESTRUTURA
Anotações:
Anotações:
DADOS
DADOS NUMÉRICOS
NUMÉRICOS
R E A L *4 N4 /
FLOAT(21) DCL N4 BIN 01 N4 COMP -1. N4 DS E
REAL N4
FLOAT / R E A L *8 N5 /
FLOAT(53) / DCL N5 BIN DOUBLE
01 N5 COMP - 2. N5 DS D
DOUBLE FLOAT(53) PRECISION N5
PRECISION
Anotações:
CCAARRAACCTTEERR SSTTRRIINNGG
Anotações:
DATA/HORÁRIO/TIMESTAMP
Anotações:
Anotações:
• COMMIT
• ROLLBACK
• LUW ABORTADA
• ATUALIZAÇÃO DESFEITA A PARTIR DO ÚLTIMO COMMIT
• CURSOR FECHADO (EXCETO COM OPÇÃO WITH HOLD)
**** No Banco todo programa BATCH que atualiza tabelas DB2 deve ter
COMMIT e lógica de RESTART. Consultar normas do KIT ANALISTA.
Anotações:
• A instrução COMMIT:
• A instrução ROLLBACK:
Anotações:
100 100
500 500
LUW ABORTADA t
Anotações:
Anotações:
COMMIT
TSO/BATCH IMS CICS
call C H K P comando SYNCPOINT
COMMIT call sync
GU IOPCB
Automaticamente ao término NORMAL DO PROGRAMA
ROLLBACK
Anotações:
Anotações:
Anotações:
CONDIÇÃO SQLCODE
ADVERTÊNCIA positivo
diferente de 100 VERIFICAR
VERIFICAR
SQLWARN0
SQLWARN0
NÃO
ENCONTRADO + 100
OU
FIM DO CURSOR
SUCESSO 0
Anotações:
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).
Anotações:
Anotações:
Anotações:
• INSTRUÇÃO WHENEVER
manipulação de exceções
• DCLGEN
gerar declaração de variáveis HOST
• INSTRUÇÃO INCLUDE
embutir estrutura de SQLCA/var.HOST no programa
• DSNTIAR/DSNTIR
rotina de formatações de mensagens de erro.
Anotações:
CONDIÇÃO
AÇÃO
GO TO :X
CONTINUE
Anotações:
Anotações:
TABELA EMPR
MATR CHAR (6)
NOME VARCHAR(12)
CATÁLOGO
DCLGEN
ME MB 3
01 DCEMPR.
10 MATR PIC X(6).
10 NOME.
49 NOME -LEN PIC S9(4) USAGE COMP.
49 NOME -TEXT PIC X(12).
BIBLIOTECA INCLUDE
Anotações:
Anotações:
MEMB3
EXEC SQL
INCLUDE MEMB3
END -E X E C .
. 01 DCLEMPR.
. 10...
.
EXEC SQL
INCLUDE SQLCA 01 SQLCA
END-E X E C . 05...
Anotações:
Anotações:
PREPARAÇÃO
PREPARAÇÃO DE
DE PROGRAMA
PROGRAMA COM
COM SQL
SQL
Biblioteca de Include
PRECOMPILE
COMPILE BIND
Definição Table/Column
Autorizações
Módulo Objeto
SYSPACKAGE
LINK EDIT
Package Plan
L o a d Módulo EXECUTE
(Language Interface)
Anotações:
• Pré-compilação
• Compilação e Linkedição
• BIND
Anotações:
Anotações:
• índices utilizados
• estratégia de locking
• estratégia de resolução de JOIN, etc.
Anotações:
DBRM Catálogo
no PDS BIND do DB2
VALIDAÇÃO
Table/col Table/col
Referencias descrições
AUTORIZAÇÃO
Tipo de usuários
soliticação autorizados
ESTRATÉGIA DE ACESSO
Tipo de características
solicitação físicas
DBRM
na Package
S Y S I B M . S Y S P A C K S T MT
Anotações:
Anotações:
• O otimizador do DB2 pesa fatores com CPU e I/O para optar por uma
estratégia de acesso.
Anotações:
DBRM
BIND
B I N D PACKAGE
P A C K A G E(online)
( online ) BBIND
I N D PPACKAGE
A C K A G E ( (batch)
batch)
MEMBER
MEMBER (dbrma)
( dbrma) MEMBER ( dbrma)
MEMBER (dbrma)
online batch
dbrma dbrma
Nome
Nomedo
doPackage
P a c k a g e=Collection_id.Package
=Collection _id.P a c k a g e_id
_id
Anotações:
Exemplo:
online batch
pkg1 pkg3
BIND
BIND PACKAGE
PACKAGE (online ) MEMBER
( online) MEMBER (pkg1)
(pkg1)
BIND
BIND PACKAGE
PACKAGE (batch)
(batch) MEMBER
MEMBER (pkg3)
(pkg3)
Anotações:
Pre-compilador
Compilador/ Link-edit
BIND PACKAGE
Diretório
Load Módulo
: Timestamp da precompilação
Anotações:
. lmoda
CALL DSNHLI (dbrm1, ,1)
.
.
CALL DSNHLI (dbrm1, ,2)
.
.
Diretório
CALL DSNHLI (dbrm3, ,1)
.
collx colly
RUN PROGRAM ( Imoda)
PLAN ( plana) dbrm1 dbrm3 dbrm1
plana
collx.dbrm1, collz.*
dbrm2
Anotações:
Anotações:
.
CALL DSNHLI (dbrm1, ,1)
.
plana
colly collx
dbrm1 dbrm1
-805
51002
Anotações:
..
SELECT...
SELECT...
FROM
FROM TAB1
TAB1
..
BINDPACKAGE
BIND PACKAGE BINDPACKAGE
BIND PACKAGE
BIND PACKAGE
BIND PACKAGE
QUAL (TEST)
QUAL (TEST) QUAL (PROD)
QUAL (PROD)
Anotações:
Anotações:
Anotações:
• DEFINIÇÃO do CURSOR
EXEC SQL
DECLARE K9 CURSOR FOR
SELECT MATR, SOBRENOME
FROM EMPR
WHERE DEPT = :DEPT
END-EXEC.
• OPEN DO CURSOR
EXEC SQL OPEN K9 END-EXEC.
• FETCH das linhas resultantes
EXEC SQL
FETCH K9 INTO :MATR, :SNOME
END-EXEC.
• CLOSE CURSOR
Anotações:
Anotações:
Anotações:
EXEC SQL
DECLARE CE CURSOR FOR
SELECT ... FROM EMPR...
END-EXEC
.
EXEC SQL OPEN CE END-EXEC
.
Anotações:
• ORDER BY,
• GROUP BY,
• DISTINCT,
• UNION,
• função ou
• Join.
Anotações:
EXEC SQL
DECLARE CX CURSOR FOR
SELECT ... MATR, SOBRENOME
FROM EMPR
WHERE DEPT = : DPT
FOR UPDATE OF SOBRENOME
END-EXEC
.
EXEC SQL OPEN CE END-EXEC
.
.
EXEC SQL FETCH CX INTO :MATR,:SNOME END
.
.
EXEC SQL UPDATE EMPR
SET SOBRENOME = :NOVOSN
WHERE CURRENT OF CX END-EXEC
.
.
EXEC SQL CLOSE CX END-EXEC
Anotações:
• A atualização deve ser feita para a linha que está sendo apontada pelo
CURSOR especificado na clausula “WHERE CURRENT OF CURSOR”.
• Uma instrução DECLARE não pode conter cláusula “FOR UPDATE OF”,
se a instrução SELECT associada contiver:
• ORDER BY,
• GROUP BY,
• DISTINCT,
• UNION,
• função ou
• Join.
Anotações:
POSICIONAMENTO
OPEN
CLOSE
REUTILIZAÇÃO do CURSOR
OPEN
Anotações:
• Uma instrução COMMIT fecha todos os cursores sem opção with hold e
valida todas as atualizações efetuadas até então.
Anotações:
EXEC SQL
SELECT CARGO DEPT, FONE, NOME
INTO :CC:CCI, :DPT, :FON:NFON, :NOM
FROM EMPR
WHERE MATR = :ID
END-EXEC.
Anotações:
• As variáveis HOST que não trabalham com nulo não requerem uma
variável indicadora. Vide a coluna DEPT do exemplo.
Anotações:
EXEC SQL
SELECT CARGO, DEPT, FONE, NOME
INTO :EST:VETOR
FROM EMPR
WHERE MATR = :ID
END-EXEC.
ID EST VETOR
01 EST. 01 VETOR.
10 CC PIC... 10 ARRAY PIC S9(4) COMP
10 DPT PIC... OCCURS 3 TIMES
10 FON PIC...
10 NOM PIC...
Anotações:
Anotações:
• “n” indica que uma variável HOST é pequena demais para conter um
string de “N” caracteres que teve de ser truncado. O SQLWARN1 é
setado para ‘W’.
Anotações:
EXEC SQL
SELECT SMI1, SMI1*INT1, SMI1/SMI2
INTO :MV1:IV1, :MV2:IV2, :MV3:IV3 FROM TABLEA
END-EXEC.
1. Primeira linha:
MV1 = 1 IV1 =0
MV2 = 691356 IV2 = 0
MV3 = 0 IV3 =-2
SQL CODE =+802
2. Segunda linha: MV1 = 4 IV1 =0
MV2 = 691356 IV2 = -2
MV3 = 1 IV3 =0
SQL CODE =+304
Anotações:
var.IND INTERPRETAÇÃO
Anotações:
SELECT *
FROM EMPR
WHERE SEXO = ‘F’
AND (CARGO = ‘ANALISTA’ OR SALARIO > 1000)
AND DEPT IN (‘E11’,’D14’)
• ÍNDICES DISPONÍVEIS?
Anotações:
otimizador do DB2.
Anotações:
MÓDULO PLANO
DE CALL
CARGA PACKAGE
Anotações:
Anotações:
Anotações:
- SELECT A INTO :B
- WHERE A = :B
Anotações:
Anotações:
SELECT MATR,SOBRENOME
FROM EMPR E
WHERE DEPT = (SELECT DEPT
FROM PROJETO
WHERE RESP = E.MATR)
Anotações:
• CPU ADICIONAL
Anotações:
USO
USO DO
DO ÍNDICE
ÍNDICE
COLUNA INDEXADA INDEX SORT
CANDIDATO CANDIDATO
IN SIM
LIKE NOTA 1
BETWEEN SIM
>,>=,<,<=,¬>,¬<,= SIM
¬=,<> NÃO
NOT NOTA 2
OR NOTA 3
ORDER BY SIM SIM
GROUP BY SIM SIM
DISTINCT SIM SIM
COMPARED TO:
LONGER LITERAL NÃO
ARITIMETIC EXP. NÃO
DIFF. DATA TYPE NÃO
USED FOR JOIN SIM SIM
NOTA 1: Sim, exceto quando a variável – host contiver ‘%’ ou ‘-‘ no início.
NOTA 2: Sim, quando pode ser substituido por operador que usa o índice
NOTA 3: Sim se possível converter em IN.
Anotações:
EEXXPPRREESSSSÕÕEESSAARRI TI TMMÉTICAS
ÉTICAS
Anotações:
CONDIÇÕES
CONDIÇÕESNOT
NOT
Anotações:
USO
USO DO
DO “LIKE”
“LIKE”
Anotações:
SSUUBBQQUUEERRI IEESS
Anotações:
P L A N -T A B L E
Anotações:
• NECESSIDADE DE ÍNDICE
• PROBLEMA DE LOCKING
• FERRAMENTA DO PROGRAMADOR
Anotações:
EEXXPPLLAAI INN
Comando EEXPLAIN
XPLAIN PLAN - TABLE
SQL
• EXPLAIN ALL
SET QUERY = n
FOR sql-statement
Anotações:
Anotações:
PF3
Anotações:
PPLLAANN__TTAABBLLEE
• ACCESSTYPE:
− R =T A B L E S P A C E S C A N ( T A B L E S C A N I F S E G M E N T E D T S )
− I = INDEX SCAN
− M = One fetch INDEX access for MIN or MAX function
− N = INDEX access for IN list
− M =Multiple INDEX SCAN. Followed by MX and MI or MU
− MX =One of multiple INDEX SCANs
− MI =Intersection of multiple indexes
− MU = Union of multiple indexes
I F A C C E S S T Y P E = I , M , N , MX , then:
• ACCESSNAME: Name of Index
• MATCHCOLS: # of matching cols
• INDEXONLY: Y if no data access
Anotações:
Parte 3
Anotações:
Anotações:
• Protege contra
• Granularidade
• Modo
• Duração
Anotações:
LLOOCCKKSSIIZZEE TTAABBLLEESSPPAACCEE
UPDATE
SELECT
WAITING
WAITING WAITING
UPDATE SELECT
Anotações:
SELECT UPDATE
WAITING WAITING
UPDATE SELECT
Anotações:
LOCKSIZE
L O C K S I Z E PAGE/ANY
PAGE/ANY
SELECT UPDATE
UPDATE SELECT
Anotações:
LLOCKSIZE
O C K S I Z E RROW
OW
SELECT UPDATE
UPDATE SELECT
Anotações:
• individualmente a páginas
• a todos os segmentos de uma tabela (se a tabela pertence a um TS
segmentado)
• individualmente a um tablespace
Anotações:
Anotações:
• R R Repeatable read
O s locks são adquiridos conforme as páginas/linhas vão sendo
acessadas e são liberados só com um COMMIT. O RR só deve ser
escolhido em situações especiais já que as páginas/linhas ficam presas
por muito tempo. O nome vem do fato de que em caso de repetição de
leitura tenho a garantia de que ninguém atualizou o intervalo de dados
lidos.
• R S Read Stability
Os locks são adquiridos somente nas páginas/linhas que satisfazem
todas as condições da clausula WHERE. Permite uma aplicação ler as
mesmas páginas/linhas de dados mais de uma vez sem que estes dados
tenham sido atualizados por outra aplicação. Oferece maior concorrência
que RR, pois embora as outras aplicaçãoes não possam alterar os dados
lidos pela aplicação original, elas podem inserir novas linhas.
Anotações:
• CS Cursor Stability
Os locks são adquiridos conforme a necessidade e liberados
quando o programa lê outra página/linha.
• U R Uncommited Read
NENHUM lock é adquirido para a leitura das páginas/linhas. Permite
a leitura dos dados sem checar a integridade. O UR só deve ser
escolhido em situações especiais aonde a informação lida não
precisa estar 100% garantida. Por exemplo: select sum (tot_vendas)
from vendas – aonde o usuário só quer ter uma idéia do total de
vendas até o momento, sem se importar com a precisão da
informação. USAR COM MUITO CUIDADO.
• Quanto aos locks do tipo X, não há diferença com RR, onde a liberação
ocorre somente com o COMMIT.
Anotações:
Anotações:
Anotações:
DATABASE CATALOG
TABLESPACE UTILITIES
TABLE COMMANDS
INDEX BIND
VIEW EXECUTE
BUFFER POOL
Anotações:
TERM-ID
Anotações:
Anotações:
Anotações:
PROCESSAMENTO
UTILITÁRIO FUNÇÃO/DESCRIÇÃO
CONCORRENTE
CHECK TESTA SE OS INDÍCES ESTÃO CONSISTENTES
LEITURA
INDEX COM OS DADOS
TESTA INTEGRIDADE REFERÊNCIAL E AS
CHECK DATA LEITURA
CONTRAINTS
NENHUM NO
CARREGA DADOS DE UM ARQUIVO SEQUENCIAL
TABLESPACE OU
LOAD P AR A UMA OU MAIS TABELAS NO MESMO
PARTIÇÃO SENDO
TABLESPACE
CARREGADO
JUNTA CÓPIAS INCREMENTAIS E/OU TOTAIS E
M E R G E C O P Y CRIA UMA NOVA CÓPIA INCREMENTAL E/OU QUALQUER TIPO
TOTAL
DELETA INFORMAÇÕES SOBRE UMA COPIA DA
MODIFY TABELA DO CATÁLOGO ‘SYSIBM.SYSCOPY’ E DO QUALQUER TIPO
DIRETÓRIO ’SYSIBM.SYSLGRNG’
Anotações:
PROCESSAMENTO
UTILITÁRIO FUNÇÃO/DESCRIÇÃO
CONCORRENTE
QUIESCE ESTABELECE UM ‘QUIESCE POINT’ NO
LEITURA
CATÁLOGO PARA O(S) TABLESPACE(S)
RECUPERA O TABLESPACE, UMA PÁGINA,
RECOVER NENHUM
PARTIÇÃO OU “ERRORANGE”
READY-ONLY
DURANTE
REORG REORGANIZA UM TABLESPACE OU UM INDICE
UNLOAD; NEHUM
DURANTE RELOAD
REPORT
LISTA INFORMAÇÕES DE TABLESPACES QUALQUER TIPO
PROCESSING
ATUALIZA TABELAS CATÁLOGO COM
RUNSTATS ESTATÍSTICAS SOBRE UTILIZAÇÃO DE QUALQUER TIPO
TABLESPACES EFICIÊNCIA DE ÍNDICES
ATUALIZA TABELAS CATÁLOGO COM
STOSPACE ESTATÍSTICAS SOBRE UTILIZAÇÃO DE ESPAÇO QUALQUER TIPO
DE “STORAGE GROUP”
Anotações:
ARQUIVO
ARQUIVO
SEQUENCIAL
SEQUENCIAL
DE
DEENTRADA
ENTRADA
UTILITÁRIO
UTILITÁRIO
LOAD
LOAD
Anotações:
SYSREC
DFSORT TODOS INDICES
TABLE RID MAP
DFSORT
DA TABELA
CARREGADA SYSMAP
ERROS DE
ERROS DE CONVERSÃO NO DUPLICA DOS NO
REGISTROS
SYSERR SORTEADOS SYSERR
Anotações:
PHASE 5
PHASE 6
SYSERR
DISCARD SEQUENCIAL RID MAP
DA TABELA
DATA SET DE
DISCARD
INPUT
CARREGADA COMPLETO
RID MAP
DA TABELA
SYSUT1 CARREGADA SYSMAP SYSDISC
PHASE 7
ERROR
ERROR
SUMMARY
REPORT TODAS VIOLAÇÕES SUMMARY
ACUMULADAS
SYSERR
Anotações:
Anotações:
DISCARD Usa o arquivo 'SYSERR' para saber quais linhas tiveram erros e o
arquivo 'SYSMAP' para localizá-las no arquivo seqüencial de entrada,
esta fase cria um arquivo 'DISCARD'. O arquivo 'DISCARD' pode ser
editado (usando 'ISPF') e usado como novo 'INPUT' de 'LOAD' após os
erros terem sido corrigidos.
REPORT Usa 'SYSERR' para listar todas as linhas que não foram carregada s.
Uma linha é considerada errada por qualquer uma das
seguintesrazões:
- Erros de conversão de dados durante a fase '(RE)LOAD'
- Erros de chave duplicada encontrados durante a fase 'BUILD
- Erros de integridade referencial descobertos durante a fase
'ENFORCE‘
Anotações:
WHEN (1:1)=‘*’
Anotações:
• LOAD INICIAL:
- Tablespace vazio (Este é o default)
LOAD DATA
R E S U ME NO
INTO TABLE EMP
• LOAD Adicional :
- Tablespace não -vazio
- Para carregar outra tabela no mesmo tablespace
- Para adicionar linhas em uma tabela não-vazia
LOAD DATA
R E S U ME YES
INTO TABLE EMP
Anotações:
Anotações:
Com esta opção é possível carregar os dados mais rápido, porém p ode
causar impacto no momento do RECOVER.
LOAD DATA
INTO TABLE PROJ
LOG YES /NO
Anotações:
USER TABELA A
UM OU MAIS TABLESPACES
USER TABELA B
UTILITÁRIO
UTILITÁRIO
CCHHEECCKK
DATA
DATA
ERROR
ERROR
SUMMARY
SUMMARY
Anotações:
SORT Faz o sort das foreign keys caso elas não tenham sido extraidas
através do índice.
Anotações:
• FOR EXCEPTION
Copia linhas inválidas para Exception Tables
• DELETE
Deleta linhas inválidas e todas as descendentes (Exception Table é
requerida)
• SCOPE
- PENDING
Indica que somente as linhas das tabelas ou partições que estão em
CHECK pending status devem ser checadas
- ALL
Checa todas as linhas de todas as tabelas existentes no tablespace
especificado
• EXCEPTIONS n
Termina o utilitário após n+ 1erros
Anotações:
Anotações:
OBS: No Banco existe uma rotina pronta para o R unstats , solicitar a criação ao
analista de produção.
Anotações:
• R E P O R T N O |Y E S
• U P D A T E A L L |NONE |S P A C E |A C C E S S P A T H
Anotações:
SAMPLE 25
Anotações:
catálogo do DB2.
Anotações:
USER TABELA A
TABLESPACE
USER TABELA B
UTILITÁRIO
UTILITÁRIO
CCOOPPYY
IMAGE COPY
Anotações:
Anotações:
• FULL
YES
Cria um backup completo do tablespace/partition
COPY TABLESPACE DB01. TS01
NO
Cria um backup incremental do tablespace/partition
COPY TABLESPACE DB01. TS02
FULL NO
• CONCURRENT
Executa o DFSMS concurrent copy para tirar um full image copy.
Anotações:
T E MP O
Anotações:
TEMPO
ALTERAÇÕES
DADOS NOS DADOS DADO NÃO
ACESSÍVEL
DADO
RECUPERADO
Anotações:
Anotações:
TEMPO
DADO
RECUPERADO
Anotações:
TEMPO
PROCESSOS
PERDIDOS
ALTERAÇÕES
DADO DANIFICADO
DADOS NOS DADOS
LOGICAMENTE
PONTO DE
QUIESCE
DADO
RECUPERADO
Anotações:
• TORBA
• TOCOPY
Anotações:
USER TABELA A
UMA OU MAIS TABELAS
USER TABELA B
DE ENTRADA
DSNTIAUL
DSNTIAUL
ARQUIVO U
SEQUENCIAL M
DE OUTPUT A
O
U
M
A
I
S
T
A
B
E
L
Anotações: A
S
D
E
S
A
Í
D
A
Anotações:
Anotações:
Anotações:
A invocação de sp é feita no db2 com um comando “call”. Note-se que com rdbms de
outros fabricantes o comando de invocação pode ser diferente de “call” ( e.g. O ms sql
usa “execute” ), assim como as regras de programação e ligação podem ser diferentes
também. Por esse motivo, conhecimentos prévios de outros sw, podem não se aplicar a
db2 stored procedures.
Porque razão iríamos querer usar stored procedures em vez de efetuar todos os acessos
sql no programa invocador?
Existem dois tipos de situação em que é mais recomendável o uso de sp:
Anotações:
SEGURANÇA.
Outra razão que poderia indicar o uso de stored procedures é que pelo fato de estas
rodarem no servidor, podem usar comandos que não estão disponíveis para os clients,
como por exemplo “list database directory”. Além disso, stored procedures também
podem fazer acesso a recursos de software e storage diponiveis apenas no servidor.
Anotações:
Identifica a sqlda que descreve as host variables usadas como parâmetros, no caso da
procedure ser invocada dessa forma.
Anotações:
SQLTYPE
SQLLEN
SQLDATA
SQLIND
LEN.SQLLONGLEN
SQLDATALEN
SQLDATATYPE_NAME
Presume-se que cada sqlda seja usada para trocar dados em ambos os sentidos, entre o
programa e a procedure.
Se o programa não usar o parâmetro para transmitir dados para a procedure, o campo
“sqlind” deverá ser inicializado com o valor –1 pelo programa.
Se a procedure não usar o parâmetro para transmitir dados para o programa, o campo
“sqlind” deverá ser inicializado com o valor –128 pela procedure
Anotações:
Stored procedures escritas em sql pl são definidas completamente pelo comando “create
procedure”, ou seja, os comandos fonte fazem parte do corpo do comando “create
procedure”
Quando escritas em linguagens diferentes de sql pl, as stored procedures são programas
criados à parte e catalogados no db2 pelo comando “create procedure”, onde se faz
referencia ao nome do executavel. Esses programas têm de ter sido objeto de prepare,
bind, compilação, edição de ligações (linkedited), e catalogação em biblioteca
reconhecida pelo db2.
Anotações:
Anotações:
Em operações como “drop” em que não se usam parâmetros, pode ser usado o nome
indicado pelo atributo specific.
Anotações:
Anotações:
Em db2 established address spaces o db2 usa caf ( call attachment facility ) calls
implícitos
Em wlm o db2 usa rrsaf calls ( recoverable resource manager services ) implícitos
BACKUP
CONNECT
CONNECT TO
CONNECT RESET
CREATE DATABASE
DROP DATABASE
FORWARD RECOVERY
RESTORE
O db2 não permite usar overload (procedures diferentes com a mesma identificação) em
procedures com o mesmo número de parâmetros, mesmo que sejam de tipos diferentes.
Com exceção de procedures em db2 cli e jdbc, tem de ser feito bind.
Anotações:
COMMIT E ROLLBACK
Uma procedure que contém commit ou rollback, deve ser definida (create procedure)
como contains sql, reads sql data ou modifies sql data
Se a procedure tiver sido definida com commit on return yes, será executado um commit
ao final da procedure, independentemente de a procedure conter commits ou rollbacks
Os cursores do client também são afetados por commit ou rollback dentro da procedure.
Rollback fecha todos os cursores
Commit fecha todos os cursores com exceção daqueles declarados com with hold
Anotações:
- O client usa type 2 connect para um server que contém a stored procedure
Não pode ser usado rollback numa sp, se o db2 não for o coordenador de transação.
Anotações: