Você está na página 1de 287

ÍNDICE

INTRODUÇÃO 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 REFERÊNCIA ..................................................................................................................................................... 13
INTEGRIDADE DE REFERÊNCIA (CONT .)...................................................................................................................................... 14
INTEGRIDADE DE REFERÊNCIA (CONT .)...................................................................................................................................... 15
AMBIENTE DB2.............................................................................................................................................................................16
COEXISTÊNCIA 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
UTILIZAÇÃO DA LINGUAGEM SQL ...................................................................................................................................26
UTILIZAÇÃO DA LINGUAGEM SQL .............................................................................................................................................. 27
UTILIZAÇÃO DA LINGUAGEM SQL (CONT .)............................................................................................................................... 28
UTILIZAÇÃO 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 NUMÉRICOS....................................................................................................................................................................... 35
DADOS NUMÉRICOS (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 COMPARAÇÃO.................................................................................................................................................. 50

Domini Treinamento – DB2 para Desenvolvedores -1-


EXEMPLOS DE W HERE ................................................................................................................................................................... 51
SELEÇÃO DE NULOS....................................................................................................................................................................... 52
SELEÇÃO DE NULOS (CONT .)........................................................................................................................................................ 53
MÚLTIPLAS CONDIÇÕES................................................................................................................................................................ 54
MÚLTIPLAS CONDIÇÕES (CONT .)................................................................................................................................................. 55
MÚLTIPLAS CONDIÇÕES (CONT .)................................................................................................................................................. 56
MÚLTIPLAS CONDIÇÕES (CONT .)................................................................................................................................................. 57
IN...................................................................................................................................................................................................... 58
BETWEEN......................................................................................................................................................................................... 59
PESQUISAS PARCIAIS ..................................................................................................................................................................... 60
NEGAÇÃO ........................................................................................................................................................................................ 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
CONDIÇÕES COM VALOR CALCULADO ....................................................................................................................................... 69
‘ORDER BY’ POR VALOR CALCULADO....................................................................................................................................... 70
OPERADOR DE CONCATENAÇÃO.................................................................................................................................................. 71
FUNÇÕES 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 CLÁUSULAS............................................................................................................................................................... 86
EXECUÇÃO CONCEITUAL DO SELECT .......................................................................................................................................... 87
EXECUÇÃO CONCEITUAL DO SELECT (CONT .)........................................................................................................................... 88
EXEMPLOS DE HAVING (CONT .)................................................................................................................................................... 89
SUMÁRIO FUNÇÕES DE COLUNA.................................................................................................................................................. 90
FUNÇÕES ESCALARES (SCALAR FUNCTIONS) ............................................................................................................................ 91
FUNÇÕES ESCALARES.................................................................................................................................................................... 92
SUBSTR (STRING, INÍCIO, COMPRIMENTO).................................................................................................................................. 93
SUBSTR (STRING, INÍCIO, COMPRIMENTO) (CONT .)................................................................................................................... 94
LENGTH (ARGUMENTO)................................................................................................................................................................. 95
LENGTH (ARGUMENTO) (CONT .)............................................................................................................................................... 96
VALUE (ARG1, ARG2, ..., ARGN )................................................................................................................................................... 97
VALUE (ARG1, ARG2, ..., ARGN ) (CONT .)................................................................................................................................. 98
FUNÇÕES DE CONVERSÃO............................................................................................................................................................. 99
DADOS DA T E/T IME......................................................................................................................................................................100
ARITMÉTICA DATE/T IME ............................................................................................................................................................101
ARITMÉTICA DE DATE/T IME (CONT ).........................................................................................................................................102
EXEMPLOS DATE/TIME................................................................................................................................................................103

Domini Treinamento – DB2 para Desenvolvedores -2-


FUNÇÕES ESCALARES DATE/T IME ............................................................................................................................................104
FUNÇÕES ESCALARES DATE/T IME (CONT .)..............................................................................................................................105
FUNÇÕES 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
UNIÃO............................................................................................................................................................................................117
UNIÃO (CONT .).........................................................................................................................................................................118
UNIÃO - EXEMPLO......................................................................................................................................................................119
UNION ALL VS. UNION................................................................................................................................................................120
SUBQUERY.....................................................................................................................................................................................121
EXEMPLO DE SUBQUERY.............................................................................................................................................................122
CONSIDERAÇÕES SUBQUERY......................................................................................................................................................123
SUBQUERY COM UMA LINHA......................................................................................................................................................124
SUBQUERY C/VÁRIAS LINHAS: ALL ........................................................................................................................................125
SUBQUERY C/VÁRIAS LINHAS: ALL (CONT.)..........................................................................................................................126
SUBQUERY C/VÁRIAS LINHAS: A NY OU SOME .......................................................................................................................127
SUBQUERY C/VÁRIAS 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
MANUTENÇÃO........................................................................................................................................................................... 135
INSERT DE UMA LINHA ................................................................................................................................................................136
INSERT DE MÚLTIPLAS LINHAS..................................................................................................................................................137
UPDATE DE COLUNAS..................................................................................................................................................................138
UPDATE DE COLUNAS (CONT )....................................................................................................................................................139
DELETE DE LINHAS......................................................................................................................................................................140
DELETE DE TODAS AS LINHAS ...................................................................................................................................................141
PROGRAMAÇÃO ....................................................................................................................................................................... 142
PROGRAMA EM LINGUAGEM TRADICIONAL.............................................................................................................................143
PROGRAMAÇÃO ............................................................................................................................................................................144
INSTRUÇÃO SQL ..........................................................................................................................................................................145
INSTRUÇÃO SQL (CONT .)............................................................................................................................................................146
VARIÁVEL HOST ...........................................................................................................................................................................147
VARIÁVEL HOST (CONT .)............................................................................................................................................................148
OUTROS EXEMPLOS.....................................................................................................................................................................149
VARIÁVEL HOST (CONT .)...........................................................................................................................................................150
VARIÁVEL HOST (CONT .)...........................................................................................................................................................151
VARIÁVEL HOST (CONT .)...........................................................................................................................................................152
VARIÁVEL HOST (CONT .)...........................................................................................................................................................153
DEFINIÇÃO DE VARIÁVEL HOST ................................................................................................................................................154

Domini Treinamento – DB2 para Desenvolvedores -3-


DEFINIÇÃO DE VARIÁVEL HOST (CONT .)..................................................................................................................................155
DEFINIÇÃO DE VARIÁVEL HOST (CONT .)..................................................................................................................................156
DEFINIÇÃO DE VARIÁVEL 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
AUXÍLIO À CODIFICAÇÃO............................................................................................................................................................169
INSTRUÇÃO WHENEVER..............................................................................................................................................................170
INSTRUÇÃO WHENEVER (CONT .)...............................................................................................................................................171
DCLGEN ......................................................................................................................................................................................172
DCLGEN (CONT .)........................................................................................................................................................................173
INSTRUÇÃO INCLUDE ...................................................................................................................................................................174
PREPARAÇÃO DE PROGRAMA COM SQL ................................................................................................................... 175
PREPARAÇÃO DE PROGRAMA COM SQL ...................................................................................................................................176
PREPARAÇÃO DE PROGRAMA COM SQL (CONT .)....................................................................................................................177
PRECOMPILADOR..........................................................................................................................................................................178
COMPILADOR / LINKAGE EDITOR / BIND ..................................................................................................................................179
VISÃO GERAL “BIND ” .................................................................................................................................................................180
VISÃO GERAL “BIND ” (CONT .)...................................................................................................................................................181
VISÃO GERAL “BIND ” (CONT .)...................................................................................................................................................182
PACKAGE ...................................................................................................................................................................................183
COLLECTION ............................................................................................................................................................................184
TOKEN DE CONSISTÊNCIA - P REP . DO P ROGRAMA ..........................................................................................185
PLANO - LIGAÇÃO ENTRE O PACKAGE E O LOAD MODULO.....................................................................................................186
PLANOS E PACKAGES...........................................................................................................................................................187
ERRO DE TIMESTAMP...........................................................................................................................................................188
BIND - OPÇÃO 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
MANIPULAÇÃO DE CURSOR ........................................................................................................................................................199
MANIPULAÇÃO DE CURSOR (CONT .) .........................................................................................................................................200
VARIÁVEL INDICADORA..............................................................................................................................................................201
VARIÁVEL INDICADORA (CONT .)...............................................................................................................................................202
VETOR DE VAR. INDICADORAS ..................................................................................................................................................203
VETOR DE VAR. INDICADORAS (CONT .)....................................................................................................................................204
OUTROS USOS DA VARIÁVEL INDICADORA..............................................................................................................................205

Domini Treinamento – DB2 para Desenvolvedores -4-


ERROS DE A RITMÉTICA E CONVERSÃO - EXEMPLO................................................................................................................206
USO DA VARIÁVEL INDICADORA - RESUMO ............................................................................................................................207
ESTRATÉGIA DE A CESSO .............................................................................................................................................................208
ESTRATÉGIA DE A CESSO (CONT.) ..............................................................................................................................................209
EXECUÇÃO DO PROGRAMA .........................................................................................................................................................210
EXECUÇÃO DO PROGRAMA (CONT .)..........................................................................................................................................211
CONSIDERAÇÕES SOBRE PROGRAMAÇÃO ............................................................................................................... 212
RECOMENDAÇÕES DML .............................................................................................................................................................213
RECOMENDAÇÕES DML (CONT.)...............................................................................................................................................214
RECOMENDAÇÕES DML (CONT.)...............................................................................................................................................215
RECOMENDAÇÕES DML (CONT.)...............................................................................................................................................216
USO DO ÍNDICE .............................................................................................................................................................................217
EXPRESSÕES A RITMÉTICAS ........................................................................................................................................................218
CONDIÇÕES 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
TÓPICOS 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
DURACÃO DO LOCK (CONT .) ......................................................................................................................................................237
DURACÃO DO LOCK (CONT .) ......................................................................................................................................................238
AUTORIZAÇÕES ........................................................................................................................................................................ 239
SEGURANÇA DO DB2...................................................................................................................................................................240
ITENS PROTEGIDOS......................................................................................................................................................................241
IDENTIFICAÇÃO DO USUÁRIO DO DB2......................................................................................................................................242
COMANDO GRANT /REVOKE .......................................................................................................................................................243
UTILITÁRIOS.............................................................................................................................................................................. 244
UTILITÁRIOS DB2 ........................................................................................................................................................................245
UTILITÁRIOS DB2 (CONT.)..........................................................................................................................................................246
UTILITÁRIO 'LOAD'' .....................................................................................................................................................................247
EXECUTANDO O UTILITÁRIO ''LOAD''........................................................................................................................................248
EXECUTANDO O UTILITÁRIO ''LOAD'' (CONT.).........................................................................................................................249
LOAD - FASES DE EXECUÇÃO ...................................................................................................................................................250
LOAD - FASES DE EXECUÇÃO (CONT .) ....................................................................................................................................251
LOAD - CARTÕES DE CONTROLE ..............................................................................................................................................252
OPÇÕES RESUME E REPLACE......................................................................................................................................................253

Domini Treinamento – DB2 para Desenvolvedores -5-


EXERCÍCIO - LOAD......................................................................................................................................................................254
OPÇÃO LOG (YE S/NO).................................................................................................................................................................255
UTILITÁRIO '‘CHECK DATA''.......................................................................................................................................................256
CHECK DATA - FASES DE EXECUÇÃO ...................................................................................................................................257
OPÇÕES DO CHECK DATA .......................................................................................................................................................258
UTILITÁRIO '‘RUNSTATS''............................................................................................................................................................259
RUNSTATS - FASE DE EXECUÇÃO ..............................................................................................................................................260
OPÇÕES DO RUNSTATS................................................................................................................................................................261
OPÇÕES DO RUNSTATS (CONT .)..................................................................................................................................................262
CONSIDERAÇÕES SOBRE RUNSTATS..........................................................................................................................................263
UTILITÁRIO '‘COPY'' ...................................................................................................................................................................264
COPY - FASES DE EXECUÇÃO....................................................................................................................................................265
OPÇÕES DO COPY.........................................................................................................................................................................266
COPY INCREMENTAL E MERGECOPY.........................................................................................................................................267
RECOVER .......................................................................................................................................................................................268
RECOVER - FASES DE EXECUÇÃO...........................................................................................................................................269
RECOVER - A GILIZAÇÃO 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 PARÂMETRO ........................................................................................................................274
DSNTIAUL - EXEMPLOS............................................................................................................................................................275
DSNTIAUL - EXEMPLOS............................................................................................................................................................276
STORED PROCEDURES INTRODUÇÃO.......................................................................................................................... 277
O QUE SÃO E PARA QUE SERVEM AS STORED PROCEDURES .............................................................................277
CALL SINTAXE .......................................................................................................................................................................... 279

CREATE PROCEDURE............................................................................................................................................................ 281


EXEMPLOS.................................................................................................................................................................................282
PARÂMETROS ..........................................................................................................................................................................283
PROGRAMAÇÃO DE SP.......................................................................................................................................................... 284
REGRAS GERAIS......................................................................................................................................................................285
COMMIT E ROLLBACK..........................................................................................................................................................286

Domini Treinamento – DB2 para Desenvolvedores -6-


Introdução ao DB2
Parte 1

Domini Treinamento – DB2 para Desenvolvedores -7-


O que é um Banco de Dados Relacional?

U m Ban co d e D ad o s Relacio n al é aq u ele q u e p o d e ser p erceb id o


ext ern am en t e co m o u m a co leção d e t ab elas.
COLUNA

Tabela DEPT

DCODIGO DNOME GERENTE DSUPERIOR

A00 SPIFFY COMP.SERVICE 000010

B01 PLANNING 000020 A00

LINHA
D01 MARKETING 000030
000030 A00
A00

...... ...... ...... ......

Anotações:

Domini Treinamento – DB2 para Desenvolvedores -8-


DB2 é um DBM S Relacional

Sist em a d e Gerên cia


d e Ban co d e D ad o s

· In t eg rid ad e e Seg u ran ça d e D ad o s


· Recu p era çã o / Rein icio In t eg ra d o s
· D ef in ição D in âm ica
· O p eração Co n t ín u a

M od elo d e D ad os Lin g u a g em
Relacio n al Sq l

Dados vist o s co m o Tab elas D ef inição, M anip ulação e


Co n t ro le d o s D ad o s
Pro jet o m ais f ácil

Anotações:

Domini Treinamento – DB2 para Desenvolvedores -9-


Estrutura de Dados do DB2

- A Ta b ela Rela cio n a l

Ta b ela EM P

MATR NOME SOBRENOME DEPARTAMENTO SALÁRIO

000010 CHRISTINE HAAS A00 52750


000020 MICHAEL THOMPSON S01 41250
000030 SALLY KWAN C01 38250
000050 JOHN GEYER E01 40175
000330 WING LEE E21 25370
000340 JASON GOUNOT E21 23840

• To d o s o s d ad o s e relacio n am en t o en t re d ad o s são rep resen t ad o s


p o r valo res d e cam p o .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 10 -


NOM ENCLATURA

O p rim eiro caract er


p recisa ser:
To d a t ab ela e A-Z, $, @ , #
t od a coluna
p recisa m ser D em a is ca ra ct eres:
nom ead as A- Z, $, @ , # , 0- 9, _

O nom e d a
t abela é único
at ravés d o N om e da
ow ner/creat or/ co lu n a é
sch e m a u n ico n a
t ab ela

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 11 -


NOM ENCLATURA

Sch em a /Ow ner/Creat or


N o m e sim p les d a Tab ela
d a Tab ela
PROD EMPL

N o m e d a Tab ela
Q ualificado(com p let o)
PROD.EMPL

N om e d a Tab ela N o m e d a Co lu n a
EMPL LASTNAME

N om e da Coluna
Q ualif icad o
EMPL.LASTNAME

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 12 -


Integridade de Referência

CH A V E CH A V E
EST RA N G EI RA PRIM Á RIA

EM P ( D EPEN D EN TE) D EPT (PAI)


NOM E D EPT D EPTCO D
CA RLO S Z1 3 I N T. Q3A
M ARIA A05 RE F. Z13
· ·
· · ·
· · ·

U m d ep t o. só p od e ser
exclu íd o se n ão t iver
nenhum dependent e.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 13 -


Integridade de Referência (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 Primária.

• Chave Estrangeira(FK) – coluna(s) de uma tabela que contém


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 Referência obedece às seguintes regras:

§ uma chave primária tem valor único e não nulo.

§ uma chave estrangeira é nula ou tem valor correspondente na


chave primária.

§ Tanto na inserção como na atualização de linhas, o DB2 força


a observação destas regras

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 14 -


Integridade de Referência (Cont.)

§ Na eliminação de uma linha da tabela PAI (PARENT TABLE), podem


ocorrer situações conforme a regra de deleção estabelecida para a
chave estrangeira.

• regra CASCADE: todas as linhas dependentes são eliminadas.

• regra SET NULL: a chave estrangeira das linhas dependentes


são atualizadas com valor nulo.

• regra RESTRICT: a eliminação é 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).

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 15 -


Ambiente DB2

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 16 -


Coexistência entre os Ambientes

TSO BA T C H IM S/TM
TSO BA TCH
U TI LI TY

Q M F
CI CS

D B2
SPU FI

BSD S LO G DB CA T DIR

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 17 -


Objetos DB2

TA BLESPA CE A

TA BELA 1 IN D EX 1

TS A
TA BELA 2 IN D EX 2
IDX1 IDX2 IDX4

T A BLESPA C E B NÃ O DB2

TS B IDX3
TA BELA 3 IN D EX 3

TA BELA 4 IN D EX 4

D A TA BA SE X

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 18 -


Objetos DB2 (cont.)

STO RA G E G RO U P1 STO RA G E G RO U P2

V O L1 V O L2 V O LX

NÃO DB2 NÃO DB2


TS
TS TS
IX

V O L3 V O L4 V O LY

NÃO DB2
TS TS
TS IX IX

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 19 -


Notas

• DATABASE (Banco de dados)

Conjunto de TABLESPACES e índices agrupados sob um


critério administrativo.

• TABLE (Tabelas)

Conjunto de linhas com as mesmas colunas (atributos).

• TABLESPACE

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


contêm dados de uma ou mais tabelas

Suas páginas podem ser de 4K, 8K, 16K ou 32 K.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 20 -


Notas (cont.)

Tipos de TABLESPACE

− simples: as páginas de seus data sets podem conter dados de


uma ou mais tabelas.

− segmentado: é dividido em segmentos(conjuntos de páginas) .


Cada segmento só pode conter dados de uma tabela. Utilização
recomendada pois permite ao DB2 uma administração melhor
de espaço.

− particionado: recomendado para tabelas gigantes. É dividido


em partições( data set VSAM). Requer um índice cluster com
uma faixa de valores estabelecidos para cada partição. O DB2
se baseia nesta faixa para saber em qual partição gravar uma
linha.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 21 -


Notas (cont.)

• INDEX (ÍNDICES)

É u m a list a o rd en ad a d e valo res q u e ap o n t am p ara o s d ad o s nas t ab elas.


U t ilizado para agilizar a leit ura de dados. Pode ser ut ilizado t am bém para
f o rçar a u n icid ad e d o s d ad o s.

Tip o s:

UNIQUE : força a unidade dos dados


NORM AL : permite a duplicidade de dados
CLU STER : usado para m ant er a seq üência f ísica dos dados no Tablespace

• V I EW
• É um subconjunt o de um a ou m ais t abelas.
• Sua ut ilização, em princípio, nada difere de um a t abela norm al.
• Conform e o caso um a VIEW pode ser som ent e leit ura.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 22 -


Notas (cont.)

• STO RA G E G RO U P

• É um conjunt o de volum es (discos) aonde o s TA BLESPA CES ou índices são


arm azenad os.
• Os discos devem t er o m esm o device t ype (3375, 3380 etc).
• A ut ilização dos STG poupa o usuário da codif icação de AM S de VS AM para
cr iar o s d at a set s via DEFINE CLUSTER.
• Os d iscos d e um STG não p recisam ser d ed icad os ao DB2 .

• SYN O N YM (SIN Ô N IM O )

É um nome alternativo (apelido) para uma tabela ou view. Um a vez criado, sua
utilização é restrita a um Auth -id. (Propriet ário ou usuário)

• Á LI A S

É um nom e alt ernat ivo (apelido) para um a t abela ou view. Utilizado mais como
nom e local de um a tabela rem ota. Seu uso é com partilhado.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 23 -


Estrutura do DB2

CAT Á LO G O D I RETÓ RI O

LO G
A TI V A
DDB2
B2

D A TA BA SES

LO G
A RCH I V E
BSD S IM AGE
C O PY

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 24 -


Estrutura do DB2 (cont.)

N O TA S:

• O cat álogo é um conjunt o de t a b e la s d o D B2 e p o d e ser a cessa d o


a t ra vés d a lin g u a g em SQ L.
• O BSD S é u m a rq u ivo V SA M KSD S, q ue cont ém um hist órico d as
Lo g s d o DB2 .
• O d iret ório é um conjunt o d e arq uivos com inf orm ações d o DB2 ,
n ão p o d en d o ser acessad o p o r n en h u m u su ário .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 25 -


Utilização da Linguagem SQL

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 26 -


U tilização da Linguagem SQL

D B2
TSO At t ach IM S At t ach CICS At t ach

DB2 I QMF PROGRA M A PROGRA M A PROGRA M A

U SU Á RI O U SU Á RI O

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 27 -


Utilização da Linguagem SQL (cont.)

SQ L

STRU CTU RED


Q U ERY
LANGUAGE

DDL DM L D CL

DA TA DA TA DA TA
DEFINITION M ANIPULATION CO N TRO L
LANGUAGE LA NGUA GE LANGUAGE

PRO GRA M A SQ L ESTÁ TI CO


PROGRA M A SQL DIN A M ICO
IN TERA TIVO

D B2

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 28 -


Utilização da Linguagem SQL (cont.)

• DM L (Data M anipulat ion Language) (Desenvolvim ent o)

• SELECT : p esq u isa d e d ad o s (READ)


• U PD A TE : at ualização de dados
• D ELETE : elim inação de dados
• I N SERT : inserção de dados

• D D L (Dat a Definit ion Language) (Suport e)

• CREA TE : definição de um objeto (tabela, índice)


• A LTER : alt eração de um objeto
• D RO P : elim inação de um objet o

• D CL (Dat a Control Language) (Suport e/Desenvolvim ent o)

• GRA N T : fornecer um privilégio


• REV O KE : tirar um privilégio

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 29 -


Linguagem SQL

• Q u alq u er acesso ao D B2 é f eit o at ravés d a lin g u ag em SQ L.

• O usuário ao em it ir um com and o SQ L d eve est ar aut orizad o p ara a


execu çã o d o m esm o .

• A lin g u ag em SQ L :

• N Ã O É PRO CED U RA L

• T E M O CO N CEI TO D E TEO RI A D O S CO N JU N TO S

• É SI MP L E S

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 30 -


Linguagem SQL (cont.)

• N ão é p roced ural .
Para cad a d ad a p esq u isa n ão p recisam o s in f o rm ar o s p ro ced im en t o s
n ecessá rio s co m o :

1. zere o contador
2. abra o arquivo
3. leia um regist ro
4. verif iq ue se sat isf az o crit ério
5. increm ent e o cont ador
6. etc.

Co m a in st ru çã o SELECT b a st a d iz er:

1 . quero os dados que sat isfazem a condição X.

• O SQ L t rab alh a co m co n ju n t o s e p erm it e a execu ção d o s o p erad o res q u e


são f am iliares p ara nós d a m at em át ica elem ent ar.
Q u em n ão co n h ece o s o p erad o res U n ião e In t ersecção ?
Co m u m a in st ru çã o SELECT p o d em o s im p lem en t a r o s seg u in t es
o p erad o res:

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 31 -


Linguagem SQL (cont.)

..União A B U N IO N

. . In t ersecção A B JO I N

. . D if erença A - B O U TER JO I N

. . Produt o Cart esiano A X B = { (x.y):x ∈ A e y ∈B }

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 32 -


DDL - Data Definition Language

CREA TE D EFI N I ÇÃ O D E O BJETO S

A LT ER A LTERA ÇÃ O D E U M O BJETO

D RO P ELI M I N A ÇÃ O D E U M O BJETO
PREV I A M EN TE D EFI N I D O

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 33 -


Create Table

• CREATE TABLE ORG


(DEPTCOD CHAR(3) NOT NULL,
DEPTNOME VARCHAR(36) NOT NULL,
GERENTE CHAR(6),
DIVISAO CHAR(8) NOT NULL WITH DEFAULT,
PRIMARY KEY(DEPTCOD))
IN DBXX.TSXX
• CREATE TABLE STAFF
(ID CHAR(6) NOT NULL,
NOME VARCHAR(12) NOT NULL,
.
.
.
DEPT CHAR(3),

PRIMARY KEY(ID),
FOREIGN KEY(DEPT) REFERENCES ORG ON DELETE CASCADE)
IN DBYY.TSYY
• ALTER TABLE STAFF ADD COLX DECIMAL (8,2)

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 34 -


Dados Numéricos

DDef
efin
inição
ição ppara
ara Co
Colu
lunnas
as
TI PO D E D A D O D ESCRI ÇÃ O FA IX A

SM A LLIN T Inteiros -32.768 + 32.767


I N TEG ER Int eiros -2.147.483.648
IN T + 2.147.483.647
D ECI M A L ( X , Y) D ecim ais X= total de dígitos
Y= ca sa s d ecim a is
X <= 3 1

FLO A T ( m ) p recisã o sim p les 5 .4 e-79 to 7.2e+ 75


REA L ponto flutuante

FLO A T d u p la p recisão 5 .4 e-79 to 7.2e+ 75


FLO A T ( n ) ponto flutuante* *
D O U BLE PRECI SI O N

** 1 < = m < = 2 1
21 < = n < = 5 3 Para D ECIM AL, d ef ina X com núm ero im p ar

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 35 -


Dados Numéricos (cont.)

• S M A LLI N T é u m a half w ord (2 b yt es)

• I N TEG ER é u m a full w ord ( 4 b yt es)

• D ECIM AL arm azena núm eros em d ecim al com p act ad o. A f aixa d e


va lo res d ep en d e d a q u a n t id a d e d e ca sa s d ecim a is.

• Crit ério d e escolha d o t ip o d e d ad o

• f aixa d e valo res req u erid o

• t ip o d e co m p aração n ecessária p ara o s p ro cessam en t o s


Com p aração ent re núm eros d e t ip os d if erent es im p lica em
o verh ea d n ecessá rio p a ra co n versã o e risco s m a io res d evid o a
erros ind uzid os p or arred ond am ent o.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 36 -


Dados Character String

DDef
efin
iniçã
içãoo ppaara
ra Co
Colu
lunnaass
TI PO D E D A D O D ESCRI ÇA O TAM AN H O

CH A R ( x) st rin g f ixo x ca ra ct eres


(m áxim o 2 5 4 )

V A RCH A R ( x) st ring d e 0 a 254 **


t am . variável caract eres

LO N G V A RCH A R( x) st ring d e x > 254 * *


t am . Variável caract eres

* * O t am anho m áxim o de um a coluna do t ipo VARCH AR


depende do t am anho da página do Ta b le sp a ce.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 37 -


Dados Date / Time

DDef
efin
iniçã o ppaara
ição ra Co
Colu
lunnaas
s

TI PO D E D A D O FO RM A TO IN TERN O

D ATE aaaam m dd (4 b yt es)

TIM E h h m m ss ( 3 b yt es)

TIM ESTAM P aaaam m d d h h m m sssn n n n n n (1 0 b yt es)


(nnnnnn = m icro seg u n d o s)

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 38 -


Nulidade

U m a co lu n a p o d e ser:

• N O T N U LL o va lo r d eve ser f o rn ecid o

• N O T N U LL W I TH D EFA U LTvalo r p o d e ser o m it id o e assu m e default

• N U LLA BLE o valor p od e ser om it id o

u m valo r N U LO : N Ã O É Z ERO
N Ã O É BRA N CO
É D ESCO N H ECI D O

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 39 -


Not Null W ith Default

Para um a coluna ‘ not null w ith default ‘ o sist em a f ornece o valor em


ca so d e o m issã o .

• Zero p ara co lu n as n u m éricas

• Bran co p ara co lu n as fixed lengt h caract er

• Com p rim ent o zero p ara colunas variab le lengt h charact er

• Tim e
• Dat e Valores Correntes
• Tim est a m p

Anotações:

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%’

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 41 -


DM L - Data M anipulation Language

SELEC T A CESSA D A D O S

U PD A TE A TU A LIZA CA M PO S

D ELET E REM O V E LI N H A S

I N SERT I N SERE N O V A S LI N H A S

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 42 -


Tabelas Usadas nos Exemplos

X . STA FF
ID NOM E D EPT CA RGO ANOS SA LA RI O COM IS

10 SA N TA N A 20 G ER 7 18357.50
20 O RSIN I 20 VENDAS 8 18171.25 612.45
30 DANTAS 38 G ER 5 17506.75 -
40 O ’ BRI EN 38 VENDAS 6 18006.00 846.55
50 SOUZA 15 G ER 10 20659.80 -
60 SU ZU KI 38 VENDAS - 16808.30 650.25
70 AL M EIDA 15 VENDAS 7 16502.83 1152.00
80 JA M ES 20 A TEN D - 13504.60 128.20
90 KOONITZ 42 VENDAS 6 18001.75 1386.70
100 PLO TZ 42 G ER 7 18352.80 -
110 NGAN 15 A TEN D 5 12508.20 206.60
120 NAUGHTON 38 A TEN D - 12954.75 180.00
130 YAM AGUCHI 42 A TEN D 6 10505.90 75,60
140 FRA YE 51 G ER 6 21150.00 -
150 O LI V EI RA 51 VENDAS 6 194 56.50 637.65
160 M O LIN A RI 10 G ER 7 22959.20 -
170 KERM I SCH 15 A TEN D 4 12258.50 110.10
180 ABRAHAM S 38 A TEN D 3 12009.75 236.50
190 SN EI D ER 20 A TEN D 8 14252.75 126.50
200 SCO U TTEN 42 A TEN D - 11508.60 84.20
210 L U 10 G ER 10 20010.00 -
220 SM ITH 51 VENDAS 7 17654.50 992.80
230 LU N D Q U I ST 51 A TEN D 3 13369.80 189.65
240 DA N IELS 10 G ER 5 19260.65 -
250 W H EELER 51 A TEN D 6 14460.00 513.30
260 JO N ES 10 G ER 12 21234.00 -
270 LEA 66 G ER 9 18555.50 -
280 W ILSON 66 VENDAS 9 18674.50 811.50
290 PI N H O 84 G ER 10 19818.00 -
300 DAVIS 84 VENDAS 5 15454.50 806.10
310 GRA HA M 66 VENDAS 13 21000.00 200.30
320 GO N ZA LES 66 VENDAS 4 16858.20 844.00
Anotações:
330
340
BU RKE
V IEIRA
66
84
A TEN D
VENDAS
1
7
10988.00
17844.00
55.50
1285.00
350 G A FN EY 84 A TEN D 5 13030.50 188.00

Domini Treinamento – DB2 para Desenvolvedores - 43 -


Tabelas Usadas nos Exemplos (cont.)

X . O RG

D EPTCO D DEPTN O M E G EREN TE D IV ISÃO LO CA L

10 M ATRIZ 160 C EN T RO SÃ O PA U LO
15 CAM PIN AS 50 SU D ESTE CA M PIN A S
20 RIO 10 SU D ESTE R. JA N EI RO
38 M INAS 30 SU D ESTE B. H O RI ZO N TE
42 BA H IA 100 N O RD ESTE SA LV A D O R
51 REC I FE 140 N O RD ESTE REC I FE
66 RI O G RA N D E 270 SU L PO RTO A LEG RE
84 PA RA N Á 290 SU L CU RI TI BA

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 44 -


Query

SEQ U ÊN CI A O BRI G A TÓ RI A :

SELEC T N O M E, A N O S, SA LÁ RIO - D iz q u ais as co lu n as d esejad as

FRO M X . STA FF - Diz de quais t abelas

W H ERE D EPT = 3 8 - D iz q u ais lin h as selecio n ar

O RD ER BY NOM E - Diz com o ordenar o result ado

A m enor inf orm ação q ue a ling uag em SQ L necessit a p ara at end er um a


so licit ação :

SELECT ∗ FROM X.STAFF

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 45 -


Query em Formato Livre

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


ORDER BY NOME

O BS: A PESA R D A Q U ERY PO D ER SER ESCRI TA EM FO RM A TO LI V RE,


Q U A N D O SE ESCREV E D E M A N EI RA ESTRU TU RA D A FI CA M ELH O R PA RA
V I SU A LI ZA R.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 46 -


Select...From

• SELECT algumas colunas da t abela

• List a as colunas desejadas na seqüência de esquerda para direit a


• Vírgulas separa as colunas (obrigat órias)
• FROM list a d e t ab elas

• Sim p les : EM P
• Qualificado: AUTHID. EM P

Exem p lo

SELECT DEPTNOME, DEPTCOD


FROM X.ORG

Result ad o: DEPTN OM E D EPTCO D


M ATRIZ 10
CA M PINA S 15
RIO 20
M INAS 38
. .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 47 -


Select de Todas as Colunas

Para selecionar t odas as colunas de um a t abela na m esm a seqüência em que


f oram d ef inid as no com and o CREATE TABLE:

SELECT *
FROM X.ORG

Result ado:

D EPTCO D DEPTNOM E G EREN TE DIVISÃO LOCA L


10 M A TRIZ 160 CEN TRO SÃ O PA U LO
15 CAM PINAS 50 SU D ESTE CAM PINAS
20 RIO 10 SU D ESTE R. JA N EI RO
38 M INAS 30 SU D ESTE B. HORIZON TE

O BS. : EV I TA R O U SO D O SELECT *

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 48 -


Controle de Linhas

• W H ERE

• t raz cert as linhas


• est abelece condições

Exem plo: List ar em pregados do depart am ent o 20

SELECT DEPT, NOME,CARGO, COMIS


FROM X.STAFF
WHERE DEPT = 20

Result ado:

D EPT NOM E CA RG O COM IS

20 SA NTA NA G ER -
20 ORSIN I VEN DA S 612.45
20 JA M ES A TEN D 128.20
20 SN EI D ER A TEN D 126.50

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 49 -


Operadores de Comparação

= Igual
< > or ¬= Diferente
> M aior
> = M aior ou Igual
< M enor
< = M enor ou Igual
¬> N ão m aio r
¬< N ão m enor

SELECT MATR, COMIS


FROM X.STAFF

WHERE COMIS = 1000

SELECT NOME, DEPT, ANOS


FROM X.STAFF

WHERE CARGO < > ‘GER’

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 50 -


Exemplos de W here

• Selecio n ar lin h as at ravés d e d ad o n u m érico

SELECT DEPT, NOME,


CARGO
FROM X.STAFF

WHERE DEPT = 20

• Selecio n ar lin h as at ravés d e d ad o alf an u m érico

SELECT NOME, CARGO, COMIS


FROM X.STAFF

WHERE NOME = ‘SANTANA’

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 51 -


Seleção de Nulos

• V a lo r n u lo co m o crit ério d e SELECT

SELECT NOME, CARGO, COMIS


FROM X.STAFF

WHERE COMIS IS NULL

Resu lt a d o :

NOM E CA RGO COM IS

SA NTA NA G ER -
DANTAS G ER -
SO U ZA G ER -
PLO TZ G ER -

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 52 -


Seleção de Nulos (cont.)

• V alo r n ão é n u lo co m o crit ério d e SELECT

SELECT NOME, CARGO, COMIS


FROM X.STAFF

WHERE COMIS IS NOT NULL

Resu lt a d o :

NOM E CA RGO COM IS

O RSIN I VEN DA S 612.45


O ’ BRI EN VENDAS 846.55
SU ZU KI VENDAS 650.25
A LM EIDA VENDAS 1152.00
JA M ES A TEN D 128.20

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 53 -


M últiplas Condições

• O p erad o res p ara m ú lt ip las co n d içõ es


AND
OR
• D a d a s d u a s co n d içõ es
CARGO = ‘VENDAS’ SALÁRIO < 17000

Para t er am bas sat isf eit as: AN D


WHERE CARGO = ‘VENDAS’ AND SALÁRIO < 17000

Resu lt ad o :

NOM E CA RGO SA LÁ RIO

SU ZU KI VENDAS 16808.30
A LM EIDA VENDAS 16502.83

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 54 -


M últiplas Condições (cont.)

Para t er qualquer um a sat isf eit as: O R

WHERE CARGO = ‘VENDAS’ OR SALÁRIO < 17000

Resu lt ad o :

NOM E CA RG O SA LÁ RIO

ORSIN I VEN DA S 18171.25


O ’ BRIEN VEN DA S 18006.00
SU ZU KI VEN DA S 16808.30
A LM EIDA VEN DA S 16502.83
JA M ES A TEN D 13504.60

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 55 -


M últiplas Condições (cont.)

U sar p arên t eses p ara sep arar as co n d içõ es AN D , O R

WHERE (CARGO = ‘VENDAS’ AND COM > 1200)


OR ANOS > 10

Resu lt ad o :

NOM E CA RG O A N OS COM IS

KOONITZ VEN DA S 6 1386.70


JO N ES G ER 12 -
GRA HA M VEN DA S 13 1200.30
V I EI RA VEN DA S 7 1285.00

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 56 -


M últiplas Condições (cont.)

não eq üivale a:

WHERE CARGO = ‘VENDAS’


AND (COMIS > 1200 OR ANOS > 10)

Resu lt a d o :

NOM E CA RGO ANOS COM IS

KOON ITZ VENDAS 6 1386.70


GRA HA M VEN DA S 13 200.30
V I EI RA VENDAS 7 1285.00

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 57 -


IN

• Valor d eve coincid ir com alg um elem ent o d a list a

WHERE DEPT IN (38, 20, 42)

eq uivale a:

M últiplos O Rs p ara a m esm a co lu n a:

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

N EGAÇÃO : N O T IN

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 58 -


Betw een

• Pa ra selecio n a r u m int ervalo f echad o d e valores


SELECT N OM E, CA RGO, A N OS
FRO M X. STA FF
W HERE A N OS BETW EEN 9 A N D 1 1 Ext rem id a d es in clu sive

eq uivale a:

SELECT N OM E, CA RGO, A N OS
FRO M X. STA FF
W H ERE A N O S > = 9
A ND A NOS < = 11

Resu lt ad o : NOM E CA RG O ANOS


SOU ZA G ER 10
LU G ER 10
LEA G ER 9
W ILSON VEN DA S 9
PINHO G ER 10

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 59 -


Pesquisas Parciais

Para p esq u isar u m su b co n ju n t o d e caract eres: LI KE


% = Conjunt o de caract eres quaisquer
_ = Um caract er qualquer

Exe m p lo s:

1. WHERE NOME LIKE ‘G%’ inclui: GRA HA M


GO N ZA LES
GA FN EY
2. WHERE NOME LIKE ‘%SON’ inclui: WILSON * * *
JA SO N

3. WHERE NOME LIKE ‘%M%N%’ inclui: M OLIN A RI

4. WHERE NOME LIKE ‘_ _’ inclui: LU (TAM = 2


BYTES)

5. WHERE NOME LIKE ‘_R%’ inclui: FRA YE


(R n a 2 ª p o sição ) GRA HA M
*** VARCHAR

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 60 -


Negação

• Para n eg ar o t est e:

WHERE NOME NOT LIKE ‘G%’

exclu i: G RA H A M
G O N Z A LES
G A FN EY

WHERE ANOS NOT BETWEEN 9 AND 11

exclui AN O S de 9 a 1 1

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 61 -


Order By

• Para classif icar n u m a seq u ên cia esp ecif icad a:


List a classificada do pessoal do dept o. 84

SELECT NOME, CARGO, ANOS


FROM X.STAFF
WHERE DEPT = 84
ORDER BY NOME
Resu lt a d o :
NOM E CA RGO A N OS

DA VIS VENDAS 5
GA FN EY VENDAS 7
PINHO A TEN D 5
V I EI RA G ER 10

O BS. :

Prim eiro selecio n a e d ep o is classif ica.

Pa ra p eq u en o s vo lu m es p o d e ser u sa d o sem p ro b lem a s.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 62 -


Order By (cont.)

• Para classif icar p elas co lu n a (s) em o rd em A SC endente ( d ef ault) ou


D ESC endente
SELECT NOME, CARGO, ANOS
FROM X.STAFF
WHERE DEPT = 84
ORDER BY CARGO, ANOS DESC
Resu lt a d o :
NOM E CA RGO ANOS
GA FN EY A TEN D 5
PINHO G ER 10
V I EI RA VEN DA S 7
DA VIS VEN DA S 5

ORDER BY ANOS DESC, CARGO


Resu lt a d o :
NOM E CA RGO ANOS
PINHO GER 10
V I EI RA VEN DA S 7
GA FN EY A TEN D 5
DA VIS VEN DA S 5

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 63 -


Order By (cont.)

• Co lu n a s cla ssif ica d a s d evem ser ref eren cia d a s p elo SELECT.

• N u lo s são co n sid erad o s co m o valo r m ais alt o .

• Po d em o s esp ecif ica r co lu n a s p a ra o O RD ER BY f o rn ecen d o


u m n ú m ero q u e in d ica a p o sição d a m esm a n a cláu su la
SELECT. O O RD ER BY é o ú n ico q u e p erm it e ist o . Po d em o s
t am b ém ref eren ciar u m ALIAS.

• O RD ER BY cla ssif ica u m a t a b ela resu lt a n t e. Lo g o d eve ser


S E MPRE a Ú N ICA e a Ú LTIM A a ap arecer n u m a in st ru ção
SE LE C T .

• U sar sem p re q u e d esejar as lin h as seg u n d o u m a o rd em


esp ecíf ica.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 64 -


Select Distinct

• A p alavra ch ave DISTINCT d eve ap arecer lo g o d ep o is d o SELECT.


• Classif icação ocorre pelas colunas da esquerda para a direit a.
• ‘ ORDER BY’ pode ser usada para cont rolar a classif icação.

EX EM PLO : SELECT DEPT D EPT


FROM X.STAFF 20
20
38
38
38
15
10
.
.
Para elim in ar lin h as d u p licad as:

SELECT DISTINCT DEPT D EPT


FROM X.STAFF 10
15
20
38
.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 65 -


Select Distinct (cont.)

M Ú LTI PLA S-CO LU N A S

SELECT DISTINCT DEPT, CARGO D EPT CA RG O


10 G ER
15 A TEN D
15 G ER
15 V EN D A S
20 A TEN D
20 G ER
20 V EN D A S
38 A TEN D

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 66 -


Select de Valores Calculados

+ SOM A * M ULTIPLICA ÇÃ O
- SU BTRA ÇÃ O / DIVISÃO

To t al d e g an h o d e cad a p esso a d o D EPT 2 0

SELECT ID, SALÁRIO, COMIS, SALÁRIO + COMIS


FROM X.STAFF
WHERE DEPT = 20

Resu lt a d o :
ID SA LÁ RIO COM IS CO L1

10 18357.50 - - (1)
20 18171.25 612.45 18783.70
80 13504.60 128.20 13632.80
190 14252.75 126.50 14379.25

O BS. : N Ã O FA Z EX PO N EN CI A ÇÃ O .
(1 ) Q uand o um a d as colunas a serem som ad as cont iver
nulos, não é efet uado o calculo.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 67 -


Nomeando a coluna resultado

SELECT ID, SALÁRIO, COMIS, SALÁRIO + COMIS AS RENDIMENTOS


FROM X.STAFF
WHERE DEPT = 20
ORDER BY RENDIMENTOS

Resu lt a d o :
ID SA LÁ RIO COM IS REN DIM EN TOS

80 13504.60 128.20 13632.80


190 14252.75 126.50 14379.25
20 18171.25 612.45 18783.70
10 18357.50 - -

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 68 -


Condições com Valor Calculado

Pesso a cu jo salário m ais co m issão exced e $ 2 0 . 0 0 0

SELECT NOME, SALÁRIO + COMIS


FROM X.STAFF
WHERE SALARIO + COM > 20000

Resu lt a d o :

NOM E CO L1

O LI V EI RA 20094.15
GRA HA M 21200.30

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 69 -


‘Order By’ Por Valor Calculado

EX EM PLO 1 :

SELECT NOME, SALÁRIO + COMIS


FROM X.STAFF
WHERE SALARIO + COMIS > 20000
ORDER BY 2 DESC

Resu lt a d o :

NOM E CO L1

GRA HA M 21200.30
O LI V EI RA 20094.15

EX EM PLO 2 :

SELECT CARGO, SALÁRIO + COMIS


FROM X. STAFF
ORDER BY CARGO, 2

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 70 -


Operador de Concatenação

st ring1 | | st rin g 2 st ring 1 st ring 2


‘ A BC’ | | ‘XYZ ‘ A BCX YZ’

TA BELA X ( CO LU N A S varchar : sn o m e n o m e)
SNOM E NOM E M ID
JO N ES JO H N P
M ARQ U ES FRA N CO X
· · ·
· · ·
· · ·
SELECT SNOME || ‘, ‘ || NOME || ‘ ‘ || MID || ‘.‘
FROM TABELA X
Resu lt ad o :
JO N ES, JO N ES P.
M ARQ U ES, FRA N CO X .
· · ·
· · ·

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 71 -


Funções de Coluna (Column Functions)

Tran sf o rm a d ad o s d e u m a co lu n a em u m ú n ico valo r.

D ad o s n u m érico s

SU M - To t al d o s valo res d e u m a co lu n a

AVG - M éd ia d o s valo res d e u m a co lu n a

Q uaisq uer t ip os d e d ad os

M IN - M enor valor de um a coluna

M AX - M aior valor de um a coluna

CO U N T - N úm ero d e ocorrências

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 72 -


Sum Avg M ax M in

EX EM PLO

SELECT SUM(SALÁRIO), MIN(COMIS), MAX(COMIS)


FROM X.STAFF
WHERE DEPT = 56

Resu lt ad o :

CO L1 CO L2 CO L3

86076,20 17245,89 550844,60

Valor nulo não são considerados em funções de coluna,


O BS. :
EXCETO p ara a f u n ção COUNT(* ).

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 73 -


Sum Avg M ax M in (cont.)

• Gera um único valor a p art ir d e um conjunt o d e valores d e um a ún ica


coluna.

• O resu lt ad o n ão co n t ém d et alh es d e lin h as in d ivid u ais.

• Po d em ser p ed id as m ais d e u m a f u n ção p ara a m esm a co lu n a,


co n f o rm e o exem p lo .

• N u lo s sã o exclu íd o s.

• Precisão (p art e in t eira, casa d ecim al) d eriva d a co lu n a.

• Para a f u n ção AVG d e u m a co lu n a D ECIM AL (p , s) o resu lt ad o t erá


precisão (1 5 ,1 5-p +s).

• Exp ressõ es d o seg u in t e t ip o t am b ém p o d em ser u t ilizad as.

AVG(SALÁRIO + COMIS)

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 74 -


Count

COU N T (* ) Núm ero de linhas que sat isfazem a condição w here.


Nulos são cont ados .
CO U N T ( D ISTIN CT n o m e-coluna) - Núm ero de valores dist int os na coluna.
Nulos não são cont ados.

Co n t a r a s p esso a s cu jo sa lá rio exced a


$ 1 8 . 0 0 0 e seus resp ect ivos d ep art am ent os.
M ost re a m édia salarial.

SELECT COUNT(DISTINCT DEPT),COUNT(*),AVG(SALÁRIO)


FROM X.STAFF
WHERE SALARIO>18000

Resu lt ad o : C O L1 CO L2 C O L3

8 16 19604.190625000

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 75 -


Cuidado com Nulos

SU M ( SA LA RY) +SU M (BO N U S)+SUM (COM M )


V ERSU S
SU M ( SA LA RY+BO N U S+COM M )

EMPNO SALARY BONUS COMM SALARY+BONUS+COMM


000010 1000 500 100 1600
000020 2000 NULL 300 NULL
000030 2500 400 NULL NULL
000040 1500 100 400 2000
------ ------ ----- ---- -----------------
Sum: 7000 1000 800 --> 8800 3600
====== ===== ==== ====

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 76 -


Cuidado com Nulos

A B

2 5
- 3
4 -

SU M (A) = ... SU M (A + B ) = ...


SU M (B) = ...
AVG (A) = ...

SU M (A) = ...
COUNT(* )

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 77 -


Literais

• Lit era is p o d em ser m o st ra d a s n o resu lt a d o d e u m SELECT.

• Po d em ser ú t eis q u an d o u sad as co m f u n çõ es d e co lu n a q u e n ão


exib em ca b eça lh o s.

• Po d em o s selecio n ar ap en as u m a cad eia d e caract eres co n f o rm e


exem p lo a seg u ir:

SELECT ‘TESTE XYZ’ FROM TABELAZ

( é n ecessário q u e a t ab ela exist a).

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 78 -


Literais

SELECT AVG(COMIS), SUM(COMIS)


FROM X.STAFF

C O L1 CO L2

513.31 12319.45

SELECT ‘MED:’ , AVG(COMIS),


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

C O L1 C O L2 C O L3 C O L4

M ED : 513.31 SO M A: 12319.45

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 79 -


Group By

Ag ru p a u m co n ju n t o d e lin h as.
Co m GRO U P BY, a f u n ção d e co lu n a calcu la u m valo r p ara cad a
agrupam ent o.

SELECT SUM(SALÁRIO), SELECT SUM(SALÁRIO),


SUM(COMIS) SUM(COMIS)
FROM X.STAFF FROM X.STAFF
WHERE CARGO <> ‘GER’ WHERE CARGO <> ‘GER’
GROUP BY DEPT

C O L1 C O L2 C O L1 C O L2

146976.93 4249.15 41269.53 1468.70


45928.60 867.15
59778.80 1913.30
. .
. .
. .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 80 -


Group By (cont)

SELECT DEPT, SUM(SALÁRIO), SUM(COMIS)


FROM X.STAFF
WHERE CARGO <> ‘GER’
GROUP BY DEPT

Resu lt ad o :

D EPT C O L1 C O L2

15 41269.53 1468.70
20 45928.60 867.15
38 59778.80 1913.30
. . .
. . .
. . .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 81 -


Group By (cont.)

N O TA S:

• Po d em o s f a z er ‘ GRO U P BY’ so b re m ú lt ip la s co lu n a s.

GROUP BY DEPT, CARGO

• A s co lu n a s ref eren cia d a s p elo SELECT q u e n ã o seja m f u n çã o p recisa m ser


ag ru p ad as p elo ‘ GRO U P BY’ (ver p ag in a an t erio r). O n ão ag ru p am en to n est e
caso g era erro .

• O result ad o cont ém um a linha sum ário p ara cad a grup o.

• To d o s o s valo res n u lo s são co n sid erad o s co m o u m g ru p o .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 82 -


Group By ... Order By

• Para g aran t ir a o rd em d e classif icação é n ecessário u sar O rder By

SELECT DEPT, SUM(SALÁRIO), SUM(COMIS)


FROM X.STAFF
WHERE CARGO <> ‘GER’
GROUP BY DEPT
ORDER BY 3

Resu lt ad o :

D EPT CO L1 C O L2

20 45928.60 867.15
. . .
. . .
15 41269.53 1468.70
. . .
. . .
38 59778.80 1913.30

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 83 -


Group By ... Having

CO N D I ÇÕ ES SO BRE G RU PO S

SELECT . . . FRO M ..

W HERE.....

FI LTRO S

GRO U P BY. . .

HAVIN G....

W H ERE - esco lh e lin h as


H AVIN G - esco lh e grupos

É execu t a d o sem p re a p ó s G RO U P BY

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 84 -


Exemplo de Having

SELECT DEPT, SUM(SALÁRIO)


FROM X.STAFF
GROUP BY DEPT

D EPT C O L1

10 83643.45
15 61929.33 SELECT DEPT, SUM(SALÁRIO)
20 64286.10 FROM X.STAFF
38 77285.55 GROUP BY DEPT
42 58369.05 HAVING SUM(SALÁRIO) > 65000
. .
. . D EPT C O L1
. .
10 83643.45
38 77285.55
. .
. .
. .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 85 -


Select - 6 Cláusulas

SELECT DEP, JOB, AVG(SAL)


FROM EMPL
WHERE JOB <> 'M'
GROUP BY DEP, JOB
HAVING AVG(SAL) > 28000
ORDER BY 3 DESC

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 86 -


Execução conceitual do Select

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 87 -


Execução conceitual do Select (cont.)

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 88 -


Exemplos de Having (cont.)

M édia salarial por depart am ent o


a p en a s d o s n ã o-g erent es d os d ep art am ent os
co m m a is d e 3 p e sso a s.

SELECT DEPT, AVG(SALÁRIO) FROM STAFF


WHERE CARGO <> ‘GER’
GROUP BY DEPT
HAVING COUNT(*) > 3

M éd ia salarial d os não -gerent es por depart am ent o, que t enham


so m en t e p esso as co m n o m ín im o 5 an o s d e exp eriên cia.
List ar em o rd em d escen d en t e p o r m éd ia.

SELECT DEPT, AVG(SALÁRIO)


FROM STAFF
WHERE CARGO <> ‘GER’
GROUP BY DEPT
HAVING MIN(ANOS) >= 5
ORDER BY 2 DESC
O s exem p lo s m o st ra m q u e o SELECT e o H A V IN G p o d em u sa r f u n çõ es
d if eren t es.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 89 -


Sumário Funções de Coluna

• Fu n çõ es d e Co lu n a só p o d em ser esp ecif ica d a s em :

SELEC T

HAVIN G

• SELECT p o d e e sp e cif ica r som ent e

Fu n çõ es d e Co lu n a

Co lu n a s esp ecif ica d a s n o ‘ G RO U P BY’

• H AV IN G p o d e esp ecif icar

Fu n çõ es d e Co lu n a so b re qualquer coluna cont ida num a t abela


esp ecif ica d a n o FRO M

• Fu n çõ es d e Co lu n a n ão podem ser em but ida um a dent ro da out ra.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 90 -


Funções Escalares (Scalar Functions)

• Transf orm a um único valor em out ro valor.

• Fu n çõ e s STRI N G

• Fu n çõ es d e Co n versã o

• Fu n çõ es D a t e/ Tim e

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 91 -


Funções Escalares

• Ao cont rário d as f u n çõ es d e co lu n a que t ransform am um conjunt o de


valores d e um a coluna num único valor, as f u n çõ es escalares operam
so m en t e so b re u m ú n ico valo r.

• Fu n çõ e s Esca la r e s p od em ser em b ut id as d ent ro d a out ra.

• Ex. : SU BSTR (SU BSTR (. . . ). . . )

• Fu n çõ es d e Co lu n a p od em ser argum ent o d e um a f u n ção escalar.

• Ex. : SU BSTR (M AX (. . . ). . . )

• Fu n çõ e s Esca la r e s p od em ser argum ent o d e um a função de coluna.

• Ex. : M AX (SU BSTR(. . . )).

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 92 -


Substr (string, início, comprimento)

• Se o co m p rim en t o n ão f o r esp ecif icad o , a f u n ção p eg a t o d o o resto .

• Se a p o siçã o d o início ult rap assar o f inal d o st ring t erem os erro.

• Se o início + com p rim ent o ult rap assar o f inal d o st ring t erem os erro .

• Su b st rin g de nulo é nulo

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 93 -


Substr (string, início, comprimento) (cont.)

SELECT DEPTNOME, SUBSTR(DEPTNOME, 1, 4)


FROM X.ORG

Resu lt ad o :
D EPTN O M E C O L1

M ATRIZ M A TR
CA M PIN A S CAM P
RI O RIO
M INAS M INA
BA H I A BA H I

SELECT DEPTCOD, DIVISAO


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

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 94 -


Length (argumento)

• Fornece o t am anho d e um a coluna d o t ip o caract er.

• Se o argum ent o é nulo, o result ado t am bém será nulo.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 95 -


Length (argumento) (cont.)

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


FROM X.STAFF

O b s: N O M E t em t am anho variável
CARGO t em t am an h o f ixo

Resu lt ad o :

NOM E C O L1 CA RG O C O L2

SA N TA N A 7 G ER 6
SI LV A l 6 V EN D A S 6
D AN TAS 6 G ER 6

. . . .
. . . .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 96 -


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

• Dad a um a list a d e argum ent os, est a função faz a varred ura d a esquerda
para a direit a at é encont rar o prim eiro valor não nulo .

• To d o s o s arg u m en t o s d evem ser d o m esm o t ip o d e d ad o (t o d o s


n u m érico s o u t o d o s caract eres).

• Se t o d o s o s arg u m en t o s f o rem n u lo s, o resu lt ad o será n u lo .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 97 -


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

• Dad a um a list a d e argum ent os, m ost ra o p rim eiro não nulo.

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


FROM X.STAFF

Resu lt ad o :

ID CO M IS BO N U S C O L1

10 - - 0.00
20 612.45 534.25 612 .45
30 - 345.89 345.89
40 846.55 - 846 .55

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 98 -


Funções de Conversão

• Co n vert e u m t ip o d e rep resen t ação em o u t ro .

D ECI M A L, FLO A T, I N TEG ER : convert e núm ero em núm ero


D I G I TS : convert e núm ero em alfa
H EX : convert e alfa / núm ero em h exa

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


FROM.STAFF
WHERE ID = 55

se co lu n a SALARIO é (D EC (7 , 2 )) : 17506.75

Resu lt ad o :
C O L1 C O L2

17506.7 17506

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 99 -


Dados Date/Time

D ATE, TIM E, TIM ESTAM P arm azen ad o s co m o d ecim al co m p act ad o sem sin al.

TI PO D E D A D O FO RM A TO I N TERN O
D A TE aaaam m dd
TIM E h h m m ss
TIM ESTAM P aaaam m d d hhm m ssnnnnnn

Pro g ra m a s lid a m só co m FO RM A TO EX TERN O : st rin g d e caract eres

PA D RÃ O Form at o TAM AN H O Form ato TAM AN H O


TIM E D A TE
I SO h h . m m . ss 8 b yt es aaaa-m m -dd 1 0 b yt es
U SA h h : m m AM 8 b yt es m m /dd/aaaa 1 0 b yt es
h h : m m PM
EU R h h . m m . ss 8 b yt es dd.m m .aaaa 1 0 b yt es
JI S h h :m m :ss 8 b yt es aaaa-m m -dd 1 0 b yt es

Tim est am p : aaaa-m m -d d -h h. m m . ss.nnnnnn 2 6 byt es

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 100 -


Aritmética Date/Time

• So m en t e sub t ração

horário - horário = = > duração em hhmmss (packed decim al (6,0))

data - data = = = = => duração em aaaam m dd (packed decim al (8,0))

• N a adição é n ecessá rio u sa r D U RA ÇÃ O RO TU LA D A :

N ú m ero “ n “ seg u id o d a p alavra ch ave: YEARS, M O N TH S, D AYS, H O U RS,


M I N U TES, SECO N D S, M I CRO SECO N D S

horário ± duração rotulada = = > horário

data ± duração rotulada = = = = > data

• Po d e usar M IN, M AX, CO U N T

• N ão p o d e u sar SU M e AV G

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 101 -


Aritmética de Date/Time (cont)

• Som ando/Subt raindo duração

dat a + ou - duração (dat a) - - Result a em dat a


DA TA COL1 + 3 M ONTHS

horário + or - duração (t em po) - - Result a em horário


TEM PCO L1 - 3 0 M INUTES - 2 0 SECO N DS

t im est am p + or - duração (dat a) - - Resu lt a em TIM ESTAM P


t im est am p + or - duração (t em po)
TSTCO L + 2 DA YS - 3 H O U RS
TM SRCO L + 5 0 0 0 0 M ICROSECONDS

• Subt raindo dat as e horas

dat a - data - - Result a em d uração


DA TA COL1 - DA TA COL2
DA TA COL1 - ‘1984-12-20’

Horário - Horário - - Result a em duração


TEM PCO L1 - TEM PCO L2
‘11:30 PM ’- TEM PCO L1

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 102 -


Exemplos Date/Time

TA BLE D T
PRJD O C DATAIN I D A TA FI M H RIN I H RFI M
AX001 19900131 20050331 000000 153000
AX002 19880228 19880831 000000 000000
AX003 19870201 19870201 160000 234159
SELECT PRJCOD, DATAINI + 1 YEAR, DATAFIM - 2 MONTHS ....

Resu lt ad o : PRJCO D C O L1 C O L2

AX0 0 1 3 1 .01.1991 3 1.01.2005


AX0 0 2 2 8 .02.1989 3 0.06.1988
AX0 0 3 0 1 .02.1988 0 1.12.1986

SELECT PRJCOD, DATAFIM - DATAINI, HRFIM - HRINI ....

Resu lt ad o : PRJC O D C O L1 C O L2

AX0 0 1 00150200 153000


AX0 0 2 00000602 000000
AX0 0 3 00000000 074159

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 103 -


Funções Escalares Date/Time

• CH AR: cont rola f orm at o ext erno d e d ad os d at e/tim e

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


FROM DT
WHERE PRJCOD = ‘AX001’

Resu lt ad o :

CO L1 C O L2

15.30.00 0 3 . 3 0 PM

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 104 -


Funções Escalares Date/Time (cont.)

• DAY, MONTH, YEAR, HOUR, MINUTE, SECOND, MICROSECOND

- EX TRA I part e de um a dat a, horário ou t im est am p


- Resu lt a num int eiro binário

SELECT DAY(DATAINI), MONTH(DATAINI),


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

Resu lt a d o:

C O L1 C O L2 CO L3

31 1 1990

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 105 -


Funções Escalares Date/Time (cont.)

• D A YS

N úm ero de dias desde 0 1 /0 1 /0001

SELECT DATAFIM - DATAINI,


DAYS(DATAFIM) - DAYS(DATAINI)
FROM DT
WHERE PRJCOD = ‘AX001’

Resu lt a d o :

C O L1 C O L2

00150200 5538
(nº .dias)

• DATE, TIM E
Ext rai d at a ou horário d e um t im est am p

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 106 -


Valores Correntes

• CU RREN T D A TE

Dat a de hoje

• CU RREN T TIM E

H orário corrent e

• CU RREN T TIM ESTAM P

Dat a e horário corrent e convert ido para t im est am p

SELECT * FROM DT
WHERE DATAINI < CURRENT DATE - 90 DAYS

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 107 -


Join de Tabelas

ID NOM E D EPT
10 SA N TA N A 20
20 O RSI N I 20
30 D AN TAS 38
40 O ’ BRI EN 38
50 SO U ZA 15
70 ALM EID A 15
80 JA M ES 20
90 KO O N I TZ 42
. . .
. . .
D EPTCO D D EPTO N O M E G EREN TE
10 M ATRIZ 160
15 CAM PIN AS 50
20 RIO 10
38 M IN AS 30
42 BA H I A 100
• Ta b ela s sã o rela cio n a d a s via d a d o s co m u n s (d o m ín io s)
• Jo i n é im p lem en t ad o p ela cláu su la FRO M o u W H ERE
• N ão f aça J O IN d e t ab elas sem o p red icad o d e join, o result ado é um
p rod ut o cart esiano ent re as t ab elas

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 108 -


Join de Tabelas - Inner Join

List ar o n o m e d o s d ep art am en t o s e seu s resp ect ivo s g eren t es

SELECT DEPTNOME, NOME


FROM X.STAFF, X.ORG
WHERE GERENTE = ID

X . O RG
DEPTN O M E G EREN TE D I V I SÃ O
RIO 10 .
M IN AS 30 W ESTERN
BAH IA 100 .
. . . Resu lt ad o :

X . STA FF DEPTN O M E NOM E

ID NOM E RI O SA N TA N A
30 D AN TAS
M IN AS D A N TA S
10 SA N TA N A
100 PLO TZ BAH IA PLO T Z
. .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 109 -


Join de Tabelas - Inner Join (cont.)

List ar o n o m e d o s d ep art am en t o s d a d ivisão W est ern e seu s g eren t es

SELECT DEPTNOME, NOME


FROM X.STAFF, X.ORG
WHERE DIVISÃO = ‘WESTERN’
AND GERENTE = ID

Resu lt a d o : DEPTN O M E NOM E


M INAS D AN TAS

O u t ra m an eira d e escrever o In n er Jo in

SELECT DEPTNOME, NOME


FROM X.STAFF INNER JOIN X.ORG
ON GERENTE = ID
WHERE DIVISÃO = ‘WESTERN’

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 110 -


Outer Join

List
Listar
ar t tood
d oos
s em
emppreg
regad
adoos,
s, ee ppara
ara oos
s ggeren t es,
erent es, oo ddep
epttoo qquue
e eles
elesggerenciam
erenciam

SELECT DEPTNOME, NOME


FROM X.STAFF LEFT OUTER JOIN X.ORG
ON GERENTE = ID
X . O RG
D EPTN O M E G EREN TE D IV ISÃO Resu lt a d o :
SÃ O PA U LO . .
M IN AS 30 W ESTERN D EPTN O M E NOM E
BA H I A 100 C PC
RIO 10 W ESTERN RI O SAN TAN A
X . STA FF - O RSIN I
M IN AS D A N TA S
ID NOM E
- O ’ BRI EN
10 SA N TA N A
20 O RSI N I BA H I A PLO T Z
30 D A N TA S
40 O ’ BRI EN
100 PLO TZ
• O PÇÕ ES: LEFT JO I N , RI G H T JO I N e FU LL JO I N

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 111 -


Join com M ais de Duas Tabelas

List
Listar
aros
osemempregados,
pregados, oo nom nomeedo do depart
departam
ament
entoo aonde
aondet trabalham
rabalham eesse
euuss
resp
respect
ectivo
ivosspped
edid
idoossddee ven
venddaas.s.

SELECT ID, NOME, DEPT, DEPTNOME, CODPEDIDO


FROM X.STAFF, X.ORG, X.VENDAS
WHERE DEPT = DEPTCOD AND ID = COD_RVENDA

Resu lt a d o :

ID NOM E D EPT DEPTN O M E CO D PED I D O

20 O RSI N I 20 RIO 3456


20 O RSI N I 20 RIO 6667
20 O RSI N I 20 RIO 3580
20 O RSI N I 20 RIO 7010
40 O ’ BRI EN 38 M INAS 4567

REGRA: o n ú m ero d e p red icad o s jo in é ig u al ao n ú m ero d e t ab elas m enos 1

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 112 -


Qualificadores

X . STA FF
CO D I G O NOM E D EPT CA RG O
20 SA N TA N A 20 G ER
20 O RSI N I 20 V EN D A S
. . . .
. . . .

X . O RG
CO D I G O D EPTN O M E G EREN TE
10 M ATRIZ 160 SELECT NOME,DEPTNOME,CODIGO
FROM X.STAFF, X.ORG
10 RIO 10 WHERE CARGO = ‘GER’
. . . AND DEPT = CODIGO
. . .

List a r o n o m e d o s g eren t es, e resp ect ivo s n o m e e có d ig o d e


depart am ent os

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 113 -


Qualificadores (cont.)

SO LU ÇÃ O

• Q ualificar com nom e de t abela

SELECT NOME, X.ORG.CODIGO, DEPTNOME


FROM X.STAFF, X.ORG
WHERE CARGO = ‘GER’
AND DEPT = X.ORG.CÓDIGO

• Q u alif icad o r co rrelacio n ad o

SELECT NOME, O.CODIGO, DEPTNOME


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

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 114 -


Join de uma Tabela com ela mesma

List e o s em p reg ad o s q u e g an h am m ais q u e o s seu s g eren t es

1 . O b t er in f o rm açõ es d o em p reg ad o n a X . STAFF (E)

ID NOM E ... SA LÁ RI O ... D EPT


80 JA ME S 19456 .50 20

2 . O bt er inform ações do d ep art am ent o na X . O RG

D EPTCO D D EPTN O M E ... G EREN TE ...


20 RI O 10

3 . O b t er in f o rm açõ es d o g eren t e n a X . STAFF (G)

ID NOM E ... SA LÁ RI O ... D EPT


10 SA N TA N A 18357.50 20

4 . Co m p arar o salário d o s d o is

5 . Se a cond ição é sat isf eit a, colocar a linha na t ab ela result ante e part ir para
o p róxim o em p reg ad o.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 115 -


Join de uma Tabela com ela mesma (cont.)

SO LU ÇÃ O :

SELECT E.NOME, E.SALARIO, G.NOME, G.SALARIO


FROM STAFF E, ORG D, STAFF G
WHERE E.DEPT = D.DEPTCOD
AND D.GERENTE = G.ID
AND E.SALARIO > G.SALARIO

Resu lt a d o:

NOM E SA LA RI O NOM E SA LA RI O

O LI V EI RA 19456.50 SA N TA N A 18357.50
. . . .

• Q u alif icad o res são n ecessário s p o rq u e exist e u m a n ecessid ad e d e tratar


d u as lin h as d a m esm a t ab ela co m o se f o ssem p ert en cen t es a t ab elas
d ist in t as.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 116 -


União

U N IO N faz a união de t abelas result ados

SELECT A1, A4 FROM TBLA


WHERE A2 = ‘Z’ Resu lt a d o

U N ION . .
. .

SELECT B1, B4 FROM TBLA


WHERE B1 > = ‘N’
Resu lt a d o

. .
. .
. .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 117 -


União (cont.)

• Q ueries são execu t ad as serialm en t e.

• A q u an t id ad e d e co lu n as d eve ser a m esm a em t o d o s o s SELEC T s .

• O s t ip o s d e d ad o s d as co lu n as co rresp o n d en t e d evem ser ig u ais.

• O op erad or union u n e as t ab elas resu lt an t es e elim in a as lin h as


d u p licad as, q u e im p lica n u m SO RT.

• O o p erad o r U N IO N ALL t am b ém u n e t ab elas m as n ão elim in a lin h as


duplicadas. N ão cham a o so rt port ant o.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 118 -


União - Exemplo

A f aixa d e salário s d o s at en d en t es at in g iria a f aixa d e ven d as


se fosse d ad o um aum ent o d e 1 7 % e 2 % resp ect ivam ent e?

SELECT CARGO, SALÁRIO * 1.17


FROM X.STAFF
WHERE CARGO = ‘ATEND’
UNION

SELECT CARGO, SALÁRIO * 1.02


FROM X.STAFF
WHERE CARGO = ‘VENDAS’
ORDER BY 2 DESC
Resu lt ad o :

CA RG O C O L1

V EN D A S 21420.0000
. .
V EN D A S 17144.4660
A TEN D 16918 .2000
V EN D A S 16832.8866
. .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 119 -


Union All Vs. Union

SELECT NOME
FROM X.CANDIDATOS
WHERE ENDEREÇO LIKE ‘%SP’
U N I O N A LL U N ION

SELECT SOBRENOME
FROM X.ENTREVISTADOS
WHERE SIT = ‘REP’
NOM E NOM E ==> d o p rim e iro SELECT

JA C O BS A RA N TES
M ARQ U ES JA C O BS
A RA N TES M ARQ U ES
SI LV A SI LV A
M ARQ U ES
JA C O BS
U N IO N ALL UNION

- N ão f az classif icação - Cla ssif ica


- N ão elim ina duplicados - Elim in a d u p licad o s

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 120 -


Subquery

• É U M SELECT EM BU TI D O D EN TRO D E U M SELEC T

• RESU LTA D O D E U M A SU BQ U ERY É U SA D O PELO SELECT “ EX TERN O ”

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 121 -


Exemplo de Subquery

List ar o s f u n cio n ário s co m salário su p erio r à m éd ia d a co m p an h ia

X . STA FF
NOM E SA LA RI O

• Encont rar a m éd ia salarial d a co m p an h ia (SU BQ U ERY)

SELECT AVG(SALARIO) FROM X.STAFF 16675.64

• Com p arar o salário d e cad a f uncionário com o result ad o


SELECT NOME, SALÁRIO
FROM X.STAFF
WHERE SALARIO > (SELECT AVG(SALARIO) FROM X.STAFF)

Resu lt a d o :
RESU
RESULTA LTADDOO SO
SOMMENENTETE NOM E SA LA RI O
DDOO SELECT
SELECT DDEENNÍ ÍVVEL RESU
MMAAI ISS AALTO
EL RESULTA
LTADDOO DDAA SU
SUBQ
BQUUERY
ERY SAN TAN A 1 8 3 5 7.5 0
LTO RETO
RETO RN A D O PA RA O NNI IVVEL
RN A D O PA RA O EL O RSIN I 1 8 1 7 1.25
SU
SUPERI
PERIOORR

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 122 -


Considerações Subquery

• Po d e ser u sa d o n o W H ERE ou no H AV IN G

• Po d e ser en ca d ea d o

• D eve est ar à d ireit a d o op erad or na cond ição d e seleção

• D eve ser co lo cad o en t re p arên t eses.

• An t es d a V ersão 7 d o D B2 , o su b q u ery d eve selecio n ar ap enas um a


coluna.

• O sub q uery p od e ret ornar um a ou m ais linhas e ist o acab a d et erm inand o
o o p erad o r a ser u sad o n a co n d ição d e b u sca.

• N ÃO p od e cont er U N IO N, U N IO N A LL o u O RD ER BY

• M u it a s vez es é cit a d o co m o SU BSELECT. Pref ira SU BQ U ERY.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 123 -


Subquery com uma Linha

M ost rar o f uncionário com o m aior salário d a em p resa

SELECT NOME, SALARIO FROM X.STAFF


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

Resu lt ad o :

NOM E SA LA RI O

M O LIN A RI 22959.20

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 124 -


Subquery C/Várias Linhas: ALL

List a classif icad a d o s f u n cio n ário s co m salário su p erio r


a t oda e qualquer m édia salarial depart am ent al.

• En co n t rar m édia salarial para cada depart am ent o.

SELECT AVG (SALÁRIO)


FROM X.STAFF
GROUP BY DEPT

Resu lt a d o:

20865.862500000
20865.862500000
15482.332500000
15482.332500000
16000.000000000
16000.000000000

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 125 -


Subquery C/Várias Linhas: ALL (cont.)

• Compare o salário de cada funcionário com a lista devolvida


pela SUBQUERY

SELECT NOME, SALÁRIO FROM X.STAFF


WHERE SALÁRIO >
ALL (SELECT AVG(SALÁRIO)
FROM X.STAFF GROUP BY DEPT)
ORDER BY NOME

Resu lt ad o :

NOM E SA LA RI O

FRA Y E 21150.00
G RH A M 21000.00
JO N ES 21234 .00
M O LIN A RE 22959. 20

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 126 -


Subquery C/Várias Linhas: Any ou Some

List
Listaa classif
classificad
icadaa ddoossf fuunncio
cionnário
áriossco
comm salário
saláriommaio
aiorrqquueeaa
mmédia
édia salarial
salarialdedealgum
algum departdepartam ament
entoo

• Encont rar m éd ia salarial p ara cad a d ep art am ent o .

SELECT AVG (SALÁRIO)


FROM X.STAFF
GROUP BY DEPT

Resu lt a d o :

20865.862500000
20865.862500000
15482.332500000
15482.332500000

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 127 -


Subquery C/Várias Linhas: Any ou Some (cont.)

• Compare o salário de cada funcionário com a lista devolvida


pela SUBQUERY

SELECT NOME, SALÁRIO


FROM X.STAFF
WHERE SALÁRIO > ANY (SELECT AVG (SALÁRIO)
FROM X.STAFF
GROUP BY DEPT)
ORDER BY NOME

Resu lt a d o :

NOM E SA LÁ RI O
D A N I EL 19260.25
D A V IS 15484.50
ED W A RD S 17844.00
. .
. .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 128 -


IN

List a d e g eren t es d a d ivisão Su l

SELECT DEPT, NOME


FROM X.STAFF
WHERE CARGO = ‘GER’
AND DEPT IN (SELECT DEPTCOD
FROM X.ORG
WHERE DIVISÃO = ‘SUL’)

• SU BQ U ERY resu lt a n u m a list a d e D EPTCO D s d a d ivisão Sul (6 6 e 8 4 ).

• ‘IN ’ eqüivale a um a série de ‘O R...=‘ sob re um a coluna

• “=AN Y” p od e sub st it uir “IN ”

Anotações:

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 DIVISÃO = ‘SUL’)

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 130 -


