Você está na página 1de 287

NDICE

INTRODUO AO DB2 ................................................................................................................................................................7


O QUE UM BANCO DE DADOS RELACIONAL ?............................................................................................................................8
DB2 UM DBMS RELACIONAL.....................................................................................................................................................9
ESTRUTURA DE DADOS DO DB2.................................................................................................................................................. 10
NOMENCLATURA ..................................................................................................................................................................... 11
NOMENCLATURA ..................................................................................................................................................................... 12
INTEGRIDADE DE REFERNCIA ..................................................................................................................................................... 13
INTEGRIDADE DE REFERNCIA (CONT .)...................................................................................................................................... 14
INTEGRIDADE DE REFERNCIA (CONT .)...................................................................................................................................... 15
AMBIENTE DB2.............................................................................................................................................................................16
COEXISTNCIA ENTRE OS A MBIENTES........................................................................................................................................ 17
OBJETOS DB2 ................................................................................................................................................................................. 18
OBJETOS DB2 (CONT .)................................................................................................................................................................... 19
NOTAS.............................................................................................................................................................................................. 20
NOTAS (CONT .)............................................................................................................................................................................... 21
NOTAS (CONT .)............................................................................................................................................................................... 22
NOTAS (CONT .)............................................................................................................................................................................... 23
ESTRUTURA DO DB2...................................................................................................................................................................... 24
ESTRUTURA DO DB2 (CONT .)....................................................................................................................................................... 25
UTILIZAO DA LINGUAGEM SQL ...................................................................................................................................26
UTILIZAO DA LINGUAGEM SQL .............................................................................................................................................. 27
UTILIZAO DA LINGUAGEM SQL (CONT .)............................................................................................................................... 28
UTILIZAO DA LINGUAGEM SQL (CONT .)............................................................................................................................... 29
LINGUAGEM SQL........................................................................................................................................................................... 30
LINGUAGEM SQL (CONT .) ............................................................................................................................................................ 31
LINGUAGEM SQL (CONT .) ............................................................................................................................................................ 32
DDL - DATA DEFINITION LANGUAGE......................................................................................................................................... 33
CREATE TABLE............................................................................................................................................................................... 34
DADOS NUMRICOS....................................................................................................................................................................... 35
DADOS NUMRICOS (CONT .) ....................................................................................................................................................... 36
DADOS CHARACTER STRING........................................................................................................................................................ 37
DADOS DATE / TIME ...................................................................................................................................................................... 38
NULIDADE ....................................................................................................................................................................................... 39
NOT NULL WITH DEFAULT ........................................................................................................................................................... 40
CREATE VIEW................................................................................................................................................................................. 41
DML - DATA MANIPULATION LANGUAGE................................................................................................................................. 42
TABELAS USADAS NOS EXEMPLOS.............................................................................................................................................. 43
TABELAS USADAS NOS EXEMPLOS (CONT .)............................................................................................................................... 44
QUERY ............................................................................................................................................................................................. 45
QUERY EM FORMATO LIVRE ......................................................................................................................................................... 46
SELECT ...FROM ............................................................................................................................................................................... 47
SELECT DE TODAS AS COLUNAS.................................................................................................................................................. 48
CONTROLE DE LINHAS................................................................................................................................................................... 49
OPERADORES DE COMPARAO.................................................................................................................................................. 50

Domini Treinamento DB2 para Desenvolvedores

-1-

EXEMPLOS DE W HERE ................................................................................................................................................................... 51


SELEO DE NULOS....................................................................................................................................................................... 52
SELEO DE NULOS (CONT .)........................................................................................................................................................ 53
MLTIPLAS CONDIES................................................................................................................................................................ 54
MLTIPLAS CONDIES (CONT .)................................................................................................................................................. 55
MLTIPLAS CONDIES (CONT .)................................................................................................................................................. 56
MLTIPLAS CONDIES (CONT .)................................................................................................................................................. 57
IN...................................................................................................................................................................................................... 58
BETWEEN......................................................................................................................................................................................... 59
PESQUISAS PARCIAIS ..................................................................................................................................................................... 60
NEGAO ........................................................................................................................................................................................ 61
ORDER BY ....................................................................................................................................................................................... 62
ORDER BY (CONT .)......................................................................................................................................................................... 63
ORDER BY (CONT .)......................................................................................................................................................................... 64
SELECT DISTINCT ........................................................................................................................................................................... 65
SELECT DISTINCT (CONT .) ............................................................................................................................................................ 66
SELECT DE VALORES CALCULADOS............................................................................................................................................ 67
NOMEANDO A COLUNA RESULTADO............................................................................................................................................ 68
CONDIES COM VALOR CALCULADO ....................................................................................................................................... 69
ORDER BY POR VALOR CALCULADO....................................................................................................................................... 70
OPERADOR DE CONCATENAO.................................................................................................................................................. 71
FUNES DE COLUNA (COLUMN FUNCTIONS) .......................................................................................................................... 72
SUM AVG M AX MIN ...................................................................................................................................................................... 73
SUM AVG M AX MIN (CONT .)........................................................................................................................................................ 74
COUNT ............................................................................................................................................................................................. 75
CUIDADO COM NULOS................................................................................................................................................................... 76
CUIDADO COM NULOS................................................................................................................................................................... 77
LITERAIS.......................................................................................................................................................................................... 78
LITERAIS.......................................................................................................................................................................................... 79
GROUP BY ....................................................................................................................................................................................... 80
GROUP BY (CONT ).......................................................................................................................................................................... 81
GROUP BY (CONT .)......................................................................................................................................................................... 82
GROUP BY ... ORDER BY ............................................................................................................................................................... 83
GROUP BY ... HAVING ................................................................................................................................................................... 84
EXEMPLO DE HAVING.................................................................................................................................................................... 85
SELECT - 6 CLUSULAS............................................................................................................................................................... 86
EXECUO CONCEITUAL DO SELECT .......................................................................................................................................... 87
EXECUO CONCEITUAL DO SELECT (CONT .)........................................................................................................................... 88
EXEMPLOS DE HAVING (CONT .)................................................................................................................................................... 89
SUMRIO FUNES DE COLUNA.................................................................................................................................................. 90
FUNES ESCALARES (SCALAR FUNCTIONS) ............................................................................................................................ 91
FUNES ESCALARES.................................................................................................................................................................... 92
SUBSTR (STRING, INCIO, COMPRIMENTO).................................................................................................................................. 93
SUBSTR (STRING, INCIO, COMPRIMENTO) (CONT .)................................................................................................................... 94
LENGTH (ARGUMENTO)................................................................................................................................................................. 95
LENGTH (ARGUMENTO) (CONT .)............................................................................................................................................... 96
VALUE (ARG1, ARG2, ..., ARGN )................................................................................................................................................... 97
VALUE (ARG1, ARG2, ..., ARGN ) (CONT .)................................................................................................................................. 98
FUNES DE CONVERSO............................................................................................................................................................. 99
DADOS DA T E/T IME......................................................................................................................................................................100
ARITMTICA DATE/T IME ............................................................................................................................................................101
ARITMTICA DE DATE/T IME (CONT ).........................................................................................................................................102
EXEMPLOS DATE/TIME................................................................................................................................................................103

Domini Treinamento DB2 para Desenvolvedores

-2-

FUNES ESCALARES DATE/T IME ............................................................................................................................................104


FUNES ESCALARES DATE/T IME (CONT .)..............................................................................................................................105
FUNES ESCALARES DATE/T IME (CONT .)..............................................................................................................................106
VALORES CORRENTES.................................................................................................................................................................107
JOIN DE TABELAS .........................................................................................................................................................................108
JOIN DE TABELAS - INNER JOIN ..................................................................................................................................................109
JOIN DE TABELAS - INNER JOIN (CONT .)...............................................................................................................................110
OUTER JOIN...................................................................................................................................................................................111
JOIN COM MAIS DE DUAS TABELAS ..........................................................................................................................................112
QUALIFICADORES.........................................................................................................................................................................113
QUALIFICADORES (CONT .)..........................................................................................................................................................114
JOIN DE UMA TABELA COM ELA MESMA ...................................................................................................................................115
JOIN DE UMA TABELA COM ELA MESMA (CONT .).....................................................................................................................116
UNIO............................................................................................................................................................................................117
UNIO (CONT .).........................................................................................................................................................................118
UNIO - EXEMPLO......................................................................................................................................................................119
UNION ALL VS. UNION................................................................................................................................................................120
SUBQUERY.....................................................................................................................................................................................121
EXEMPLO DE SUBQUERY.............................................................................................................................................................122
CONSIDERAES SUBQUERY......................................................................................................................................................123
SUBQUERY COM UMA LINHA......................................................................................................................................................124
SUBQUERY C/VRIAS LINHAS: ALL ........................................................................................................................................125
SUBQUERY C/VRIAS LINHAS: ALL (CONT.)..........................................................................................................................126
SUBQUERY C/VRIAS LINHAS: A NY OU SOME .......................................................................................................................127
SUBQUERY C/VRIAS LINHAS: A NY OU SOME (CONT .).........................................................................................................128
IN....................................................................................................................................................................................................129
IN (CONT .).....................................................................................................................................................................................130
SUBQUERY NUM HAVING...........................................................................................................................................................131
SUBQUERY CORRELACIONADO ..................................................................................................................................................132
SUBQUERY COM EXISTS - TESTANDO V OU F........................................................................................................................133
SUBQUERY COM EXISTS............................................................................................................................................................134
MANUTENO........................................................................................................................................................................... 135
INSERT DE UMA LINHA ................................................................................................................................................................136
INSERT DE MLTIPLAS LINHAS..................................................................................................................................................137
UPDATE DE COLUNAS..................................................................................................................................................................138
UPDATE DE COLUNAS (CONT )....................................................................................................................................................139
DELETE DE LINHAS......................................................................................................................................................................140
DELETE DE TODAS AS LINHAS ...................................................................................................................................................141
PROGRAMAO ....................................................................................................................................................................... 142
PROGRAMA EM LINGUAGEM TRADICIONAL.............................................................................................................................143
PROGRAMAO ............................................................................................................................................................................144
INSTRUO SQL ..........................................................................................................................................................................145
INSTRUO SQL (CONT .)............................................................................................................................................................146
VARIVEL HOST ...........................................................................................................................................................................147
VARIVEL HOST (CONT .)............................................................................................................................................................148
OUTROS EXEMPLOS.....................................................................................................................................................................149
VARIVEL HOST (CONT .)...........................................................................................................................................................150
VARIVEL HOST (CONT .)...........................................................................................................................................................151
VARIVEL HOST (CONT .)...........................................................................................................................................................152
VARIVEL HOST (CONT .)...........................................................................................................................................................153
DEFINIO DE VARIVEL HOST ................................................................................................................................................154

Domini Treinamento DB2 para Desenvolvedores

-3-

DEFINIO DE VARIVEL HOST (CONT .)..................................................................................................................................155


DEFINIO DE VARIVEL HOST (CONT .)..................................................................................................................................156
DEFINIO DE VARIVEL HOST (CONT .)..................................................................................................................................157
COMMIT /ROLLBACK ....................................................................................................................................................................158
COMMIT /ROLLBACK (CONT .) .....................................................................................................................................................159
LUW ................................................................................................................................................................................................160
LUW (CONT .).................................................................................................................................................................................161
COMMIT /ROLLBACK ....................................................................................................................................................................162
SQLCA..........................................................................................................................................................................................163
SQLCA (CONT .)...........................................................................................................................................................................164
SQLCA (CONT .)...........................................................................................................................................................................165
FORMATO SQLCA .......................................................................................................................................................................166
SQL WARNING .............................................................................................................................................................................167
SQL WARNING (CONT .) ..............................................................................................................................................................168
AUXLIO CODIFICAO............................................................................................................................................................169
INSTRUO WHENEVER..............................................................................................................................................................170
INSTRUO WHENEVER (CONT .)...............................................................................................................................................171
DCLGEN ......................................................................................................................................................................................172
DCLGEN (CONT .)........................................................................................................................................................................173
INSTRUO INCLUDE ...................................................................................................................................................................174
PREPARAO DE PROGRAMA COM SQL ................................................................................................................... 175
PREPARAO DE PROGRAMA COM SQL ...................................................................................................................................176
PREPARAO DE PROGRAMA COM SQL (CONT .)....................................................................................................................177
PRECOMPILADOR..........................................................................................................................................................................178
COMPILADOR / LINKAGE EDITOR / BIND ..................................................................................................................................179
VISO GERAL BIND .................................................................................................................................................................180
VISO GERAL BIND (CONT .)...................................................................................................................................................181
VISO GERAL BIND (CONT .)...................................................................................................................................................182
PACKAGE ...................................................................................................................................................................................183
COLLECTION ............................................................................................................................................................................184
TOKEN DE CONSISTNCIA - P REP . DO P ROGRAMA ..........................................................................................185
PLANO - LIGAO ENTRE O PACKAGE E O LOAD MODULO.....................................................................................................186
PLANOS E PACKAGES...........................................................................................................................................................187
ERRO DE TIMESTAMP...........................................................................................................................................................188
BIND - OPO QUALIFIER.....................................................................................................................................................189
CURSOR..........................................................................................................................................................................................190
CURSOR (CONT .)...........................................................................................................................................................................191
SELECT COM FETCH.....................................................................................................................................................................192
PROCURE DEFINIR........................................................................................................................................................................193
PROCURE DEFINIR (CONT .).........................................................................................................................................................194
DELETE VIA CURSOR ...................................................................................................................................................................195
DELETE VIA CURSOR (CONT .)....................................................................................................................................................196
UPDATE VIA CURSOR ..................................................................................................................................................................197
UPDATE VIA CURSOR (CONT .) ...................................................................................................................................................198
MANIPULAO DE CURSOR ........................................................................................................................................................199
MANIPULAO DE CURSOR (CONT .) .........................................................................................................................................200
VARIVEL INDICADORA..............................................................................................................................................................201
VARIVEL INDICADORA (CONT .)...............................................................................................................................................202
VETOR DE VAR. INDICADORAS ..................................................................................................................................................203
VETOR DE VAR. INDICADORAS (CONT .)....................................................................................................................................204
OUTROS USOS DA VARIVEL INDICADORA..............................................................................................................................205

