Escolar Documentos
Profissional Documentos
Cultura Documentos
-1-
-2-
-3-
-4-
-5-
EXERCCIO - LOAD......................................................................................................................................................................254
OPO LOG (YE S/NO).................................................................................................................................................................255
UTILITRIO 'CHECK DATA''.......................................................................................................................................................256
CHECK DATA - FASES DE EXECUO ...................................................................................................................................257
OPES DO CHECK DATA .......................................................................................................................................................258
UTILITRIO 'RUNSTATS''............................................................................................................................................................259
RUNSTATS - FASE DE EXECUO ..............................................................................................................................................260
OPES DO RUNSTATS................................................................................................................................................................261
OPES DO RUNSTATS (CONT .)..................................................................................................................................................262
CONSIDERAES SOBRE RUNSTATS..........................................................................................................................................263
UTILITRIO 'COPY'' ...................................................................................................................................................................264
COPY - FASES DE EXECUO....................................................................................................................................................265
OPES DO COPY.........................................................................................................................................................................266
COPY INCREMENTAL E MERGECOPY.........................................................................................................................................267
RECOVER .......................................................................................................................................................................................268
RECOVER - FASES DE EXECUO...........................................................................................................................................269
RECOVER - A GILIZAO DO PROCESSO .................................................................................................................................270
RECOVER - PARA UM PONTO NO TEMP O................................................................................................................................271
RECOVER - PARA UM PONTO NO TEMP O................................................................................................................................272
DSNTIAUL PROGRAMA SAMPLE PARA UNLOAD.........................................................................................................273
DSNTIAUL - DATA SETS E PARMETRO ........................................................................................................................274
DSNTIAUL - EXEMPLOS............................................................................................................................................................275
DSNTIAUL - EXEMPLOS............................................................................................................................................................276
STORED PROCEDURES INTRODUO.......................................................................................................................... 277
O QUE SO E PARA QUE SERVEM AS STORED PROCEDURES .............................................................................277
CALL SINTAXE .......................................................................................................................................................................... 279
CREATE PROCEDURE............................................................................................................................................................ 281
EXEMPLOS.................................................................................................................................................................................282
PARMETROS ..........................................................................................................................................................................283
PROGRAMAO DE SP.......................................................................................................................................................... 284
REGRAS GERAIS......................................................................................................................................................................285
COMMIT E ROLLBACK..........................................................................................................................................................286
-6-
Introduo ao DB2
Parte 1
-7-
Tabela DEPT
DCODIGO
DNOME
A00
SPIFFY COMP.SERVICE
000010
B01
PLANNING
000020
A00
D01
MARKETING
000030
000030
A00
......
......
LINHA
GERENTE
......
DSUPERIOR
......
Anotaes:
-8-
Sistema de Gerncia
de Banco de Dados
Modelo de Dados
Relacional
Linguagem
Sql
Definio, Manipulao e
Controle dos Dados
Anotaes:
-9-
NOME
CHRISTINE
MICHAEL
SALLY
JOHN
WING
JASON
SOBRENOME
DEPARTAMENTO
HAAS
THOMPSON
KWAN
GEYER
LEE
GOUNOT
A00
S01
C01
E01
E21
E21
SALRIO
52750
41250
38250
40175
25370
23840
Anotaes:
- 10 -
NOMENCLATURA
Toda tabela e
toda coluna
precisam ser
nomeadas
O nome da
tabela nico
atravs do
owner/creator/
schema
O primeiro caracter
precisa ser:
A-Z, $, @, #
Demais caracteres:
A-Z, $, @, #, 0-9, _
Nome da
coluna
unico na
tabela
Anotaes:
- 11 -
NOMENCLATURA
Schema/Owner/Creator
da Tabela
PROD
EMPL
Nome da Tabela
Qualificado(completo)
PROD.EMPL
Nome da Tabela
Nome da Coluna
EMPL
LASTNAME
Nome da Coluna
Qualificado
EMPL.LASTNAME
Anotaes:
- 12 -
Integridade de Referncia
CHAVE
ESTRANGEIRA
CHAVE
PRIMRIA
EMP ( D E P E N D E N T E )
NOME
CARLOS
MARIA
DEPT
Z13
A05
D E P T (PAI)
INT.
REF.
DEPTCOD
Q3A
Z13
Anotaes:
- 13 -
Anotaes:
- 14 -
Anotaes:
- 15 -
Ambiente DB2
Anotaes:
- 16 -
BATCH
UTILITY
TSO
TSO BATCH
QMF
CICS
DB2
SPUFI
BSDS
IMS/TM
LOG
DB
CAT
DIR
Anotaes:
- 17 -
Objetos DB2
TABLESPACE A
TABELA 1
INDEX 1
TABELA 2
INDEX 2
TABLESPACE B
TS A
IDX1 IDX2 IDX4
NO DB2
TABELA 3
INDEX 3
TABELA 4
INDEX 4
TS B IDX3
DATABASE X
Anotaes:
- 18 -
STORAGE
VOL1
GROUP1
STORAGE GROUP2
VOL2
NO DB2
TS
IX
VOL3
VOLX
NO DB2
TS
VOL4
TS
VOLY
NO DB2
TS
TS
IX
TS
IX
Anotaes:
- 19 -
Notas
TABLE (Tabelas)
TABLESPACE
Anotaes:
- 20 -
Notas (cont.)
Tipos de TABLESPACE
simples: as pginas de seus data sets podem conter dados de
uma ou mais tabelas.
segmentado: dividido em segmentos(conjuntos de pginas) .
Cada segmento s pode conter dados de uma tabela. Utilizao
recomendada pois permite ao DB2 uma administrao melhor
de espao.
particionado: recomendado para tabelas gigantes. dividido
em parties( data set 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.
Anotaes:
- 21 -
Notas (cont.)
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 ambm para
forar a unicidade dos dados.
Tipos:
UNIQUE
NORMAL
CLUSTER
VIEW
um subconjunto de uma ou mais tabelas.
Sua utilizao, em princpio, nada difere de uma tabela normal.
Conforme o caso uma VIEW pode ser somente leitura.
Anotaes:
- 22 -
Notas (cont.)
STORAGE GROUP
um conjunto de volumes (discos) aonde o s T A B L E S P A C E S ou ndices so
armazenados.
Os discos devem ter o mesmo device type (3375, 3380 etc).
A utilizao dos STG poupa o usurio da codificao de AMS de VS AM para
criar os data sets via DEFINE CLUSTER.
Os discos de um STG no precisam ser dedicados ao DB2.
SYNONYM (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
nome local de uma tabela remota. Seu uso compartilhado.
Anotaes:
- 23 -
Estrutura do DB2
CAT LOGO
DIRETRIO
LOG
ATIVA
DDBB22
DATABASES
LOG
ARCHIVE
BSDS
IMAGE
COPY
Anotaes:
- 24 -
Anotaes:
- 25 -
Anotaes:
- 26 -
TSO Attach
DB2 I
QMF
USURIO
DB2
IMS Attach
PROGRAMA
PROGRAMA
CICS Attach
PROGRAMA
USURIO
Anotaes:
- 27 -
SQL
STRUCTURED
QUERY
LANGUAGE
DDL
DML
DATA
DEFINITION
LANGUAGE
DCL
DATA
MANIPULATION
LANGUAGE
DATA
CONTROL
LANGUAGE
Anotaes:
- 28 -
: fornecer um privilgio
: tirar um privilgio
Anotaes:
- 29 -
Linguagem SQL
Qualquer acesso ao DB2 feito atravs da linguagem SQL.
O usurio ao emitir um comando SQL deve estar autorizado para a
execuo do mesmo.
A linguagem SQL :
NO PROCEDURAL
S I MP L E S
Anotaes:
- 30 -
Anotaes:
- 31 -
UNION
..Interseco
JOIN
..Diferena
OUTER JOIN
..Produto Cartesiano
A X B = {(x.y):x A e y B }
Anotaes:
- 32 -
CREATE
DEFINIO DE OBJETOS
ALTER
ALTERAO DE UM OBJETO
DROP
ELIMINAO DE UM OBJETO
PREVIAMENTE DEFINIDO
Anotaes:
- 33 -
Create Table
CREATE TABLE ORG
(DEPTCOD
CHAR(3)
DEPTNOME
VARCHAR(36)
GERENTE
CHAR(6),
DIVISAO
CHAR(8)
NOT NULL,
NOT NULL,
NOT NULL WITH DEFAULT,
PRIMARY KEY(DEPTCOD))
IN DBXX.TSXX
CREATE TABLE STAFF
(ID
CHAR(6)
NOME
VARCHAR(12)
.
.
.
DEPT
CHAR(3),
NOT NULL,
NOT NULL,
PRIMARY KEY(ID),
FOREIGN KEY(DEPT) REFERENCES ORG ON DELETE CASCADE)
IN DBYY.TSYY
ALTER TABLE STAFF ADD COLX DECIMAL (8,2)
Anotaes:
- 34 -
Dados Numricos
Definio
Definio para
para Colunas
Colunas
TIPO DE DADO
DESCRIO
FAIXA
SMALLINT
Inteiros
-32.768 + 32.767
INTEGER
INT
DECIMAL (X,Y)
Inteiros
Decimais
-2.147.483.648
+2.147.483.647
X=total de dgitos
Y=casas decimais
X <=31
FLOAT (m)
REAL
preciso simples
ponto flutuante
5.4e-79 to 7.2e+75
FLOAT
FLOAT (n)
DOUBLE PRECISION
dupla preciso
ponto flutuante**
5.4e-79 to 7.2e+75
** 1 <=m <=21
21 <=n <=53
Anotaes:
- 35 -
Anotaes:
- 36 -
Definio
Definio para
para Colunas
Colunas
TIPO DE DADO
DESCRIAO
TAMANHO
CHAR (x)
string fixo
x caracteres
(mximo 254)
VARCHAR (x)
string de
tam. varivel
0 a 254 **
caracteres
LONG VARCHAR(x)
string de
tam. Varivel
x >254 **
caracteres
Anotaes:
- 37 -
Definio
Definio para
para Colunas
Colunas
TIPO DE DADO
F O R MATO INTERNO
DATE
aaaammdd
(4 bytes)
TIME
hhmmss
(3 bytes)
TIMESTAMP
Anotaes:
- 38 -
Nulidade
Uma coluna pode ser:
NOT NULL
um valor NULO:
NO ZERO
NO BRANCO
DESCONHECIDO
Anotaes:
- 39 -
Valores Correntes
Anotaes:
- 40 -
Create View
CREATE VIEW V_DEPT
(VCODIGO,VNOME)
AS
SELECT CODIGO, DNOME
FROM TAB_DEPT
WHERE DCODIGO LIKE A%
Anotaes:
- 41 -
SELECT
ACESSA DADOS
UPDATE
ATUALIZA CAMPOS
DELETE
REMOVE LINHAS
INSERT
Anotaes:
- 42 -
X. STAFF
ID
NOME
10
20
30
40
50
60
70
80
90
100
110
120
130
140
150
160
170
180
190
200
210
220
230
240
250
260
270
280
290
300
310
320
330
340
350
SANTANA
ORSINI
DANTAS
OBRIEN
SOUZA
SUZUKI
AL MEIDA
JAMES
KOONITZ
PLOTZ
NGAN
NAUGHTON
YAMAGUCHI
FRAYE
OLIVEIRA
MOLINARI
KERMISCH
ABRAHAMS
SNEIDER
SCOUTTEN
L U
SMITH
LUNDQUIST
DANIELS
WHEELER
JONES
LEA
WILSON
PINHO
DAVIS
GRAHAM
GONZALES
BURKE
VIEIRA
GAFNEY
Anotaes:
DEPT
CARGO
ANOS
SALARIO
20
20
38
38
15
38
15
20
42
42
15
38
42
51
51
10
15
38
20
42
10
51
51
10
51
10
66
66
84
84
66
66
66
84
84
GER
VENDAS
GER
VENDAS
GER
VENDAS
VENDAS
ATEND
VENDAS
GER
ATEND
ATEND
ATEND
GER
VENDAS
GER
ATEND
ATEND
ATEND
ATEND
GER
VENDAS
ATEND
GER
ATEND
GER
GER
VENDAS
GER
VENDAS
VENDAS
VENDAS
ATEND
VENDAS
ATEND
7
8
5
6
10
7
6
7
5
6
6
6
7
4
3
8
10
7
3
5
6
12
9
9
10
5
13
4
1
7
5
18357.50
18171.25
17506.75
18006.00
20659.80
16808.30
16502.83
13504.60
18001.75
18352.80
12508.20
12954.75
10505.90
21150.00
194 56.50
22959.20
12258.50
12009.75
14252.75
11508.60
20010.00
17654.50
13369.80
19260.65
14460.00
21234.00
18555.50
18674.50
19818.00
15454.50
21000.00
16858.20
10988.00
17844.00
13030.50
COMIS
612.45
846.55
650.25
1152.00
128.20
1386.70
206.60
180.00
75,60
637.65
110.10
236.50
126.50
84.20
992.80
189.65
513.30
811.50
806.10
200.30
844.00
55.50
1285.00
188.00
- 43 -
DEPTNOME
MATRIZ
CAMPINAS
RIO
MINAS
BAHIA
RECIFE
RIO GRANDE
PARAN
GERENTE
160
50
10
30
100
140
270
290
DIVISO
LOCAL
CENTRO
SUDESTE
SUDESTE
SUDESTE
NORDESTE
NORDESTE
SUL
SUL
SO PAULO
CAMPINAS
R. JANEIRO
B. HORIZONTE
SALVADOR
RECIFE
PORTO ALEGRE
CURITIBA
Anotaes:
- 44 -
Query
SEQUNCIA OBRIGATRIA:
S E L E C T NOME, ANOS, SALRIO
F R O M X. STAFF
W H E R E D E P T =38
O R D E R B Y NOME
Anotaes:
- 45 -
Anotaes:
- 46 -
Select...From
SELECT
FROM
lista de tabelas
Simples :
Qualificado:
EMP
AUTHID. EMP
Exemplo
SELECT
FROM
DEPTNOME,
X.ORG
Resultado: DEPTNOME
MATRIZ
CAMPINAS
RIO
MINAS
.
DEPTCOD
DEPTCOD
10
15
20
38
.
Anotaes:
- 47 -
DEPTNOME
MATRIZ
CAMPINAS
RIO
MINAS
GERENTE
160
50
10
30
DIVISO
CENTRO
SUDESTE
SUDESTE
SUDESTE
LOCAL
SO PAULO
CAMPINAS
R.JANEIRO
B.HORIZONTE
Anotaes:
- 48 -
Controle de Linhas
WHERE
traz certas linhas
estabelece condies
Exemplo: Listar empregados do departamento 20
SELECT
FROM
WHERE
Resultado:
DEPT
NOME
CARGO
20
20
20
20
SANTANA
ORSINI
JAMES
SNEIDER
GER
VENDAS
ATEND
ATEND
COMIS
612.45
128.20
126.50
Anotaes:
- 49 -
Operadores de Comparao
<>
=
or
>
>=
<
<=
>
<
Igual
Diferente
Maior
Maior ou Igual
Menor
Menor ou Igual
No maior
No menor
COMIS
= 1000
CARGO
Anotaes:
- 50 -
Exemplos de Where
Selecionar linhas atravs de dado numrico
SELECT DEPT, NOME,
CARGO
FROM X.STAFF
WHERE
DEPT = 20
NOME = SANTANA
Anotaes:
- 51 -
Seleo de Nulos
Valor nulo como critrio de SELECT
SELECT NOME, CARGO, COMIS
FROM X.STAFF
WHERE COMIS
IS NULL
Resultado:
NOME
CARGO
SANTANA
DANTAS
SOUZA
PLOTZ
GER
GER
GER
GER
COMIS
-
Anotaes:
- 52 -
IS NOT NULL
Resultado:
NOME
CARGO
ORSINI
OBRIEN
SUZUKI
ALMEIDA
JAMES
VENDAS
VENDAS
VENDAS
VENDAS
ATEND
COMIS
612.45
846.55
650.25
1152.00
128.20
Anotaes:
- 53 -
Mltiplas Condies
Operadores para mltiplas condies
AND
OR
Dadas duas condies
CARGO =
VENDAS
CARGO
SALRIO
SUZUKI
ALMEIDA
VENDAS
VENDAS
16808.30
16502.83
Anotaes:
- 54 -
WHERE CARGO
Resultado:
NOME
CARGO
SALRIO
ORSINI
OBRIEN
SUZUKI
ALMEIDA
JAMES
VENDAS
VENDAS
VENDAS
VENDAS
ATEND
18171.25
18006.00
16808.30
16502.83
13504.60
Anotaes:
- 55 -
OR ANOS > 10
Resultado:
NOME
CARGO
KOONITZ
JONES
GRAHAM
VIEIRA
VENDAS
GER
VENDAS
VENDAS
ANOS
6
12
13
7
COMIS
1386.70
1200.30
1285.00
Anotaes:
- 56 -
VENDAS
Resultado:
NOME
CARGO
KOONITZ
GRAHAM
VIEIRA
VENDAS
VENDAS
VENDAS
ANOS
6
13
7
COMIS
1386.70
200.30
1285.00
Anotaes:
- 57 -
IN
Anotaes:
- 58 -
Between
Extremidades inclusive
equivale a:
SELECT NOME, CARGO, ANOS
FROM X.STAFF
WHERE ANOS >= 9
AND ANOS <= 11
Resultado:
NOME
SOUZA
LU
LEA
WILSON
PINHO
CARGO
GER
GER
GER
VENDAS
GER
ANOS
10
10
9
9
10
Anotaes:
- 59 -
Pesquisas Parciais
Para pesquisar um subconjunto de caracteres: L I K E
% = Conjunto de caracteres quaisquer
_ = Um caracter qualquer
Exemplos:
1.
inclui:
GRAHAM
GONZALES
GAFNEY
2.
inclui:
WILSON ***
JASON
3.
inclui:
MOLINARI
4.
inclui:
LU (TAM=2
BYTES)
5.
inclui:
FRAYE
GRAHAM
*** VARCHAR
Anotaes:
- 60 -
Negao
WHERE NOME
exclui:
NOT
LIKE G%
GRAHAM
GONZALES
GAFNEY
Anotaes:
- 61 -
Order By
Para classificar numa sequncia especificada:
Lista classificada do pessoal do depto. 84
SELECT NOME, CARGO, ANOS
FROM X.STAFF
WHERE DEPT = 84
ORDER BY NOME
Resultado:
NOME
DAVIS
GAFNEY
PINHO
VIEIRA
CARGO
ANOS
VENDAS
VENDAS
ATEND
GER
5
7
5
10
OBS.:
Primeiro seleciona e depois classifica.
Para pequenos volumes pode ser usado sem problemas.
Anotaes:
- 62 -
Order By (cont.)
NOME
GAFNEY
PINHO
VIEIRA
DAVIS
CARGO
ATEND
GER
VENDAS
VENDAS
ANOS
5
10
7
5
NOME
PINHO
VIEIRA
GAFNEY
DAVIS
CARGO
GER
VENDAS
ATEND
VENDAS
ANOS
10
7
5
5
Anotaes:
- 63 -
Order By (cont.)
Anotaes:
- 64 -
Select Distinct
EXEMPLO:
SELECT DEPT
FROM X.STAFF
DEPT
20
20
38
38
38
15
10
.
.
DEPT
10
15
20
38
.
Anotaes:
- 65 -
DEPT
10
15
15
15
20
20
20
38
CARGO
GER
ATEND
GER
VENDAS
ATEND
GER
VENDAS
ATEND
Anotaes:
- 66 -
* MULTIPLICAO
/ DIVISO
SALRIO
COMIS
COL1
10
20
80
190
18357.50
18171.25
13504.60
14252.75
612.45
128.20
126.50
(1)
18783.70
13632.80
14379.25
Anotaes:
- 67 -
SALRIO
COMIS
RENDIMENTOS
80
190
20
10
13504.60
14252.75
18171.25
18357.50
128.20
126.50
612.45
-
13632.80
14379.25
18783.70
-
Anotaes:
- 68 -
COL1
OLIVEIRA
GRAHAM
20094.15
21200.30
Anotaes:
- 69 -
COL1
GRAHAM
OLIVEIRA
21200.30
20094.15
EXEMPLO 2:
SELECT CARGO, SALRIO + COMIS
FROM X. STAFF
ORDER BY CARGO, 2
Anotaes:
- 70 -
Operador de Concatenao
string1 || string2
string1string2
ABC
ABCXYZ
|| XYZ
TABELA X
SNOME
JONES
MAR Q U E S
Anotaes:
- 71 -
AVG
MAX
Anotaes:
- 72 -
COL2
COL3
86076,20
17245,89
550844,60
Anotaes:
- 73 -
Nulos so excludos.
Anotaes:
- 74 -
Count
COUNT (*)
COL1
8
COL2 COL3
16
19604.190625000
Anotaes:
- 75 -
EMPNO
000010
000020
000030
000040
-----Sum:
SALARY
1000
2000
2500
1500
-----7000
======
BONUS
500
NULL
400
100
----1000
=====
COMM
100
300
NULL
400
---800
====
SALARY+BONUS+COMM
1600
NULL
NULL
2000
------------------> 8800
3600
====
Anotaes:
- 76 -
SUM (A)
SUM (B)
B
5
3
-
=...
=...
SUM (A +B ) = ...
AVG (A) = ...
Anotaes:
- 77 -
Literais
Anotaes:
- 78 -
Literais
SELECT AVG(COMIS), SUM(COMIS)
FROM X.STAFF
COL1
COL2
513.31
12319.45
COL2
COL3
COL4
MED:
513.31
SOMA:
12319.45
Anotaes:
- 79 -
Group By
Agrupa um conjunto de linhas.
Com GROUP BY, a funo de coluna calcula um valor para cada
agrupamento.
SELECT SUM(SALRIO),
SUM(COMIS)
FROM X.STAFF
WHERE CARGO <> GER
SELECT SUM(SALRIO),
SUM(COMIS)
FROM X.STAFF
WHERE CARGO <> GER
GROUP BY DEPT
COL1
COL2
COL1
146976.93
4249.15
41269.53
45928.60
59778.80
.
.
.
COL2
1468.70
867.15
1913.30
.
.
.
Anotaes:
- 80 -
Group By (cont)
SELECT DEPT, SUM(SALRIO), SUM(COMIS)
FROM X.STAFF
WHERE CARGO <> GER
GROUP BY DEPT
Resultado:
DEPT
COL1
COL2
15
20
38
.
.
.
41269.53
45928.60
59778.80
.
.
.
1468.70
867.15
1913.30
.
.
.
Anotaes:
- 81 -
Group By (cont.)
NOTAS:
Podemos fazer GROUP BY sobre mltiplas colunas.
GROUP BY DEPT, CARGO
As colunas referenciadas pelo SELECT que no sejam funo precisam ser
agrupadas pelo GROUP BY(ver pagina anterior). O no agrupamento neste
caso gera erro.
O resultado contm uma linha sumrio para cada grupo.
Todos os valores nulos so considerados como um grupo.
Anotaes:
- 82 -
COL1
COL2
20
.
.
15
.
.
38
45928.60
.
.
41269.53
.
.
59778.80
867.15
.
.
1468.70
.
.
1913.30
Anotaes:
- 83 -
Anotaes:
- 84 -
Exemplo de Having
COL1
10
15
20
38
42
.
.
.
83643.45
61929.33
64286.10
77285.55
58369.05
.
.
.
COL1
83643.45
77285.55
.
.
.
Anotaes:
- 85 -
Select - 6 Clusulas
EMPL
Anotaes:
- 86 -
Anotaes:
- 87 -
Anotaes:
- 88 -
Anotaes:
- 89 -
Anotaes:
- 90 -
Funes STRING
Funes de Converso
Funes Date/Time
Anotaes:
- 91 -
Funes Escalares
Anotaes:
- 92 -
Anotaes:
- 93 -
DEPTNOME
COL1
MATRIZ
CAMPINAS
RIO
MINAS
BAHIA
MATR
CAMP
RIO
MINA
BAHI
Anotaes:
- 94 -
Length (argumento)
Anotaes:
- 95 -
Length (argumento)
(cont.)
COL1
CARGO
COL2
SANTANA
SILVAl
DANTAS
7
6
6
GER
VENDAS
GER
6
6
6
.
.
.
.
.
.
.
.
Anotaes:
- 96 -
Anotaes:
- 97 -
(cont.)
Resultado :
ID
COMIS
BONUS
COL1
10
20
30
40
612.45
846.55
534.25
345.89
-
0.00
612.45
345.89
846.55
Anotaes:
- 98 -
Funes de Converso
17506.75
COL2
17506
Anotaes:
- 99 -
Dados Date/Time
DATE, TIME, TIMESTAMP armazenados como decimal compactado sem sinal.
TIPO DE DADO
DATE
TIME
TIMESTAMP
FORMATO INTERNO
aaaammdd
hhmmss
aaaammddhhmmssnnnnnn
PADRO Formato
TIME
ISO
hh.mm.ss
USA
hh: mm AM
hh: mm PM
EUR
hh.mm.ss
JIS
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
26 bytes
Anotaes:
- 100 -
Aritmtica Date/Time
Somente subtrao
horrio - horrio = = > durao em hhmmss
Anotaes:
- 101 -
Somando/Subtraindo durao
data + ou - durao (data)
DATACOL1 + 3 MONTHS
- - Resulta em data
- - Resulta em TIMESTAMP
- - Resulta em durao
- - Resulta em durao
Anotaes:
- 102 -
Exemplos Date/Time
TABLE DT
PRJDOC
AX001
AX002
AX003
DATAINI
19900131
19880228
19870201
DATAFIM
20050331
19880831
19870201
HRINI
000000
000000
160000
HRFIM
153000
000000
234159
PRJCOD
AX001
AX002
AX003
SELECT PRJCOD,
Resultado:
COL1
COL2
31.01.1991
28.02.1989
01.02.1988
31.01.2005
30.06.1988
01.12.1986
DATAFIM - DATAINI,
PRJCOD
AX001
AX002
AX003
COL1
COL2
00150200
00000602
00000000
153000
000000
074159
Anotaes:
- 103 -
Resultado :
COL1
COL2
15.30.00
03.30 PM
Anotaes:
- 104 -
Resultado:
COL1
31
COL2
COL3
1990
Anotaes:
- 105 -
COL2
00150200
5538
(n.dias)
DATE, TIME
Extrai data ou horrio de um timestamp
Anotaes:
- 106 -
Valores Correntes
CURRENT DATE
Data de hoje
C U R R E N T TIME
Horrio corrente
C U R R E N T TIMESTAMP
Data e horrio corrente convertido para timestamp
SELECT * FROM DT
WHERE DATAINI < CURRENT DATE - 90 DAYS
Anotaes:
- 107 -
Join de Tabelas
ID
10
20
30
40
50
70
80
90
.
.
NOME
SANTANA
ORSINI
DANTAS
OBRIEN
SOUZA
ALMEIDA
JAMES
KOONITZ
.
.
DEPT
20
20
38
38
15
15
20
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 so relacionadas via dados comuns (domnios)
J o i n implementado pela clusula FROM ou WHERE
No faa J OIN de tabelas sem o predicado de join, o resultado um
produto cartesiano entre as tabelas
Anotaes:
- 108 -
GERENTE
10
30
100
.
DIVISO
.
WESTERN
.
.
X.STAFF
ID
30
10
100
.
NOME
DANTAS
SANTANA
PLOTZ
.
Resultado:
DEPTNOME
NOME
RIO
SANTANA
MINAS
DANTAS
BAHIA
PLOTZ
Anotaes:
- 109 -
(cont.)
DEPTNOME
MINAS
NOME
DANTAS
Anotaes:
- 110 -
Outer Join
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
ON GERENTE = ID
X. ORG
DEPTNOME G E R E N T E
SO PAULO
.
MINAS
30
BAHIA
100
RIO
10
X. STAFF
ID
10
20
30
40
100
X.ORG
DIVISO
.
WESTERN
CPC
WESTERN
Resultado:
NOME
SANTANA
ORSINI
DANTAS
OBRIEN
PLOTZ
DEPTNOME
NOME
RIO
MINAS
BAHIA
SANTANA
ORSINI
DANTAS
OBRIEN
PLOTZ
Anotaes:
- 111 -
Listar
Listaros
osempregados,
empregados,oonome
nomedo
dodepartamento
departamentoaonde
aondetrabalham
trabalhameesseus
eus
respectivos
respectivospedidos
pedidosde
devendas.
vendas.
SELECT ID, NOME, DEPT, DEPTNOME, CODPEDIDO
FROM X.STAFF, X.ORG, X.VENDAS
WHERE DEPT = DEPTCOD AND ID = COD_RVENDA
Resultado:
ID
NOME
DEPT
DEPTNOME
CODPEDIDO
20
20
20
20
40
ORSINI
ORSINI
ORSINI
ORSINI
OBRIEN
20
20
20
20
38
RIO
RIO
RIO
RIO
MINAS
3456
6667
3580
7010
4567
Anotaes:
- 112 -
Qualificadores
X.STAFF
CODIGO
20
20
.
.
NOME
SANTANA
ORSINI
.
.
X.ORG
CODIGO DEPTNOME
10
MATRIZ
10
.
.
RIO
.
.
DEPT
20
20
.
.
CARGO
GER
VENDAS
.
.
GERENTE
160
10
.
.
SELECT NOME,DEPTNOME,CODIGO
FROM X.STAFF, X.ORG
WHERE CARGO = GER
AND DEPT = CODIGO
Anotaes:
- 113 -
Qualificadores (cont.)
SOLUO
Qualificar com nome de tabela
SELECT NOME, X.ORG.CODIGO, DEPTNOME
FROM X.STAFF, X.ORG
WHERE CARGO = GER
AND DEPT = X.ORG.CDIGO
Qualificador correlacionado
Anotaes:
- 114 -
NOME
J A ME S
...
SALRIO
19456.50
...
DEPT
20
DEPTNOME
RIO
...
GERENTE
10
...
NOME
SANTANA
...
SALRIO
18357.50
...
DEPT
20
Anotaes:
- 115 -
SALARIO
.
19456.50
NOME
SALARIO
SANTANA
.
18357.50
Anotaes:
- 116 -
Unio
UNION faz a unio de tabelas resultados
SELECT A1, A4 FROM TBLA
WHERE A2 = Z
UNION
Resultado
.
.
.
.
.
.
.
.
.
.
Anotaes:
- 117 -
Unio
(cont.)
Anotaes:
- 118 -
Unio - Exemplo
A faixa de salrios dos atendentes atingiria a faixa de vendas
se fosse dado um aumento de 17% e 2% respectivamente?
SELECT CARGO, SALRIO * 1.17
FROM X.STAFF
WHERE CARGO = ATEND
UNION
Resultado:
COL1
.
21420.0000
17144.4660
16918.2000
16832.8866
Anotaes:
- 119 -
UNION
SELECT SOBRENOME
FROM X.ENTREVISTADOS
WHERE SIT = REP
NOME
NOME
JACOBS
MAR Q U E S
ARANTES
SILVA
MAR Q U E S
JACOBS
ARANTES
JACOBS
MAR Q U E S
SILVA
UNION ALL
UNION
- No faz classificao
- No elimina duplicados
- Classifica
- Elimina duplicados
Anotaes:
- 120 -
Subquery
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
Anotaes:
- 121 -
Exemplo de Subquery
Listar os funcionrios com salrio superior mdia da companhia
X. STAFF
NOME
SALARIO
16675.64
Resultado:
NOME
SALARIO
SANTANA 18357.50
ORSINI
18171.25
Anotaes:
- 122 -
Consideraes Subquery
Anotaes:
- 123 -
Resultado :
NOME
SALARIO
MOLINARI
22959.20
Anotaes:
- 124 -
Anotaes:
- 125 -
SALARIO
FRAYE
GRHAM
JONES
MOLINARE
21150.00
21000.00
21234.00
22959.20
Anotaes:
- 126 -
Lista
Listaclassificada
classificadados
dosfuncionrios
funcionrioscom
comsalrio
salriomaior
maiorque
queaa
mdia
mdiasalarial
salarialde
dealgum
algumdepartamento
departamento
Anotaes:
- 127 -
SALRIO
19260.25
15484.50
17844.00
.
.
Anotaes:
- 128 -
IN
Anotaes:
- 129 -
IN (cont.)
Anotaes:
- 130 -
DEPT
COL1
66
51
84
20
16880.175000000
16235.200000000
15443.000000000
15309.530000000
Anotaes:
- 131 -
Subquery Correlacionado
Listar
Listar os
osempregados
empregadoscom
comsalrio
salriosuperior
superiormdia
mdiade
deseus
seus
respectivos
departamentos.
respectivos departamentos.
SELECT NOME, SALRIO
FROM X.STAFF CV
WHERE SALRIO > (SELECT AVG(SALRIO)
FROM X.STAFF
WHERE DEPT = CV.DEPT)
Anotaes:
- 132 -
Anotaes:
- 133 -
ID
NOME
SALRIO
DEPT
30
MAR E N C H I
17506.75
38
Anotaes:
- 134 -
Manuteno
Anotaes:
- 135 -
PCODIGO,
PNOME,
RESP,
DATAIN)
PNOME
.................
SUP. SISTEMA
SUP. APLICAO
SUP. DB \DC
.................
DEPT R E S P
EQUIPE
....
..........
..........
E21 000320 001.00
E21 000330 001.00
E21 000340 001.00
....
............ ...........
B01
?
DATAINI
.............
19880101
19880101
19880101
.............
19880920
DATAFIM
..............
19880201
19880201
19880201
...............
?
Anotaes:
- 136 -
PNOME
DEPT
RESP
E Q U I P E DATAINI
DATAFIM
PNOME
DEPT
.................
B01
E11
OPERAO
SUP. SISTEMA E21
...................
E21
...................
E21
.................
E21
RESP
E Q U I P E DATAINI
DATAFIM
000020
000090
000100
000320
000330
000340
001.00
005.00
004.00
001.00
001.00
001.00
19870915
19880501
19880201
19880201
19880201
19880201
19870101
19860101
19820101
19820101
19820101
19820101
Anotaes:
- 137 -
Update de Colunas
ANTES:
PCOD
............
OP2011
OP2012
OP2013
.............
MA2114
PNOME
.................
SUP. SISTEMA
SUP. APLICAO
SUP. DB \DC
.................
DEPT R E S P
EQUIPE
....
.......... ..........
E21 000320 001.00
E21 000330 001.00
E21 000340 001.00
....
............ ...........
B01
001.00
DATAINI
.............
19880101
19880101
19880101
.............
19880920
DATAFIM
..............
19880201
19880201
19880201
...............
19890201
DATAINI
.............
19880101
19880101
19880101
.............
19870601
DATAFIM
..............
19880201
19880201
19880201
...............
?
UPDATE RESTPROJ
SET EQUIPE = EQUIPE * 2, DATAFIM = NULL,
DATAINI = 1987-06-01
WHERE DEPT = B01
PCOD
............
OP2011
OP2012
OP2013
.............
MA2114
PNOME
.................
SUP. SISTEMA
SUP. APLICAO
SUP. DB \DC
.................
DEPT R E S P
EQUIPE
....
.......... ..........
E21 000320 001.00
E21 000330 001.00
E21 000340 001.00
....
............ ...........
B01
002.00
Anotaes:
- 138 -
UPDATE PESSOAL
SET ANOS = ANOS + 1
Obs.: Cuidado com este tipo de alteraao, pois todas as linhas sero
afetadas
Anotaes:
- 139 -
Delete de Linhas
ANTES:
PCOD
............
OP2011
OP2012
OP2013
.............
MA2114
PNOME
.................
SUP. SISTEMA
SUP. APLICAO
SUP. DB \DC
.................
DEPT RESP
EQUIPE
....
..........
..........
E21 000320 001.00
E21 000330 001.00
E21 000340 001.00
....
............ ...........
B01
001.00
DATAINI
.............
19880101
19880101
19880101
.............
19880920
DATAFIM
..............
19880201
19880201
19880201
...............
19890201
PNOME
.................
SUP. SISTEMA
SUP. APLICAO
SUP. DB \DC
.................
DEPT RESP
E Q U I P E DATAINI DATAFIM
....
..........
..........
.............
..............
E21 000320 001.00 19880101 19880201
E21 000330 001.00 19880101 19880201
E21 000340 001.00 19880101 19880201
....
............ ........... .............
...............
Anotaes:
- 140 -
PNOME
.................
SUP. SISTEMA
SUP. APLICAO
SUP. DB \DC
.................
DEPT RESP
EQUIPE
....
..........
..........
E21 000320 001.00
E21 000330 001.00
E21 000340 001.00
....
............ ...........
B01
001.00
DATAINI
.............
19880101
19880101
19880101
.............
19880920
DATAFIM
..............
19880201
19880201
19880201
...............
19890201
DELETE
DELETE FROM
FROM TESTPROJ
TESTPROJ
Obs.: Cuidado com este tipo de deleo, pois todas as linhas ser o
afetadas
DEPOIS:
PCOD
PNOME
DEPT RESP
EQUIPE
DATAINI DATAFIM
Anotaes:
- 141 -
Programao
Parte 2
Anotaes:
- 142 -
NO RELACIONAL
COBOL
PLI
FORTRAN
A S S E MB L E R
C
ARQUIVOS
REGISTROS
RELACIONAL
SQL
embutido
CURSOR
VAR.HOST
SQL
TABELAS
LINHAS
Anotaes:
- 143 -
Programao
O SQL trabalha com tabelas e linhas. uma linguagem desenvolvid a
para manipular conjuntos.
J as linguagens tradicionais trabalham com arquivos e registros e no
conseguem reconhecer tabelas e linhas.
Para podermos trabalhar com o SQL dentro de programas em
linguagens tradicionais, devemos codific-lo usando delimitadores
especiais. Esta tcnica conhecida como SQL embutido e assemelhase ao COMAND LEVEL do CICS.
Para simularmos um arquivo com seus registros, trabalha-se com o
CURSOR do DB2. Assim, o programa pode acessar linhas de uma
tabela para uma manipulao qualquer.
As colunas no so manipuladas diretamente pelas linguagens
tradicionais. Para isto so utilizadas as variveis HOST que hospedam
o contedo das colunas.
Anotaes:
- 144 -
Instruo SQL
END-EXEC.
DELIMITADORES
COBOL
PL/I
FORTRAN
ASSEMBLER
EXEC SQL
instruo SQL
EXEC SQL
instruo SQL
EXEC SQL
X instruo SQL
EXEC SQL
instruo SQL
END-EXEC.
;
Anotaes:
- 145 -
Anotaes:
- 146 -
Varivel Host
SAL
SQL
EXEC SQL...
END-EXEC.
Anotaes:
- 147 -
A varivel HOST deve ser compatvel com a coluna, quanto ao seu tipo
de dado e tamanho.
Anotaes:
- 148 -
Outros Exemplos
EXEC
MATR
SNOME
EXEC
SQL
UPDATE EMPR
SET SALARIO = SALARIO * :REAJ
WHERE CARGO = :CARGO
END-EXEC.
CARGO
REAJ
Anotaes:
- 149 -
Anotaes:
- 150 -
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.
Anotaes:
- 151 -
ESTRUTURA
EXEC
SQL
SELECT SOBRENOME, DEPT
INTO
:SNOME, :DEPT
FROM EMPR
WHERE MATR = :MATR
END-EXEC.
SNOME
DEPT
MATR
equivale :
EXEC
SQL
SELECT SOBRENOME, DEPT
INTO
:ESTRUT
FROM EMPR
WHERE MATR = :MATR
END-EXEC.
SNOME
DEPT
MATR
Anotaes:
- 152 -
Anotaes:
- 153 -
PL/I
COBOL
ASSEMBLER
FORTRAN
SMALLINT
DCL N1 BIN
01 NI PIC S9(4)
N1 DS H
FIXED(15)
COMP.
INTEGER*2/N1
INTEGER/ INT
DCL N2 BIN
01 N2 PIC S9(9)
N2 DS F
FIXED(31)
COMP.
INTEGER*4 N2
DCL N4 BIN
01 N4 COMP -1.
FLOAT /
FLOAT(53) /
DOUBLE
PRECISION
DCL N5 BIN
01 N5 COMP - 2.
FLOAT(53)
N4 DS E
N5 DS D
R E A L *4 N4 /
REAL N4
R E A L *8 N5 /
DOUBLE
PRECISION N5
Anotaes:
- 154 -
CCAARRAACCTTEERR SSTTRRIINNGG
DB2
CHAR(10)
PL/I
DCL STR1
CHAR (1);
COBOL
01 STR1 PIC X(10)
ASSEMBLER
FORTRAN
STR1 DS
CHARACTER*10
CL10
STR1
01 STR2
VARCHAR(80) D C L S T R 2
STR2 DS H,
CHARACTE*80
49 STR2L
CHAR (80) VAR;
CL80
STR2
PIC S9(4) COMP.
49 STR2C
PIC X(80).
Anotaes:
- 155 -
DATA/HORRIO/TIMESTAMP
DB2
PL/I
COBOL
ASSEMBLER
FORTRAN
DATE
DCL DT CHAR(10)
CHARACTER*10 DT
TIME
DCL TM CHAR(8)
01 TM PIC X(8)
TM DS CL8
CHARACTER*8 TM
CHARACTER*26 TS
PLI
DCL DBC1 GRAPHIC(5)
COBOL
01 DBC1 PIC G(5) DISPLAY-1.
01 DBC2
49 DBC2L PIC S9(4) COMP.
49 DBC2C PIC G(40) DISPLAY-1.
Anotaes:
- 156 -
Anotaes:
- 157 -
Commit/Rollback
COMMIT
ROLLBACK
LUW ABORTADA
ATUALIZAO DESFEITA A PARTIR DO LTIMO COMMIT
CURSOR FECHADO (EXCETO COM OPO WITH HOLD)
**** No Banco todo programa BATCH que atualiza tabelas DB2 deve ter
COMMIT e lgica de RESTART. Consultar normas do KIT ANALISTA.
Anotaes:
- 158 -
Commit/Rollback (cont.)
A instruo COMMIT:
A instruo ROLLBACK:
Anotaes:
- 159 -
Luw
UPDATE
CONTA
500
500
400
500
UPDATE
POUPANA
400
COMMIT
600
400
CONTA POUPANA
600
CONTA
100
POUPANA
100
PONTO DE
CONSISTNCIA
NOVO PONTO DE
CONSISTNCIA
LUW
ROLLBACK
500
LUW ABORTADA
500
Anotaes:
- 160 -
Luw (cont.)
Anotaes:
- 161 -
Commit/Rollback
COMMIT
TSO/BATCH
COMMIT
IMS
call C H K P
call sync
GU IOPCB
CICS
comando SYNCPOINT
ROLLBACK
TSO/BATCH
ROLLBACK
IMS
call R O L L
call R O L B
CICS
comando ROLLBACK
Anotaes:
- 162 -
SQLCA
Anotaes:
- 163 -
SQLCA (cont.)
Anotaes:
- 164 -
SQLCA (cont.)
CONDIO
ERRO GRAVE
ADVERTNCIA
NO
ENCONTRADO
OU
FIM DO CURSOR
SUCESSO
SQLCODE
negativo
positivo
diferente de 100
VERIFICAR
VERIFICAR
SQLWARN0
SQLWARN0
+ 100
Anotaes:
- 165 -
Formato SQLCA
01 SQLCA.
05 SQLCAID
05 SQLCABC
05 SQLCODE
05 SQLERRM.
49 SQLERRML
49 SQLERRMC
05 SQLERRP
05 SQLERRD
05 SQLWARN.
10 SQLWARN0
10 SQLWARN1
10 SQLWARN2
10 SQLWARN3
10 SQLWARN4
10 SQLWARN5
10 SQLWARN6
10 SQLWARN7
05 SQLEXT.
10 SQLWARN8
10 SQLWARN9
10 SQLWARNA
10 SQLSTATE
PIC X(8).
PIC S9(9) COMP-4.
PIC S9(9) COMP-4.
PIC S9(4) COMP-4.
PIC X(70).
PIC X(8).
OCCURS 6 TIMES
PIC S9(9) COMP-4.
PIC
PIC
PIC
PIC
PIC
PIC
PIC
PIC
X.
X.
X.
X.
X.
X.
X.
X.
PIC
PIC
PIC
PIC
X.
X.
X.
X(5).
Anotaes:
- 166 -
SQL Warning
SQLWARN3:
SQLWARN4:
SQLWARN5:
SQLWARN6:
Anotaes:
- 167 -
Anotaes:
- 168 -
Auxlio Codificao
INSTRUO WHENEVER
manipulao de excees
DCLGEN
gerar declarao de variveis HOST
INSTRUO INCLUDE
embutir estrutura de SQLCA/var.HOST no programa
DSNTIAR/DSNTIR
rotina de formataes de mensagens de erro.
Anotaes:
- 169 -
Instruo Whenever
CONDIO
AO
END-EXEC.
CONDIO
SQLERROR
SQLWARNING
:
:
NOT FOUND
SQLCODE negativo
SQLCODE positivo diferente de 100
ou SQLWARN0 = W
SQLCODE = +100
AO
GO TO :X
CONTINUE
Anotaes:
- 170 -
Ex.:
EXEC SQL WHENEVER SQLERROR GO TO :ROTULOZ;
Com esta instruo, um SQLCODE negativo faz o programa saltar para a
rotina rotulada por ROTULOZ.
S no cobol.
Anotaes:
- 171 -
DCLGEN
TABELA EMPR
MATR CHAR (6)
NOME VARCHAR(12)
CATLOGO
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
Anotaes:
- 172 -
DCLGEN (cont.)
Anotaes:
- 173 -
Instruo Include
MEMB3
EXEC SQL
INCLUDE MEMB3
END -E X E C .
.
.
.
EXEC SQL
INCLUDE SQLCA
END-E X E C .
01 DCLEMPR.
10...
01 SQLCA
05...
Anotaes:
- 174 -
Anotaes:
- 175 -
DBRM (Biblioteca)
Catlogo do DB2
COMPILE
BIND
Definio Table/Column
Autorizaes
Mdulo Objeto
SYSPACKAGE
LINK EDIT
Diretrio do DB2
Diretrio do DB2
Package
L o a d Mdulo
(Language Interface)
Plan
EXECUTE
Anotaes:
- 176 -
Pr-compilao
Compilao e Linkedio
BIND
Anotaes:
- 177 -
Precompilador
Anotaes:
- 178 -
ndices utilizados
estratgia de locking
estratgia de resoluo de JOIN, etc.
Anotaes:
- 179 -
BIND
Catlogo
do DB2
VALIDAO
Table/col
Table/col
Referencias
descries
AUTORIZAO
Tipo de
usurios
soliticao
autorizados
ESTRATGIA DE ACESSO
Tipo de
caractersticas
solicitao
fsicas
DBRM
na
S Y S I B M . S Y S P A C K S T MT
Package
Anotaes:
- 180 -
Anotaes:
- 181 -
O otimizador do DB2 pesa fatores com CPU e I/O para optar por uma
estratgia de acesso.
Anotaes:
- 182 -
PACKAGE
DBRM
BIND
B I N D PACKAGE
P A C K A G E(online)
( online )
MEMBER
MEMBER (dbrma)
( dbrma)
BBIND
I N D PPACKAGE
A C K A G E ( (batch)
batch)
MEMBER
(
dbrma)
MEMBER (dbrma)
online
dbrma
batch
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
Anotaes:
- 183 -
COLLECTION
pkg1
batch
pkg3
Anotaes:
- 184 -
prog3
prog1
prog2
Pre-compilador
prog3
prog1 prog2
Compilador/ Link-edit
dbrm3
dbrm1
dbrm2
BIND PACKAGE
Diretrio
Load Mdulo
: Timestamp da precompilao
Anotaes:
- 185 -
.
CALL DSNHLI (dbrm1, ,1)
.
.
CALL DSNHLI (dbrm1, ,2)
.
.
lmoda
Diretrio
CALL DSNHLI (dbrm3, ,1)
.
RUN PROGRAM ( Imoda)
PLAN ( plana)
collx
dbrm1
colly
dbrm3
plana
dbrm1
collx.dbrm1, collz.*
dbrm2
collz
Anotaes:
- 186 -
PLANOS E PACKAGES
Um package somente pode ser localizado e executado via um PLANO
Anotaes:
- 187 -
ERRO DE TIMESTAMP
.
CALL DSNHLI (dbrm1, ,1)
.
plana
colly .*, collx.*
collx
dbrm1
dbrm1
-805
51002
Anotaes:
- 188 -
BINDPACKAGE
PACKAGE
BIND
QUAL
(TEST)
QUAL (TEST)
TEST.TAB1
BIND PACKAGE
PACKAGE
BIND
binder.TAB1
BINDPACKAGE
PACKAGE
BIND
QUAL
(PROD)
QUAL (PROD)
PROD.TAB1
Anotaes:
- 189 -
Cursor
SELECT MATR,SOBRENOME
FROM EMPR
W H E R E D E P T =D01
SOBRENOME
SILVA
PARKER
050 P A R K E R
CLARK
MATR SNOME
Anotaes:
- 190 -
Cursor (cont.)
Anotaes:
- 191 -
DEFINIO 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.
CLOSE CURSOR
EXEC SQL CLOSE K9 END-EXEC.
Anotaes:
- 192 -
Procure Definir
DECLARE CURSOR: No COBOL antes da PROCEDURE
No EASY antes do JOB INPUT
Ou verifique os padres da sua instalao.
Anotaes:
- 193 -
Anotaes:
- 194 -
Anotaes:
- 195 -
ORDER BY,
GROUP BY,
DISTINCT,
UNION,
funo ou
Join.
Anotaes:
- 196 -
Anotaes:
- 197 -
A atualizao deve ser feita para a linha que est sendo apontada pelo
CURSOR especificado na clausula WHERE CURRENT OF CURSOR.
ORDER BY,
GROUP BY,
DISTINCT,
UNION,
funo ou
Join.
Anotaes:
- 198 -
Manipulao de Cursor
POSICIONAMENTO
OPEN
CLOSE
REUTILIZAO do CURSOR
OPEN
Anotaes:
- 199 -
Uma instruo COMMIT fecha todos os cursores sem opo with hold e
valida todas as atualizaes efetuadas at ento.
Anotaes:
- 200 -
Varivel Indicadora
EXEC SQL
SELECT
CARGO DEPT, FONE,
INTO :CC:CCI,
:DPT, :FON:NFON,
FROM EMPR
WHERE MATR = :ID
NOME
:NOM
END-EXEC.
coluna
CARGO
Var.HOST
:CC
Var.IND
:CCI
SELECT/
FETCH
ANALISTA
NULO
ANALISTA
inalterado
0
-1
UPDATE/
INSERT
GERENTE
NULO
GERENTE
ignorado
0
-1
Anotaes:
- 201 -
Anotaes:
- 202 -
EST
VETOR
01 EST.
10 CC PIC...
10 DPT PIC...
10 FON PIC...
10 NOM PIC...
01 VETOR.
10 ARRAY PIC S9(4) COMP
OCCURS 3 TIMES
Anotaes:
- 203 -
Anotaes:
- 204 -
Anotaes:
- 205 -
MV1
PIC S9(9)
MV2
PIC S9(9)
MV3
PIC S9(9)
I-VARIABLES.
05 IV1 PIC S9(4)
05 IV2 PIC S9(4)
05 IV3 PIC S9(4)
COMP VALUE 0.
COMP.
COMP.
COMP.
COMP.
COMP.
SMI1
INT1
SMI2
2
4
345678
2111111111
0
4
EXEC SQL
SELECT SMI1,
SMI1*INT1, SMI1/SMI2
INTO :MV1:IV1, :MV2:IV2, :MV3:IV3 FROM TABLEA
END-EXEC.
1. Primeira linha:
2. Segunda linha:
MV1 = 1
IV1 =0
MV2 = 691356 IV2 = 0
MV3 = 0
IV3 =-2
SQL CODE =+802
MV1 = 4
IV1 =0
MV2 = 691356 IV2 = -2
MV3 = 1
IV3 =0
SQL CODE =+304
Anotaes:
- 206 -
var.IND
0
INTERPRETAO
var. HOST contm valor no nulo
-1
-2
n (>0)
Anotaes:
- 207 -
Estratgia de Acesso
SELECT *
FROM EMPR
WHERE SEXO = F
AND (CARGO = ANALISTA OR
AND DEPT IN (E11,D14)
NDICES DISPONVEIS?
QUANTIDADE DE PGINAS LIDAS SE TABLESPACE FOR
VARRIDO? E SE NDICES FOREM UTILIZADOS?
QUAL A MELHOR ORDEM DE EXECUO DOS TESTES?
EXPLAIN. usado para verificar qual estratgia foi escolhida
pelo DB2
Anotaes:
- 208 -
Anotaes:
- 209 -
Execuo do Programa
CICS, IMS, TSO
MDULO
DE
CARGA
RELATRIO
DB2
CALL
VSAM
PLANO
PACKAGE
TABELAS
DB2
Anotaes:
- 210 -
- 805 (PACKAGE)
Anotaes:
- 211 -
Anotaes:
- 212 -
Recomendaes DML
Use DCLGEN para gerar variveis HOST compatveis com
colunas. Evite assim converses numricas.
- SELECT A INTO
:B
- WHERE A = :B
Anotaes:
- 213 -
Anotaes:
- 214 -
SELECT MATR,
FROM EMPR E,
WHERE E.DEPT
AND E.MATR
SOBRENOME
PROJETO P
= P.DEPT
= P.RESP
Anotaes:
- 215 -
CPU ADICIONAL
Anotaes:
- 216 -
Uso do ndice
USO
USO DO
DO NDICE
NDICE
COLUNA INDEXADA
INDEX
CANDIDATO
SORT
CANDIDATO
IN
LIKE
BETWEEN
>,>=,<,<=,>,<,=
=,<>
NOT
OR
ORDER BY
GROUP BY
DISTINCT
COMPARED TO:
LONGER LITERAL
ARITIMETIC EXP.
DIFF. DATA TYPE
USED FOR JOIN
SIM
NOTA 1
SIM
SIM
NO
NOTA 2
NOTA 3
SIM
SIM
SIM
SIM
SIM
SIM
NO
NO
NO
SIM
SIM
Anotaes:
- 217 -
Expresses Aritmticas
EEXXPPRREESSSSEESSAARRI TI TMMTICAS
TICAS
MATCHING INDEX EM SALARY NO UTILIZADO
EXEC SQL
SELECT LASTNAME, SALARY
FROM TEMPL
WHERE SALARY <= :SAL + 1000
END-EXEC
MATCHING INDEX EM SALARY CONSIDERADO
SAL = SAL + 1000
EXEC SQL
SELECT LASTNAME, SALARY
FROM TEMPL
WHERE SALARY <=: SAL
END-EXEC
Anotaes:
- 218 -
Condies Not
CONDIES
CONDIESNOT
NOT
MATCHING INDEX EM DEPTNO NO UTILIZADO
WHERE
WHERE
WHERE
WHERE
WHERE
DEPTNO
DEPTNO
DEPTNO
DEPTNO
DEPTNO
= E01
NOT LIKE E%
NOT IN (E11,D11)
NOT BETWEEN A11 AND B28
IS NOT NULL
Anotaes:
- 219 -
Uso do Like
USO
USO DO
DO LIKE
LIKE
MATCHING INDEX EM LASTNAME NO UTILIZADO
WHERE LASTNAME LIKE %SON
WHERE LASTNAME LIKE _SON
WHERE SUBSTR(LASTNAME ,3,3) = SON
Anotaes:
- 220 -
Subqueries
SSUUBBQQUUEERRI IEESS
MATCHING INDEX EM DEPTNO CONSIDERADO:
WHERE DEPTNO =(SELECT WORKDEPT FROM EMPL
WHERE EMPNO = 123456)
- SUBQUERY NO-C O R R E L A T A
- VALOR NICO DA SUBQUERY
MATCHING INDEX EM DEPTNO NO UTILIZADO
WHERE DEPTNO= ANY (SELECT WORKDEPT
FROM EMPL
WHERE LASTNAME=SMITH)
SELECT LASTNAME, FIRSTNAME
FROM EMPL MY
WHERE SALARY> (SELECT AVG(SALARY)
FROM EMPL
WHERE WORKDEPT = MY.WORKDEPT)
- LISTA DE VALORES DA SUBQUERY
Anotaes:
- 221 -
Explain
EEXXPPLLAAIINN
P L A N -T A B L E
Anotaes:
- 222 -
Explain (cont.)
NECESSIDADE DE NDICE
PROBLEMA DE LOCKING
FERRAMENTA DO PROGRAMADOR
Anotaes:
- 223 -
Explain (cont.)
EEXXPPLLAAI INN
Comando
SQL
EEXPLAIN
XPLAIN
PLAN - TABLE
EXPLAIN ALL
SET QUERY = n
FOR sql-statement
Anotaes:
- 224 -
Plan_table
Anotaes:
- 225 -
Plan_table (cont.)
PF3
EDIT DB2. DISCOVER.EXPLAIN(GOLD) -01.03 ---------COMMAND===> ; ; ;
****** ************** TOP OF DATA
****************
000100 EXPLAIN ALL SET QUERYNO = 1 FOR
000200
SELECT LASTNAME , FIRSTNAME , SALARY
000300
FROM EMP
000400
WHERE EMPNO = 000280 ;
000500 - - 000600 SELECT *
000700 FROM PLAN_TABLE
000800 WHERE QUERYNO = 1 ;
****** ************* BOTTOM OF DATA **************
Anotaes:
- 226 -
Plan_table (cont.)
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
Anotaes:
- 227 -
Tpicos Adicionais
Parte 3
Anotaes:
- 228 -
LOCKING
Anotaes:
- 229 -
Locking
O propsito do mecanismo do LOCKING indicar se um dado est
sendo utilizado ou no, para permitir ao DB2 organizar um situa o
de acesso mltiplo aos dados.
Protege contra
acesso a um dado com alterao no validada.
atualizao de um dado que est sendo utilizado (para leitura
por exemplo).
Anotaes:
- 230 -
LLOOCCKKSSIIZZEE TTAABBLLEESSPPAACCEE
UPDATE
SELECT
WAITING
WAITING
UPDATE
WAITING
SELECT
Anotaes:
- 231 -
UPDATE
SELECT
WAITING
UPDATE
WAITING
SELECT
Anotaes:
- 232 -
LOCKSIZE
L O C K S I Z E PAGE/ANY
PAGE/ANY
SELECT
UPDATE
UPDATE
SELECT
Anotaes:
- 233 -
LLOCKSIZE
O C K S I Z E RROW
OW
SELECT
UPDATE
UPDATE
SELECT
Anotaes:
- 234 -
Granularidade do Lock
Anotaes:
- 235 -
Modo do Lock
Por modos de LOCKING entenda-se modalidade quanto
exclusividade sobre um recurso, que podem ser:
S : (Shared) compartilhado. O dado est em uso para leitura por um ou
mais usurios.
X :(Exclusive) exclusivo. O dado est em uso por um nico usurio e
os demais usurios interessados ficam enfileirados.
U : (UPDATE). O dado est em uso por um usurio com inteno de
atualizar. Enquanto ele estiver lendo outros tambm podem ler (S ),
mas quando ele resolver atualizar, o DB2 impede novos acessos e
espera os demais usurios terminarem seus servios para transformar
o LOCK em tipo X.
Anotaes:
- 236 -
Anotaes:
- 237 -
Anotaes:
- 238 -
Autorizaes
Anotaes:
- 239 -
Segurana do DB2
Anotaes:
- 240 -
Itens Protegidos
DATABASE
CATALOG
TABLESPACE
UTILITIES
TABLE
COMMANDS
INDEX
BIND
VIEW
EXECUTE
STORAGE GROUP
GRANT
BUFFER POOL
Anotaes:
- 241 -
TSO
IMS/DC
CICS
BATCH
LOGON
SIGNON
SIGNON
PARMETRO
USER-ID
USER-ID
USER-ID
USER-ID NO
LTERM
TRANSAO
CARTO JOB
TERM-ID
Anotaes:
- 242 -
Comando Grant/Revoke
GRANT
ON
TO
Lista de privilgios
Lista de recursos
Lista de USER -IDS
Lista de privilgios
Lista de recursos
FROM
Anotaes:
- 243 -
Utilitrios
Anotaes:
- 244 -
Utilitrios DB2
UTILITRIO
CHECK
INDEX
CHECK DATA
FUNO/DESCRIO
PROCESSAMENTO
CONCORRENTE
LEITURA
LEITURA
COPY
QUALQUER TIPO
LOAD
NENHUM NO
TABLESPACE OU
PARTIO SENDO
CARREGADO
QUALQUER TIPO
QUALQUER TIPO
Anotaes:
- 245 -
UTILITRIO
QUIESCE
RECOVER
REORG
FUNO/DESCRIO
PROCESSAMENTO
CONCORRENTE
LEITURA
NENHUM
REPORT
LISTA INFORMAES DE TABLESPACES
PROCESSING
READY-ONLY
DURANTE
UNLOAD; NEHUM
DURANTE RELOAD
QUALQUER TIPO
RUNSTATS
QUALQUER TIPO
STOSPACE
QUALQUER TIPO
Anotaes:
- 246 -
Utilitrio ''Load''
ARQUIVO
ARQUIVO
SEQUENCIAL
SEQUENCIAL
DE
DEENTRADA
ENTRADA
UTILITRIO
UTILITRIO
LOAD
LOAD
Anotaes:
- 247 -
LOAD
PHASE 2
REGISTROS DO
INDICE E FOREIGN
KEY
SEQ
INPUT
RID MAP
DA TABELA
CARREGADA
BUILD
SYSUT1
SYSREC
TABLE
PHASE 3
SORT
DFSORT
DFSORT
TODOS INDICES
SYSMAP
ERROS DE CONVERSO NO
SYSERR
REGISTROS
SORTEADOS
PHASE 4
INDEXVAL
TAB ELA
ERROS DE
DUPLICA DOS NO
SYSERR
AS DUAS LINHAS
DUPLICADAS SO
REMOVIDAS DA TABELA.
INDICES
DUPLICA DOS
SYSERR
Anotaes:
- 248 -
PHASE 5
TABELA PARENT
TABELA
FOREIGN
KEY
INVLIDAS
REMOVIDAS
ENFORCE
VIOLAES DE
INTEGRIDADE
REFERENCIAL
PHASE 6
SYSERR
DISCARD
RID MAP
DA TABELA
CARREGADA
SEQUENCIAL
INPUT
SYSUT1
RID MAP
DA TABELA
CARREGADA
SYSMAP
DATA SET DE
DISCARD
COMPLETO
SYSDISC
PHASE 7
REPORT
ERROR
ERROR
SUMMARY
SUMMARY
TODAS VIOLAES
ACUMULADAS
SYSERR
Anotaes:
- 249 -
SORT
BUILD
INDEXVAL
ENFORCE
Anotaes:
- 250 -
REPORT
Anotaes:
- 251 -
POSITION (2:6),
POSITION (8:16),
)
Anotaes:
- 252 -
LOAD INICIAL:
- Tablespace vazio (Este o default)
LOAD DATA
R E S U ME NO
INTO TABLE EMP
LOAD Adicional :
- Tablespace no -vazio
- Para carregar outra tabela no mesmo tablespace
- Para adicionar linhas em uma tabela no-vazia
LOAD DATA
R E S U ME YES
INTO TABLE EMP
Anotaes:
- 253 -
Exerccio - Load
Anotaes:
- 254 -
Anotaes:
- 255 -
USER TABELA A
UM OU MAIS TABLESPACES
USER TABELA B
UTILITRIO
UTILITRIO
CCHHEECCKK
DATA
DATA
ERROR
ERROR
SUMMARY
SUMMARY
Anotaes:
- 256 -
SORT
Faz o sort das foreign keys caso elas no tenham sido extraidas
atravs do ndice.
Anotaes:
- 257 -
Anotaes:
- 258 -
Utilitrio 'Runstats''
OBTEM INFORMAES SOBRE A CARACTERSTICA DOS DADOS NOS TABLESPACES,
NDICES E PARTIES QUE SERO ARMAZENADAS NO CATLOGO E USADAS PELO
DB2 PARA DEFINIR O MTODO DE ACESSO DURANTE O BIND. TAMBM PODEM SER
USADAS PELO DBA PARA AVALIAR A NECESSIDADE DE REORGANIZAO DOS DADOS
REORGANIZAR ?
Anotaes:
- 259 -
OBS: No Banco existe uma rotina pronta para o R unstats , solicitar a criao ao
analista de produo.
Anotaes:
- 260 -
Opes do Runstats
R E P O R T N O |Y E S
Produz um relatrio com as estatsticas obtidas pelo Runstats
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
ALL
NONE
- no atualiza o catlogo
SPACE
ACCESSPATH
Anotaes:
- 261 -
Anotaes:
- 262 -
Anotaes:
- 263 -
Utilitrio 'COPY''
CRIA UM BACKUP DE UM TABLESPACE OU DE UMA PARTIO.
USER TABELA A
TABLESPACE
USER TABELA B
UTILITRIO
UTILITRIO
CCOOPPYY
IMAGE COPY
Anotaes:
- 264 -
COPY
Cpia do objeto
Anotaes:
- 265 -
Opes do Copy
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.
Anotaes:
- 266 -
T E MP O
DADOS
CPIA
CPIA
CPIA
Anotaes:
- 267 -
Recover
RECUPERA OS DADOS USANDO UMA CPIA E APLICANDO OS
REGISTROS DA LOG
TEMPO
DADOS
ALTERAES
NOS DADOS
DADO NO
ACESSVEL
DADO
RECUPERADO
Anotaes:
- 268 -
Anotaes:
- 269 -
TEMPO
DADOS
CPIA
CPIA
CPIA
DADO NO
ACESSVEL
DADO
RECUPERADO
Anotaes:
- 270 -
TEMPO
PROCESSOS
PERDIDOS
DADOS
ALTERAES
NOS DADOS
PONTO DE
QUIESCE
DADO DANIFICADO
LOGICAMENTE
DADO
RECUPERADO
Anotaes:
- 271 -
TOCOPY
Especifica qual a cpia o DB2 deve usar para recuperar os dados.
Anotaes:
- 272 -
USER TABELA A
USER TABELA B
DSNTIAUL
DSNTIAUL
ARQUIVO
SEQUENCIAL
DE OUTPUT
U
M
A
O
U
M
A
I
S
Anotaes:
T
A
B
E
L
A
S
D
E
S
A
D
A
- 273 -
Description
SYSIN
Dataset de input.
SYSPRINT
Anotaes:
- 274 -
DSNTIAUL - Exemplos
//UNLOAD EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DSN)
RUN PROGRAM(DSNTIAUL) PLAN(DSNTIB61) PARMS('SQL') LIB('DSN610.RUNLIB.LOAD')
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSREC00 DD DSN=DSN8UNLD.SYSREC00,
//
UNIT=SYSDA,SPACE=(32760,(1000,500)),DISP=(,CATLG),
//
VOL=SER=SCR03
//SYSREC01 DD DSN=DSN8UNLD.SYSREC01,
//
UNIT=SYSDA,SPACE=(32760,(1000,500)),DISP=(,CATLG),
//
VOL=SER=SCR03
//SYSPUNCH DD DSN=DSN8UNLD.SYSPUNCH,
//
UNIT=SYSDA,SPACE=(800,(15,15)),DISP=(,CATLG),
//
VOL=SER=SCR03,RECFM=FB,LRECL=120,BLKSIZE=1200
//SYSIN
DD *
SELECT * FROM DSN8610.PROJ;
SELECT * FROM DSN8610.EMP
WHERE WORKDEPT LIKE 'D%'
ORDER BY EMPNO;
Anotaes:
- 275 -
DSNTIAUL - Exemplos
//UNLOAD EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
DSN SYSTEM(DSN)
RUN PROGRAM(DSNTIAUL) PLAN(DSNTIB61) LIB('DSN610.RUNLIB.LOAD')
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSREC00 DD DSN=DSN8UNLD.SYSREC00,
//
UNIT=SYSDA,SPACE=(32760,(1000,500)),DISP=(,CATLG),
//
VOL=SER=SCR03
//SYSPUNCH DD DSN=DSN8UNLD.SYSPUNCH,
//
UNIT=SYSDA,SPACE=(800,(15,15)),DISP=(,CATLG),
//
VOL=SER=SCR03,RECFM=FB,LRECL=120,BLKSIZE=1200
//SYSIN
DD *
DSN8610.PROJ WHERE DEPTNO='D01'
Anotaes:
- 276 -
Anotaes:
- 277 -
DESEMPENHO ( PERFORMANCE ).
Anotaes:
- 278 -
CALL SINTAXE
CALL proc-name
( parametro, ... )
USING DESCRIPTOR descriptor-name
proc-name INDICA O NOME DA PROCEDURE
Pode ser especificado como constante ou como host variable.
Se for uma constante, ento no poder conter brancos ou caracteres especiais e ser
convertido para maisculas.
USING DESCRIPTOR descriptor-name
Identifica a sqlda que descreve as host variables usadas como parmetros, no caso da
procedure ser invocada dessa forma.
O programa que chama a stored procedure dever inicializar a sqlda:
SQLN indica o numero de ocorrncias de SQLVAR na SQLDA
SQLDABC a memria em BYTES alocada para a SQLDA
SQLD quantidade de variveis usadas na SQLDA para processar um statement
Anotaes:
- 279 -
Para cada ocorrencia de S QLVAR Base devem ser indicados os atributos das variaveis,
devendo ser inicializados os seguintes campos:
SQLTYPE
SQLLEN
SQLDATA
SQLIND
Devem ser inicializados os seguintes campos de cada Secondary SQLVAR element:
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 no usar o parmetro para transmitir dados para a procedure, o campo
sqlind dever ser inicializado com o valor 1 pelo programa.
Se a procedure no usar o parmetro para transmitir dados para o programa, o campo
sqlind dever ser inicializado com o valor 128 pela procedure
Anotaes:
- 280 -
CREATE PROCEDURE
o comando sql que define uma stored procedure no db2
Stored procedures escritas em sql pl so 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 so programas
criados parte e catalogados no db2 pelo comando create procedure, onde se faz
referencia ao nome do executavel. Esses programas tm de ter sido objeto de prepare,
bind, compilao, edio de ligaes (linkedited), e catalogao em biblioteca
reconhecida pelo db2.
Anotaes:
- 281 -
EXEMPLOS
CREATE PROCEDURE nome_cliente
(IN codigo INT, OUT nome CHAR(10))
EXTERNAL NAME nome.cli
LANGUAGE JAVA PARAMETER STYLE JAVA
CREATE PROCEDURE descricao_produto
(IN cod_prod INT, OUT descricao CHAR(40))
EXTERNAL NAME prod_descr
DYNAMIC RESULT SETS 1 NOT FENCED
LANGUAGE C PARAMETER STYLE GENERAL
CREATE PROCEDURE descricao_produto
(IN codigo_produto INT, OUT descricao CHAR(40))
DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN
DECLARE EXIT HANDLER FOR NOT FOUND
SET descricao = ;
SELECT DESCRICAO_PRODUTO INTO descricao
FROM PRODUTOS
WHERE COD_PROD = codigo_produto;
END
Anotaes:
- 282 -
PARMETROS
Schema.procname
O nome da procedure usado para identifica-la no comando call
O sistema permite a existncia de mais de uma procedure com o mesmo nome e
pertencente ao mesmo schema, mas com quantidade de parmetros diferente. Por esse
motivo preciso que o comando call passe o nmero de parmetros definidos na
procedure, ou esta no ser reconhecida.
Em operaes como drop em que no se usam parmetros, pode ser usado o nome
indicado pelo atributo specific.
( IN | OUT | INOUT parameter-name datatype, )
Os parametros permitem que a stored procedure receba dados do programa que
executante e repasse dados para este.
In indica que este um parmetro de input
Out indica que este um parmetro de output
Inout indica que este parmetro usado como input e output
Datatype tipo de dados do parmetro
os mesmos tipos de dados usados pelo create table
Anotaes:
- 283 -
PROGRAMAO DE SP
Anotaes:
- 284 -
REGRAS GERAIS
No use comandos que finalizam o processo, como stop run ou exit em stored
procedures que rodam como subprogramas. Use return ou goback.
No use set current sqlid
No use attachment facility calls explcitos ( os/390 )
Em db2 established address spaces o db2 usa caf ( call attachment facility ) calls
implcitos
Em wlm o db2 usa rrsaf calls ( recoverable resource manager services ) implcitos
No podem ser usados comandos de conexo e operativos:
BACKUP
CONNECT
CONNECT TO
CONNECT RESET
CREATE DATABASE
DROP DATABASE
FORWARD RECOVERY
RESTORE
Anotaes:
- 285 -
Quando um client chama uma sp remota, deve inicializar todos os parmetros antes do
call, inclusive os de output, porque nesse caso o db2 no tem como distinguir os
parmetros de output dos de input
As stored procedures devem declarar os parmetros com tipos de dados compatveis
com as convenes do sql, para que no ocorram problemas de resoluo ou mesmo de
incompatibilidade entre as variveis hospedeiras e as colunas das tabelas.
COMMIT E ROLLBACK
As stored procedures invocadas por um programa client executam na mesma transao (
luw - logical unit of work ) que o programa client.
Quando executado um commit ou rollback dentro de uma stored procedure,
terminada a luw afetando todas as alteraes feitas tanto pela sp como pelo programa
client
Uma procedure que contm 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 tambm so afetados por commit ou rollback dentro da procedure.
Rollback fecha todos os cursores
Commit fecha todos os cursores com exceo daqueles declarados com with hold
Anotaes:
- 286 -
O client usa type 2 connect para um server que contm a stored procedure
No pode ser usado rollback numa sp, se o db2 no for o coordenador de transao.
No permitido usar commit em sps catalogadas com a clusula no sql.
Anotaes:
- 287 -