Subquery Num Having

List
Listee oossddep
epart
artam
amenenttoosscu
cuja
ja m
méd
édiaia salarial
salarialéé in
infferio
eriorràà m
medediaia ddaa
co
co m p an h ia, co m as su as resp ect ivas m éd ias. O salário d o s ggeren
m p an h ia, co m as su as resp ect ivas m éd ias. O salário d o s erenttes
es
não d eve ser consid erad o. O rd ene p ela m éd
n ão d eve ser co n sid erad o . O rd en e p ela m éd ia. ia.

SELECT DEPT, AVG(SALÁRIO) FROM X.STAFF


WHERE CARGO <> ‘GER’
GROUP BY DEPT
HAVING AVG(SALÁRIO) < (SELECT AVG(SALÁRIO)
FROM X.STAFF
WHERE CARGO <>‘GER’)
ORDER BY 2 DESC

Resu lt ad o : D EPT C O L1

66 16880.175000000
51 16235.200000000
84 15443.000000000
20 15309.530000000

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 131 -


Subquery Correlacionado

List
Listaar
r oossem
emppreg
regaad
d oossco
com m sa lá rio su
salário supperio
eriorrààmméd
édiaiaddeeseu
seuss
resp ect ivo s d ep art am en t o s.
resp ect ivo s d ep art am en t o s.