Domini Treinamento DB2 para Desenvolvedores

-4-

ERROS DE A RITMTICA E CONVERSO - EXEMPLO................................................................................................................206


USO DA VARIVEL INDICADORA - RESUMO ............................................................................................................................207
ESTRATGIA DE A CESSO .............................................................................................................................................................208
ESTRATGIA DE A CESSO (CONT.) ..............................................................................................................................................209
EXECUO DO PROGRAMA .........................................................................................................................................................210
EXECUO DO PROGRAMA (CONT .)..........................................................................................................................................211
CONSIDERAES SOBRE PROGRAMAO ............................................................................................................... 212
RECOMENDAES DML .............................................................................................................................................................213
RECOMENDAES DML (CONT.)...............................................................................................................................................214
RECOMENDAES DML (CONT.)...............................................................................................................................................215
RECOMENDAES DML (CONT.)...............................................................................................................................................216
USO DO NDICE .............................................................................................................................................................................217
EXPRESSES A RITMTICAS ........................................................................................................................................................218
CONDIES NOT ...........................................................................................................................................................................219
USO DO LIKE .............................................................................................................................................................................220
SUBQUERIES..................................................................................................................................................................................221
EXPLAIN.........................................................................................................................................................................................222
EXPLAIN (CONT .)..........................................................................................................................................................................223
EXPLAIN (CONT .)..........................................................................................................................................................................224
PLAN_TABLE.................................................................................................................................................................................225
PLAN_TABLE (CONT .)..................................................................................................................................................................226
PLAN_TABLE (CONT .)..................................................................................................................................................................227
TPICOS ADICIONAIS ........................................................................................................................................................... 228
LOCKING ...................................................................................................................................................................................... 229
LOCKING ........................................................................................................................................................................................230
GRANULARIDADE - LOCKSIZE TABLESPACE..........................................................................................................................231
GRANULARIDADE - LOCKSIZE TABLE......................................................................................................................................232
GRANULARIDADE - LOCKSIZE PAGE/ ANY..............................................................................................................................233
GRANULARIDADE - LOCKSIZE ROW ........................................................................................................................................234
GRANULARIDADE DO LOCK ........................................................................................................................................................235
MODO DO LOCK............................................................................................................................................................................236
DURACO DO LOCK (CONT .) ......................................................................................................................................................237
DURACO DO LOCK (CONT .) ......................................................................................................................................................238
AUTORIZAES ........................................................................................................................................................................ 239
SEGURANA DO DB2...................................................................................................................................................................240
ITENS PROTEGIDOS......................................................................................................................................................................241
IDENTIFICAO DO USURIO DO DB2......................................................................................................................................242
COMANDO GRANT /REVOKE .......................................................................................................................................................243
UTILITRIOS.............................................................................................................................................................................. 244
UTILITRIOS DB2 ........................................................................................................................................................................245
UTILITRIOS DB2 (CONT.)..........................................................................................................................................................246
UTILITRIO 'LOAD'' .....................................................................................................................................................................247
EXECUTANDO O UTILITRIO ''LOAD''........................................................................................................................................248
EXECUTANDO O UTILITRIO ''LOAD'' (CONT.).........................................................................................................................249
LOAD - FASES DE EXECUO ...................................................................................................................................................250
LOAD - FASES DE EXECUO (CONT .) ....................................................................................................................................251
LOAD - CARTES DE CONTROLE ..............................................................................................................................................252
OPES RESUME E REPLACE......................................................................................................................................................253

Domini Treinamento DB2 para Desenvolvedores

-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

Domini Treinamento DB2 para Desenvolvedores

-6-

Introduo ao DB2
Parte 1

Domini Treinamento DB2 para Desenvolvedores

-7-

O que um Banco de Dados Relacional?

Um Banco de Dados Relacional aquele que pode ser percebido


externamente como uma coleo de tabelas.
COLUNA

Tabela DEPT
DCODIGO

DNOME

A00

SPIFFY COMP.SERVICE

000010

B01

PLANNING

000020

A00

D01

MARKETING

000030
000030

A00

......

......

LINHA

GERENTE

......

DSUPERIOR

......

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

-8-

DB2 um DBMS Relacional

Sistema de Gerncia
de Banco de Dados

Integridade e Segurana de Dados


Recuperao / Reinicio Integrados
Definio Dinmica
Operao Contnua

Modelo de Dados
Relacional

Linguagem
Sql

Dados vistos como Tabelas

Definio, Manipulao e
Controle dos Dados

Projeto mais fcil

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

-9-

Estrutura de Dados do DB2


- A Tabela Relacional
Tabela EMP
MATR
000010
000020
000030
000050
000330
000340

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

Todos os dados e relacionamento entre dados so representados


por valores de campo.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 11 -

NOMENCLATURA
Schema/Owner/Creator
da Tabela

Nome simples 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:

Domini Treinamento DB2 para Desenvolvedores

- 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

Um depto. s pode ser


excludo se no tiver
nenhum dependente.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 13 -

Integridade de Referncia (cont.)

Chave Primaria(PK) coluna(s) que garante(m) a unicidade das


linhas. a chave principal de uma tabela. Uma tabela s pode ter
uma Chave Primria.

Chave Estrangeira(FK) coluna(s) de uma tabela que contm


valores da PK de outra tabela. Uma tabela pode ter mais de uma
Chave Estrangeira.

implementado no DB2 via comandos SQL.

No DB2 a Integridade de Referncia obedece s seguintes regras:

uma chave primria tem valor nico e no nulo.

uma chave estrangeira nula ou tem valor correspondente na


chave primria.

Tanto na insero como na atualizao de linhas, o DB2 fora


a observao destas regras

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 14 -

Integridade de Referncia (Cont.)

Na eliminao de uma linha da tabela PAI (PARENT TABLE), podem


ocorrer situaes conforme a regra de deleo estabelecida para a
chave estrangeira.
regra CASCADE: todas as linhas dependentes so eliminadas.
regra SET NULL: a chave estrangeira das linhas dependentes
so atualizadas com valor nulo.
regra RESTRICT: a eliminao impedida se ela possuir alguma
linha dependente.

Todas as tabelas associadas entre si via regra de IR formam um conjunto


chamado de estrutura referencial (reference structure).

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 15 -

Ambiente DB2

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 16 -

Coexistncia entre os Ambientes

BATCH
UTILITY

TSO

TSO BATCH

QMF

CICS
DB2

SPUFI

BSDS

IMS/TM

LOG

DB

CAT

DIR

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 18 -

Objetos DB2 (cont.)

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:

Domini Treinamento DB2 para Desenvolvedores

- 19 -

Notas

DATABASE (Banco de dados)

Conjunto de TABLESPACES e ndices agrupados sob um


critrio administrativo.

TABLE (Tabelas)

Conjunto de linhas com as mesmas colunas (atributos).

TABLESPACE

Conjunto da data sets VSAM LDS (linear data set) que


contm dados de uma ou mais tabelas
Suas pginas podem ser de 4K, 8K, 16K ou 32 K.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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

: fora a unidade dos dados


: permite a duplicidade de dados
: usado para manter a seqncia fsica dos dados no Tablespace

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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 23 -

Estrutura do DB2

CAT LOGO

DIRETRIO

LOG
ATIVA
DDBB22

DATABASES
LOG
ARCHIVE

BSDS

IMAGE
COPY

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 24 -

Estrutura do DB2 (cont.)


NOTAS:

O catlogo um conjunto de tabelas do DB2 e pode ser acessado


atravs da linguagem SQL.
O BSDS um arquivo VSAM KSDS, que contm um histrico das
Logs do DB2.
O diretrio um conjunto de arquivos com informaes do DB2,
no podendo ser acessado por nenhum usurio.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 25 -

Utilizao da Linguagem SQL

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 26 -

Utilizao da Linguagem SQL

TSO Attach
DB2 I

QMF

USURIO

DB2
IMS Attach
PROGRAMA

PROGRAMA

CICS Attach
PROGRAMA

USURIO

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 27 -

Utilizao da Linguagem SQL (cont.)

SQL
STRUCTURED
QUERY
LANGUAGE

DDL

DML
DATA
DEFINITION
LANGUAGE

DCL
DATA
MANIPULATION
LANGUAGE

DATA
CONTROL
LANGUAGE

PROGRAMA SQL ESTTICO


PROGRAMA SQL DINAMICO
INTERATIVO
DB2

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 28 -

Utilizao da Linguagem SQL (cont.)


DML (Data Manipulation Language) (Desenvolvimento)
SELECT
UPDATE
DELETE
INSERT

: pesquisa de dados (READ)


: atualizao de dados
: eliminao de dados
: insero de dados

DDL (Data Definition Language) (Suporte)


CREATE
ALTER
DROP

: definio de um objeto (tabela, ndice)


: alterao de um objeto
: eliminao de um objeto

D C L (Data Control Language) (Suporte/Desenvolvimento)


GRANT
REVOKE

: fornecer um privilgio
: tirar um privilgio

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

T E M O CONCEITO DE TEORIA DOS CONJUNTOS

S I MP L E S

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 30 -

Linguagem SQL (cont.)


No procedural .
Para cada dada pesquisa no precisamos informar os procedimentos
necessrios como:
1. zere o contador
2. abra o arquivo
3. leia um registro
4. verifique se satisfaz o critrio
5. incremente o contador
6. etc.
Com a instruo SELECT basta dizer:
1. quero os dados que satisfazem a condio X.
O SQL trabalha com conjuntos e permite a execuo dos operadores que
so familiares para ns da matemtica elementar.
Quem no conhece os operadores Unio e Interseco?
Com uma instruo SELECT podemos implementar os seguintes
operadores:

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 31 -

Linguagem SQL (cont.)


..Unio

UNION

..Interseco

JOIN

..Diferena

OUTER JOIN

..Produto Cartesiano

A X B = {(x.y):x A e y B }

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 32 -

DDL - Data Definition Language

CREATE

DEFINIO DE OBJETOS

ALTER

ALTERAO DE UM OBJETO

DROP

ELIMINAO DE UM OBJETO
PREVIAMENTE DEFINIDO

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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

Para DECIMAL, defina X com nmero impar

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 35 -

Dados Numricos (cont.)


S MALLINT uma half word (2 bytes)
INTEGER uma full word (4 bytes)
DECIMAL armazena nmeros em decimal compactado. A faixa de
valores depende da quantidade de casas decimais.
Critrio de escolha do tipo de dado
faixa de valores requerido
tipo de comparao necessria para os processamentos
Comparao entre nmeros de tipos diferentes implica em
overhead necessrio para converso e riscos maiores devido a
erros induzidos por arredondamento.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 36 -

Dados Character String

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

** O tamanho mximo de uma coluna do tipo VARCHAR


depende do tamanho da pgina do Tablespace.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 37 -

Dados Date / Time

Definio
Definio para
para Colunas
Colunas
TIPO DE DADO

F O R MATO INTERNO

DATE

aaaammdd

(4 bytes)

TIME

hhmmss

(3 bytes)

TIMESTAMP

aaaammddhhmmsssnnnnnn (10 bytes)


(nnnnnn =microsegundos )

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 38 -

Nulidade
Uma coluna pode ser:
NOT NULL

o valor deve ser fornecido

NOT NULL WITH DEFAULTvalor pode ser omitido e assume default


NULLABLE

um valor NULO:

o valor pode ser omitido

NO ZERO
NO BRANCO
DESCONHECIDO

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 39 -

Not Null With Default


Para uma coluna not null with default o sistema fornece o valor em
caso de omisso.
Zero para colunas numricas
Branco para colunas fixed length caracter
Comprimento zero para colunas variable length character
Time
Date
Timestamp

Valores Correntes

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 40 -

Create View
CREATE VIEW V_DEPT
(VCODIGO,VNOME)
AS
SELECT CODIGO, DNOME
FROM TAB_DEPT
WHERE DCODIGO LIKE A%

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 41 -

DML - Data Manipulation Language

SELECT

ACESSA DADOS

UPDATE

ATUALIZA CAMPOS

DELETE

REMOVE LINHAS

INSERT

INSERE NOVAS LINHAS

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 42 -

Tabelas Usadas nos Exemplos

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

Domini Treinamento DB2 para Desenvolvedores

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 -

Tabelas Usadas nos Exemplos (cont.)


X. ORG
DEPTCOD
10
15
20
38
42
51
66
84

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:

Domini Treinamento DB2 para Desenvolvedores

- 44 -

Query
SEQUNCIA OBRIGATRIA:
S E L E C T NOME, ANOS, SALRIO

- Diz quais as colunas desejadas

F R O M X. STAFF

- Diz de quais tabelas

W H E R E D E P T =38

- Diz quais linhas selecionar

O R D E R B Y NOME

- Diz como ordenar o resultado

A menor informao que a linguagem SQL necessita para atender um a


solicitao:
SELECT FROM X.STAFF

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 45 -

Query em Formato Livre


SELECT NOME, ANOS, SALARIO FROM X.STAFF WHERE DEPT = 38
ORDER BY NOME

OBS: APESAR DA QUERY PODER SER ESCRITA EM FORMATO LIVRE,


QUANDO SE ESCREVE DE MANEIRA ESTRUTURADA FICA MELHOR PARA
VISUALIZAR.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 46 -

Select...From

SELECT

algumas colunas da tabela

Lista as colunas desejadas na seqncia de esquerda para direita


Vrgulas separa as colunas (obrigatrias)

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:

Domini Treinamento DB2 para Desenvolvedores

- 47 -

Select de Todas as Colunas


Para selecionar todas as colunas de uma tabela na mesma seqncia em que
foram definidas no comando CREATE TABLE:
SELECT
*
FROM X.ORG
Resultado:
DEPTCOD
10
15
20
38

DEPTNOME
MATRIZ
CAMPINAS
RIO
MINAS

GERENTE
160
50
10
30

DIVISO
CENTRO
SUDESTE
SUDESTE
SUDESTE

LOCAL
SO PAULO
CAMPINAS
R.JANEIRO
B.HORIZONTE

OBS.: EVITAR O USO DO SELECT *

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 48 -

Controle de Linhas
WHERE
traz certas linhas
estabelece condies
Exemplo: Listar empregados do departamento 20
SELECT
FROM
WHERE

DEPT, NOME,CARGO, COMIS


X.STAFF
DEPT = 20

Resultado:
DEPT

NOME

CARGO

20
20
20
20

SANTANA
ORSINI
JAMES
SNEIDER

GER
VENDAS
ATEND
ATEND

COMIS
612.45
128.20
126.50

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 49 -

Operadores de Comparao

<>

=
or
>
>=
<
<=
>
<

Igual
Diferente
Maior
Maior ou Igual
Menor
Menor ou Igual
No maior
No menor

SELECT MATR, COMIS


FROM X.STAFF
WHERE

COMIS

= 1000

SELECT NOME, DEPT, ANOS


FROM X.STAFF
WHERE

CARGO

< > GER

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 50 -

Exemplos de Where
Selecionar linhas atravs de dado numrico
SELECT DEPT, NOME,
CARGO
FROM X.STAFF
WHERE

DEPT = 20

Selecionar linhas atravs de dado alfanumrico


SELECT NOME, CARGO, COMIS
FROM X.STAFF
WHERE

NOME = SANTANA

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 52 -

Seleo de Nulos (cont.)


Valor no nulo como critrio de SELECT
SELECT NOME, CARGO, COMIS
FROM X.STAFF
WHERE COMIS

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:

Domini Treinamento DB2 para Desenvolvedores

- 53 -

Mltiplas Condies
Operadores para mltiplas condies
AND
OR
Dadas duas condies
CARGO =

VENDAS

SALRIO < 17000

Para ter ambas satisfeitas: AND


WHERE CARGO = VENDAS AND SALRIO < 17000
Resultado:
NOME

CARGO

SALRIO

SUZUKI
ALMEIDA

VENDAS
VENDAS

16808.30
16502.83

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 54 -

Mltiplas Condies (cont.)


Para ter qualquer uma satisfeitas: OR

WHERE CARGO

VENDAS OR SALRIO < 17000

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:

Domini Treinamento DB2 para Desenvolvedores

- 55 -

Mltiplas Condies (cont.)

Usar parnteses para separar as condies AND, OR


WHERE (CARGO

VENDAS AND COM > 1200)

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:

Domini Treinamento DB2 para Desenvolvedores

- 56 -

Mltiplas Condies (cont.)


no eqivale a:
WHERE CARGO

VENDAS

AND (COMIS > 1200 OR ANOS > 10)

Resultado:
NOME

CARGO

KOONITZ
GRAHAM
VIEIRA

VENDAS
VENDAS
VENDAS

ANOS
6
13
7

COMIS
1386.70
200.30
1285.00

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 57 -

IN

Valor deve coincidir com algum elemento da lista

WHERE DEPT IN (38, 20, 42)


equivale a:
Mltiplos O R s para a mesma coluna:

WHERE DEPT = 38 OR DEPT = 20 OR DEPT = 42


NEGAO: NOT IN

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 58 -

Between

Para selecionar um intervalo fechado de valores


SELECT NOME, CARGO, ANOS
FROM X.STAFF
WHERE ANOS BETWEEN 9 AND 11

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:

Domini Treinamento DB2 para Desenvolvedores

- 59 -

Pesquisas Parciais
Para pesquisar um subconjunto de caracteres: L I K E
% = Conjunto de caracteres quaisquer
_ = Um caracter qualquer
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%


(R na 2 posio)

inclui:

FRAYE
GRAHAM

*** VARCHAR

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 60 -

Negao

Para negar o teste:

WHERE NOME
exclui:

NOT

LIKE G%

GRAHAM
GONZALES
GAFNEY

WHERE ANOS NOT BETWEEN 9 AND 11


exclui ANOS de 9 a 11

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 62 -

Order By (cont.)

Para classificar pelas coluna (s) em ordem A S C endente (default) ou


D E S C endente
SELECT NOME, CARGO, ANOS
FROM X.STAFF
WHERE DEPT = 84
ORDER BY CARGO, ANOS DESC
Resultado:

NOME
GAFNEY
PINHO
VIEIRA
DAVIS

CARGO
ATEND
GER
VENDAS
VENDAS

ANOS
5
10
7
5

ORDER BY ANOS DESC, CARGO


Resultado:

NOME
PINHO
VIEIRA
GAFNEY
DAVIS

CARGO
GER
VENDAS
ATEND
VENDAS

ANOS
10
7
5
5

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 63 -

Order By (cont.)

Colunas classificadas devem ser referenciadas pelo SELECT.

Nulos so considerados como valor mais alto.

Podemos especificar colunas para o ORDER BY fornecendo


um nmero que indica a posio da mesma na clusula
SELECT. O ORDER BY o nico que permite isto. Podemos
tambm referenciar um ALIAS.

ORDER BY classifica uma tabela resultante. Logo deve ser


S E MPRE a NICA e a LTIMA a aparecer numa instruo
SELECT.

Usar sempre que desejar as linhas segundo uma ordem


especfica.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 64 -

Select Distinct

A palavra chave DISTINCT deve aparecer logo depois do SELECT.


Classificao ocorre pelas colunas da esquerda para a direita.
ORDER BY pode ser usada para controlar a classificao.

EXEMPLO:

SELECT DEPT
FROM X.STAFF

Para eliminar linhas duplicadas:

DEPT
20
20
38
38
38
15
10
.
.

SELECT DISTINCT DEPT


FROM X.STAFF

DEPT
10
15
20
38
.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 65 -

Select Distinct (cont.)


MLTIPLAS -COLUNAS
SELECT DISTINCT DEPT, CARGO

DEPT
10
15
15
15
20
20
20
38

CARGO
GER
ATEND
GER
VENDAS
ATEND
GER
VENDAS
ATEND

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 66 -

Select de Valores Calculados


+ SOMA
- SUBTRAO

* MULTIPLICAO
/ DIVISO

Total de ganho de cada pessoa do DEPT 20


SELECT ID, SALRIO, COMIS, SALRIO + COMIS
FROM X.STAFF
WHERE DEPT = 20
Resultado:
ID

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

OBS.: NO FAZ EXPONENCIAO.


(1) Quando uma das colunas a serem somadas contiver
nulos, no efetuado o calculo.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 67 -

Nomeando a coluna resultado

SELECT ID, SALRIO, COMIS, SALRIO + COMIS AS RENDIMENTOS


FROM X.STAFF
WHERE DEPT = 20
ORDER BY RENDIMENTOS
Resultado:
ID

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:

Domini Treinamento DB2 para Desenvolvedores

- 68 -

Condies com Valor Calculado

Pessoa cujo salrio mais comisso excede $20.000

SELECT NOME, SALRIO + COMIS


FROM X.STAFF
WHERE SALARIO + COM > 20000
Resultado:
NOME

COL1

OLIVEIRA
GRAHAM

20094.15
21200.30

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 69 -

Order By Por Valor Calculado


EXEMPLO 1:
SELECT NOME, SALRIO + COMIS
FROM X.STAFF
WHERE SALARIO + COMIS > 20000
ORDER BY 2 DESC
Resultado:
NOME

COL1

GRAHAM
OLIVEIRA

21200.30
20094.15

EXEMPLO 2:
SELECT CARGO, SALRIO + COMIS
FROM X. STAFF
ORDER BY CARGO, 2

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 70 -

Operador de Concatenao
string1 || string2

string1string2

ABC

ABCXYZ

|| XYZ

TABELA X
SNOME
JONES
MAR Q U E S

(COLUNAS varchar : snome nome)


NOME
MID
JOHN
P
FRANCO
X

SELECT SNOME || , || NOME || || MID || .


FROM TABELA X
Resultado :
JONES, JONES P.
MARQUES, FRANCO X.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 71 -

Funes de Coluna (Column Functions)


Transforma dados de uma coluna em um nico valor.
Dados numricos
SUM

- Total dos valores de uma coluna

AVG

- Mdia dos valores de uma coluna

Quaisquer tipos de dados


MIN

- Menor valor de uma coluna

MAX

- Maior valor de uma coluna

COUNT - Nmero de ocorrncias

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 72 -

Sum Avg Max Min


EXEMPLO
SELECT SUM(SALRIO), MIN(COMIS), MAX(COMIS)
FROM X.STAFF
WHERE DEPT = 56
Resultado:
COL1

COL2

COL3

86076,20

17245,89

550844,60

OBS.: Valor nulo no so considerados em funes de coluna,


EXCETO para a funo COUNT(*).

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 73 -

Sum Avg Max Min (cont.)

Gera um nico valor a partir de um conjunto de valores de uma n ica


coluna.

O resultado no contm detalhes de linhas individuais.

Podem ser pedidas mais de uma funo para a mesma coluna,


conforme o exemplo.

Nulos so excludos.

Preciso (parte inteira, casa decimal) deriva da coluna.

Para a funo AVG de uma coluna DECIMAL (p,s) o resultado ter


preciso (15,15-p+s).

Expresses do seguinte tipo tambm podem ser utilizadas.


AVG(SALRIO + COMIS)

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 74 -

Count
COUNT (*)

Nmero de linhas que satisfazem a condio where.


Nulos so contados .
COUNT (DISTINCT nome-coluna) - Nmero de valores distintos na coluna.
Nulos no so contados .

Contar as pessoas cujo salrio exceda


$ 18.000 e seus respectivos departamentos.
Mostre a mdia salarial.
SELECT COUNT(DISTINCT DEPT),COUNT(*),AVG(SALRIO)
FROM X.STAFF
WHERE SALARIO>18000
Resultado:

COL1
8

COL2 COL3
16

19604.190625000

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 75 -

Cuidado com Nulos


SUM(SALARY)+SUM(BONUS)+SUM(COMM)
VERSUS
SUM(SALARY+BONUS+COMM)

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:

Domini Treinamento DB2 para Desenvolvedores

- 76 -

Cuidado com Nulos


A
2
4

SUM (A)
SUM (B)

B
5
3
-

=...
=...

SUM (A +B ) = ...
AVG (A) = ...

SUM (A) =...


COUNT(*)

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 77 -

Literais

Literais podem ser mostradas no resultado de um SELECT.

Podem ser teis quando usadas com funes de coluna que no


exibem cabealhos.

Podemos selecionar apenas uma cadeia de caracteres conforme


exemplo a seguir:
SELECT TESTE XYZ FROM TABELAZ
( necessrio que a tabela exista).

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 78 -

Literais
SELECT AVG(COMIS), SUM(COMIS)
FROM X.STAFF
COL1

COL2

513.31

12319.45

SELECT MED: , AVG(COMIS),


SOMA: , SUM(COMIS)
FROM X.STAFF
COL1

COL2

COL3

COL4

MED:

513.31

SOMA:

12319.45

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 82 -

Group By ... Order By


Para garantir a ordem de classificao necessrio usar Order B y
SELECT DEPT, SUM(SALRIO), SUM(COMIS)
FROM X.STAFF
WHERE CARGO <> GER
GROUP BY DEPT
ORDER BY 3
Resultado:
DEPT

COL1

COL2

20
.
.
15
.
.
38

45928.60
.
.
41269.53
.
.
59778.80

867.15
.
.
1468.70
.
.
1913.30

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 83 -

Group By ... Having


CONDIES SOBRE GRUPOS
S E L E C T . . . F R O M..
WHERE.....
FILTROS
GROUP BY...
HAVING....

WHERE - escolhe linhas


HAVING - escolhe grupos
executado sempre aps GROUP BY

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 84 -

Exemplo de Having

SELECT DEPT, SUM(SALRIO)


FROM X.STAFF
GROUP BY DEPT
DEPT

COL1

10
15
20
38
42
.
.
.

83643.45
61929.33
64286.10
77285.55
58369.05
.
.
.

SELECT DEPT, SUM(SALRIO)


FROM X.STAFF
GROUP BY DEPT
HAVING SUM(SALRIO) > 65000
DEPT
10
38
.
.
.

COL1
83643.45
77285.55
.
.
.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 85 -

Select - 6 Clusulas

SELECT DEP, JOB, AVG(SAL)


FROM

EMPL

WHERE JOB <> 'M'


GROUP BY DEP, JOB
HAVING AVG(SAL) > 28000
ORDER BY 3 DESC

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 86 -

Execuo conceitual do Select

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 87 -

Execuo conceitual do Select (cont.)

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 88 -

Exemplos de Having (cont.)