SELECT NOME, SALÁRIO


FROM X.STAFF CV
WHERE SALÁRIO > (SELECT AVG(SALÁRIO)
FROM X.STAFF
WHERE DEPT = CV.DEPT)

• U m su b select correlacionad o é execu t ad o a cad a lin h a d evo lvid a ao


se le ct ext erno.

• D eve ser evit ad o .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 132 -


Subquery com EXISTS - Testando V ou F

• Est e é um op erad or q ue t em com o argum ent o um select.

• Est a su b q u ery não d evolve nenhum a t ab ela result ant e .

• EX ISTS d evo lve V o u F e co m o f az p art e d e u m a sea rch


condit ion , d et erm in a u m a even t u al execu ção o u n ão d o SELECT
ext ern o .

• EX ISTS p o d e ser n eg a d o p o r u m N O T.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 133 -


Subquery com EXISTS

List
Listee oos
s ggeren t es
erent esggan h an d oo m
anhand men o s qquue
enos e $$1188. 0
. 00000 se
seexist
existirir
pelos
pelos m enos um gerent e com salário superior a $ 2 2 .000000..
m enos um gerent e com salário superior a $ 2 2 .

SELECT ID,NOME, SALÁRIO, DEPT


FROM X.STAFF
WHERE CARGO = ‘GER’
AND SALARIO < 18000
AND EXISTS (SELECT * FROM X.STAFF
WHERE CARGO = ‘GER’
AND SALÁRIO > 22000)