Mdia salarial por departamento
apenas dos no-gerentes dos departamentos
com mais de 3 pessoas.
SELECT DEPT, AVG(SALRIO) FROM STAFF
WHERE CARGO <> GER
GROUP BY DEPT
HAVING COUNT(*) > 3
Mdia salarial dos no -gerentes por departamento, que tenham
somente pessoas com no mnimo 5 anos de experincia.
Listar em ordem descendente por mdia.
SELECT DEPT, AVG(SALRIO)
FROM STAFF
WHERE CARGO <> GER
GROUP BY DEPT
HAVING MIN(ANOS) >= 5
ORDER BY 2 DESC
Os exemplos mostram que o SELECT e o HAVING podem usar funes
diferentes.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 89 -

Sumrio Funes de Coluna

Funes de Coluna s podem ser especificadas em:


SELECT
HAVING

SELECT pode especificar somente


Funes de Coluna
Colunas especificadas no GROUP BY

HAVING pode especificar


Funes de Coluna sobre qualquer coluna contida numa tabela
especificada no FROM

Funes de Coluna no podem ser embutida uma dentro da outra.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 90 -

Funes Escalares (Scalar Functions)

Transforma um nico valor em outro valor.

Funes STRING

Funes de Converso

Funes Date/Time

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 91 -

Funes Escalares

Ao contrrio das funes de coluna que transformam um conjunto de


valores de uma coluna num nico valor, as funes escalares operam
somente sobre um nico valor.

Funes Escalares podem ser embutidas dentro da outra.

Ex.: SUBSTR (SUBSTR (...)...)

Funes de Coluna podem ser argumento de uma funo escalar.

Ex.: SUBSTR (MAX(...)...)

Funes Escalares podem ser argumento de uma funo de coluna.

Ex.: MAX (SUBSTR(...)).

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 92 -

Substr (string, incio, comprimento)

Se o comprimento no for especificado, a funo pega todo o resto.

Se a posio do incio ultrapassar o final do string teremos erro.

S e o incio +comprimento ultrapassar o final do string teremos erro.

Substring de nulo nulo

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 93 -

Substr (string, incio, comprimento) (cont.)

SELECT DEPTNOME, SUBSTR(DEPTNOME, 1, 4)


FROM X.ORG
Resultado:

DEPTNOME

COL1

MATRIZ
CAMPINAS
RIO
MINAS
BAHIA

MATR
CAMP
RIO
MINA
BAHI

SELECT DEPTCOD, DIVISAO


FROM X.ORG
WHERE SUBSTR(DIVISAO, 3) =EAS

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 94 -

Length (argumento)

Fornece o tamanho de uma coluna do tipo caracter.

Se o argumento nulo, o resultado tambm ser nulo.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 95 -

Length (argumento)

(cont.)

SELECT NOME, LENGTH(NOME), CARGO, LENGTH(CARGO)


FROM X.STAFF
Obs: NOME tem tamanho varivel
CARGO tem tamanho fixo
Resultado:
NOME

COL1

CARGO

COL2

SANTANA
SILVAl
DANTAS

7
6
6

GER
VENDAS
GER

6
6
6

.
.

.
.

.
.

.
.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 96 -

Value (arg1, arg2, ..., argn)


Dada uma lista de argumentos, esta funo faz a varredura da esquerda
para a direita at encontrar o primeiro valor no nulo .

Todos os argumentos devem ser do mesmo tipo de dado (todos


numricos ou todos caracteres).

Se todos os argumentos forem nulos, o resultado ser nulo.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 97 -

Value (arg1, arg2, ..., argn)

(cont.)

Dada uma lista de argumentos, mostra o primeiro no nulo.

SELECT ID, COMIS, BONUS, VALUE(COMIS, BONUS, 0)


FROM X.STAFF

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:

Domini Treinamento DB2 para Desenvolvedores

- 98 -

Funes de Converso

Converte um tipo de representao em outro.


DECIMAL, FLOAT, INTEGER
DIGITS
HEX

: converte nmero em nmero


: converte nmero em alfa
: converte alfa / nmero em hexa

SELECT DECIMAL(SALARIO, 9, 1),INTEGER(SALARIO)


FROM.STAFF
WHERE ID = 55
se coluna SALARIO (DEC (7,2)) :
Resultado:
COL1
17506.7

17506.75

COL2
17506

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 99 -

Dados Date/Time
DATE, TIME, TIMESTAMP armazenados como decimal compactado sem sinal.
TIPO DE DADO
DATE
TIME
TIMESTAMP

FORMATO INTERNO
aaaammdd
hhmmss
aaaammddhhmmssnnnnnn

Programas lidam s com FORMATO EXTERNO: string de caracteres

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

Timestamp: aaaa-mm -dd-hh.mm.ss.nnnnnn

10 bytes
10 bytes

26 bytes

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 100 -

Aritmtica Date/Time

Somente subtrao
horrio - horrio = = > durao em hhmmss

(packed decimal (6,0))

data - data =====>durao em aaaammdd (packed decimal (8,0))


Na adio necessrio usar DURAO ROTULADA:
Nmero n seguido da palavra chave: YEARS, MONTHS, DAYS, HOURS,
MINUTES, SECONDS, MICROSECONDS
horrio durao rotulada ==>horrio
data durao rotulada ====>data
Pode usar MIN, MAX, COUNT
No pode usar SUM e AVG

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 101 -

Aritmtica de Date/Time (cont)

Somando/Subtraindo durao
data + ou - durao (data)
DATACOL1 + 3 MONTHS

- - Resulta em data

horrio +or - durao (tempo)


- - Resulta em horrio
TEMPCOL1 - 30 MINUTES - 20 SECONDS
timestamp +or - durao (data)
timestamp +or - durao (tempo)
T S T C O L +2 DAYS - 3 HOURS
T M S R C O L +50000 MICROSECONDS

- - Resulta em TIMESTAMP

Subtraindo datas e horas


data - data
DATACOL1 - DATACOL2
DATACOL1 - 1984-12-20
Horrio - Horrio
TEMPCOL1 - T E M P C O L 2
11:30 PM- TEMPCOL1

- - Resulta em durao

- - Resulta em durao

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

SELECT PRJCOD, DATAINI + 1 YEAR, DATAFIM - 2 MONTHS ....


Resultado :

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

HRFIM - HRINI ....

COL1

COL2

00150200
00000602
00000000

153000
000000
074159

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 103 -

Funes Escalares Date/Time

CHAR: controla formato externo de dados date/time

SELECT CHAR(HRFIM, ISO), CHAR(HRFIM, USA)


FROM DT
WHERE PRJCOD = AX001

Resultado :
COL1

COL2

15.30.00

03.30 PM

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 104 -

Funes Escalares Date/Time (cont.)


DAY, MONTH, YEAR, HOUR, MINUTE, SECOND, MICROSECOND
- E X T R A I parte de uma data, horrio ou timestamp
- Resulta num inteiro binrio

SELECT DAY(DATAINI), MONTH(DATAINI),


YEAR (DATAINI)
FROM DT
WHERE YEAR(DATAINI) > 1988

Resultado:
COL1
31

COL2

COL3

1990

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 105 -

Funes Escalares Date/Time (cont.)


DAYS
Nmero de dias desde 01/01/0001
SELECT DATAFIM - DATAINI,
DAYS(DATAFIM) - DAYS(DATAINI)
FROM DT
WHERE PRJCOD = AX001
Resultado:
COL1

COL2

00150200

5538
(n.dias)

DATE, TIME
Extrai data ou horrio de um timestamp

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 108 -

Join de Tabelas - Inner Join


Listar o nome dos departamentos e seus respectivos gerentes
SELECT DEPTNOME, NOME
FROM X.STAFF, X.ORG
WHERE GERENTE = ID
X.ORG
DEPTNOME
RIO
MINAS
BAHIA
.

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:

Domini Treinamento DB2 para Desenvolvedores

- 109 -

Join de Tabelas - Inner Join

(cont.)

Listar o nome dos departamentos da diviso Western e seus gerentes


SELECT DEPTNOME, NOME
FROM X.STAFF, X.ORG
WHERE DIVISO = WESTERN
AND GERENTE = ID
Resultado:

DEPTNOME
MINAS

NOME
DANTAS

Outra maneira de escrever o Inner Join


SELECT DEPTNOME, NOME
FROM X.STAFF INNER JOIN X.ORG
ON GERENTE = ID
WHERE DIVISO = WESTERN

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

OPES: LEFT JOIN, RIGHT JOIN e FULL JOIN

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 111 -

Join com Mais de Duas Tabelas

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

REGRA: o nmero de predicados join igual ao nmero de tabelas menos 1

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

Listar o nome dos gerentes, e respectivos nome e cdigo de


departamentos

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

SELECT NOME, O.CODIGO, DEPTNOME


FROM X.STAFF, X.ORG O
WHERE CARGO = GER
AND DEPT = O.CODIGO

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 114 -

Join de uma Tabela com ela mesma


Liste os empregados que ganham mais que os seus gerentes
1. Obter informaes do empregado na X.STAFF (E)
ID
80

NOME
J A ME S

...

SALRIO
19456.50

...

DEPT
20

2. Obter informaes do departamento na X.ORG


DEPTCOD
20

DEPTNOME
RIO

...

GERENTE
10

...

3. Obter informaes do gerente na X.STAFF (G)


ID
10

NOME
SANTANA

...

SALRIO
18357.50

...

DEPT
20

4. Comparar o salrio dos dois


5. Se a condio satisfeita, colocar a linha na tabela resultante e partir para
o prximo empregado.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 115 -

Join de uma Tabela com ela mesma (cont.)


SOLUO:
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
OLIVEIRA
.

SALARIO
.

19456.50

NOME

SALARIO

SANTANA
.

18357.50

Qualificadores so necessrios porque existe uma necessidade de tratar


duas linhas da mesma tabela como se fossem pertencentes a tabelas
distintas.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 116 -

Unio
UNION faz a unio de tabelas resultados
SELECT A1, A4 FROM TBLA
WHERE A2 = Z

UNION

Resultado

.
.

.
.

SELECT B1, B4 FROM TBLA


WHERE B1 > = N
Resultado

.
.
.

.
.
.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 117 -

Unio

(cont.)

Queries so executadas serialmente.

A quantidade de colunas deve ser a mesma em todos os S E L E C T s .

Os tipos de dados das colunas correspondente devem ser iguais.

O operador union une as tabelas resultantes e elimina as linhas


duplicadas, que implica num SORT.

O operador UNION ALL tambm une tabelas mas no elimina linhas


duplicadas. No chama o sort portanto.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

SELECT CARGO, SALRIO * 1.02


FROM X.STAFF
WHERE CARGO = VENDAS
ORDER BY 2 DESC
CARGO
VENDAS
.
VENDAS
ATEND
VENDAS
.

COL1
.

21420.0000
17144.4660
16918.2000
16832.8866

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 119 -

Union All Vs. Union


SELECT NOME
FROM X.CANDIDATOS
WHERE ENDEREO LIKE %SP
UNION ALL

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

==>do primeiro SELECT

UNION ALL

UNION

- No faz classificao
- No elimina duplicados

- Classifica
- Elimina duplicados

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 120 -

Subquery

UM SELECT EMBUTIDO DENTRO DE UM S E L E C T

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:

Domini Treinamento DB2 para Desenvolvedores

- 121 -

Exemplo de Subquery
Listar os funcionrios com salrio superior mdia da companhia
X. STAFF
NOME

SALARIO

Encontrar a mdia salarial da companhia (SUBQUERY)


SELECT AVG(SALARIO) FROM X.STAFF

16675.64

Comparar o salrio de cada funcionrio com o resultado


SELECT NOME, SALRIO
FROM X.STAFF
WHERE SALARIO > (SELECT AVG(SALARIO) FROM X.STAFF)
RREESSUULLTTAADDOO SSOOM
MEENNTTEE
DDOO SSEELLEECCTT DDEE NN VVEELL
MAIS
MAIS ALTO
ALTO

RREESSUULLTTAADDOO DDAA SSUUBBQQUUEERRYY


RREETTOORRNNAADDOO PPAARRAA OO NNI IVVEELL
SSUUPPEERRI O
I ORR

Resultado:
NOME
SALARIO
SANTANA 18357.50
ORSINI
18171.25

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 122 -

Consideraes Subquery

Pode ser usado no WHERE ou no HAVING

Pode ser encadeado

Deve estar direita do operador na condio de seleo

Deve ser colocado entre parnteses.

Antes da Verso 7 do DB2, o subquery deve selecionar apenas uma


coluna.

O subquery pode retornar uma ou mais linhas e isto acaba determinando


o operador a ser usado na condio de busca.

NO pode conter UNION, UNION ALL ou O R D E R B Y

Muitas vezes citado como SUBSELECT. Prefira SUBQUERY.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 123 -

Subquery com uma Linha

Mostrar o funcionrio com o maior salrio da empresa

SELECT NOME, SALARIO FROM X.STAFF


WHERE SALARIO =
(SELECT MAX(SALARIO) FROM X.STAFF)

Resultado :
NOME

SALARIO

MOLINARI

22959.20

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 124 -

Subquery C/Vrias Linhas: ALL


Lista classificada dos funcionrios com salrio superior
a toda e qualquer mdia salarial departamental.

Encontrar mdia salarial para cada departamento.


SELECT AVG (SALRIO)
FROM X.STAFF
GROUP BY DEPT
Resultado:
20865.862500000
20865.862500000
15482.332500000
15482.332500000
16000.000000000
16000.000000000

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 125 -

Subquery C/Vrias Linhas: ALL (cont.)

Compare o salrio de cada funcionrio com a lista devolvida


pela SUBQUERY
SELECT NOME, SALRIO FROM X.STAFF
WHERE SALRIO >
ALL (SELECT AVG(SALRIO)
FROM X.STAFF GROUP BY DEPT)
ORDER BY NOME
Resultado :
NOME