ID NOM E SA LÁ RI O D EPT

30 M AREN CH I 17506.75 38

• V ERD A D EI RO / FA LSO N O SELECT I N TERN O

D et erm in a se o SELECT ext ern o será execu t a d o .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 134 -


M anutenção

Anotações:

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)
Ob s.- form at o obrigat ório no banco .

Resu lt ad o :
PCO D PNOM E D EPT R E S P EQ U I PE D ATAIN I D A TA FIM
............ ................. .... .......... .......... ............. ..............
OP2 0 1 1 SU P. SISTEM A E2 1 000320 001.00 19880101 19880201
OP2 0 1 2 SU P. A PLI CA ÇÃ O E2 1 000330 001.00 19880101 19880201
OP2 0 1 3 SU P. D B \DC E2 1 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............
M A2114 B0 1 ? 19880920 ?

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 136 -


Insert de M últiplas Linhas

TESTPRO J

PCO D PNOM E D EPT RESP EQ U I PE DATAIN I D A TA FI M

INSERT INTO TESTPROJ


SELECT * FROM PROJ
WHERE DEPT LIKE ‘B%’
OR DEPT IN(‘E11’, `E21’, ’E31’)

Resu lt a d o :

PCO D PNOM E D EPT RESP EQ U I PE DATAIN I D A TA FI M


PL2 1 0 0 ................. B0 1 000020 001.00 19870101 19870915
O P1 0 1 0 O PERA ÇÃ O E1 1 000090 005.00 19860101 19880501
O P2 0 1 0 SU P. SISTEM A E2 1 000100 004.00 19820101 19880201
O P2 0 1 1 ................... E2 1 000320 001.00 19820101 19880201
O P2 0 1 2 ................... E2 1 000330 001.00 19820101 19880201
O P2 0 1 3 ................. E2 1 000340 001.00 19820101 19880201

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 137 -


Update de Colunas

A N TES:

PCO D PNOM E D EPT R E S P EQ U I PE D ATAIN I D A TA FI M


............ ................. .... .......... .......... ............. ..............
OP2 0 1 1 SU P. SI STEM A E2 1 000320 001.00 19880101 19880201
OP2 0 1 2 SU P. A PLI CA ÇÃ O E2 1 000330 001.00 19880101 19880201
OP2 0 1 3 SU P. D B \DC E2 1 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............
M A2114 B0 1 001.00 19880920 19890201

UPDATE RESTPROJ
SET EQUIPE = EQUIPE * 2, DATAFIM = NULL,
DATAINI = ‘1987-06-01’
WHERE DEPT = ‘B01’
PCO D PNOM E D EPT R E S P EQ U I PE D ATAIN I D A TA FI M
............ ................. .... .......... .......... ............. ..............
OP2 0 1 1 SU P. SI STEM A E2 1 000320 001.00 19880101 19880201
OP2 0 1 2 SU P. A PLI CA ÇÃ O E2 1 000330 001.00 19880101 19880201
OP2 0 1 3 SU P. D B \DC E2 1 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............
M A2114 B0 1 002.00 19870601 ?

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 138 -


Update de Colunas (cont)

um sub conjunt o d e linhas

UPDATE PESSOAL
SET SALARIO = SALARIO + 300
WHERE CARGO = ‘ATEND’
t o d as as lin h as:

UPDATE PESSOAL
SET ANOS = ANOS + 1

O b s. : Cuid ad o com est e t ip o d e alt eraçao, p o is t o d as as lin h as serão


afetadas

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 139 -


Delete de Linhas

A N TES:
PCO D PNOM E D EPT RE SP EQ U I PE D ATAIN I D A TA FIM
............ ................. .... .......... .......... ............. ..............
O P2 0 1 1 SU P. SISTEM A E2 1 000320 001.00 19880101 19880201
O P2 0 1 2 SU P. A PLI CA ÇÃ O E2 1 000330 001.00 19880101 19880201
O P2 0 1 3 SU P. D B \DC E2 1 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............
M A2114 B0 1 001.00 19880920 19890201

DELETE FROM TESTPROJ


WHERE DEPT = ‘B01’

D EPO I S:
PCO D PNOM E D EPT RE SP EQ U I PE D ATAIN I D A TA FIM
............ ................. .... .......... .......... ............. ..............
O P2 0 1 1 SU P. SISTEM A E2 1 000320 001.00 19880101 19880201
O P2 0 1 2 SU P. A PLI CA ÇÃ O E2 1 000330 001.00 19880101 19880201
O P2 0 1 3 SU P. D B \DC E2 1 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 140 -


Delete de Todas as Linhas

A N TES:

PCO D PNOM E D EPT RE SP EQ U I PE D ATAIN I D A TA FIM


............ ................. .... .......... .......... ............. ..............
O P2 0 1 1 SU P. SISTEM A E2 1 000320 001.00 19880101 19880201
O P2 0 1 2 SU P. A PLI CA ÇÃ O E2 1 000330 001.00 19880101 19880201
O P2 0 1 3 SU P. D B \DC E2 1 000340 001.00 19880101 19880201
............. ................. .... ............ ........... ............. ...............
M A2114 B0 1 001.00 19880920 19890201

DELETE
DELETE FROM
FROM TESTPROJ
TESTPROJ

O b s. : Cu id ad o co m est e t ip o d e d eleção , p o is t o d as as lin h as ser ão


afetadas

D EPO I S:

PCO D PNOM E D EPT RE SP EQ U I PE D ATAIN I D A TA FIM

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 141 -


Programação
Parte 2

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 142 -


Programa em Linguagem Tradicional

N Ã O RELA CI O N A L RELA CI O N A L

CO BO L
PLI SQ L SQ L
em butido
FO RTRA N
A SSEMB L E R
C

ARQ U IV O S CU RSO R
TA BELA S
REG I STRO S V A R. H O ST LIN H A S

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 143 -


Program ação

• O SQ L t rab alh a co m t ab elas e lin h as. É u m a lin g u ag em d esen vo lvid a


p ara m anip ular conjunt os.

• Já as lin g u ag en s t rad icio n ais t rab alh am co m arq u ivo s e reg ist ro s e não
co n seg u em reco n h ecer t ab elas e lin h as.

• Para p o d erm o s t rab alh ar co m o SQ L d en t ro d e p ro g ram as em


ling uag ens t rad icionais, d evem os co d if icá-lo u san d o d elim it ad o res
esp eciais. Est a t écn ica é co n h ecid a co m o SQ L em b u t id o e assem elha -
se a o CO M A N D LEV EL d o CI CS.

• Para sim u larm o s u m arq u ivo co m seu s reg ist ro s, t rab alh a-se co m o
CU RSO R d o D B2 . A ssim , o p ro g ra m a p o d e a cessa r lin h a s d e u m a
t abela para um a m anipulação qualquer.

• As co lu n as n ão são m an ip u lad as d iret am en t e p elas lin g u ag en s


t rad icio n ais. Para ist o são u t iliz ad as as variáveis H O ST q u e “ h osp ed am ”
o co n t eú d o d a s co lu n a s.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 144 -


Instrução SQL

INSTRUÇÃO SQL entre DELIMITADORES

EXEC SQL DELETE FROM DEPT END-EXEC.

DELIMITADORES

COBOL EXEC SQL


instrução SQL END-EXEC.
PL/I EXEC SQL
instrução SQL ;
FORTRAN EXEC SQL
X instrução SQL
ASSEMBLER EXEC SQL
instrução SQL X

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 145 -


Instrução SQL (cont.)

• O com p ilad or d as linguagens t rad icionais não ent end e a linguagem SQ L

• Para sep arar u m a in st ru ção SQ L d a co d if icação n o rm al d o p ro g ram a, são


ut ilizad os d elim it ad ores q ue são d if erent es p ara cad a ling uag em adot ada.

• O pré -co m p ilad o r d o D B2 lo caliz a as in st ru çõ es SQ L p o r m eio d o s


d elim it ad o res e o s su b st it u i p o r CALLS d o D B2 . Assim o f o n t e f ica
ad eq uad o p ara ser sub m et id o ao com p ilad or.

• O d elim it ad or q ue ind ica o inicio d e um SQ L é com um , à t od as as


lin g u ag en s.

• O f inal d e um SQ L é o d elim it ad or “EN D-EX EC. ” n o CO BO L, e “ ;” n o PL/ I.

• N o FO RTRA N o p ré -com p ilad or id ent if ica o f im d e um a inst rução SQ L


q u an d o n as lin h as seg u in t es à d o “ EX EC SQ L” n ão en co n t rar m ais o
caract er d e cont inuação “X” na coluna 6 .

• N o ASSEM BLER o caract er “ X ” n a co lu n a 7 2 in d ica q u e a in st ru ção


cont inua na linha seguint e.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 146 -


Variável Host

PA RA FO RN ECER U M V A LO R A O D B2

CO BO L

MOVE ‘22000’ TO SAL.

22000 SA L

SQ L

EXEC SQL... WHERE SALÁRIO = :SAL END-EXEC.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 147 -


Variável Host (cont.)

• Variáveis HOST são utilizadas para permuta de valores entre o SQL e a


linguagem de programação.

• Uma das possíveis utilizações da variável HOST é a de fornecer um


valor a uma instrução SQL, tornando-a genérica.

• A referência à variável HOST deve ser precedida pelo caracter “:”.

• No banco é obrigatório usar o DCLGEN para definir as variáveis HOST


correspondentes as colunas das tabelas DB2.

• A variável HOST deve ser compatível com a coluna, quanto ao seu tipo
de dado e tamanho.

• Variáveis HOST não podem ser utilizadas para referenciar nome de


tabelas ou nome de colunas.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 148 -


Outros Exemplos

PA RA FO RN ECER U M V A LO R A O D B2

EXEC SQL INSERT INTO EMPR


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

M ATR SN OM E
EXEC SQL
UPDATE EMPR
SET SALARIO = SALARIO * :REAJ
WHERE CARGO = :CARGO
END-EXEC.

CA RG O REA J

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 149 -


Variável Host (Cont.)

• V ariáveis H O ST p o d em ser u t ilizad as t am b ém p ara o D B2 p assar u m


valor p ara o p rog ram a.

• Sã o n ecessá ria s n u m a in st ru çã o SELECT em b u t id a .

• U m a variável H O ST p ara cad a co lu n a selecio n ad a.

• O t ip o d e d ad o e o t am an h o d as variáveis e d as co lu n as d evem ser


co m p a t íveis.

• V ariáveis ad icio n ais ch am ad as variáveis in d icad o ras são n ecessár ia s


q uand o a coluna p od e ser nula. Serão ap resent ad as m ais t ard e

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 150 -


Variável Host (Cont.)

PA RA REC EBER U M V A LO R D O D B2

EXEC SQL
SELECT MATR, SOBRENOME
INTO :MATR, :SNOME
FROM EMPR
WHERE DEPT = :DEP
END-EXEC.

• SELECT . . . . IN TO só p o d e ser u sad o q u an d o a t ab ela resu lt ad o


t em no m áxim o 1 linha

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 151 -


Variável Host (Cont.)

EST RU T U RA

EXEC SQL SNOME


SELECT SOBRENOME, DEPT
INTO :SNOME, :DEPT
FROM EMPR
DEPT
WHERE MATR = :MATR
END-EXEC.
MATR
eq uivale à:

EXEC SQL
SELECT SOBRENOME, DEPT SNOME
INTO :ESTRUT DEPT
FROM EMPR
WHERE MATR = :MATR
END-EXEC.
MATR

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 152 -


Variável Host (Cont.)

• Uma série contígua de variáveis 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 necessárias ao


processo.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 153 -


Definição de Variável Host

D
DAAD
DOOS
SNNU
UMM ÉRI CO S
ÉRICO

D B2 PL/ I CO BO L A SSEM BLER FO RT RA N

D CL N 1 BIN 0 1 N I PIC S9 (4 )
SM A LLI N T N 1 DS H IN TEGER* 2 / N 1
FIXED (1 5 ) CO M P.

D CL N 2 BIN 0 1 N 2 PIC S9 (9 )
I N TEG ER/ I N T N 2 DS F IN TEGER* 4 N 2
FIXED (3 1 ) CO M P.

D ECIM AL (5 , 2 ) D CL N 3 D EC 0 1 N 3 PIC S9 (3 )V9 (2 ) N3 DC


REA L* 8 NE
/ DEC (5 ,2 ) FIXED(5 , 2 ) CO M P -3. PL5 ’0 0 0 .0 0

REA L* 4 N4 /
FLO AT(2 1 ) D CL N 4 BIN 0 1 N4 COM P -1. N 4 DS E
REA L N 4

FLO A T / REA L* 8 N5 /
FLO AT(5 3 ) / D CL N 5 BIN D O U BLE
0 1 N5 COM P - 2. N 5 DS D
D O U BLE FLO AT(5 3 ) PRECI SI O N N 5
PRECI SI O N

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 154 -


Definição de Variável Host (cont.)

CA
CARA
RACTER
CTER STRI
STRINNG
G

D B2 PL/ I CO BO L A SSEM BLER FO RTRA N

D CL STR1 STR1 D S CH A RA CTER* 1 0


CH AR(1 0 ) 0 1 STR1 PIC X (1 0 )
CH AR (1 ); CL1 0 ST R1
0 1 STR2
V A RCH A R(8 0 ) D CL STR2 STR2 D S H , CH A RA CTE* 8 0
4 9 STR2 L
CH A R ( 8 0 ) V A R; CL8 0 ST R2
PIC S9 (4 ) CO M P.
4 9 STR2 C
PIC X(8 0 ).

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 155 -


Definição de Variável Host (cont.)

D A TA / H O RÁ RI O / TI M ESTA M P

D B2 PL/ I CO BO L A SSEM BLER FO RTRA N


D A TE D CL D T CH A R(1 0 ) 0 1 DT PIC X(1 0 ) D T D S CL1 0 CH A RA CTER* 1 0 D T
TIM E D CL TM CH A R(8 ) 0 1 TM PIC X(8 ) TM D S CL8 CH A RA CTER* 8 TM

TI M ESTA M P D CL TS CH A R( 2 6 ) 0 1 TS PIC X (2 6 ) TS D S CL2 6 CH A RA CTER* 2 6 TS

D O U BLE BY TE CH A RA CTER STRI N G

D B2 P LI CO BO L
G RA PH I C ( 5 ) D CL D BC1 G RA PH I C( 5 ) 0 1 D BC1 PI C G ( 5 ) D I SPLA Y-1 .

V A RG RA PH I C ( 4 0 ) D CL D BC2 G RA PH I C( 4 0 ) V A R 0 1 D BC2
4 9 D BC2 L PIC S9 (4 ) CO M P.
4 9 D BC2 C PI C G ( 4 0 ) D I SPLA Y-1 .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 156 -


Definição de Variável Host (cont.)

• Dados DATE/TIME são sempre convertidos para representação em


caracteres, quando são assinalados para as variáveis 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)

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 157 -


Com m it/Rollback

• COMMIT

• INDICA FIM DE UMA LUW


• ATUALIZAÇÃO
• CURSOR FECHADO (EXCETO COM OPÇÃO WITH HOLD)

• ROLLBACK

• LUW ABORTADA
• ATUALIZAÇÃO DESFEITA A PARTIR DO ÚLTIMO COMMIT
• CURSOR FECHADO (EXCETO COM OPÇÃO WITH HOLD)

**** No Banco todo programa BATCH que atualiza tabelas DB2 deve ter
COMMIT e lógica de RESTART. Consultar normas do KIT ANALISTA.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 158 -


Commit/Rollback (cont.)

• A instrução COMMIT:

• valida todas as atualizações feitas até então


• atualizações são registradas no LOG
• pode liberar as páginas e/ou tablespaces presos (lock)
• indica que uma LUW chegou ao seu final com sucesso
• todos os cursores abertos são fechados (SEM OPÇÃO WITH HOLD)

• A instrução ROLLBACK:

• LUW corrente será abandonada


• todas as atualizações feitas a partir do último COMMIT são
desfeitos
• pode liberar as páginas e/ou tablespaces presos (lock)
• todos os cursores são fechados (SEM OPÇÃO WITH HOLD)

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 159 -


Luw

U PD A TE U PD A TE COM M IT
CO N TA PO U PA N ÇA

500 500 400 500 400 600 400 600

CO N TA PO U PA N ÇA
CO N TA PO U PA N ÇA

100 100

PO N TO D E N O VO PO N TO DE t
CO N SI STÊN CI A CO N SI STÊN CI A
LU W

RO LLBA C K

500 500

LU W A BO RTA D A t

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 160 -


Luw (cont.)

• Uma Logical Unit of Work (LUW) também é conhecida com UNIT OF


WORK ou UNIT OF RECOVERY.
• Alguns processamentos podem ser divididos logicamente em pontos nas
quais os dados estão “consistentes”.
• No nosso exemplo os dados estão consistentes quando a transferência de
fundos está terminada. Se o processamento fosse interrompido antes do
fundo ser adicionando na POUPANÇA, teríamos uma situação de
inconsistência dos dados.
• Assim, é inaceitável que um processamento seja interrompido durante
uma LUW.
• Para o DB2, o final de uma LUW é chamada de commit point. Esta situação
é estabelecida:
• ao término normal do programa
• com execução 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 término anormal de programa
• com execução de um comando via programa

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 161 -


Com m it/Rollback

COM M IT

TSO / BA TCH IM S CI CS
call C H KP co m an d o SYN CPO IN T
COM M IT ca ll syn c
G U I O PCB

Aut om at icam ent e ao t érm ino N O RM AL DO PRO GRAM A

RO LLBA C K

TSO / BA TCH IM S CI CS
call RO LL co m a n d o RO LLBA CK
RO LLBA C K call RO LB

Aut om at icam ent e ao t érm ino AN O RM AL DO PRO GRAM A

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 162 -


SQLCA

• N ECESSÁ RI O PA RA O PRO G RA M A

• FO RN ECE I N FO RM A ÇÕ ES SO BRE O SQ L EX ECU TA D O

• EM BU TID O N O PRO GRAM A V IA:

EX EC SQ L I N CLU D E SQ LCA EN D -EX EC.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 163 -


SQLCA (cont.)

• O DB2 passa as informações referentes à execução de uma


instrução SQL num bloco de controle chamado SQL
COMMUNICATION AREA (SQLCA).

• O SQLCA é rotulado como “SQLCA” e é necessário ao programa.

• O SQLCA deve ser verificado pelo programa para determinação do


sucesso ou não da última execução de uma instrução SQL.

• A sua codificação pode ser incorporada no programa pelo


precompilador se incluirmos a instrução “INCLUDE SQLCA”.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 164 -


SQLCA (cont.)

CO N D IÇÃO SQ LCO D E

ERRO G RA V E negat ivo

A D V ERTÊN CI A p o sit ivo


diferent e de 1 0 0 VVERI
ERIFI
FICA
CARR
SQ
SQLWLWAARNRN00
N ÃO
EN CO N TRA D O + 100
OU
FIM D O CU RSO R

SU CESSO 0

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 165 -


Form ato SQLCA

01 SQLCA.
05 SQLCAID PIC X(8).
05 SQLCABC PIC S9(9) COMP-4.
05 SQLCODE PIC S9(9) COMP-4.
05 SQLERRM.
49 SQLERRML PIC S9(4) COMP-4.
49 SQLERRMC PIC X(70).
05 SQLERRP PIC X(8).
05 SQLERRD OCCURS 6 TIMES
PIC S9(9) COMP-4.
05 SQLWARN.
10 SQLWARN0 PIC X.
10 SQLWARN1 PIC X.
10 SQLWARN2 PIC X.
10 SQLWARN3 PIC X.
10 SQLWARN4 PIC X.
10 SQLWARN5 PIC X.
10 SQLWARN6 PIC X.
10 SQLWARN7 PIC X.
05 SQLEXT.
10 SQLWARN8 PIC X.
10 SQLWARN9 PIC X.
10 SQLWARNA PIC X.
10 SQLSTATE PIC X(5).

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 166 -


SQL W arning

Se SQ LW A RN 0 = ‘ ‘ : SQLW ARN 1 ~ 6 estão


Bra n co s. SE SQ LW A RN 0 = ‘ W ’ : algum SQ LW ARN . .
set ado para ‘W ’

SQ LW A RN 1 : st rin g assin alad a á variável H O ST f o i t ru n cad a

SQ LW A RN 2 : n u lo s ig n o rad o s n o cálcu lo d e u m a f u n ção d e co lu n a

SQ LW A RN 3 : n ú m ero d e co lu n as m aio r q u e o d e variáveis H O ST

SQ LW A RN 4 : U PD A TE o u D ELETE “ PREPA RED ” n ã o a p re se n t a clá u su la


W H ERE.

SQ LW A RN 5 : in st ru çã o SQ L/ D S in vá lid a n o D B2

SQ LW A RN 6 : valo r d e d at a o u TIM ESTAM P co rrig id as d e u m valo r


in válid o result ant e d e um a op eração arit m ét ica.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 167 -


SQL W arning (cont.)

• O campo SQLWARN0 é usado para alguns casos de advertência.


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 requisição de alteração de
dados (UPDATE, INSERT, DELETE).

• Exceção: Deleção em massa de uma tabela faz com que


SQLERRD(3) =-1

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 168 -


Auxílio à Codificação

• INSTRUÇÃO WHENEVER
manipulação de exceções

• DCLGEN
gerar declaração de variáveis HOST

• INSTRUÇÃO INCLUDE
embutir estrutura de SQLCA/var.HOST no programa

• DSNTIAR/DSNTIR
rotina de formatações de mensagens de erro.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 169 -


Instrução W henever

EXEC SQL WHENEVER CO N D I ÇÃ O A ÇÃ O END-EXEC.

CO N D IÇÃO

SQLERROR : SQLCODE negativo


SQLWARNING : SQLCODE positivo diferente de 100
ou SQLWARN0 = ‘W’
NOT FOUND : SQLCODE = +100

A ÇÃ O

GO TO :X
CONTINUE

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 170 -


Instrução W henever (cont.)

• Esta instrução testa o SQLCODE na SQLCA após cada execução de um a


instrução SQL e para uma determinada condição de execução, toma uma
ação determinada.
• A instrução WHENEVER é substituída por códigos “IF... THEN... ELSE”
pelo pré-compilador.
• A instrução WHENEVER não é uma rotina de inicialização como o ON
CONDITION do PL/I. O pré-compilador insere a condição equivalente logo
após cada instrução SQL do programa fonte.
• Ex.: EXEC SQL WHENEVER SQLERROR GO TO :ROTULOZ;
Com esta instrução, um SQLCODE negativo faz o programa saltar para a
rotina rotulada por ROTULOZ.
• As três condições de exceção podem estar em efeito ao mesmo tempo.
• O efeito do WHENEVER é válido para qualquer instrução SQL que vem
codificado depois da mesma. Seu efeito é cancelado por um
“WHENEVER... CONTINUE” ou substituído por outro “WHENEVER... GO
TO...”.
• Só no cobol.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 171 -


DCLGEN

TA BELA EM PR
M A TR CH A R (6 )
N O M E VARCH AR(1 2 )
CA TÁ LO G O

D CLG EN

ME MB 3
0 1 D CEM PR.
1 0 M ATR PIC X (6 ).
1 0 N O M E.
49 NOM E -LEN PI C S9 ( 4 ) U SA G E CO M P.
49 NOM E -TEX T PIC X (1 2 ).

BI BLI O TECA I N CLU D E

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 172 -


DCLGEN (cont.)

• O DCLGEN é um programa que gera uma codificação de declaração de


variáveis HOST correspondentes às colunas de uma dada tabela.

• Esta codificação é feita numa das seguintes linguagens: COBOL,


COBOL II, PL/I e C.A escolha da linguagem é feita na opção defaults do
painel DB2I.

• O DCLGEN gera também uma instrução SQL “DECLARE TABLE” para


ser utilizado pelo pré-compilador.

• Tanto a instrução DECLARE TABLE como a codificação das variáveis


HOST são armazenadas num único membro de uma biblioteca.

• A função de manter uma biblioteca de INCLUDE com a saída do


DCLGEN normalmente é exercida pelo suporte.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 173 -


Instrução Include

M EM B3

EX EC SQ L
IN CLU D E M EM B3
EN D -EX EC.
. 0 1 D CLEM PR.
. 10...
.
EX EC SQ L
I N CLU D E SQ LCA 0 1 SQ LCA
EN D -EX EC. 05...

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 174 -


PREPARAÇÃO DE PROGRAM A COM
SQL

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 175 -


Preparação de Programa com SQL

PREPA
PREPARA
RAÇÃ
ÇÃOO DDEEPRO
PROGGRA
RAMMAA CO
COMM SQ
SQLL

Có d ig o f o n t e co m SQ L

Bib lio t eca d e Includ e

PREC O M PI LE

Font e M odificado D BRM ( Bib lio t eca )


Cat álog o d o DB2

CO M PI LE BI N D
D ef in ição Tab le/Co lu m n

A u t o riz açõ es
M ódulo Objeto
SY SPA C KA G E

LI N K ED I T

Diret ório d o DB2 Diret ório do DB2

Pa cka g e Pla n

Lo a d M ódulo EX ECU TE
(Lan g u ag e In t erf ace)

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 176 -


Preparação de Programa com SQL (cont.)

• A preparação de um Programa é o nome que damos ao processo que


torna um programa fonte em um módulo de carga executável.

• Em linhas gerais a preparação de um programa é constituído das


seguintes fases:

• Pré-compilação

• Compilação e Linkedição

• BIND

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 177 -


Precompilador

• O Pré-compilador roda independente do DB2 - não acessa o catálogo.


• Verifica a SINTAXE dos comandos SQL
• A partir do fonte gera dois data sets “selados” com um timestamp:
• DBRM (Data Base Request Module): contém todas as instruções SQL
embutidas no fonte.
• Fonte Modificado: O novo fonte o pré- compilador:
• coloca as instruções EXEC SQL como comentários e transforma-as
em CALL’s para o DB2.
• transforma a instrução WHENEVER em lógica “IF...THEN...ELSE...”
• Inclui a declaração de tabelas e a declaração de variáveis host
(output do DCLGEN). A instrução DECLARE TABLE é utilizada para
verificação do nome dos objetos, nome das colunas e a
correspondência entre colunas e variáveis HOST
• Inclui a SQLCA
• Gera um relatório de execução com eventuais mensagens de erro.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 178 -


Compilador / Linkage Editor / Bind

• O compilador gera o módulo objeto a partir do fonte modificado


pelo pré-compilador. O timestamp é copiado do fonte.

• O linkage editor gera o módulo de carga a partir do módulo objeto


e do módulo de interface de linguagem do DB2. O timestamp
original é copiado do módulo.

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

• O timestamp é copiado do DBRM.

• Um package contém a estratégia de acesso aos dados DB2 onde


são descritos informações como :

• índices utilizados
• estratégia de locking
• estratégia de resolução de JOIN, etc.

• A fase de compilação/linkedição e a fase de BIND são executadas


separadamente e podem ser executadas em qualquer ordem.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 179 -


Visão Geral “Bind”

V I SÃ O G ERA L “ BI N D ”

D BRM Cat álo g o


n o PD S BIN D d o D B2
V A LI D A ÇÃ O
Tab le/ col Ta b le/co l
Ref eren cias d escriçõ es
A U TO RI ZA ÇÃ O
Tip o d e u su ário s
so lit icação aut orizados
ESTRA TÉG I A D E A CESSO
Tip o d e caract eríst icas
so licit ação f ísica s

D BRM
na Pa cka g e
SY SI BM . SY SPA CKSTMT

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 180 -


Visão Geral “Bind” (cont.)

• O propósito do BIND é a geração de um package. As entradas


necessárias são o DBRM e o catálogo.

• Os procedimentos executados são:

• checagem da consistência da instrução SQL com os objetos sendo


manipulados (nome, formato das colunas, etc.)
• checagem da autorização necessária para a execução das
instruções SQL.
• determinação da estratégia de acesso aos objetos de manipulação
pelo otimizador do DB2.
• o package é carregado no diretório e uma cópia do DBRM é
carregado no catálogo.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 181 -


Visão Geral “Bind” (cont.)

• O BIND ADD é utilizado para criar um novo package.

• O BIND REPLACE é utilizado quando a própria instrução foi alterada


e queremos refazer o package existente.
• O REBIND é utilizado quando o SQL está inalterado mas ocorreu
alguma modificação no ambiente tal como criação/eliminação de
índice, atualização das estatísticas no catálogo que precisam ser
refletidos no package existente.

• O otimizador do DB2 pesa fatores com CPU e I/O para optar por uma
estratégia de acesso.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 182 -


PACKAGE

D BRM

BI
BINNDD PA
PACKA
CKAGGEE( (oonline
n lin e) ) BI
BINNDDPA
PACKA
CKAGGEE( (bbaattch
ch))
MMEM
EM BER ( d b rma)
BER ( dbrm a) MMEM BER ( d b rm a)
EM BER ( d b rm a)

o n lin e bat ch

dbrma dbrma

NNom
o m ee ddo
o Pa
Packa
ck aggee ==Co
Collect
llectio
ion_id
n _ id. Pa
.Packa
ck aggee_id
_id

O s p ackag es são arm azenad os em Co llect io n s

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 183 -


COLLECTION

U m a CO LLECTIO N é u m co n ju n t o d e Pa cka g e s

Exem p lo :
online batch

pkg1 pkg3

A collect ion é im plicit am ent e criada no prim eiro bind p ackag e


se ref erenciand o a ela

BI
BINNDD PA
PACKA
CKAGGEE (online
( online)) M EM BER
MEM BER (p
(pkg1
kg 1))
BIN
BINDD PAPACKA
CKAG
GEE (b
(baattch
ch)) M
MEMEM BER
BER (p
(pkg
kg33))

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 184 -


TOKEN DE CONSISTÊNCIA - Prep. do Programa

prog3 prog1 prog2

Pre-compilador

prog3 prog1 prog2 dbrm3 dbrm1 dbrm2

Compilador/ Link-edit
BIND PACKAGE
Diretório
Load Módulo

dbrm3 dbrm1 dbrm2

: Tim est a m p d a p reco m p ilação

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 185 -


Plano - ligação entre o package e o load modulo

. lmoda
CALL DSNHLI (dbrm1, ,1)
.
.
CALL DSNHLI (dbrm1, ,2)
.
.
Diretório
CALL DSNHLI (dbrm3, ,1)
.
collx colly
RU N PRO G RA M ( Im oda)
PLA N ( p lana) dbrm1 dbrm3 dbrm1
plana

collx.dbrm1, collz.*
dbrm2

BI N D PLA N ( p la n a ) collz
PKLI ST ( collx .dbrm 1 , collz.*)

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 186 -


PLANOS E PACKAGES

• U m p ackag e so m en t e p o d e ser lo caliz ad o e execu t ad o via u m PLAN O

• U m PLA N O co n t ém a PA CKA GE LIST, u m a list a d e p o n t eiro s p ara o s


p a cka g es

• O nom e do DBRM e o t im est am p f ornecid o no call é u sad o p ara lo calizar


o p a cka g e co rret o at ravés d a p a cka g e list

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 187 -


ERRO DE TIM ESTAM P

.
CA LL DSNHLI (d b rm 1 , ,1)
.

p lan a

co lly .*, co llx.*

RU N PRO G RA M ( Im oda )
PLA N (p lan a)

co lly co llx

dbrm1 dbrm1

-805
51002

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 188 -


BIND - opção QUALIFIER

..
SELECT.
SELECT.....
FRO
FROM
M TA
TAB1 B1
..

BINDPACKAGE
BIND PACKAGE BINDPACKAGE
BIND PACKAGE
BIND PACKAGE
BIND PACKAGE
QUAL (TEST)
QUAL (TEST) QUAL (PROD)
QUAL (PROD)

TEST.TAB1 binder.TAB1 PROD.TAB1

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 189 -


Cursor

SELECT M A TR, SO BREN O M E PRO C ESSA MEN TO D E M Ú LTI PLA S LI N H A S


FRO M EM PR O PEN
W H ERE D EPT= ‘D01’
M A TR SO BREN O M E
030 SI LV A
050 PA RK ER
215 C LA RK M A TR SNOM E
FETCH
M A TR SO BREN O M E
030 SI LV A
050 PA RKER
215 C LA RK 030 SI LV A
M ATR SN OM E

FET C H
M A TR SO BREN O M E
030 SI LV A
050 PA RK ER 050 PA RK ER
215 C LA RK M A TR SNOM E

Anotações:

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 variáveis HOST para cada coluna do


CURSOR.

• O programa executa a instrução SQL “FETCH” para movimentar o


cursor para a “próxima linha”. As variáveis HOST conterão os valores
da linha sendo apontada.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 191 -


Select com Fetch

• DEFINIÇÃO do CURSOR
EXEC SQL
DECLARE K9 CURSOR FOR
SELECT MATR, SOBRENOME
FROM EMPR
WHERE DEPT = :DEPT
END-EXEC.
• OPEN DO CURSOR
EXEC SQL OPEN K9 END-EXEC.
• FETCH das linhas resultantes

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

EXEC SQL CLOSE K9 END-EXEC.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 192 -


Procure Definir

DECLARE CURSOR: No COBOL antes da PROCEDURE


No EASY antes do JOB INPUT
Ou verifique os padrões da sua instalação.

• A instrução DECLARE CURSOR define a seleção dos dados que


comporão a tabela resultante. Um nome deve ser atribuído a esta tabela
para futuras referências dentro do programa

• A instrução DECLARE CURSOR não retorna nenhum valor ao programa.


Isto é feito pela instrução FETCH.

• No nosso exemplo foi declarado o cursor K9.

• A instrução OPEN executa a seleção que está limitada pelo valores da


variável HOST DEPT. O cursor não está apontando para nenhuma linha.

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


o valor das colunas através das variáveis MATR e SNOME.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 193 -


Procure Definir (cont.)

• Um programa típico emite FETCHS sucessivamente até receber o


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

• O CURSOR deve ser fechado com CLOSE quando não é mais


necessário. O final do programa também faz o DB2 fechar os cursores
abertos.

• Um programa pode ter vários cursores abertos ao mesmo tempo.


Porém, procure sempre manter o menor número de cursores abertos
simultaneamente, para otimizar performance.

• Para programas que irão emitir COMMIT e necessitam reposicionar o


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

Anotações:

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

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 195 -


Delete Via Cursor (cont.)

• Um programa tem a opção de eliminar algumas das linhas apontadas por


um CURSOR.

• A instrução DELETE com a claúsula “WHERE CURRENT OF CURSOR” faz


com que a linha apontada pela última instrução FETCH seja eliminada.

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


um CURSOR. Se não existe a necessidade de exame do conteúdo das
linhas, podemos fazer o DELETE de uma ou múltiplas linhas sem a
utilização de um CURSOR

• Um cursor não pode ser usado para DELETE, se na sua declaração


estiverem presente:

• ORDER BY,
• GROUP BY,
• DISTINCT,
• UNION,
• função ou
• Join.

Anotações:

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

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 197 -


Update Via Cursor (cont.)

• Um programa pode fazer a atualização de algumas linhas apontadas por


um CURSOR.

• A atualização deve ser feita para a linha que está sendo apontada pelo
CURSOR especificado na clausula “WHERE CURRENT OF CURSOR”.

• Somente as colunas especificadas na cláusula “FOR UPDATE OF lista de


colunas” da instrução DECLARE podem ser atualizadas.

• Um programa pode atualizar uma ou múltiplas linhas de uma tabela sem


utilizar um CURSOR.

• Uma instrução DECLARE não pode conter cláusula “FOR UPDATE OF”,
se a instrução SELECT associada contiver:

• ORDER BY,
• GROUP BY,
• DISTINCT,
• UNION,
• função ou
• Join.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 198 -


M anipulação de Cursor

PO SI CI O N A M EN TO
O PEN

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

C LO SE

REU TI LI ZA ÇÃ O d o CU RSO R
O PEN

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 199 -


M anipulação de Cursor (cont.)

• OPEN posiciona o cursor “antes” da primeira linha da tabela resultante.

• FETCH avança o cursor uma linha para frente.

• Antes da Versão 7 do DB2 não existe meio de fazermos um FETCH para


trás.

• CLOSE destrói a posição do cursor

• Um cursor pode ser reutilizado e a sua posição é restaurada para o “topo”


da tabela resultante.

• Um CLOSE não implica no fim de uma logical unit of work (LUW) e


portanto não gera um COMMIT.

• Uma instrução COMMIT fecha todos os cursores sem opção with hold e
valida todas as atualizações efetuadas até então.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 200 -


Variável Indicadora

EXEC SQL
SELECT CARGO DEPT, FONE, NOME
INTO :CC:CCI, :DPT, :FON:NFON, :NOM
FROM EMPR
WHERE MATR = :ID
END-EXEC.

co lu n a V a r. H O ST Var.IN D
CA RG O :CC : CCI

SELEC T / “ A N A LI STA ” “ A N A LI STA ” 0


FETCH N U LO inalt erado -1

U PD A TE/ “ G EREN TE” “ G EREN TE” 0


I N SERT N U LO ignorado -1

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 201 -


Variável Indicadora (cont.)

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


variável indicadora para registrar uma eventual nulidade.

• Uma variável indicadora é uma halfword (SMALLINT).

• Uma variável indicadora deve ser especificada contiguamente à variável


HOST correspondente, conforme o exemplo.

• As variáveis HOST que não trabalham com nulo não requerem uma
variável indicadora. Vide a coluna DEPT do exemplo.

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


atribui - 1 à variável indicadora e mantém inalterada a variável HOST,
que deve ser ignorada pelo programa.

• Se um programa envolvendo UPDATE ou INSERT atribuir - 1 à variável


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

Anotações:

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 V ETO R

0 1 EST. 0 1 V ETO R.
1 0 CC PIC. . . 1 0 ARRAY PIC S9 (4 ) CO M P
1 0 D PT PIC. . . O CCU RS 3 TI M ES
1 0 FO N PIC. . .
1 0 NOM PIC...

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 203 -


Vetor de Var. Indicadoras (cont.)

• Se as variáveis HOST estão arranjadas numa estrutura e pelo menos um


de seus componentes trabalha com nulo, o programa deve apresentar
um vetor de variáveis indicadoras.

• O Vetor deve conter uma variável indicadora para cada componente da


estrutura, inclusive as que não trabalham com nulo, até a última variável
HOST que deve trabalhar com nulo.

• No nosso exemplo a 4ª coluna não trabalha com nulo e o nosso vetor


não precisa de 4 indicadoras.

• A correspondência entre a estrutura e o vetor é posicional.

• O vetor é uma múltipla ocorrência de variáveis halfword (SMALLINT).

• A utilização do vetor de variáveis indicadoras é somente para o COBOL


ou PL/I.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 204 -


Outros usos da Variável Indicadora

• As variáveis indicadoras podem ser usadas para indicar outras situações.

• - 2 válido para SELECT externo (numa SUBQUERY por ex.) ou


FETCH. Indica que a coluna tem resultado nulo e a variável HOST
permanece inalterada. O teste de SQLCODE dá novas informações:

• +304 indica erro de conversão. Por exemplo uma variável HOST


não conseguiu comportar um valor maior que 32K,
• + 802 indica erro aritmético resultante de divisão por zero ou over
flow.

• “n” indica que uma variável HOST é pequena demais para conter um
string de “N” caracteres que teve de ser truncado. O SQLWARN1 é
setado para ‘W’.

• Erros de conversão ou de aritmética resultavam -304 ou -802 na ausência


da variável indicadora.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 205 -


Erros de Aritmética e Conversão - Exem plo

01 MV1 PIC S9(9) COMP VALUE 0. SM I1 IN T1 SM I2


01 MV2 PIC S9(9) COMP.
01 MV3 PIC S9(9) COMP. 2 345678 0
01 I-VARIABLES.
05 IV1 PIC S9(4) COMP. 4 2111111111 4
05 IV2 PIC S9(4) COMP.
05 IV3 PIC S9(4) COMP.

EXEC SQL
SELECT SMI1, SMI1*INT1, SMI1/SMI2
INTO :MV1:IV1, :MV2:IV2, :MV3:IV3 FROM TABLEA
END-EXEC.

1. Prim eira linha:


MV1 = 1 IV1 = 0
M V2 = 691356 IV2 = 0
MV3 = 0 IV3 = -2
SQ LCODE = +802
2. Segunda linha: MV1 = 4 IV1 = 0
MV2 = 691356 IV2 = -2
MV3 = 1 IV3 = 0
SQ LCODE = +304

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 206 -


Uso da Variável Indicadora - Resumo

var. IN D I N TERPRETA ÇÃ O

0 var. H O ST co n t ém valo r n ão n u lo

-1 coluna com valor nulo


var. H O ST in alt erad a

-2 resu lt ad o n u lo d evid o a u m a erro


arit m ét ico o u d e co n versão

n (>0 ) s t ring d e “n”caract eres t runcad o


n o assin alam en t o à variável H O ST

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 207 -


Estratégia de Acesso

SELECT *
FROM EMPR
WHERE SEXO = ‘F’
AND (CARGO = ‘ANALISTA’ OR SALARIO > 1000)
AND DEPT IN (‘E11’,’D14’)

• ÍNDICES DISPONÍVEIS?

• QUANTIDADE DE PÁGINAS LIDAS SE TABLESPACE FOR


VARRIDO? E SE ÍNDICES FOREM UTILIZADOS?

• QUAL A MELHOR ORDEM DE EXECUÇÃO DOS TESTES?

• EXPLAIN. É usado para verificar qual estratégia foi escolhida


pelo DB2

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 208 -


Estratégia de Acesso (cont.)

• A estratégia de acesso de uma instrução SQL é determinada pelo

otimizador do DB2.

• O otimizador procura a melhor opção de acesso para minimizar o

consumo de recursos de I/O e CPU.

• O otimizador se baseia nas informações estatísticas contidas no

catálogo. Tais informações são atualizadas pelo utilitário RUNSTATS.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 209 -


Execução do Program a

CICS, IM S, TSO D B2

M Ó D U LO PLA N O
DE C A LL
CA RG A PA CKA G E

RELA TÓ RI O V SA M T A BELA S
D B2

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 210 -


Execução do Programa (cont.)

• O programa é executado no address space do usuário, enquanto que o


package é executado no address space do DB2.

• O acesso às tabelas são feitos através de CALL para o DB2.

• Para impedir que eventualmente um programa venha a utilizar um


package que não lhe pertence, o DB2 checa se os timestamps do módulo
de carga e do package são iguais. O programa não é executado se não
forem coincidentes.

SQLCODE= - 805 (PACKAGE)

• Ant igam ent e não exist iam p ackag es, e um plano era com post o de um
co n ju n t o d e D BRM ’ s. Para est es p lan o s, q u an d o exist e u m p ro b lem a d e
t im est am p diferent e é em it ido

SQLCODE= - 818 (PLANO com DBRM)

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 211 -


Considerações Sobre Programação

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 212 -


Recomendações DM L

• Use DCLGEN para gerar variáveis HOST compatíveis com

colunas. Evite assim conversões numéricas.

- SELECT A INTO :B

- WHERE A = :B

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 213 -


Recomendações DM L (cont.)

• SELECIONE SOMENTE AS COLUNAS DESEJADAS

colunas adicionais = CPU ADICIONAL

• É PROIBIDO O USO DO SELECT * NO BANCO

- adição de colunas poderá provocar erros

- acesso ao catálogo DB2

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 214 -


Recomendações DM L (cont.)

• EVITE o subquery correlacionado.

SELECT MATR, SOBRENOME


FROM EMPR E, PROJETO P
WHERE E.DEPT = P.DEPT
AND E.MATR = P.RESP

é mais eficiente que

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

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 215 -


Recomendações DM L (cont.)

• Use o ORBER BY somente quando necessário

• CPU ADICIONAL

• I/O ADICIONAL NO DATABASE TEMPORÁRIO

• CONSIDERE SORT EXTERNO NO LUGAR DE ORDER BY

• PARA TABELAS COM GRANDE QUANTIDADE DE LINHAS

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 216 -


Uso do Índice

UUSO
SO DDO
O ÍÍN
N DDIICE
CE

CO LU N A I N D EX A D A IN D EX SO RT
CA N D ID A TO CA N D I D A TO

IN SIM
LI KE N O TA 1
BETW EEN SIM
> ,> = ,< ,< = ,¬ > ,¬ < ,= SIM
¬ = ,< > N ÃO
NOT N O TA 2
OR N O TA 3
O RD E R BY SIM SI M
G RO U P BY SIM SI M
D I STI N CT SIM SI M
CO M PA RED TO :
LO N G ER LI T ERA L N ÃO
A RI TI M ETI C EX P. N ÃO
D I FF. D A TA TYPE N ÃO
U SED FO R JO I N SIM SI M
N O TA 1 : Sim , excet o q u an d o a variável – h o st cont iver ‘% ’ ou ‘-‘ no início.
N O TA 2 : Sim , q u an d o p o d e ser su b st it u id o p o r o p erad o r q u e u sa o ín d ice
N O TA 3 : Sim se p o ssível co n vert er e m IN.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 217 -


Expressões Aritméticas

EX
EXPRESSÕ
PRESSÕES
ESAARIRITM
T MÉTI CA SS
ÉTICA

• M A TCH IN G IN D EX EM SA LA RY N Ã O U TILIZA D O
EXEC SQL
SELECT LASTNAME, SALARY
FROM TEMPL
WHERE SALARY <= :SAL + 1000
END-EXEC
• M A TCH I N G I N D EX EM SA LA RY CO N SI D ERA D O
SAL = SAL + 1000
EXEC SQL
SELECT LASTNAME, SALARY
FROM TEMPL
WHERE SALARY <=: SAL
END-EXEC

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 218 -


Condições Not

CO
CONNDDIÇÕ
IÇÕES
ESNNOOTT

• M A TCH IN G IN D EX EM D EPTN O N Ã O U TILIZA D O


WHERE DEPTNO ¬= ‘E01’
WHERE DEPTNO NOT LIKE ‘E%’
WHERE DEPTNO NOT IN (‘E11’,’D11’)
WHERE DEPTNO NOT BETWEEN ‘A11’ AND ‘B28’
WHERE DEPTNO IS NOT NULL

• M A TCH IN G IN D EX EM D EPTN O CO N SID ERA D O

WHERE DEPTNO ¬> ‘D17’


WHERE NOT DEPTNO < ‘D28’

Evit ar a ut ilização do com ando N O T

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 219 -


Uso do “Like”

UUSO
SO DDOO ““LI
LIKE”
KE”

• M ATCH IN G IN D EX EM LASTN AM E N ÃO U TILIZAD O

WHERE LASTNAME LIKE ‘%SON’


WHERE LASTNAME LIKE ‘_SON’
WHERE SUBSTR(LASTNAME ,3,3) = ‘SON’

• M A TCH IN G IN D EX EM LA STN A M E CO N SID ERA D O

WHERE LASTNAME LIKE ‘B_S%’

Evit ar a u t ilização d o co m an d o LIKE

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 220 -


Subqueries

SU
SUBQ
BQUUERI
ERIES
ES

• M A TCH IN G IN D EX EM D EPTN O CO N SID ERA D O :


WHERE DEPTNO =(SELECT WORKDEPT FROM EMPL
WHERE EMPNO = ‘123456’)
- SU BQ U ERY N Ã O -C O RRELA T A
- V A LO R Ú N I CO D A SU BQ U ERY

• M A TCH IN G IN D EX EM D EPTN O N Ã O U TILIZA D O


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)
- LI STA D E V A LO RES D A SU BQ U ERY

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 221 -


Explain

• I N FO RM A A ESTRA TÉG I A D E EX ECU ÇÃ O D E U M A I N STRU ÇÃ O SQ L

− ESCO LH A D O CA M I N H O ( Í N D I CE X TA BLESPA CE SCA N )


− Í N D I CES U TI LI ZA D O S
− SO RTS REQ U ERI D O S
− SEQ U ÊN CI A D E PRO CESSA M EN TO D A S SU BQ U ERI ES
− ESTRA TÉG I A D E LO CKI N G

SELECT
SELECT MATR,
MATR, SOBRENOME
SOBRENOME FROM
FROM EMPR
EMPR
WHERE ......AND......AND......
WHERE ......AND......AND......

EX
EXPLA
PLAIIN
N In st ru ção o u o p ção d o BIN D

PLA N -T A BLE

Anotações:

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 ESTRATÉGIAS


• VERIFICAR EFICIÊNCIA DA INSTRUÇÃO SQL

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 223 -


Explain (cont.)

EX
EXPLA
PLAI INN

Co m an d o EX
EXPLA
PLAIINN PLA N - T A BLE
SQ L

• EX PLA I N A LL

SET QUERY = n
FOR sql-statement

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 224 -


Plan_table

Anotações:

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

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 226 -


Plan_table (cont.)

PLA
PLANN__TA
TABLE
BLE

• A CCESSTYPE:

− R = TA BLESPA CE SCA N ( TA BLE SCA N I F SEGM EN TED TS)


− I = INDEX SCAN
− M = One f et ch INDEX access f or M IN or M AX function
− N = INDEX access f o r IN l i st
− M = M ultiple IN DEX SCA N . Follow ed by M X and M I or M U
− M X = One of multiple IN DEX SCA N s
− M I = Int ersect ion of multiple ind exes
− MU = Union of multiple indexes

I F A CCESSTYPE = I , M , N , M X , t hen:
• A CCESSN A M E: Name of Index
• M A TCHCOLS: # of matching cols
• INDEXONLY: Y if no d at a access

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 227 -


Tópicos Adicionais

Parte 3

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 228 -


LOCKING

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 229 -


Locking

• O p ro p ó sit o d o m ecan ism o d o LO CKIN G é in d icar se u m d ad o est á


sendo ut ilizado ou não, para perm it ir ao DB2 organizar um sit uaç ão
d e acesso m ú lt ip lo ao s d ad o s.

• Pro t eg e co n t ra

• acesso a u m d ad o co m alt eração n ão valid ad a.


• at ualização de um dado que est á sendo ut ilizado (para leit ura
p o r exem p lo ).

• U m LO CK t em t rês ca ra ct eríst ica s:

• Granularid ad e
• M odo
• D u ração

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 230 -


Granularidade - Locksize Tablespace

LO
LOCCKSI
KSIZZEE TA
T ABLESPA
BLESPACCEE

U PD A TE
S E LE C T

W AITIN G

W AITIN G W AITIN G

U PD A TE S E LE C T

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 231 -


Granularidade - Locksize Table

LO
LOCKSI
CKSIZZEETA
TABLE
BLE

S E LE C T U PD A TE

W AITING W AITIN G

U PD A TE SELEC T

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 232 -


Granularidade - Locksize Page/any

LO
LOCKSI
CKSIZE
Z E PA
PAGGE/
E/AANNYY

SELEC T U PD A TE

U PD A TE S E LE C T

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 233 -


Granularidade - Locksize Row

LO
LOCKSI
CKSIZZE
E RO
ROWW

S E LE C T U PD A TE

U PD A TE S E LE C T

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 234 -


Granularidade do Lock

• Indica a granularidade co m q u e o s re cu rso s sã o p re so s.


• Em o u t ra s p a la vra s o LO CK p o d e ser d a d o :

• individualm ent e a páginas


• a t o d o s o s seg m en t o s d e u m a t ab ela (se a t ab ela p ert en ce a u m TS
seg m en t ad o )
• individualm ent e a um t ab lesp ace

• LO CK a nível d e p ág inas/ linha é t rab alhoso p ara o D B2 , m as d á um a


m aio r co n co rrên cia.

• LO CK a n ível d e t a b ela / t ab lesp ace é m en o s t rab alh o so p ara o D B2 , m as


p o d e cau sar u m m aio r en f ileiram en t o p ara esp era d e recu rso s.

• A granularid ad e é esp ecif icad a com o p arâm et ro d urant e a d ef inição d o


t ab lesp ace

• Para t ab lesp aces seg m en t ad o s o u part icionados, um program a pode


sob rep or a granuladidade a t ra vé s d o co m a n d o LO CK TA BLE ( PA RT)

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 235 -


M odo do Lock

• Po r m o d o s d e LO CKIN G en t en d a -se m od alid ad e q uant o à


exclu sivid ad e so b re u m recu rso , q u e p o d em ser:

• S : ( Sh a red) com part ilhado. O dado est á em uso para leit ura por um ou
m a is u su á rio s.

• X :(Exclu sive) exclu sivo . O d ad o est á em u so p o r u m ú n ico u su ário e


o s d em ais u su ário s in t eressad o s f icam en f ileirad o s.

• U : (U PD ATE). O d ad o est á em u so p o r u m u su ário co m in t en ção d e


at ualizar. Enq uant o ele est iver lend o out ros t am b ém p od em ler (S),
m as q u an d o ele reso lver at u alizar, o D B2 im p ed e n o vo s acesso s e
esp era o s d em ais u su ário s t erm in arem seu s serviço s p ara t ran sf o rm ar
o LO CK em t ip o X .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 236 -


Duracão do Lock (cont.)

• Para LO CK d e leit ura a nível d e p ágina ou linha t em os q uat ro est rat égias
p o ssíve is:

• R R Rep eat ab le read


O s lo cks são ad q u irid o s co n f o rm e as p ág in as/ lin h as vão sen d o
a cessa d a s e sã o lib era d o s só co m u m CO M M IT. O RR só d eve ser
esco lh id o em sit u açõ es esp eciais já q u e as p ág in as/ lin h as f icam p r e sa s
p or m uit o t em p o. O nom e vem d o fat o d e q ue em caso d e rep et ição de
leit ura t enho a garant ia de que ninguém at ualizou o int ervalo de d ad o s
lid o s.

• R S Read St ab ilit y
O s lo cks são ad q u irid o s so m en t e n as p ág in as/ lin h as q u e sat isf azem
t o d as as co n d içõ es d a clau su la W H ERE. Perm it e u m a ap licação ler a s
m esm a s p ág in as/ lin h as d e d ad o s m ais d e u m a vez sem q u e est es d ad o s
t enham sid o at ualizad os p or out ra ap licação. O f erece m aior conco rrência
q u e RR, p o is em b o ra as o u t ras a p lica çã o es n ão p o ssam alt erar o s d ad o s
lid o s p ela ap licação o rig in al, elas p o d em in serir n o vas lin h as.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 237 -


Duracão do Lock (cont.)

• CS Cu rso r Stability
O s lo cks são ad q u irid o s co n f o rm e a n ecessid ad e e lib erad o s
quando o program a lê out ra página/linha.

• UR U ncom m it ed Read
N EN H U M lo ck é adquirido para a leit ura das páginas/ linhas. Perm it e
a leit u ra d o s d ad o s sem ch ecar a in t eg rid ad e. O U R só d eve ser
esco lh id o em sit u açõ es esp eciais ao n d e a in f o rm ação lid a n ão
p recisa est ar 1 0 0 % garant id a. Por exem p lo: select su m (t o t_ ve n d a s)
from ven d a s – aonde o usuário só quer t er um a idéia do t ot al de
ven d as at é o m o m en t o , sem se im p o rt ar co m a p recisão d a
inf orm ação. U SAR CO M M U ITO CU ID AD O .

• O R R d eve ser evit ad o

• Q uant o aos lo cks d o t ip o X, não há d if erença com RR, ond e a lib eração
ocorre som ent e com o CO M M IT.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 238 -


Autorizações

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 239 -


Segurança do DB2

Qualquer atividade envolvendo qualquer objeto DB2,

recurso ou função, é um privilégio e requer uma autorização.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 240 -


Itens Protegidos

DATABASE CATALOG

TABLESPACE UTILITIES

TABLE COMMANDS

INDEX BIND

VIEW EXECUTE

STORAGE GROUP GRANT

BUFFER POOL

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 241 -


Identificação do Usuário do DB2

TSO IMS/DC CICS BATCH

LOGON SIGNON SIGNON PARÂMETRO

USER-ID USER-ID USER-ID USER-ID NO

LTERM TRANSAÇÃO CARTÃO JOB

TERM-ID

N o am b ient e d e Prod ução d o Banco:


BA TCH - o Co n t ro l-M O N LIN E - u su ário d e sig non d o CI CS

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 242 -


Comando Grant/Revoke

GRANT Lista de privilégios


ON Lista de recursos
TO Lista de USER -IDS

[WITH GRANT OPTION]

• GRANT ... ON ... TO PUBLIC


(Essa autorização vale para qualquer USER-ID)

REVOKE Lista de privilégios


ON Lista de recursos
FROM Lista de USER -IDS

• REVOKE ... ON ... FROM user1

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 243 -


Utilitários

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 244 -


Utilitários DB2

PRO CESSA M EN TO
U TI LI TÁ RI O FU N ÇÃ O / D ESCRI ÇÃ O
CO N CO RREN TE
CH ECK TESTA SE O S I N D Í CES ESTÃ O CO N SI STEN TES
LEI TU RA
IN D EX COM OS DA DOS
TESTA I N TEGRI D A D E REFERÊN CI A L E A S
CH ECK D A TA LEI TU RA
CO N TRA IN TS

CO PY CRIA U M A CÓ PIA (BA CKU P) DE U M TA BLESPA CE Q U A LQ U ER TIPO

NENHUM NO
CA RREGA DA DO S DE U M A RQ U IVO SEQ U EN CIA L
TA BLESPA CE O U
LOAD P AR A UM A OU M AIS TABELAS NO M ESM O
PA RTIÇÃ O SEN D O
TA BLESPA CE
CA RREGA D O
JU N TA CÓ PIA S IN CREM EN TA IS E/ O U TO TA IS E
M ERGECO PY CRIA UM A N OVA CÓPIA IN CREM EN TA L E/ OU Q U A LQ U ER TIPO
TOTA L
DELETA IN FO RM A ÇÕ ES SO BRE U M A CO PIA DA
M O DIFY TA BELA DO CA TÁ LO GO ‘ SYSIBM . SYSCO PY’ E DO Q U A LQ U ER TIPO
DIRETÓ RIO ’ SYSIBM . SYSLGRN G’

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 245 -


Utilitários DB2 (cont.)

PRO CESSA M EN TO
U TI LI TÁ RI O FU N ÇÃ O / D ESCRI ÇÃ O
CO N CO RREN TE
Q U IESCE ESTA BELECE U M ‘ Q U IESCE PO IN T’ N O
LEI TU RA
CA TÁ LO GO PA RA O ( S) TA BLESPA CE( S)
RECUPERA O TABLESPACE, UMA PÁGINA,
RECOVER NENHUM
PARTIÇÃO OU “ERRORANGE”
READY-ONLY
DURANTE
REORG REORGANIZA UM TABLESPACE OU UM INDICE
UNLOAD; NEHUM
DURANTE RELOAD
REPORT
LISTA INFORMAÇÕES DE TABLESPACES QUALQUER TIPO
PROCESSING
ATUALIZA TABELAS CATÁLOGO COM
RUNSTATS ESTATÍSTICAS SOBRE UTILIZAÇÃO DE QUALQUER TIPO
TABLESPACES EFICIÊNCIA DE ÍNDICES
ATUALIZA TABELAS CATÁLOGO COM
STOSPACE ESTATÍSTICAS SOBRE UTILIZAÇÃO DE ESPAÇO QUALQUER TIPO
DE “STORAGE GROUP”

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 246 -


Utilitário ''Load''

CARREGA DADOS SEQUENCIALMENTE PARA UMA OU MAIS TABELAS EM


UM ''TABLESPACE'' OU PARTIÇÃO

ARQUIVO
ARQUIVO
SEQUENCIAL
SEQUENCIAL
DE
DEENTRADA
ENTRADA

UUTITILILITÁ
TÁRIRIOO
LO A D
LO A D

UMA OU MAIS TABELAS


DE SAÍDA

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 247 -


Executando o Utilitário ''Load''

VISÃO BÁSICA DAS FASES DE EXECUÇÃO DO ''LOAD''

PHASE 1 PHASE 2 PHASE 3


LOAD SORT
BUILD
SYSUT1
SEQ REGISTROS DO
INPUT INDICE E FOREIGN
KEY

SYSREC
DFSORT
TABLE RID MAP
DFSORT TODOS INDICES

DA TABELA
CARREGADA SYSMAP

ERROS DE
ERROS DE CONVERSÃO NO DUPLICA DOS NO
REGISTROS
SYSERR SORTEADOS SYSERR

PHASE 4 AS DUAS LINHAS


DUPLICADAS SÃO
INDEXVAL TAB ELA REMOVIDAS DA TABELA.
INDICES
DUPLICA DOS
SYSERR

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 248 -


Executando o Utilitário ''Load'' (cont.)

PHASE 5

TABELA PARENT TABELA


FOREIGN VIOLAÇÕES DE
ENFORCE KEY INTEGRIDADE
INVÁLIDAS REFERENCIAL
REMOVIDAS

PHASE 6
SYSERR
DISCARD SEQUENCIAL RID MAP
DA TABELA
DATA SET DE
DISCARD
INPUT
CARREGADA COMPLETO
RID MAP
DA TABELA
SYSUT1 CARREGADA SYSMAP SYSDISC

PHASE 7
ERROR
ERROR
SUMMARY
REPORT TODAS VIOLAÇÕES SUMMARY
ACUMULADAS
SYSERR

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 249 -


LOAD - Fases de Execução

( RE) LO A D O arquivo seqüencial é passado um a vez e t odas as t abelas são


carregadas. A saída dest a f ase consist e em :
- Arquivo Tem porário com t odos os regist ros de índices e chaves
est rangeiras.
- Um arquivo que cont ém o 'RID' onde a linha é arm azenada na t abela
e o endereço relativo do registro fonte da linha (no arquivo seqüencial
de ent rada).
SO RT Som ent e é execut ado se as t abelas t iverem índices. Classif ica o
índ ice e as chaves est rangeiras.
BU I LD Cria os índices def inidos na t abela. Det ect a violações de 'índices
ú n ico s' e g rava reg ist ro n o arq u ivo d e saíd a 'SYSERR'.
IN D EX V AL Ret ira f isicam ent e as linhas que violaram as regras de 'índice ú nico'
da t abela. Not e que am bas são ret iradas.
EN FO RCE Verif ica se t odas as chaves est rangeiras da t abela são iguais às
chaves prim árias da(s) t abela(s) pai. As linhas encont radas com erro
são f isicam ent e rem ovidas e os regist ros de erro são gravados no
arq u ivo ‘ SYSERR’ .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 250 -


LOAD - Fases de Execução (cont.)

D I SCA RD Usa o arq uivo 'SYSERR' p ara sab er q uais linhas t iveram erros e o
arq uivo 'SYSM AP' p ara localizá-las no arquivo seqüencial de ent rada,
est a f ase cria u m arq u ivo 'DISCARD'. O arq u ivo 'DISCARD' p o d e ser
edit ado (usando 'ISPF') e usado com o novo 'INPUT' de 'LOAD' após o s
erros t erem sido corrigidos.
REPO RT Usa 'SYSERR' p ara list ar t od as as linhas q ue não f oram carregad a s.
Um a linha é considerada errada por qualquer um a das
seguint esrazões:
- Erros d e conversão d e d ad os d urant e a f ase '(RE)LOAD'
- Erros de chave duplicada encont rados durant e a f ase 'BUILD
- Erros de int egridade referencial descobert os durant e a f ase
'EN FO RCE‘

No Banco é ut ilizada a opção DISCARD(1). Est a opção especif ica o número


m áxim o de regist ros que podem apresent ar erro (qualquer t ipo). C om isto, as
f ases d e (RE)LOA D, IN DEXA L e EN FORCE abendam no primeiro erro
encontrado.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 251 -


LOAD - Cartões de Controle

LO A D D A TA I N TO TA BLE TA B_ EM PR

W HEN (1 :1 )= ‘* ’

(M ATR PO SITIO N (2 :6 ),
NOM E PO SITIO N (8 :1 6 ),
.
. )

LOCA LIZA ÇÃ O E TA M A NHO DO CA M PO DE INPUT

NOM E DA COLUNA DESTINO

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 252 -


Opções Resume e Replace

• LO A D I N I CI A L:
- Ta b le sp a ce vazio (Est e é o default)
LO A D D A TA
RESU M E N O
IN TO TA BLE EM P

• LO AD Ad icional :
- Ta b lesp a ce não -vaz io
- Para carreg ar o u t ra t ab ela n o m esm o t ab lesp ace
- Para ad icionar linhas em um a t ab ela não-va z ia
LO A D D A TA
RESU M E YES
IN TO TA BLE EM P

• So b rep o r d ad o s an t ig o s:
- Esva z ia o t a b lesp a ce e o s ín d ices an t es d o load
LO A D D A TA
REPLA C E
IN TO TA BLE EM P
U m a m aneira fácil de fazer um ref resh d o s d ad o s.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 253 -


Exercício - Load

T1 , T2 E T2 CO N TÉM D A D O S

CO M O V O CÊ FA RI A PA RA

A DICIONA R DA DOS NA T2 DE UM FA ZER REPLA CE D O S D A D O S D A T2


A RQUIVO SEQUEN CIA L ? POR UM A RQUIVO SEQUEN CIA L ?

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 254 -


Opção Log (Yes/No)

Co m est a o p ção é p o ssível carreg ar o s d ad o s m ais ráp id o , p o rém p ode

cau sar im p act o n o m o m en t o d o RECO V ER.

LO A D D A TA

I N TO TA BLE PRO J

LO G YES / N O

O BS: q uand o a op ção LO G(N O ) é ut ilizad a o t a b lesp a ce f ica co m o st at u s

d e CO PY PEN D IN G a n ão ser q u e a o p ção CO PYD D N seja u t iliz ad a

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 255 -


Utilitário '‘Check Data''

CHECA OS DADOS PARA VERIFICAR SE EXISTEM VIOLAÇÕES DE


INTEGRIDADE REFERENCIAL E DE TABLE CHECK CONSTRAINT.

USER TABELA A
UM OU MAIS TABLESPACES
USER TABELA B

UUTITILILITÁ
TÁRIRIOO
CCHHEC ECKK
DDAATA TA

ERROR
ERROR
SUMMARY
SUMMARY

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 256 -


CHECK DATA - Fases de Execução

SCA N TA B Ext rai as foreign keys; usa o índice da foreign key, se exist ir,
senão f az scan table

SO RT Faz o sort das foreign keys caso elas não t enham sido ext raidas
at ravés do índice.

CH ECKD A T Procura no índice da primary key as foreign keys


correspondent es e em it e m ensagens no relat ório para os erros
encont rados.

REPO RT C K Copia as linhas em erro para as except ion t ables, e as deleta da


t ab ela o rig in al se DELETE YES f o i esp ecif icad o

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 257 -


Opções do CHECK DATA

• FO R EX CEPTI O N

Copia linhas inválidas para Excep t ion Tab les


• D ELET E
Deleta linhas inválidas e t odas as descendent es (Except ion Table é
requerida)
• SC O PE

- PEN D IN G
Indica que som ent e as linhas das t abelas ou part ições que est ão em
CHECK pending st at us devem ser checadas
- A LL
Ch eca t odas as linhas de t odas as t abelas exist ent es no t ablespace
especif icado
• EX CEPTI O N S n
Termina o utilitário após n+ 1 erros

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 258 -


Utilitário '‘Runstats''

OBTEM INFORMAÇÕES SOBRE A CARACTERÍSTICA DOS DADOS NOS TABLESPACES,


ÍNDICES E PARTIÇÕES QUE SERÃO ARMAZENADAS NO CATÁLOGO E USADAS PELO
DB2 PARA DEFINIR O MÉTODO DE ACESSO DURANTE O BIND. TAMBÉM PODEM SER
USADAS PELO DBA PARA AVALIAR A NECESSIDADE DE REORGANIZAÇÃO DOS DADOS

N Ú M ERO D E LI N H A S N A TA BELA ?
CLU STER O K ?
N Í V EL D O S Í N D I CES ? REO RG A N I ZA R ?
N Ú M ERO D E V A LO RES D I STI N TO S D E U M A CO LU N A ?

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 259 -


Runstats - Fase de Execução

RU N STA TS Fa z scan no t ab lesp ace e at ualiza o cat álogo.

OBS: No Banco exist e um a rot ina pront a para o R unstats , solicit ar a criação ao
analist a de produção.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 260 -


Opções do Runstats

• REPO RT N O | Y ES

Produz um relat ório com as est at íst icas obt idas pelo Runst at s

• U PD A TE A LL | N O N E | SPA C E | A C C ESSPA T H

A LL - inclui am bas opções SPA CE e A CCESSPA TH

NONE - não atualiza o catálogo

SPA CE - at ualiza inform ações relat ivas a gerenciam ent o de espaço.

A CCESSPA TH - at ualiza inform ações usadas pelo Opt im izer

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 261 -


Opções do Runstats (cont.)

• Para ro d ar so m en t e p ara o Ta b le sp a ce e ig n o rar o s ín d ices

RU N STA TS TA BLESPA CE IN VDB1 1 . IN VS0 0 0 1

• Pa ra ro d a r p a ra Ta b lesp a ce e Ín d ices

RU N STA TS TA BLESPA CE IN VDB1 1 . IN VS0 0 0 1 I N D EX

• Para o b t er est at íst ica p ara u m a co lu n a esp ecíf ica

RU N STA TS TA BLESPA CE IN VDB1 1 . IN VS0 0 0 1

TA BLE( INVDB1 1 1 . T_ INVOICE) COLUM N( R_ INVOICE)

SA M PLE 2 5

• Para so m en t e u m ín d ice To ru n ag ain st o n ly o n e in d ex o f TS

RUN STA TS IN DEX IN VDB1 1 1

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 262 -


Considerações sobre Runstats

• Rodar o Ru n st at s ap ó s u m LO AD o u REO RG, p ara at u aliz ar o

cat álogo do DB2 .

- SQL Din âm ico vai ser benificiado automaticamente

- SQL est át ico precisará de um rebind .

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 263 -


Utilitário '‘COPY''

CRIA UM BACKUP DE UM TABLESPACE OU DE UMA PARTIÇÃO.

USER TABELA A
TABLESPACE
USER TABELA B

U TILITÁ RIO
U TI LI TÁ RI O
CO
C OPY PY

I M A G E CO PY

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 264 -


COPY - Fases de Execução

REPO RT Produz um relatório quando a opção CH A N GELIM IT é utilizada

CO PY Cópia do objeto

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 265 -


Opções do Copy

• FU LL

YES
Cria um backup com pleto do t ablespace/partition
CO PY TA BLESPA CE D B0 1 . TS0 1

NO

Cria um backup increm ent al do t ab lesp ace/partition


CO PY TA BLESPA CE D B0 1 . TS0 2

FU LL N O

• CO N CU RREN T

Execu t a o DFSM S concurrent cop y para t irar um full im age copy.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 266 -


Copy Incremental e M ergecopy

T E MPO

CÓ PI A CÓ PIA CÓ PI A
D AD O S

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 267 -


Recover

RECUPERA OS DADOS USANDO UMA CÓPIA E APLICANDO OS


REGISTROS DA LOG

T EM PO

A LT ERA Ç Õ ES
N O S D AD O S D AD O N ÃO
DADO S A CESSÍ V EL

DADO
REC U PERA D O

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 268 -


RECOVER - Fases de Execução

REST O RE Localiza e faz um m erge das cópias disponíveis e recupera o

t ablespace para o nível do backup

LO G A PPLY Aplica os regist ros da log no t ablespace recuperado

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 269 -


RECOVER - Agilização do processo

T EM PO

CÓ PIA CÓ PI A CÓ PI A
DADO N ÃO
D AD O S A CESSÍ V EL

DADO
REC U PERA D O

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 270 -


RECOVER - Para um ponto no tem po

T EM PO
PRO CESSO S
PERD I D O S

A LTERA ÇÕ ES
N O S D AD O S D A D O D A N IFICA D O
D AD O S
LO G I CA M EN TE
PO N TO DE
Q U I ESCE

DADO
RECU PERA D O

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 271 -


RECOVER - Para um ponto no tempo

• T O RBA

É usado para especif icar um ponto na log para a recuperação FU LL

• T O C O PY

Especif ica qual a cópia o DB2 deve usar para recuperar os dados.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 272 -


DSNTIAUL – Programa SAM PLE para UNLOAD

FAZ O UNLOAD DE ALGUMAS OU TODAS AS LINHAS DE ATÉ 100 TABELAS


AO MESMO TEMPO. O FORMATO DO UNLOAD É COMPATÍVEL COM O LOAD
E ELE TAMBÉM GERA OS CARTÕES DE CONTROLE PARA O LOAD.

USER TABELA A
UMA OU MAIS TABELAS
DE ENTRADA
USER TABELA B

DDSN
SNTIAU
TIA ULL

ARQUIVO U
SEQUENCIAL M
DE OUTPUT A

O
U

M
A
I
S

T
A
B
E

Anotações: L
A
S
D
E

S
A
Í
D
A

Domini Treinamento – DB2 para Desenvolvedores - 273 -


DSNTIAUL - DATA SETS e PARÂM ETRO

Dat a Set D escrip t io n

SYSI N Dat aset de input.

SY SPRI N T Dat aset de output. DSNTIA UL escreve erros e m ensag ens


inform ativas neste d at aset.

SYSPU N CH Dat aset de out put . DSNTIAUL escreve os cart ões de cont role para o
LOAD nest e dat aset.

SY SRECn n Dat set de output. O valor nn tem intervalo de 0 0 até 99. É p ossível t er
no máximo 100 datasets de out put por execução do DSNTIAUL. Cada
dat aset contém os dados que foram ‘unload’ p elo DSNTIAUL. O
núm ero dest e dat aset deve ser igual ao núm ero de statements de
SELECT o u d e t ab elas d o dat aset de input.

O Ú N I CO PA RÂ M ETRO A CEI TO PELO D SN TI A U L É SQ L

Anotações:

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;

Anotações:

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'

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 276 -


Stored Procedures Introdução

O QUE SÃO E PARA QUE SERVEM AS STORED PROCEDURES

Stored Procedures são programas contendo comandos sql de acesso ao banco de


dados, que rodam junto do servidor de bancos de dados (na mesma máquina e sistema
operacional), sob o controle do servidor RDBMS, em ambiente próprio e separado do
aplicativo que as invoca.

Stored Procedures são armazenadas em bibliotecas funcionais compartilhadas e


acessadas pelo RDBMS.

As sp são 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 máquina com acesso ao servidor db2.

A invocação de sp é feita no db2 com um comando “call”. Note-se que com rdbms de
outros fabricantes o comando de invocação pode ser diferente de “call” ( e.g. O ms sql
usa “execute” ), assim como as regras de programação e ligação podem ser diferentes
também. Por esse motivo, conhecimentos prévios de outros sw, podem não se aplicar a
db2 stored procedures.

Porque razão iríamos querer usar stored procedures em vez de efetuar todos os acessos
sql no programa invocador?
Existem dois tipos de situação em que é mais recomendável o uso de sp:

Anotações:

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. Além disso, como a sp é
controlada diretamente pelo rdbms, a comunicação entre estes é mais otimizada que
entre um aplicativo comum e o rdbms. Tipicamente, a execução de um conjunto de
comandos sql é mais rápida quando estes estão numa sp que quando são executados,
um por vez, num programa comum.

SEGURANÇA.

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


máquinas desktop são mais vulneráveis.
Os programas existentes num servidor estão mais protegidos contra adulterações e seu
ambiente de processamento também é mais seguro.

Programas que implementam as partes mais confidenciais e importantes de um sistema,


muitas vezes não estariam seguros em desktops. Stored procedures são uma das
alternativas que dispomos para isolar as funções de acesso a banco de dados mais
sensíveis.

Outra razão que poderia indicar o uso de stored procedures é que pelo fato de estas
rodarem no servidor, podem usar comandos que não estão disponíveis para os clients,
como por exemplo “list database directory”. Além disso, stored procedures também
podem fazer acesso a recursos de software e storage diponiveis apenas no servidor.

Anotações:

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, então não poderá conter brancos ou caracteres especiais e será
convertido para maiúsculas.

USING DESCRIPTOR descriptor-name

Identifica a sqlda que descreve as host variables usadas como parâmetros, no caso da
procedure ser invocada dessa forma.

O programa que chama a stored procedure deverá inicializar a sqlda:

SQLN indica o numero de ocorrências de SQLVAR na SQLDA


SQLDABC a memória em BYTES alocada para a SQLDA
SQLD quantidade de variáveis usadas na SQLDA para processar um statement

Anotações:

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 não usar o parâmetro para transmitir dados para a procedure, o campo
“sqlind” deverá ser inicializado com o valor –1 pelo programa.

Se a procedure não usar o parâmetro para transmitir dados para o programa, o campo
“sqlind” deverá ser inicializado com o valor –128 pela procedure

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 280 -


CREATE PROCEDURE

É o comando sql que define uma stored procedure no db2

Stored procedures escritas em sql pl são definidas completamente pelo comando “create
procedure”, ou seja, os comandos fonte fazem parte do corpo do comando “create
procedure”

Quando escritas em linguagens diferentes de sql pl, as stored procedures são programas
criados à parte e catalogados no db2 pelo comando “create procedure”, onde se faz
referencia ao nome do executavel. Esses programas têm de ter sido objeto de prepare,
bind, compilação, edição de ligações (linkedited), e catalogação em biblioteca
reconhecida pelo db2.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 281 -


EXEM PLOS

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

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 282 -


PARÂM ETROS
Schema.procname

O nome da procedure é usado para identifica-la no comando “call”

O sistema permite a existência de mais de uma procedure com o mesmo nome e


pertencente ao mesmo schema, mas com quantidade de parâmetros diferente. Por esse
motivo é preciso que o comando “call” passe o número de parâmetros definidos na
procedure, ou esta não será reconhecida.

Em operações como “drop” em que não se usam parâmetros, 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 parâmetro de input

Out – indica que este é um parâmetro de output

Inout – indica que este parâmetro é usado como input e output

Datatype – tipo de dados do parâmetro


os mesmos tipos de dados usados pelo “create table”

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 283 -


PROGRAM AÇÃO DE SP

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 284 -


REGRAS GERAIS
Não use comandos que finalizam o processo, como stop run ou exit em stored
procedures que rodam como subprogramas. Use return ou goback.

Não use set current sqlid

Não use attachment facility calls explícitos ( os/390 )

Em db2 established address spaces o db2 usa caf ( call attachment facility ) calls
implícitos

Em wlm o db2 usa rrsaf calls ( recoverable resource manager services ) implícitos

Não podem ser usados comandos de conexão e operativos:

BACKUP
CONNECT
CONNECT TO
CONNECT RESET
CREATE DATABASE
DROP DATABASE
FORWARD RECOVERY
RESTORE

O db2 não permite usar overload (procedures diferentes com a mesma identificação) em
procedures com o mesmo número de parâmetros, mesmo que sejam de tipos diferentes.

Com exceção de procedures em db2 cli e jdbc, tem de ser feito bind.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 285 -


Quando um client chama uma sp remota, deve inicializar todos os parâmetros antes do
call, inclusive os de output, porque nesse caso o db2 não tem como distinguir os
parâmetros de output dos de input

As stored procedures devem declarar os parâmetros com tipos de dados compatíveis


com as convenções do sql, para que não ocorram problemas de resolução ou mesmo de
incompatibilidade entre as variáveis hospedeiras e as colunas das tabelas.

COM M IT E ROLLBACK

As stored procedures invocadas por um programa client executam na mesma transação (


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 alterações feitas tanto pela sp como pelo programa
client

Uma procedure que contém commit ou rollback, deve ser definida (create procedure)
como contains sql, reads sql data ou modifies sql data

Se a procedure tiver sido definida com commit on return yes, será executado um commit
ao final da procedure, independentemente de a procedure conter commits ou rollbacks

Os cursores do client também são afetados por commit ou rollback dentro da procedure.
Rollback fecha todos os cursores
Commit fecha todos os cursores com exceção daqueles declarados com with hold

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 286 -


Commit e rollback não podem ser usados em procedures nas seguintes situações:

- 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 contém a stored procedure

Não pode ser usado rollback numa sp, se o db2 não for o coordenador de transação.

Não é permitido usar commit em sps catalogadas com a cláusula no sql.

Anotações:

Domini Treinamento – DB2 para Desenvolvedores - 287 -

Você também pode gostar