SALARIO

FRAYE
GRHAM
JONES
MOLINARE

21150.00
21000.00
21234.00
22959.20

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 126 -

Subquery C/Vrias Linhas: Any ou Some

Lista
Listaclassificada
classificadados
dosfuncionrios
funcionrioscom
comsalrio
salriomaior
maiorque
queaa
mdia
mdiasalarial
salarialde
dealgum
algumdepartamento
departamento

Encontrar mdia salarial para cada departamento .


SELECT AVG (SALRIO)
FROM X.STAFF
GROUP BY DEPT
Resultado:
20865.862500000
20865.862500000
15482.332500000
15482.332500000

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 127 -

Subquery C/Vrias Linhas: Any ou Some (cont.)

Compare o salrio de cada funcionrio com a lista devolvida


pela SUBQUERY

SELECT NOME, SALRIO


FROM X.STAFF
WHERE SALRIO >
ANY (SELECT AVG (SALRIO)
FROM X.STAFF
GROUP BY DEPT)
ORDER BY NOME
Resultado:
NOME
DANIEL
DAVIS
EDWARDS
.
.

SALRIO
19260.25
15484.50
17844.00
.
.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 128 -

IN

Lista de gerentes da diviso Sul

SELECT DEPT, NOME


FROM X.STAFF
WHERE CARGO = GER
AND DEPT IN (SELECT DEPTCOD
FROM X.ORG
WHERE DIVISO = SUL)

SUBQUERY resulta numa lista de D E P T C O D s da diviso Sul (66 e 84).

IN eqivale a uma srie de OR...=sobre uma coluna

=ANY pode substituir IN

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 129 -

IN (cont.)

SELECT DEPT, NOME


FROM X.STAFF
WHERE CARGO = GER
AND DEPT = ANY (SELECT DEPTCOD
FROM X.ORG
WHERE DIVISO = SUL)

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 130 -

Subquery Num Having


Liste
Liste os
os departamentos
departamentos cuja
cuja mdia
mdia salarial
salarial inferior
inferiormedia
mediada
da
companhia,
com
as
suas
respectivas
mdias.
O
salrio
companhia, com as suas respectivas mdias. O salrio dos
dos gerentes
gerente s
no
no deve
deve ser
ser considerado.
considerado. Ordene
Ordene pela
pela mdia.
mdia.
SELECT DEPT, AVG(SALRIO) FROM X.STAFF
WHERE CARGO <> GER
GROUP BY DEPT
HAVING AVG(SALRIO) < (SELECT AVG(SALRIO)
FROM X.STAFF
WHERE CARGO <>GER)
ORDER BY 2 DESC
Resultado:

DEPT

COL1

66
51
84
20

16880.175000000
16235.200000000
15443.000000000
15309.530000000

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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)

Um subselect correlacionado executado a cada linha devolvida ao


select externo.

Deve ser evitado.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 132 -

Subquery com EXISTS - Testando V ou F

Este um operador que tem como argumento um select.

Esta subquery no devolve nenhuma tabela resultante .

EXISTS devolve V ou F e como faz parte de uma search


condition , determina uma eventual execuo ou no do SELECT
externo.

EXISTS pode ser negado por um NOT.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 133 -

Subquery com EXISTS


Liste
Liste os
os gerentes
gerentes ganhando
ganhando menos
menosque
que$18.000
$18.000se
seexistir
existir
pelos
menos
um
gerente
com
salrio
superior
a
$22.000.
pelos menos um gerente com salrio superior a $22.000.
SELECT ID,NOME, SALRIO, DEPT
FROM X.STAFF
WHERE CARGO = GER
AND SALARIO < 18000
AND EXISTS (SELECT * FROM X.STAFF
WHERE CARGO = GER
AND SALRIO > 22000)

ID

NOME

SALRIO

DEPT

30

MAR E N C H I

17506.75

38

VERDADEIRO/FALSO NO SELECT INTERNO


Determina se o SELECT externo ser executado.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 134 -

Manuteno

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 135 -

Insert de uma Linha

INSERT INTO PROJ


VALUES (MA2114, ,B01, ,NULL,CURRENT DATE,NULL)
- - OU - INSERT INTO PROJ
(DEPT,

PCODIGO,

PNOME,

RESP,

DATAIN)

VALUES (B01,MA2114, , ,CURRENT DATE)


Obs.- formato obrigatrio no banco.
Resultado:
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
?

DATAINI
.............
19880101
19880101
19880101
.............
19880920

DATAFIM
..............
19880201
19880201
19880201
...............
?

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 136 -

Insert de Mltiplas Linhas


TESTPROJ
PCOD

PNOME

DEPT

RESP

E Q U I P E DATAINI

DATAFIM

INSERT INTO TESTPROJ


SELECT * FROM PROJ
WHERE DEPT LIKE B%
OR DEPT IN(E11, `E21, E31)
Resultado:
PCOD
PL2100
OP1010
OP2010
OP2011
OP2012
OP2013

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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 138 -

Update de Colunas (cont)


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 alteraao, pois todas as linhas sero
afetadas

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

DELETE FROM TESTPROJ


WHERE DEPT = B01
DEPOIS:
PCOD
............
OP2011
OP2012
OP2013
.............

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:

Domini Treinamento DB2 para Desenvolvedores

- 140 -

Delete de Todas as 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

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:

Domini Treinamento DB2 para Desenvolvedores

- 141 -

Programao
Parte 2

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 142 -

Programa em Linguagem Tradicional

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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 144 -

Instruo SQL

INSTRUO SQL entre DELIMITADORES


EXEC SQL

DELETE FROM DEPT

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:

Domini Treinamento DB2 para Desenvolvedores

- 145 -

Instruo SQL (cont.)


O compilador das linguagens tradicionais no entende a linguagem SQL
Para separar uma instruo SQL da codificao normal do programa, so
utilizados delimitadores que so diferentes para cada linguagem adotada.
O pr-compilador do DB2 localiza as instrues SQL por meio dos
delimitadores e os substitui por CALLS do DB2. Assim o fonte fica
adequado para ser submetido ao compilador.
O delimitador que indica o inicio de um SQL comum, todas as
linguagens.
O final de um SQL o delimitador END-EXEC. no COBOL, e ; no PL/I.
No FORTRAN o pr -compilador identifica o fim de uma instruo SQL
quando nas linhas seguintes do EXEC SQL no encontrar mais o
caracter de continuao X na coluna 6.
No ASSEMBLER o caracter X na coluna 72 indica que a instruo
continua na linha seguinte.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 146 -

Varivel Host

PARA FORNECER UM VALOR AO DB2


COBOL
MOVE 22000 TO SAL.
22000

SAL

SQL
EXEC SQL...

WHERE SALRIO = :SAL

END-EXEC.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 147 -

Varivel Host (cont.)

Variveis HOST so utilizadas para permuta de valores entre o SQL e a


linguagem de programao.

Uma das possveis utilizaes da varivel HOST a de fornecer um


valor a uma instruo SQL, tornando-a genrica.

A referncia varivel HOST deve ser precedida pelo caracter :.

No banco obrigatrio usar o DCLGEN para definir as variveis HOST


correspondentes as colunas das tabelas DB2.

A varivel HOST deve ser compatvel com a coluna, quanto ao seu tipo
de dado e tamanho.

Variveis HOST no podem ser utilizadas para referenciar nome de


tabelas ou nome de colunas.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 148 -

Outros Exemplos

PARA FORNECER UM VALOR AO DB2

EXEC

SQL INSERT INTO EMPR


(MATR, SOBRENOME)
VALUES (:MATR, :SNOME) END-EXEC.

MATR

SNOME

EXEC

SQL
UPDATE EMPR
SET SALARIO = SALARIO * :REAJ
WHERE CARGO = :CARGO
END-EXEC.
CARGO

REAJ

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 149 -

Varivel Host (Cont.)


Variveis HOST podem ser utilizadas tambm para o DB2 passar um
valor para o programa.
So necessrias numa instruo SELECT embutida.
Uma varivel HOST para cada coluna selecionada.
O tipo de dado e o tamanho das variveis e das colunas devem ser
compatveis.
Variveis adicionais chamadas variveis indicadoras so necessr ias
quando a coluna pode ser nula. Sero apresentadas mais tarde

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 150 -

Varivel Host (Cont.)

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.

SELECT .... INTO s pode ser usado quando a tabela resultado


tem no mximo 1 linha

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 151 -

Varivel Host (Cont.)

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:

Domini Treinamento DB2 para Desenvolvedores

- 152 -

Varivel Host (Cont.)

Uma srie contgua de variveis HOST podem ser agrupadas num


conjunto chamado de ESTRUTURA.

A estrutura pode ser referenciada como uma unidade, conforme o


exemplo.

Devem ser selecionadas somente as colunas necessrias ao


processo.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 153 -

Definio de Varivel Host


DADOS
DADOS NUMRICOS
NUMRICOS
DB2

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

DECIMAL (5,2) DCL N3 DEC


01 N3 PIC S9(3)V9(2) N3 DC
R E A L *8 NE
PL5000.00
/ DEC (5,2)
FIXED(5,2)
COMP -3.
FLOAT(21)

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:

Domini Treinamento DB2 para Desenvolvedores

- 154 -

Definio de Varivel Host (cont.)

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:

Domini Treinamento DB2 para Desenvolvedores

- 155 -

Definio de Varivel Host (cont.)

DATA/HORRIO/TIMESTAMP
DB2

PL/I

COBOL

ASSEMBLER

FORTRAN

DATE

DCL DT CHAR(10)

01 DT PIC X(10) DT DS CL10

CHARACTER*10 DT

TIME

DCL TM CHAR(8)

01 TM PIC X(8)

TM DS CL8

CHARACTER*8 TM

01 TS PIC X(26) TS DS CL26

CHARACTER*26 TS

TIMESTAMP DCL TS CHAR(26)

DOUBLE BYTE CHARACTER STRING


DB2
GRAPHIC (5)

PLI
DCL DBC1 GRAPHIC(5)

VARGRAPHIC (40) DCL DBC2 GRAPHIC(40) VAR

COBOL
01 DBC1 PIC G(5) DISPLAY-1.
01 DBC2
49 DBC2L PIC S9(4) COMP.
49 DBC2C PIC G(40) DISPLAY-1.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 156 -

Definio de Varivel Host (cont.)

Dados DATE/TIME so sempre convertidos para representao em


caracteres, quando so assinalados para as variveis HOST.

DATE(ISO): aaaa-mm-dd (10 caracteres)

TIME(ISO): hh.mm.ss (8 caracteres)

TIMESTAMP: aaaa-mm-dd-hh.mm.ss.nnnnnn (26 caracteres)

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 157 -

Commit/Rollback

COMMIT

INDICA FIM DE UMA LUW


ATUALIZAO
CURSOR FECHADO (EXCETO COM OPO WITH HOLD)

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:

Domini Treinamento DB2 para Desenvolvedores

- 158 -

Commit/Rollback (cont.)

A instruo COMMIT:

valida todas as atualizaes feitas at ento


atualizaes so registradas no LOG
pode liberar as pginas e/ou tablespaces presos (lock)
indica que uma LUW chegou ao seu final com sucesso
todos os cursores abertos so fechados (SEM OPO WITH HOLD)

A instruo ROLLBACK:

LUW corrente ser abandonada


todas as atualizaes feitas a partir do ltimo COMMIT so
desfeitos
pode liberar as pginas e/ou tablespaces presos (lock)
todos os cursores so fechados (SEM OPO WITH HOLD)

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 160 -

Luw (cont.)

Uma Logical Unit of Work (LUW) tambm conhecida com UNIT OF


WORK ou UNIT OF RECOVERY.
Alguns processamentos podem ser divididos logicamente em pontos nas
quais os dados esto consistentes.
No nosso exemplo os dados esto consistentes quando a transferncia de
fundos est terminada. Se o processamento fosse interrompido antes do
fundo ser adicionando na POUPANA, teramos uma situao de
inconsistncia dos dados.
Assim, inaceitvel que um processamento seja interrompido durante
uma LUW.
Para o DB2, o final de uma LUW chamada de commit point. Esta situao
estabelecida:
ao trmino normal do programa
com execuo de um comando via programa (COMMIT, Check point
etc., dependendo do ambiente)
Uma LUW incompleta deve ser desfeita at o ltimo COMMIT point. Este
processamento conhecido com ROLLBACK. O ROLLBACK disparado:
ao trmino anormal de programa
com execuo de um comando via programa

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 161 -

Commit/Rollback
COMMIT
TSO/BATCH
COMMIT

IMS
call C H K P
call sync
GU IOPCB

CICS
comando SYNCPOINT

Automaticamente ao trmino NORMAL DO PROGRAMA

ROLLBACK
TSO/BATCH
ROLLBACK

IMS
call R O L L
call R O L B

CICS
comando ROLLBACK

Automaticamente ao trmino ANORMAL DO PROGRAMA

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 162 -

SQLCA

NECESSRIO PARA O PROGRAMA

FORNECE INFORMAES SOBRE O SQL EXECUTADO

EMBUTIDO NO PROGRAMA VIA:

EXEC SQL INCLUDE SQLCA END -E X E C .

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 163 -

SQLCA (cont.)

O DB2 passa as informaes referentes execuo de uma


instruo SQL num bloco de controle chamado SQL
COMMUNICATION AREA (SQLCA).

O SQLCA rotulado como SQLCA e necessrio ao programa.

O SQLCA deve ser verificado pelo programa para determinao do


sucesso ou no da ltima execuo de uma instruo SQL.

A sua codificao pode ser incorporada no programa pelo


precompilador se incluirmos a instruo INCLUDE SQLCA.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 166 -

SQL Warning

Se SQLWARN0 = : SQLWARN1 ~ 6 esto


Brancos. SE SQLWARN0 =W : algum SQLWARN..
setado para W

SQLWARN1 : string assinalada varivel HOST foi truncada


SQLWARN2:

nulos ignorados no clculo de uma funo de coluna

SQLWARN3:

nmero de colunas maior que o de variveis HOST

SQLWARN4:

UPDATE ou DELETE PREPARED no apresenta clusula


WHERE.

SQLWARN5:

instruo SQL/DS invlida no DB2

SQLWARN6:

valor de data ou TIMESTAMP corrigidas de um valor


invlido
resultante de uma operao aritmtica.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 167 -

SQL Warning (cont.)

O campo SQLWARN0 usado para alguns casos de advertncia.


Devem ser examinados em casos de SQLCODE positivos ou zero.

O terceiro campo do vetor de inteiros SQLERRD informa a


quantidade de linhas afetadas por uma requisio de alterao de
dados (UPDATE, INSERT, DELETE).

Exceo: Deleo em massa de uma tabela faz com que


SQLERRD(3) =-1

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 169 -

Instruo Whenever

EXEC SQL 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:

Domini Treinamento DB2 para Desenvolvedores

- 170 -

Instruo Whenever (cont.)

Esta instruo testa o SQLCODE na SQLCA aps cada execuo de um a


instruo SQL e para uma determinada condio de execuo, toma uma
ao determinada.

A instruo WHENEVER substituda por cdigos IF... THEN... ELSE


pelo pr-compilador.

A instruo WHENEVER no uma rotina de inicializao como o ON


CONDITION do PL/I. O pr-compilador insere a condio equivalente logo
aps cada instruo SQL do programa fonte.

Ex.:
EXEC SQL WHENEVER SQLERROR GO TO :ROTULOZ;
Com esta instruo, um SQLCODE negativo faz o programa saltar para a
rotina rotulada por ROTULOZ.

As trs condies de exceo podem estar em efeito ao mesmo tempo.

O efeito do WHENEVER vlido para qualquer instruo SQL que vem


codificado depois da mesma. Seu efeito cancelado por um
WHENEVER... CONTINUE ou substitudo por outro WHENEVER... GO
TO....

S no cobol.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 172 -

DCLGEN (cont.)

O DCLGEN um programa que gera uma codificao de declarao de


variveis HOST correspondentes s colunas de uma dada tabela.

Esta codificao feita numa das seguintes linguagens: COBOL,


COBOL II, PL/I e C.A escolha da linguagem feita na opo defaults do
painel DB2I.

O DCLGEN gera tambm uma instruo SQL DECLARE TABLE para


ser utilizado pelo pr-compilador.

Tanto a instruo DECLARE TABLE como a codificao das variveis


HOST so armazenadas num nico membro de uma biblioteca.

A funo de manter uma biblioteca de INCLUDE com a sada do


DCLGEN normalmente exercida pelo suporte.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 174 -

PREPARAO DE PROGRAMA COM


SQL

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 175 -

Preparao de Programa com SQL


PREPARAO
PREPARAO DE
DE PROGRAMA
PROGRAMA COM
COM SQL
SQL
Cdigo fonte com SQL
Biblioteca de Include
PRECOMPILE
Fonte Modificado

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:

Domini Treinamento DB2 para Desenvolvedores

- 176 -

Preparao de Programa com SQL (cont.)

A preparao de um Programa o nome que damos ao processo que


torna um programa fonte em um mdulo de carga executvel.

Em linhas gerais a preparao de um programa constitudo das


seguintes fases:

Pr-compilao

Compilao e Linkedio

BIND

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 177 -

Precompilador

O Pr-compilador roda independente do DB2 - no acessa o catlogo.

Verifica a SINTAXE dos comandos SQL

A partir do fonte gera dois data sets selados com um timestamp:


DBRM (Data Base Request Module): contm todas as instrues SQL
embutidas no fonte.
Fonte Modificado: O novo fonte o pr- compilador:
coloca as instrues EXEC SQL como comentrios e transforma-as
em CALLs para o DB2.
transforma a instruo WHENEVER em lgica IF...THEN...ELSE...
Inclui a declarao de tabelas e a declarao de variveis host
(output do DCLGEN). A instruo DECLARE TABLE utilizada para
verificao do nome dos objetos, nome das colunas e a
correspondncia entre colunas e variveis HOST
Inclui a SQLCA

Gera um relatrio de execuo com eventuais mensagens de erro.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 178 -

Compilador / Linkage Editor / Bind

O compilador gera o mdulo objeto a partir do fonte modificado


pelo pr-compilador. O timestamp copiado do fonte.

O linkage editor gera o mdulo de carga a partir do mdulo objeto


e do mdulo de interface de linguagem do DB2. O timestamp
original copiado do mdulo.

O processador de BIND gera o package a partir do DBRM.

O timestamp copiado do DBRM.

Um package contm a estratgia de acesso aos dados DB2 onde


so descritos informaes como :

ndices utilizados
estratgia de locking
estratgia de resoluo de JOIN, etc.

A fase de compilao/linkedio e a fase de BIND so executadas


separadamente e podem ser executadas em qualquer ordem.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 179 -

Viso Geral Bind

VISO GERAL BIND


DBRM
no PDS

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:

Domini Treinamento DB2 para Desenvolvedores

- 180 -

Viso Geral Bind (cont.)

O propsito do BIND a gerao de um package. As entradas


necessrias so o DBRM e o catlogo.

Os procedimentos executados so:

checagem da consistncia da instruo SQL com os objetos sendo


manipulados (nome, formato das colunas, etc.)

checagem da autorizao necessria para a execuo das


instrues SQL.

determinao da estratgia de acesso aos objetos de manipulao


pelo otimizador do DB2.

o package carregado no diretrio e uma cpia do DBRM


carregado no catlogo.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 181 -

Viso Geral Bind (cont.)

O BIND ADD utilizado para criar um novo package.

O BIND REPLACE utilizado quando a prpria instruo foi alterada


e queremos refazer o package existente.
O REBIND utilizado quando o SQL est inalterado mas ocorreu
alguma modificao no ambiente tal como criao/eliminao de
ndice, atualizao das estatsticas no catlogo que precisam ser
refletidos no package existente.

O otimizador do DB2 pesa fatores com CPU e I/O para optar por uma
estratgia de acesso.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

Os packages so armazenados em Collections

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 183 -

COLLECTION

Uma COLLECTION um conjunto de Packages


Exemplo:
online

pkg1

batch

pkg3

A collection implicitamente criada no primeiro bind package


se referenciando a ela
BIND
) MEMBER
BIND PACKAGE
PACKAGE (online
( online)
MEMBER (pkg1)
(pkg1)
BIND
BIND PACKAGE
PACKAGE (batch)
(batch) MEMBER
MEMBER (pkg3)
(pkg3)

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 184 -

TOKEN DE CONSISTNCIA - Prep. do Programa

prog3

prog1

prog2

Pre-compilador

prog3

prog1 prog2

Compilador/ Link-edit

dbrm3

dbrm1

dbrm2

BIND PACKAGE
Diretrio

Load Mdulo

dbrm3 dbrm1 dbrm2

: Timestamp da precompilao

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 185 -

Plano - ligao entre o package e o load modulo

.
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

BIND PLAN (plana)


P K L I S T ( collx .dbrm1, collz.*)

collz

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 186 -

PLANOS E PACKAGES
Um package somente pode ser localizado e executado via um PLANO

Um PLANO contm a PACKAGE LIST, um a lista de ponteiros para os


packages

O nome do DBRM e o timestamp fornecido no call usado para localizar


o package correto atravs da package list

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 187 -

ERRO DE TIMESTAMP
.
CALL DSNHLI (dbrm1, ,1)
.
plana
colly .*, collx.*

RUN PROGRAM (Imoda)


PLAN (plana)
colly

collx

dbrm1

dbrm1

-805
51002

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 188 -

BIND - opo QUALIFIER


..
SELECT...
SELECT...
FROM
FROM TAB1
TAB1
..

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:

Domini Treinamento DB2 para Desenvolvedores

- 189 -

Cursor
SELECT MATR,SOBRENOME
FROM EMPR
W H E R E D E P T =D01

P R O C E S S A MENTO DE MLTIPLAS LINHAS


OPEN
MATR
SOBRENOME
030
SILVA
050
PARKER
215
CLARK
MATR SNOME
FETCH
MATR
SOBRENOME
030
SILVA
050
PARKER
030 S I L V A
215
CLARK
MATR SNOME
FETCH
MATR
030
050
215

SOBRENOME
SILVA
PARKER
050 P A R K E R
CLARK
MATR SNOME

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 190 -

Cursor (cont.)

Se o resultado do SELECT pode ter mais de uma linhas, o programa


deve trabalhar com um CURSOR.

Quando o programa executa o OPEN de um cursor, o DB2 executa o


SELECT e a tabela resultante fica presa, esperando pelo
processamento.

O programa deve prover variveis HOST para cada coluna do


CURSOR.

O programa executa a instruo SQL FETCH para movimentar o


cursor para a prxima linha. As variveis HOST contero os valores
da linha sendo apontada.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 191 -

Select com Fetch

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.

FETCH das linhas resultantes


EXEC SQL
FETCH K9 INTO :MATR, :SNOME
END-EXEC.

CLOSE CURSOR
EXEC SQL CLOSE K9 END-EXEC.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 192 -

Procure Definir
DECLARE CURSOR: No COBOL antes da PROCEDURE
No EASY antes do JOB INPUT
Ou verifique os padres da sua instalao.

A instruo DECLARE CURSOR define a seleo dos dados que


comporo a tabela resultante. Um nome deve ser atribudo a esta tabela
para futuras referncias dentro do programa

A instruo DECLARE CURSOR no retorna nenhum valor ao programa.


Isto feito pela instruo FETCH.

No nosso exemplo foi declarado o cursor K9.

A instruo OPEN executa a seleo que est limitada pelo valores da


varivel HOST DEPT. O cursor no est apontando para nenhuma linha.

O FETCH aponta para a primeira linha da tabela resultante, O programa l


o valor das colunas atravs das variveis MATR e SNOME.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 193 -

Procure Definir (cont.)

Um programa tpico emite FETCHS sucessivamente at receber o


SQLCODE +100 na SQLCA, que indica fim da tabela resultante.

O CURSOR deve ser fechado com CLOSE quando no mais


necessrio. O final do programa tambm faz o DB2 fechar os cursores
abertos.

Um programa pode ter vrios cursores abertos ao mesmo tempo.


Porm, procure sempre manter o menor nmero de cursores abertos
simultaneamente, para otimizar performance.

Para programas que iro emitir COMMIT e necessitam reposicionar o


cursor, defina o cursor com a clusula WITH HOLD.
EXEMPLO:
EXEC SQL DECLARE K9 CURSOR WITH HOLD FOR...

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 194 -

Delete Via Cursor


EXEC SQL
DECLARE CE CURSOR FOR
SELECT ... FROM EMPR...
END-EXEC
.
EXEC SQL OPEN CE END-EXEC
.
EXEC SQL FETCH CE INTO...END-EXEC
.
.
.
EXEC SQL DELETE FROM EMPR
WHERE CURRENT OF CE END-EXEC
.
.
.
.
EXEC SQL CLOSE CE END-EXEC

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 195 -

Delete Via Cursor (cont.)

Um programa tem a opo de eliminar algumas das linhas apontadas por


um CURSOR.

A instruo DELETE com a clasula WHERE CURRENT OF CURSOR faz


com que a linha apontada pela ltima instruo FETCH seja eliminada.

Este formato aplica-se para o caso de DELETE de linhas apontadas por


um CURSOR. Se no existe a necessidade de exame do contedo das
linhas, podemos fazer o DELETE de uma ou mltiplas linhas sem a
utilizao de um CURSOR

Um cursor no pode ser usado para DELETE, se na sua declarao


estiverem presente:

ORDER BY,
GROUP BY,
DISTINCT,
UNION,
funo ou
Join.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 196 -

Update Via Cursor


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

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 197 -

Update Via Cursor (cont.)

Um programa pode fazer a atualizao de algumas linhas apontadas por


um CURSOR.

A atualizao deve ser feita para a linha que est sendo apontada pelo
CURSOR especificado na clausula WHERE CURRENT OF CURSOR.

Somente as colunas especificadas na clusula FOR UPDATE OF lista de


colunas da instruo DECLARE podem ser atualizadas.

Um programa pode atualizar uma ou mltiplas linhas de uma tabela sem


utilizar um CURSOR.

Uma instruo DECLARE no pode conter clusula FOR UPDATE OF,


se a instruo SELECT associada contiver:

ORDER BY,
GROUP BY,
DISTINCT,
UNION,
funo ou
Join.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 198 -

Manipulao de Cursor
POSICIONAMENTO
OPEN

FETCH ... FETCH ... FETCH...

CLOSE

REUTILIZAO do CURSOR
OPEN

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 199 -

Manipulao de Cursor (cont.)

OPEN posiciona o cursor antes da primeira linha da tabela resultante.

FETCH avana o cursor uma linha para frente.

Antes da Verso 7 do DB2 no existe meio de fazermos um FETCH para


trs.

CLOSE destri a posio do cursor

Um cursor pode ser reutilizado e a sua posio restaurada para o topo


da tabela resultante.

Um CLOSE no implica no fim de uma logical unit of work (LUW) e


portanto no gera um COMMIT.

Uma instruo COMMIT fecha todos os cursores sem opo with hold e
valida todas as atualizaes efetuadas at ento.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 201 -

Varivel Indicadora (cont.)

Se uma coluna selecionada permite valor nulo, o DB2 requer uma


varivel indicadora para registrar uma eventual nulidade.

Uma varivel indicadora uma halfword (SMALLINT).

Uma varivel indicadora deve ser especificada contiguamente varivel


HOST correspondente, conforme o exemplo.

As variveis HOST que no trabalham com nulo no requerem uma


varivel indicadora. Vide a coluna DEPT do exemplo.

Para um SELECT OU FETCH, se a coluna apresentar valor nulo, DB2


atribui - 1 varivel indicadora e mantm inalterada a varivel HOST,
que deve ser ignorada pelo programa.

Se um programa envolvendo UPDATE ou INSERT atribuir - 1 varivel


indicadora, o DB2 assumir valor nulo para a coluna correspondente.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 202 -

Vetor de Var. Indicadoras


EXEC SQL
SELECT
CARGO, DEPT, FONE, NOME
INTO :EST:VETOR
FROM EMPR
WHERE MATR = :ID
END-EXEC.
ID

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:

Domini Treinamento DB2 para Desenvolvedores

- 203 -

Vetor de Var. Indicadoras (cont.)

Se as variveis HOST esto arranjadas numa estrutura e pelo menos um


de seus componentes trabalha com nulo, o programa deve apresentar
um vetor de variveis indicadoras.

O Vetor deve conter uma varivel indicadora para cada componente da


estrutura, inclusive as que no trabalham com nulo, at a ltima varivel
HOST que deve trabalhar com nulo.

No nosso exemplo a 4 coluna no trabalha com nulo e o nosso vetor


no precisa de 4 indicadoras.

A correspondncia entre a estrutura e o vetor posicional.

O vetor uma mltipla ocorrncia de variveis halfword (SMALLINT).

A utilizao do vetor de variveis indicadoras somente para o COBOL


ou PL/I.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 204 -

Outros usos da Varivel Indicadora

As variveis indicadoras podem ser usadas para indicar outras situaes.

- 2 vlido para SELECT externo (numa SUBQUERY por ex.) ou


FETCH. Indica que a coluna tem resultado nulo e a varivel HOST
permanece inalterada. O teste de SQLCODE d novas informaes:
+304 indica erro de converso. Por exemplo uma varivel HOST
no conseguiu comportar um valor maior que 32K,
+ 802 indica erro aritmtico resultante de diviso por zero ou over
flow.

n indica que uma varivel HOST pequena demais para conter um


string de N caracteres que teve de ser truncado. O SQLWARN1
setado para W.

Erros de converso ou de aritmtica resultavam -304 ou -802 na ausncia


da varivel indicadora.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 205 -

Erros de Aritmtica e Converso - Exemplo


01
01
01
01

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:

Domini Treinamento DB2 para Desenvolvedores

- 206 -

Uso da Varivel Indicadora - Resumo

var.IND
0

INTERPRETAO
var. HOST contm valor no nulo

-1

coluna com valor nulo


var. HOST inalterada

-2

resultado nulo devido a uma erro


aritmtico ou de converso

n (>0)

s tring de ncaracteres truncado


no assinalamento varivel HOST

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 207 -

Estratgia de Acesso

SELECT *
FROM EMPR
WHERE SEXO = F
AND (CARGO = ANALISTA OR
AND DEPT IN (E11,D14)

SALARIO > 1000)

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:

Domini Treinamento DB2 para Desenvolvedores

- 208 -

Estratgia de Acesso (cont.)

A estratgia de acesso de uma instruo SQL determinada pelo


otimizador do DB2.

O otimizador procura a melhor opo de acesso para minimizar o


consumo de recursos de I/O e CPU.

O otimizador se baseia nas informaes estatsticas contidas no


catlogo. Tais informaes so atualizadas pelo utilitrio RUNSTATS.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 209 -

Execuo do Programa
CICS, IMS, TSO

MDULO
DE
CARGA

RELATRIO

DB2

CALL

VSAM

PLANO
PACKAGE

TABELAS
DB2

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 210 -

Execuo do Programa (cont.)

O programa executado no address space do usurio, enquanto que o


package executado no address space do DB2.

O acesso s tabelas so feitos atravs de CALL para o DB2.

Para impedir que eventualmente um programa venha a utilizar um


package que no lhe pertence, o DB2 checa se os timestamps do mdulo
de carga e do package so iguais. O programa no executado se no
forem coincidentes.
SQLCODE=

- 805 (PACKAGE)

Antigamente no existiam packages , e um plano era composto de um


conjunto de DBRMs. Para estes planos, quando existe um problema de
timestamp diferente emitido
SQLCODE=

- 818 (PLANO com DBRM)

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 211 -

Consideraes Sobre Programao

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 212 -

Recomendaes DML
Use DCLGEN para gerar variveis HOST compatveis com
colunas. Evite assim converses numricas.

- SELECT A INTO

:B

- WHERE A = :B

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 213 -

Recomendaes DML (cont.)

SELECIONE SOMENTE AS COLUNAS DESEJADAS

colunas adicionais = CPU ADICIONAL

PROIBIDO O USO DO SELECT * NO BANCO

- adio de colunas poder provocar erros


- acesso ao catlogo DB2

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 214 -

Recomendaes DML (cont.)


EVITE o subquery correlacionado.

SELECT MATR,
FROM EMPR E,
WHERE E.DEPT
AND E.MATR

SOBRENOME
PROJETO P
= P.DEPT
= P.RESP

mais eficiente que


SELECT MATR,SOBRENOME
FROM EMPR E
WHERE DEPT = (SELECT DEPT
FROM PROJETO
WHERE RESP = E.MATR)

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 215 -

Recomendaes DML (cont.)

Use o ORBER BY somente quando necessrio

CPU ADICIONAL

I/O ADICIONAL NO DATABASE TEMPORRIO

CONSIDERE SORT EXTERNO NO LUGAR DE ORDER BY

PARA TABELAS COM GRANDE QUANTIDADE DE LINHAS

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

NOTA 1: Sim, exceto quando a varivel host contiver % ou - no incio.


NOTA 2: Sim, quando pode ser substituido por operador que usa o ndice
NOTA 3: Sim se possvel converter em IN.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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

MATCHING INDEX EM DEPTNO CONSIDERADO


WHERE DEPTNO > D17
WHERE NOT DEPTNO < D28

Evitar a utilizao do comando NOT

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

MATCHING INDEX EM LASTNAME CONSIDERADO


WHERE LASTNAME LIKE B_S%

Evitar a utilizao do comando LIKE

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 221 -

Explain

INFORMA A ESTRATGIA DE EXECUO DE UMA INSTRUO SQL

ESCOLHA DO CAMINHO (NDICE X TABLESPACE SCAN)


NDICES UTILIZADOS
SORTS REQUERIDOS
SEQUNCIA DE PROCESSAMENTO DAS SUBQUERIES
ESTRATGIA DE LOCKING
SELECT
SELECT MATR,
MATR, SOBRENOME
SOBRENOME FROM
FROM EMPR
EMPR
WHERE
......AND......AND......
WHERE ......AND......AND......

EEXXPPLLAAIINN

Instruo ou opo do BIND

P L A N -T A B L E

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 222 -

Explain (cont.)

FERRAMENTA DO DBA PARA DETERMINAR

NECESSIDADE DE NDICE

PROBLEMA DE LOCKING

FERRAMENTA DO PROGRAMADOR

TESTAR ALTERNATIVAS DE ESTRATGIAS

VERIFICAR EFICINCIA DA INSTRUO SQL

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 223 -

Explain (cont.)

EEXXPPLLAAI INN

Comando
SQL

EEXPLAIN
XPLAIN

PLAN - TABLE

EXPLAIN ALL
SET QUERY = n
FOR sql-statement

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 224 -

Plan_table

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 227 -

Tpicos Adicionais
Parte 3

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 228 -

LOCKING

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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).

Um LOCK tem trs caractersticas:


Granularidade
Modo
Durao

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 230 -

Granularidade - Locksize Tablespace

LLOOCCKKSSIIZZEE TTAABBLLEESSPPAACCEE
UPDATE

SELECT
WAITING

WAITING

UPDATE

WAITING

SELECT

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 231 -

Granularidade - Locksize Table

LLOOCCKKSSI IZZEE TTAABBLLEE

UPDATE

SELECT

WAITING

UPDATE

WAITING

SELECT

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 232 -

Granularidade - Locksize Page/any

LOCKSIZE
L O C K S I Z E PAGE/ANY
PAGE/ANY

SELECT

UPDATE

UPDATE

SELECT

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 233 -

Granularidade - Locksize Row

LLOCKSIZE
O C K S I Z E RROW
OW

SELECT
UPDATE

UPDATE
SELECT

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 234 -

Granularidade do Lock

Indica a granularidade com que os recursos so presos.


Em outras palavras o LOCK pode ser dado:
individualmente a pginas
a todos os segmentos de uma tabela (se a tabela pertence a um TS
segmentado)
individualmente a um tablespace
LOCK a nvel de pginas/linha trabalhoso para o DB2, mas d um a
maior concorrncia.
LOCK a nvel de tabela/tablespace menos trabalhoso para o DB2, mas
pode causar um maior enfileiramento para espera de recursos.
A granularidade especificada como parmetro durante a definio do
tablespace
Para tablespaces segmentados ou particionados , um programa pode
sobrepor a granuladidade atravs do comando LOCK TABLE (PART)

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 236 -

Duraco do Lock (cont.)


Para LOCK de leitura a nvel de pgina ou linha temos quatro es tratgias
possveis:
R R Repeatable read
O s locks so adquiridos conforme as pginas/linhas vo sendo
acessadas e so liberados s com um COMMIT. O RR s deve ser
escolhido em situaes especiais j que as pginas/linhas ficam presas
por muito tempo. O nome vem do fato de que em caso de repetio de
leitura tenho a garantia de que ningum atualizou o intervalo de dados
lidos.
R S Read Stability
Os locks so adquiridos somente nas pginas/linhas que satisfazem
todas as condies da clausula WHERE. Permite uma aplicao ler as
mesmas pginas/linhas de dados mais de uma vez sem que estes dados
tenham sido atualizados por outra aplicao. Oferece maior concorrncia
que RR, pois embora as outras aplicaoes no possam alterar os dados
lidos pela aplicao original, elas podem inserir novas linhas.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 237 -

Duraco do Lock (cont.)


CS Cursor Stability
Os locks so adquiridos conforme a necessidade e liberados
quando o programa l outra pgina/linha.
U R Uncommited Read
NENHUM lock adquirido para a leitura das pginas/linhas. Permite
a leitura dos dados sem checar a integridade. O UR s deve ser
escolhido em situaes especiais aonde a informao lida no
precisa estar 100% garantida. Por exemplo: select sum (tot_vendas)
from vendas aonde o usurio s quer ter uma idia do total de
vendas at o momento, sem se importar com a preciso da
informao. USAR COM MUITO CUIDADO.
O R R deve ser evitado
Quanto aos locks do tipo X, no h diferena com RR, onde a liberao
ocorre somente com o COMMIT.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 238 -

Autorizaes

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 239 -

Segurana do DB2

Qualquer atividade envolvendo qualquer objeto DB2,


recurso ou funo, um privilgio e requer uma autorizao.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 240 -

Itens Protegidos

DATABASE

CATALOG

TABLESPACE

UTILITIES

TABLE

COMMANDS

INDEX

BIND

VIEW

EXECUTE

STORAGE GROUP

GRANT

BUFFER POOL

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 241 -

Identificao do Usurio do DB2

TSO

IMS/DC

CICS

BATCH

LOGON

SIGNON

SIGNON

PARMETRO

USER-ID

USER-ID

USER-ID

USER-ID NO

LTERM

TRANSAO

CARTO JOB

TERM-ID

No ambiente de Produo do Banco:


B A T C H - o Control-M
ONLINE - usurio de signon do CICS

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 242 -

Comando Grant/Revoke

GRANT
ON
TO

Lista de privilgios
Lista de recursos
Lista de USER -IDS

[WITH GRANT OPTION]


GRANT ... ON ... TO PUBLIC
(Essa autorizao vale para qualquer USER-ID)
REVOKE
ON

Lista de privilgios
Lista de recursos

FROM

Lista de USER -IDS

REVOKE ... ON ... FROM user1

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 243 -

Utilitrios

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 244 -

Utilitrios DB2

UTILITRIO
CHECK
INDEX
CHECK DATA

FUNO/DESCRIO

PROCESSAMENTO
CONCORRENTE

TESTA SE OS INDCES ESTO CONSISTENTES


COM OS DADOS

LEITURA

TESTA INTEGRIDADE REFERNCIAL E AS


CONTRAINTS

LEITURA

COPY

CRIA UMA CPIA (BACKUP) DE UM TABLESPACE

QUALQUER TIPO

LOAD

CARREGA DADOS DE UM ARQUIVO SEQUENCIAL


P AR A UMA OU MAIS TABELAS NO MESMO
TABLESPACE

NENHUM NO
TABLESPACE OU
PARTIO SENDO
CARREGADO

JUNTA CPIAS INCREMENTAIS E/OU TOTAIS E


M E R G E C O P Y CRIA UMA NOVA CPIA INCREMENTAL E/OU
TOTAL
MODIFY

DELETA INFORMAES SOBRE UMA COPIA DA


TABELA DO CATLOGO SYSIBM.SYSCOPY E DO
DIRETRIO SYSIBM.SYSLGRNG

QUALQUER TIPO

QUALQUER TIPO

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 245 -

Utilitrios DB2 (cont.)

UTILITRIO
QUIESCE
RECOVER

REORG

FUNO/DESCRIO

PROCESSAMENTO
CONCORRENTE

ESTABELECE UM QUIESCE POINT NO


CATLOGO PARA O(S) TABLESPACE(S)

LEITURA

RECUPERA O TABLESPACE, UMA PGINA,


PARTIO OU ERRORANGE

NENHUM

REORGANIZA UM TABLESPACE OU UM INDICE

REPORT
LISTA INFORMAES DE TABLESPACES
PROCESSING

READY-ONLY
DURANTE
UNLOAD; NEHUM
DURANTE RELOAD
QUALQUER TIPO

RUNSTATS

ATUALIZA TABELAS CATLOGO COM


ESTATSTICAS SOBRE UTILIZAO DE
TABLESPACES EFICINCIA DE NDICES

QUALQUER TIPO

STOSPACE

ATUALIZA TABELAS CATLOGO COM


ESTATSTICAS SOBRE UTILIZAO DE ESPAO
DE STORAGE GROUP

QUALQUER TIPO

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 246 -

Utilitrio ''Load''

CARREGA DADOS SEQUENCIALMENTE PARA UMA OU MAIS TABELAS EM


UM ''TABLESPACE'' OU PARTIO

ARQUIVO
ARQUIVO
SEQUENCIAL
SEQUENCIAL
DE
DEENTRADA
ENTRADA

UTILITRIO
UTILITRIO
LOAD
LOAD

UMA OU MAIS TABELAS


DE SADA

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 247 -

Executando o Utilitrio ''Load''

VISO BSICA DAS FASES DE EXECUO DO ''LOAD''


PHASE 1

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:

Domini Treinamento DB2 para Desenvolvedores

- 248 -

Executando o Utilitrio ''Load'' (cont.)

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:

Domini Treinamento DB2 para Desenvolvedores

- 249 -

LOAD - Fases de Execuo


(RE)LOAD

SORT
BUILD
INDEXVAL
ENFORCE

O arquivo seqencial passado uma vez e todas as tabelas so


carregadas. A sada desta fase consiste em:
- Arquivo Temporrio com todos os registros de ndices e chaves
estrangeiras.
- Um arquivo que contm o 'RID' onde a linha armazenada na tabela
e o endereo relativo do registro fonte da linha (no arquivo seqencial
de entrada).
Somente executado se as tabelas tiverem ndices. Classifica o
ndice e as chaves estrangeiras.
Cria os ndices definidos na tabela. Detecta violaes de 'ndices
nicos' e grava registro no arquivo de sada 'SYSERR'.
Retira fisicamente as linhas que violaram as regras de 'ndice nico'
da tabela. Note que ambas so retiradas.
Verifica se todas as chaves estrangeiras da tabela so iguais s
chaves primrias da(s) tabela(s) pai. As linhas encontradas com erro
so fisicamente removidas e os registros de erro so gravados no
arquivo SYSERR .

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 250 -

LOAD - Fases de Execuo (cont.)


DISCARD

REPORT

Usa o arquivo 'SYSERR' para saber quais linhas tiveram erros e o


arquivo 'SYSMAP' para localiz-las no arquivo seqencial de entrada,
esta fase cria um arquivo 'DISCARD'. O arquivo 'DISCARD' pode ser
editado (usando 'ISPF') e usado como novo 'INPUT' de 'LOAD' aps os
erros terem sido corrigidos.
Usa 'SYSERR' para listar todas as linhas que no foram carregada s.
Uma linha considerada errada por qualquer uma das
seguintesrazes:
- Erros de converso 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

No Banco utilizada a opo DISCARD(1). Esta opo especifica o nmero


mximo de registros que podem apresentar erro (qualquer tipo). C om isto, as
fases de (RE)LOAD, INDEXAL e ENFORCE abendam no primeiro erro
encontrado.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 251 -

LOAD - Cartes de Controle


LOAD DATA INTO TABLE TAB_EMPR
WHEN (1:1)=*
(MATR
NOME
.
.

POSITION (2:6),
POSITION (8:16),
)

LOCALIZAO E TAMANHO DO CAMPO DE INPUT


NOME DA COLUNA DESTINO

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 252 -

Opes Resume e Replace

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

Sobrepor dados antigos:


- Esvazia o tablespace e os ndices antes do load
LOAD DATA
REPLACE
INTO TABLE EMP
Uma maneira fcil de fazer um refresh dos dados.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 253 -

Exerccio - Load

T1,T2 E T2 CONTM DADOS


COMO VOC FARIA PARA
ADICIONAR DADOS NA T2 DE UM
ARQUIVO SEQUENCIAL ?

FAZER REPLACE DOS DADOS DA T2


POR UM ARQUIVO SEQUENCIAL ?

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 254 -

Opo Log (Yes/No)


Com esta opo possvel carregar os dados mais rpido, porm p ode
causar impacto no momento do RECOVER.
LOAD DATA
INTO TABLE PROJ
LOG YES /NO
OBS: quando a opo LOG(NO) utilizada o tablespace fica com o status
de COPY PENDING a no ser que a opo COPYDDN seja utilizada

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 255 -

Utilitrio 'Check Data''


CHECA OS DADOS PARA VERIFICAR SE EXISTEM VIOLAES DE
INTEGRIDADE REFERENCIAL E DE TABLE CHECK CONSTRAINT.

USER TABELA A

UM OU MAIS TABLESPACES

USER TABELA B

UTILITRIO
UTILITRIO
CCHHEECCKK
DATA
DATA

ERROR
ERROR
SUMMARY
SUMMARY

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 256 -

CHECK DATA - Fases de Execuo


SCANTAB

Extrai as foreign keys ; usa o ndice da foreign key, se existir,


seno faz scan table

SORT

Faz o sort das foreign keys caso elas no tenham sido extraidas
atravs do ndice.

C H E C K D A T Procura no ndice da primary key as foreign keys


correspondentes e emite mensagens no relatrio para os erros
encontrados.
R E P O R T C K Copia as linhas em erro para as exception tables, e as deleta da
tabela original se DELETE YES foi especificado

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 257 -

Opes do CHECK DATA


FOR EXCEPTION
Copia linhas invlidas para Exception Tables
DELETE
Deleta linhas invlidas e todas as descendentes (Exception Table
requerida)
SCOPE
- PENDING
Indica que somente as linhas das tabelas ou parties que esto em
CHECK pending status devem ser checadas
- ALL
Checa todas as linhas de todas as tabelas existentes no tablespace
especificado
EXCEPTIONS n
Termina o utilitrio aps n+ 1erros

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

NMERO DE LINHAS NA TABELA ?


CLUSTER OK ?
NVEL DOS NDICES ?
NMERO DE VALORES DISTINTOS DE UMA COLUNA?

REORGANIZAR ?

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 259 -

Runstats - Fase de Execuo


RUNSTATS

F a z scan no tablespace e atualiza o catlogo.

OBS: No Banco existe uma rotina pronta para o R unstats , solicitar a criao ao
analista de produo.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

- inclui ambas opes S P A C E e A C C E S S P A T H

NONE

- no atualiza o catlogo

SPACE

- atualiza informaes relativas a gerenciamento de espao.

ACCESSPATH

- atualiza informaes usadas pelo Optimizer

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 261 -

Opes do Runstats (cont.)


Para rodar somente para o Tablespace e ignorar os ndices
RUNSTATS TABLESPACE INVDB11. INVS0001
Para rodar para Tablespace e ndices
RUNSTATS TABLESPACE INVDB11. INVS0001 INDEX
Para obter estatstica para uma coluna especfica
RUNSTATS TABLESPACE INVDB11. INVS0001
TABLE( INVDB111. T_ INVOICE) COLUMN( R_ INVOICE)
SAMPLE 25
Para somente um ndice To run against only one index of TS
RUNSTATS INDEX INVDB111

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 262 -

Consideraes sobre Runstats


Rodar o Runstats aps um LOAD ou REORG, para atualizar o
catlogo do DB2.

- SQL Dinmico vai ser benificiado automaticamente


- SQL esttico precisar de um rebind.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 264 -

COPY - Fases de Execuo


REPORT

Produz um relatrio quando a opo CHANGELIMIT utilizada

COPY

Cpia do objeto

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 266 -

Copy Incremental e Mergecopy

T E MP O

DADOS

CPIA

CPIA

CPIA

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 268 -

RECOVER - Fases de Execuo


RESTORE

Localiza e faz um merge das cpias disponveis e recupera o


tablespace para o nvel do backup

L O G A P P L Y Aplica os registros da log no tablespace recuperado

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 269 -

RECOVER - Agilizao do processo

TEMPO

DADOS

CPIA

CPIA

CPIA

DADO NO
ACESSVEL

DADO
RECUPERADO

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 270 -

RECOVER - Para um ponto no tempo

TEMPO

PROCESSOS
PERDIDOS

DADOS

ALTERAES
NOS DADOS
PONTO DE
QUIESCE

DADO DANIFICADO
LOGICAMENTE

DADO
RECUPERADO

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 271 -

RECOVER - Para um ponto no tempo


TORBA
usado para especificar um ponto na log para a recuperao F U L L

TOCOPY
Especifica qual a cpia o DB2 deve usar para recuperar os dados.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 272 -

DSNTIAUL Programa SAMPLE para UNLOAD


FAZ O UNLOAD DE ALGUMAS OU TODAS AS LINHAS DE AT 100 TABELAS
AO MESMO TEMPO. O FORMATO DO UNLOAD COMPATVEL COM O LOAD
E ELE TAMBM GERA OS CARTES DE CONTROLE PARA O LOAD.

USER TABELA A
USER TABELA B

UMA OU MAIS TABELAS


DE ENTRADA

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

Domini Treinamento DB2 para Desenvolvedores

- 273 -

DSNTIAUL - DATA SETS e PARMETRO


Data Set

Description

SYSIN

Dataset de input.

SYSPRINT

Dataset de output. DSNTIAUL escreve erros e mensagens


informativas neste dataset.

S Y S P U N C H Dataset de output. DSNTIAUL escreve os cartes de controle para o


LOAD neste dataset.
S Y S R E C n n Datset de output. O valor nn tem intervalo de 00 at 99. possvel ter
no mximo 100 datasets de output por execuo do DSNTIAUL. Cada
dataset contm os dados que foram unload pelo DSNTIAUL. O
nmero deste dataset deve ser igual ao nmero de statements de
SELECT ou de tabelas do dataset de input.
O NICO PARMETRO ACEITO PELO DSNTIAUL SQL

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 276 -

Stored Procedures Introduo


O QUE SO E PARA QUE SERVEM AS STORED PROCEDURES
Stored Procedures so programas contendo comandos sql de acesso ao banco de
dados, que rodam junto do servidor de bancos de dados (na mesma mquina e sistema
operacional), sob o controle do servidor RDBMS, em ambiente prprio e separado do
aplicativo que as invoca.
Stored Procedures so armazenadas em bibliotecas funcionais compartilhadas e
acessadas pelo RDBMS.
As sp so invocadas por um aplicativo que desempenha o papel de client. Esse
aplicativo pode estar rodando localmente no mesmo servidor que o RDBMS ou em
qualquer outra mquina com acesso ao servidor db2.
A invocao de sp feita no db2 com um comando call. Note-se que com rdbms de
outros fabricantes o comando de invocao pode ser diferente de call ( e.g. O ms sql
usa execute ), assim como as regras de programao e ligao podem ser diferentes
tambm. Por esse motivo, conhecimentos prvios de outros sw, podem no se aplicar a
db2 stored procedures.
Porque razo iramos querer usar stored procedures em vez de efetuar todos os acessos
sql no programa invocador?
Existem dois tipos de situao em que mais recomendvel o uso de sp:

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 277 -

DESEMPENHO ( PERFORMANCE ).

Quando os aplicativos rodam remotamente, pelo fato de a sp rodar no mesmo servidor,


o acesso local ao rdbms mais eficiente que via rede. Alm disso, como a sp
controlada diretamente pelo rdbms, a comunicao entre estes mais otimizada que
entre um aplicativo comum e o rdbms. Tipicamente, a execuo de um conjunto de
comandos sql mais rpida quando estes esto numa sp que quando so executados,
um por vez, num programa comum.
SEGURANA.

Em geral um ambiente de servidor mais controlado e protegido de acessos indevidos.


mquinas desktop so mais vulnerveis.
Os programas existentes num servidor esto mais protegidos contra adulteraes e seu
ambiente de processamento tambm mais seguro.
Programas que implementam as partes mais confidenciais e importantes de um sistema,
muitas vezes no estariam seguros em desktops. Stored procedures so uma das
alternativas que dispomos para isolar as funes de acesso a banco de dados mais
sensveis.
Outra razo que poderia indicar o uso de stored procedures que pelo fato de estas
rodarem no servidor, podem usar comandos que no esto disponveis para os clients,
como por exemplo list database directory. Alm disso, stored procedures tambm
podem fazer acesso a recursos de software e storage diponiveis apenas no servidor.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 283 -

PROGRAMAO DE SP

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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

O db2 no permite usar overload (procedures diferentes com a mesma identificao) em


procedures com o mesmo nmero de parmetros, mesmo que sejam de tipos diferentes.
Com exceo de procedures em db2 cli e jdbc, tem de ser feito bind.

Anotaes:

Domini Treinamento DB2 para Desenvolvedores

- 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:

Domini Treinamento DB2 para Desenvolvedores

- 286 -

Commit e rollback no podem ser usados em procedures nas seguintes situaes:


-

Aninhadas em triggers ou functions

Quando o client usa uma luw em two phase commit

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:

Domini Treinamento DB2 para Desenvolvedores

- 287 -