Você está na página 1de 126

DB2 - CONCEITOS E UTILIZAO

19/11/98

DBMS RELACIONAL..............................................................................................................................3
DB2 um DBMS Relacional....................................................................................................................5
OBJETOS DO DB2...................................................................................................................................7
ENTIDADE RELACIONAMENTO.......................................................................................................10
RELACIONAMENTO............................................................................................................................11
LINGUAGEM SQL.................................................................................................................................17
INSTRUO SELECT.......................................................................................................................18
QUERY............................................................................................................................................21
SELECT DE TODAS AS COLUNAS............................................................................................23
CONTROLE DE LINHAS..............................................................................................................24
NULIDADE.....................................................................................................................................26
MTIPLAS CONDIES..............................................................................................................28
IN.....................................................................................................................................................30
PESQUISAS PARCIAIS.................................................................................................................31
MANIPULANDO TABELA RESULTANTE................................................................................33
ORDER BY.....................................................................................................................................33
SELECT DISTINCT.......................................................................................................................35
SELECT DE VALORES CALCULADOS.....................................................................................37
ORDER BY POR VALOR CALCULADO....................................................................................38
SELECT AVANADO...................................................................................................................40
JOIN DE TABELAS.......................................................................................................................57
INNER JOIN....................................................................................................................................62
OUTER JOIN...................................................................................................................................63
EXPRESSES CASE......................................................................................................................64
UNION.............................................................................................................................................65
SUBQUERY....................................................................................................................................67
MANUTENO DE DADOS - INSERT.........................................................................................72
MANUTENO DE DADOS - UPDATE........................................................................................73
MANUTENO DE DADOS - DELETE........................................................................................74
DATA DEFINITION LANGUAGE.......................................................................................................75
DDL.....................................................................................................................................................76
STORAGE GROUP.............................................................................................................................77
DATABASE........................................................................................................................................78
TABLESPACE....................................................................................................................................79
TABLE.................................................................................................................................................81
NDICE................................................................................................................................................83
VIEW...................................................................................................................................................84
DROP.......................................................................................................................................................85
SQL ESTTICO vs. SQL DINMICO..................................................................................................86
COMMIT / ROLLBACK........................................................................................................................91
BIND........................................................................................................................................................92
SEGURANA INTERNA DO DB2.......................................................................................................97
UTLITRIOS DO DB2...........................................................................................................................99
SYSIBM.SYSUTILX........................................................................................................................100
LOAD.................................................................................................................................................101
LOAD JCL..................................................................................................................................102
FASES DO LOAD.........................................................................................................................105
CHECK DATA..................................................................................................................................109
FASES DO CHECK DATA..........................................................................................................110
CHECK INDEX.................................................................................................................................112
FASES DO CHECK INDEX.........................................................................................................112
REORG..............................................................................................................................................113
FASES DO REORG......................................................................................................................113
COPY.................................................................................................................................................116
MERGECOPY...................................................................................................................................117
RECOVERY......................................................................................................................................118
QUIESCE...........................................................................................................................................120
REPORT............................................................................................................................................120
INDEX RECOVERY........................................................................................................................121
RECOVERY PENDING...................................................................................................................122
MODIFY............................................................................................................................................123
DIAGNOSE.......................................................................................................................................123

#59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

STOSPACE........................................................................................................................................123
RUNSTATS.......................................................................................................................................124
REPAIR.............................................................................................................................................124
DSNTIAUL........................................................................................................................................125
COMANDOS DB2............................................................................................................................126

#59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

DBMS RELACIONAL

QUANDO UM DBMS PODE SER CONSIDERADO RELACIONAL ??


1.
2.
3.
4.

Independncia dos Dados


Estrutura Tabular
Operadores de Tabelas
Uniformidade e Integridade dos Dados.

Notas:
DBMS - Significa DATA BASE MANAGEMENT SYSTEM, OU SISTEMA
GERENCIADOR DE BANCO DE DADOS (SGBD).
Um DBMS Relacional exige:
Estrutura de Dados Tabular
Os dados devem ser colocados em tabelas
Operadores de Tabelas
Deve ter operadores que conseguem manipular dados em tabelas
Uniformidade e Integridade dos Dados
Possui Mecanismos que mantm a integridade dos dados que so
adicionados ou modificados. O DBMS deve tambm ter
mecanismo capazes de forar uma uniformizao dos dados que
so nela armazenados. Por exemplo, podemos forar o
armazenamento dos dados sempre o formato numrico.
Independncia dos Dados.
Lgica das aplicaes no devem se preocupar com a estrutura de
armazenamento e a teoria de acesso aos dados.

#59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

Tabela Empregados
Matricula

Linhas

000010
000020
000030
000040
000050

Nome

Cargo

Christiane
Karina
Jlio
Ingrid
Juan

D01
R01
S01
P01
P02

Depto

Salrio

001
002
003
004
004

260000
270010
300010
250500
138005

Colunas
Notas :
Todos os dados e relacionamentos entre dados so representados por
valores de campo. Pointers fsicos no so utilizados.
Cada ocorrncia da tabela chamada de linha. Os atributos so chamados
de colunas.
As Tabelas DB2 so definidas e manipuladas usando-se a linguagem SQL.
Todas as Tabelas so referenciadas pelo seu nome.

#59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

DB2 um DBMS Relacional

SISTEMA DE GERENCIA DE BANCO DE DADOS

Integridade e Segurana de Dados


Recuperao e Reinicio Integrados
Definio Dinmica
Operao Contnua

Modelo de Dados
Relacional
- Os dados vistos
como Tabelas
- Projeto mais fcil

#59585

Linguagem SQL

- Definio
Manipulao e
Controle de dados

DB2 - CONCEITOS E UTILIZAO

19/11/98

AMBIENTE DB2

IMS TM

CICS

Qmf/Spffi

BATCH

DPROP
IMS DM

DB2
DXT

Notas:
DB2 pode ser acessado atravs do IMS, CICS, TSO e jobs BATCH
simultaneamente.
Dados que estiverem em IMS/DM (Antigo IMS/DB) podem ser
transferidos para o DB2 atravs do DPROP (Data Propagador) ou o DXT
(Data Extract).

#59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

OBJETOS DO DB2

DATA BASE
Tablespace1
Indice1

Tabela1

Tablespace2
Indice2

Tabela2
View X

Storage Group A

#59585

Storage Group B

DB2 - CONCEITOS E UTILIZAO

19/11/98

OBJETOS DO B2
Notas:
DATABASE
Conjunto de tabelas, ndices e tablespaces agrupados sob um critrio
administrativo.

TABLE (Tabelas)
Conjunto de linhas com as mesmas colunas. Representam uma entidade
de um modelo entidade-relacionamento.

TABLESPACE
Conjunto de datasets VSAM LDS (Linear Data Sets) que contem de
uma ou mais tabelas. Suas paginas podem ser de 4K ou 32K. Existem
trs tipos de tablespaces:
SIMPLES
As pginas de seus data sets podem conter dados de uma ou
mais tabelas.
SEGMENTADO
dividido em segmentos que so constitudo de 4 a 64 pginas e
sempre mltiplos de 4. Cada segmento s pode conter dados de
uma tabela.
PARTICIONADO
Recomendado para tabelas gigantes. Pode ser dividido em at 64
parties. Cada partio pode ter no mximo 4Gbytes. Requer um
ndice CLUSTER que serve de filtro para determinar a
distribuio das linhas entre as parties.
NDICE
Utilizado para agilizar a leitura de dados ou para garantir a unicidade
dos dados.
Existem trs tipos de ndices:
UNIQUE
Fora a unicidade dos dados atravs dos valores de uma coluna
escolhida como chave primaria.

#59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

OBJETOS DO B2 (Continuao)

CLUSTER
A seqncia fsica das linhas procura obedecer a seqncia das
entradas do ndice. Existem utilitrios que reorganizam um
tablespace atravs do ndice CLUSTER de suas tabelas.

NORMAL

VIEW
uma tabela lgica que um subconjunto de uma ou mais tabelas. Sua
utilizao m nada difere com a de uma tabela. Conforme o caso uma
View pode ser somente para leitura
STORAGE GROUP
um conjunto de volumes(discos) onde estaro os tablespaces e
ndices. Os discos devem ser do mesmo device type.
A utilizao do Storage Group nos poupa ca codificao do AMS de
VSAM para definir os data sets de um tablespace.
Os discos de um Storage Group no precisam ser dedicados ao DB2.

SYNONYM (Sinnimo)
um nome alternativo (Apelido) para uma tabela ou uma VIEW. Uma
vez criado, a sua utilizao restrita a um AUTH-ID e vlido a nvel
de um subsistema DB2.

ALIAS
um nome alternativo(Apelido) para uma tabela ou VIEW. Um alias
de uso compartilhado ao contrario do SYNONYM. utilizado mais
como apelido para uma tabela remota e vlido a nvel de um
subsistema DB2.

#59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

ENTIDADE RELACIONAMENTO

Modelo
E R

DB2

Notas:
Uma vez construdo o modelo entidade relacionamento, passamos fase de
implementao em DB2.
Basicamente temos uma tabela para cada entidade do modelo. Existem
casos (relacionamento m:m) em que precisaremos trabalhar com tabelas
adicionais.
Para cada atributo de uma entidade temos uma coluna na tabela
correspondente. Uma coluna tem algumas caractersticas tais como tipo
de dado, para definir se o contedo numrico ou alfanumrico.
A distribuio de tabelas entre os tablespace tambm deve seguir alguns
critrios tais como tamanho das tabelas, afinidade entre as tabelas, etc.

10 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

RELACIONAMENTO
Chave
Primria

Chave
Estrangeira

Matr

Nome

Depto

419
003

Maria
Carlos

A00
Z13

EMPR

Carlos
Trabalha
na Reserva
Operador
Relacional

DeptoCod
Z13
A00

DeptoNome

DEPT

Reserva
Vendas

Notas:
Para mapearmos um relacionamento entre duas entidades de um modelo
relacional precisamos conhecer o conceito de chaves.
Chave primria: Identifica uma ocorrncia de uma entidade (Tabela)
Chave estrangeira: Identifica uma associao entre as ocorrncias
de duas tabelas. Como o valor representado chave primria na outra
entidade, a chamamos de chave Estrangeira.
Conceito de chave primria e chave estrangeira esto implementados no
DB2, mas a suas utilizao no obrigatria.
A chave estrangeira deve pertencer ao mesmo domnio da chave primria a
qual esta associada. Ex.: No poderamos associar a coluna NOME de
EMPR com a coluna DeptoCod da DEPT.
A associao lgica entre as ocorrncias das entidades feita atravs das
chaves primrias e estrangeiras que sero argumento de um operador
relacional.

#59585

11

DB2 - CONCEITOS E UTILIZAO

19/11/98

TIPOS DE RELACIONAMETO

1 PARA MUITOS
Colocar a chave estrangeira aqui

EMPREGADO
Carlos
Paulo
Maria

M:1

DEPARTAMENTO
Reserva
Vendas
DEPTO

Chave
Primria

DeptoCod

DeptoNome

Z13Reserva
A00
Vendas
:
:

EMPREGADO
Matr

Nome

Dept

419
003
087
:

Maria
Carlos
Paulo
:

A00
Z13
Z13
:

12 #59585

Chave
Estrangeira

DB2 - CONCEITOS E UTILIZAO

19/11/98

TIPOS DE RELACIONAMENTO
Notas:
Em um relacionamento do tipo um para muitos, qualquer ocorrncia de uma
entidade pode estar associada vrias ocorrncias da outra entidade,
enquanto qualquer ocorrncia desta outra deve estar associada apenas
uma ocorrncia da outra.
Neste caso devemos colocar a chave estrangeira na tabela em que cada
ocorrncia s enxerga uma ocorrncia da tabela oposta.
Caso contrrio deveramos colocar vrias chaves estrangeiras na tabela
oposta. No nosso exemplo, se um determinado departamento tiver 30
empregados, a tabela DEPT deveria ter no mnimo 30 chaves estrangeiras!
Podemos tambm imaginar uma situao onde um departamento da
companhia resolve triplicar o nmero de empregados.

#59585

13

DB2 - CONCEITOS E UTILIZAO

19/11/98

TIPOS DE RELACIONAMENTO

MUITOS PARA MUITOS


EMPREGADO
Carlos
Paulo
Maria

M:M

PROJETO
Ano 2.000
Qualidade

Onde colocar a chave estrangeira ?


Chave Primria

Matr
419
003
087

EMPREGADO
Nome
Maria
Carlos
Paulo

Chave
Estrangeira

Mat
003
087
:
419
:
419

EMP-PROJ
Cod
A2
A2
:
A2
:
QD

Chave
Estrangeira

Chave Primria

PROJETO

Pcod PNome
A2
Projeto 2.000
QD Qualidade

TABELA DE ASSOCIAO
Notas:
Em um relacionamento do tipo muitos para muitos, qualquer ocorrncia de
ambas as entidades pode estar associada vrias ocorrncias da entidade
oposta.
Neste caso, ao invs de se criar vrias chaves estrangeiras, criamos uma
tabela de associao que contm pelo menos duas chaves estrangeiras
apontando para as chaves primrias das tabelas associadas.
Nada impede que uma tabela de associao tenha colunas que no sejam
chaves estrangeiras.

14 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

INTEGRIDADE DE REFERENCIA

EMPR

DEPT

(Dependet)

(Parent)

Matr
419
003
:

Nome
Maria
Carlos
:

Depto
A00
Z13
:

Dcod
A00
V75
Z13
:

Dnome
Vendas
Contabilidade
Reserva
:

Integridade
Referencial

Notas:
A Integridade de referncia garante que qualquer valor apontado pela
chave estrangeira tenha um valor correspondente na chave primria qual
est associada.
A Integridade de Referncia implementado no DB2 via DDL (Instrues
de definio de objetos da linguagem SQL).
No DB2 a Integridade de Referncia obedece s seguintes regras:
Uma chave primria tem valor nico e no nulo
Uma chave estrangeira nula ou tem valor correspondente na chave
primria.
Tanto na insero como na atualizao de linhas, o DB2 fora a
observao destas regras.

#59585

15

DB2 - CONCEITOS E UTILIZAO

19/11/98

INTEGRIDADE DE REFERENCIA (Continuao).


Todas as tabelas associadas entre si via regra de Integridade de
Referncia formam um conjunto chamado de ESTRUTURA
REFERENCIAL ou REFERENTIAL STRUCTURE.
Uma tabela com chave primria definida chamada de Parent Table ou
tabela Me.
Uma table com chave estrangeira definida chamada de Dependent
Table ou tabela Dependente.
Uma linha de uma Parent Table chamada Parent Row ou linha Me se
existir pelo menos uma linha na tabela dependente com chave
estrangeira correspondente sua chave primria.
Uma linha de uma Dependent Table chamada de Dependent Row ou
linha Dependente se existir uma linha Me com valor de chave primria
correspondente da sua chave estrangeira. Em outras palavras a chave
estrangeira no deve ter valor nulo para ser uma linha dependente.
Na eliminao de uma linha da tabela me, pode ocorrer situaes
conforme a regra de deleo estabelecida pela chave estrangeira.

CASCADE : Regra onde todas as linhas dependentes so


eliminadas juntamente com a me.

SET NULL : Regra onde todas as chaves estrangeiras das


linhas dependentes so atualizadas com valor nulo aps a eliminao
da me.

RESTRICT : Regra onde a eliminao da linha me


impedida. Neste caso somente as linhas que no so mes podem ser
eliminadas.

16 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

LINGUAGEM SQL

SQL
STRUCTURED
QUERY
LANGUAGE

SELECT
UPDATE
DELETE
INSERT

CREATE
ALTER
DROP

DML

GRANT
REVOKE
COMMIT
ROLLBACK

DDL

CONTROL

Notas:
A Linguagem SQL pode ser separada em trs grupos:
DML
Data Manipulation Language, utilizado para fazer pesquisas e
atualizaes nas tabelas DB2.
DDL
Data Definition Language, utilizado para definir, alterar e
eliminar objetos DB2.
CONTROL
Utilizado para administrar a segurana dos recursos DB2.

#59585

17

DB2 - CONCEITOS E UTILIZAO

19/11/98

INSTRUO SELECT

No procedural
Conceito da teoria os conjuntos
Fcil

Notas:
A instruo SELECT no procedural. Em outras palavras no precisamos
fornecer todos os procedimentos necessrios para fazer uma pesquisa tais
como:
1.
2.
3.
4.
5.
6.

Zere o contador
Abra o arquivo
Leia um registro
Verifique se satisfaz o critrio de pesquisa
Incremente o contador
etc.

Com a instruo SELECT basta dizer:


1. QUERO OS DADOS QUE SATISFAZEM A CONDIO X.
SELECT trabalha com conjuntos e permite a execuo de
operadores elementares que nos so familiares.
Quem j no ouviu falar dos operadores unio e interseco?
Com uma instruo SQL podemos implementar os seguintes
operadores:
A
B
UNIO
AUB
A

INTERSECO

AB
A

DIFERENA

PRODUTO
CARTESIANO

18 #59585

A-B

A X B

= { (x, y) : x A e y B}

DB2 - CONCEITOS E UTILIZAO

19/11/98

TABELAS USADAS NOS EXEMPLOS


x.staff
ID
NOME
DEPT
CARGO
ANOS SALARIO COMIS
10 SANTANA
20
GER
7
18357.50
20 ORSINI
20
VENDAS
8
18171.25
612.45
30 DANTAS
38
GER
5
17506.75
40 OBRIEN
38
VENDAS
6
18006.00
846.55
50 SOUZA
15
GER
10
20659.80
60 SUZUKI
38
VENDAS
16808.30
650.25
70 ALMEIDA
15
VENDAS
7
16502.83 1152.00
80 JAMES
20
ATEND
13504.60
128.20
90 KOONITZ
42
VENDAS
6
18001.75 1386.70
100 PLOTZ
42
GER
7
18352.80
110 NGAN
15
ATEND
5
12508.20
206.60
120 NAUGHTON
38
ATEND
12954.75
180.00
130 YAMAGUCHI
42
ATEND
6
10505.90
75.60
140 FRAYE
51
GER
6
21150.00
150 OLIVEIRA
51
VENDAS
6
19456.50
637.50
160 MOLINARI
10
GER
7
22959,20
170 KERMISCH
15
ATEND
4
12258.50
110.10
180 ABRAHAMS
38
ATEND
3
12009.75
236.50
190 SNEIDER
20
ATEND
8
14252.75
126.50
200 SCOUTTEN
42
ATEND
11508.60
84.20
210 LU
10
GER
10
20010.00
220 SMITH
51
VENDAS
7
17654.50
922.80
230 LUNDQUIST
51
ATEND
3
13369.80
189.65
240 DANIELS
10
GER
5
19260.25
250 WHEELER
51
ATEND
6
14460.00
513.30
260 JONES
10
GER
12
21234.00
270 LEA
66
GER
9
18555.50
280 WILSON
66
VENDAS
9
18674.50
811.50
290 PINHO
84
GER
10
19818.00
300 DAVIS
84
VENDAS
5
15454.50
806.10
310 GRAHAM
66
VENDAS
13
21000.00
200.30
320 GONZALES
66
VENDAS
4
16858.20
844.00
330 BURKE
66
ATEND
1
10988.00
55.50
340 VIEIRA
84
VENDAS
7
17844.00 1285.00
350 GAFNEY
84
ATEND
5
13030.50
188.00
TABELAS USADAS NOS EXEMPLOS (Continuao)
#59585

19

DB2 - CONCEITOS E UTILIZAO

19/11/98

x.org
DEPTCOD
10
15
20
38
42
51
66
84

20 #59585

DEPTNOME
MATRIZ
CAMPINAS
RIO
MINAS
BAHIA
RECIFE
RIO GRANDE
PARAN

GERENTE
160
50
10
30
100
140
270
290

DIVISO
CENTRO
SUDESTE
SUDESTE
SUDESTE
NORDESTE
NORDESTE
SUL
SUL

LOCAL
SO PAULO
CAMPINAS
RIO DE JANEIRO
B. HORIZONTE
SALVADOR
RECIFE
PORTO ALEGRE
CURITIBA

DB2 - CONCEITOS E UTILIZAO

19/11/98

QUERY
Sequncia obrigatria:
SELECT NOME, ANOS, SALARIO

- Diz quais as colunas mostrar

FROM x.staff

- Diz de quais tabelas

WHERE DEPT = 38

- Diz quais linhas selecionar

ORDER BY NOME

- Diz como ordenar o resultado

Notas:
As clusulas de uma instruo SELECT devem ser especificadas
obedecendo uma sequncia.
As clusulas esto grifadas na figura e no podem ser abreviadas.
No nosso exemplo estamos fazendo uma pesquisa na tabela chamada
x.staff para gerar um relatrio com o nome, tempo de casa e o salrio de
todos que trabalham no departamento de cdigo 38. O Resultado deve
ser classificado pelo nome os funcionrios.
Uma instruo SELECT pode ser escrita em formato livre desde que as
clusulas estejam obedecendo sequncia obrigatria, como descrito
abaixo:
SELECT NOME, ANOS, SALARIO FROM x.staff WHERE DEPT = 38
ORDER BY NOME

#59585

21

DB2 - CONCEITOS E UTILIZAO

19/11/98

SELECT ... FROM

SELECT algumas das colunas da tabela


Lista as colunas desejadas na sequncia de esquerda para a
direita
Vrgulas separam as colunas

FROM lista de tabelas


Simples: EMP
Qualificado: AUTHID.EMP

EXEMPLO
SELECT DEPTNOME, DEPTCOD
FROM x.org
Resultado:
DEPTNOME
MATRIZ
CAMPINAS
RIO
MINAS
:

22 #59585

DEPTCOD
10
15
20
38
:

DB2 - CONCEITOS E UTILIZAO

19/11/98

SELECT DE TODAS AS COLUNAS


Para selecionar todas as colunas de uma tabela na mesma sequncia em que
foram definidas:
SELECT * FROM x.org
Resultado:
DEPTCOD
10
15
20
38
:

#59585

DEPTNOME
MATRIZ
CAMPINAS
RIO
MINAS
:

GERENTE
160
50
10
30
:

DIVISO
CENTRO
SUDESTE
SUDESTE
SUDESTE
:

LOCAL
SO PAULO
CAMPINAS
RIO DE JANEIRO
B. HORIZONTE
:

23

DB2 - CONCEITOS E UTILIZAO

19/11/98

CONTROLE DE LINHAS
WHERE
Traz certas linhas
Estabelece condies
Listar empregados do departamento 20
SELECT DEPT, NOME, CARGO, COMIS
FROM x.staff
WHERE DEPT = 20
Resultado:
ID
10
20
80
190

NOME
SANTANA
ORSINI
JAMES
SNEIDER

DEPT
20
20
20
20

CARGO
GER
VENDAS
ATEND
ATEND

ANOS SALARIO COMIS


7
18357.50
8
18171.25
612.45
13504.60
128.20
8
14252.75
126.50

Selecionar linhas atravs de dado numrico


SELECT DEPT, NOME, CARGO
FROM x.staff
WHERE DEPT = 20

Selecionar linhas atravs de dado alfanumrico


SELECT NOME, CARGO, COMIS
FROM x.staff
WHERE NOME = SANTANA

24 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

OPERADORES DE COMPARAO
=
<> or =
>
>=
<
<=
=
>
<

Igual
Diferente
Maior
Maior ou Igual
Menor
Menor ou Igual
No Igual
No Maior
No Menor

SELECT MATR, COMIS


FROM x.staff
WHERE COMIS >= 1000
SELECT NOME, DEPT, ANOS
FROM x.staff
WHERE CARGO <> GER

#59585

25

DB2 - CONCEITOS E UTILIZAO

19/11/98

NULIDADE
Na insero de linha, uma coluna que :
NOT NULL
(ALLOW) NULL
Um valor NULO:

O valor deve ser fornecido


O valor pode ser omitido
No zero
No Branco
Desconhecido

NOT NULL WITH DEFAULT


Uma coluna pode ser Not Null With Default.
Aps a Verso 4 podemos atribuir um valor Default para a coluna quando
mesma omitida na incluso e se no atribuirmos este valor o sistema
atribui como:

Zero se coluna numrica

Branco se coluna definida como caracter

Comprimento zero se coluna definida como caracter de


tamanho varivel.

26 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

SELEO DE NULOS
Valor nulo como critrio de SELECT
SELECT NOME, CARGO, COMIS
FROM x.staff
WHERE COMIS IS NULL
Resultado:
NOME
SANTANA
DANTAS
SOUZA
PLOTZ
FRAYE
:

CARGO
GER
GER
GER
GER
GER
:

COMIS
:

Valor no nulo como critrio de SELECT


SELECT NOME, CARGO, COMIS
FROM x.staff
WHERE COMIS IS NOT NULL
Resultado:
NOME
ORSINI
OBRIEN
SUZUKI
ALMEIDA
JAMES
KOONITZ
NGAN
NAUGHTON
YAMAGUCHI
OLIVEIRA
KERMISCH
:

#59585

CARGO
VENDAS
VENDAS
VENDAS
VENDAS
ATEND
VENDAS
ATEND
ATEND
ATEND
VENDAS
ATEND
:

COMIS
612.45
846.55
650.25
1152.00
128.20
1386.70
206.60
180.00
75.60
637.50
110.10
:

27

DB2 - CONCEITOS E UTILIZAO

19/11/98

MTIPLAS CONDIES

Operadores mltiplos de condies: AND e OR


Dadas duas condies:
CARGO = VENDAS
SALARIO < 17000

Para ter ambas satisfeitas: AND


WHERE CARGO VENDAS AND SALARIO < 17000
Resultado:
NOME
SUZUKI
ALMEIDA
:

CARGO
VENDAS
VENDAS
:

SALARIO
16808.30
16502.83
:

Para ter qualquer uma satisfeitas: OR


WHERE CARGO VENDAS OR SALARIO < 17000
Resultado:
NOME
ORSINI
OBRIEN
SUZUKI
ALMEIDA
JAMES
:

28 #59585

CARGO
VENDAS
VENDAS
VENDAS
VENDAS
ATEND
:

SALARIO
18171.25
18006.00
16808.30
16502.83
13504.60
:

DB2 - CONCEITOS E UTILIZAO

19/11/98

MLTIPLAS CONDIES (Continuao)


WHERE (CARGO = VENDAS AND COMIS > 1200)
OR ANOS > 10
Resultados:
NOME
KOONITZ
JONES
GRAHAM
VIEIRA
:
:

CARGO
VENDAS
GER
VENDAS
VENDAS
:
:

ANOS COMIS
6
1386.70
12
13
200.30
7
1285.00
:
:
:
:

No equivale a:
WHERE CARGO = VENDAS AND (COMIS > 1200 OR ANOS > 10)

Resultados:
NOME
KOONITZ
GRAHAM
VIEIRA

#59585

CARGO
VENDAS
VENDAS
VENDAS

ANOS COMIS
6
1386.70
13
200.30
7
1285.00

29

DB2 - CONCEITOS E UTILIZAO

19/11/98

IN

Valor deve coincidir com algum elemento de uma lista


WHERE DEPT IN ( 38, 20, 42)
Equivale a mltiplos Ors para a mesma coluna:
WHERE DEPT = 38 OR DEPT = 20 OR DEPT = 42

Valor deve ser diferente de algum elemento da lista


WHERE DEPT NOT IN ( 38, 20, 42)

BETWEEN

Para selecionar um intervalo fechado de valores


SELECT NOME, CARGO, ANOS
FROM x.staff
WHERE ANOS BETWEEN 9 AND 11
Equivale a
SELECT NOME, CARGO, ANOS
FROM x.staff
WHERE ANOS >= 9 AND ANOS <=11

Resultado:
NOME
SOUZA
LU
LEA
WILSON
PINHO

CARGO
GER
GER
GER
VENDAS
GER

ANOS
10
10
9
9
10

Para selecionar um intervalo diferente de valores


SELECT NOME, CARGO. ANOS
FROM x.staff
WHERE ANOS NOT BETWEEN 9 AND 11

30 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

PESQUISAS PARCIAIS

Para pesquisar um subconjunto de caracteres : LIKE


% Conjunto de caracteres quaisquer
_ Um caracter qualquer

EXEMPLOS:
WHERE NOME LIKE G%

Inclui:

WHERE NOME LIKE %SON

Inclui:

WHERE NOME LIKE %M%N% Inclui:


WHERE NOME LIKE _ _
WHERE NOME LIKE _R%

Inclui:
Inclui:

GRAHAM
GONZALES
GAFNEY
WILSON
JASON
SAMANTA
MOLINARI
LU
FRAYE
GRAHAM

O operadores ESCAPE permite que seja utilizado outro caracter no


lugar do %.
Exemplo:
... WHERE coluna LIKE 100+%% ESCAPE +
Notas:
No exemplo estamos procurando strings que comeam por 100%.
Primeiro % interpretado como um caracter comum pois precedido pelo
caracter + que foi definido atravs do operador ESCAPE.
Segundo % interpretado como um conjunto de caracteres quaisquer
pois no precedido por nenhum caracter de ESCAPE.
Neste exemplo, quaisquer ocorrncia do + que no sejam ++, +% ou +_
provoca erro.

#59585

31

DB2 - CONCEITOS E UTILIZAO

19/11/98

NEGAO

Para reverter o teste:


WHERE NOME NOT LIKE G%
Exclui:

GRAHAM, GONZALES, GAFNEY.

WHERE ANOS NOT BETWEEN 9 AND 11


Exclui:

ANOS de 9 a 11

USER
Registro Especial

Authorization ID do tempo de execuo


Comprimento fixo de 8 bytes
til para query dependente de executor
SELECT *
FROM SYSIBM.SYSTABLES
WHERE OWNER = USER

32 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

MANIPULANDO TABELA RESULTANTE


Para classificar as linhas: ORDER BY

Para eliminar linhas duplicadas: SELECT DISTINCT

ORDER BY

Para classificar numa sequncia especifica:


Lista classificada do pessoal do depto 84
SELECT NOME, CARGO, ANOS
FROM x.staff
WHERE DEPT = 84
ORDER BY NOME

Resultado:
NOME
DAVIS
GAFNEY
PINHO
VIEIRA

CARGO
VENDAS
ATEND
GER
VENDAS

ANOS
5
5
10
7

Notas:
Colunas classificadas devem ser referenciadas pelo SELECT
Nulos so considerados como valor mais alto.
Podemos especificar colunas para o ORDER BY fornecendo um nmero que
indica a posio da mesma coluna na clusula SELECT. O ORDER BY o
nico que permite isto.
A clusulas ORDER BY classifica uma tabela resultante. Logo deve ser
SEMPRE a nica e a ltima a aparecer numa instruo SELECT.

#59585

33

DB2 - CONCEITOS E UTILIZAO

19/11/98

ORDER BY (Continuao)
Para classificar pelas coluna(s) em ordem ASCendente (default) ou
DESCendente.
SELECT NOME, CARGO, ANOS
FROM x.staff
WHERE DEPT = 84
ORDER BY CARGO, ANOS DESC
Resultado:
NOME
GAFNEY
PINHO
VIEIRA
DAVIS

CARGO
ATEND
GER
VENDAS
VENDAS

ANOS
5
10
7
5

ORDER BY ANOS DESC, CARGO


Resultado:
NOME
PINHO
VIEIRA
GAFNEY
DAVIS

34 #59585

CARGO
GER
VENDAS
ATEND
VENDAS

ANOS
10
7
5
5

DB2 - CONCEITOS E UTILIZAO

19/11/98

SELECT DISTINCT
SELECT DEPT FROM x.staff
DEPT
20
20
38
38
15
38
10
.
.

Para eliminar linhas duplicadas:


SELECT DISTINCT DEPT FROM x.staff
DEPT
20
15
20
38
.

Mltiplas colunas
SELECT DISTINCT DEPT, CARGO FROM x.staff
DEPT CARGO
10 GER
15 ATEND
15 GER
15 VENDAS
20 ATEND
20 GER
20 VENDAS
38 ATEND
: :
SELECT DISTINCT (Continuao)
#59585

35

DB2 - CONCEITOS E UTILIZAO

19/11/98

Notas:

A Palavra chave DISTINCT deve aparecer logo depois do SELECT.

Classificao ocorre pelas colunas da esquerda para a direita.

ORDER BY pode ser usada para controlar a classificao.

EXEMPLO:
SELECT DISTINCT DEPT, CARGO
FROM x.staff
ORDER BY CARGO
DEPT
15
20
38
.
.
10
15
20
.
.
.
15
20
.
.
.

36 #59585

CARGO
ATEND
ATEND
ATEND
.
.
GER
GER
GER
.
.
.
VENDAS
VENDAS
.
.
.

DB2 - CONCEITOS E UTILIZAO

19/11/98

SELECT DE VALORES CALCULADOS


+ SOMA
- SUBTRAO

* MULTIPLICAO
/ DIVISO

Ganho total de cada pessoa do DEPT 20


SELECT ID, SALARIO, COMIS, SALARIO + COMIS AS TOTAL
FROM x.staff
WHERE DEPT = 20
Resultado:
ID
10
20
80
190

SALARIO
18357.50
18171.25
13504.60
14252.75

COMIS
612.45
128.20
126.50

TOTAL
18783.70
13632.80
14379.25

Pessoas cujo salrio mais comisso excede R$ 20.000


SELECT NOME, SALARIO + COMIS AS TOTAL
FROM x.staff
WHERE SALARIO + COMIS > 20000
Resultado:
NOME
OLIVEIRA
GRAHAM

#59585

TOTAL
20094.15
21200.30

37

DB2 - CONCEITOS E UTILIZAO


ORDER BY POR VALOR CALCULADO
Exemplo 1:
SELECT NOME, SALARIO + COMIS
FROM x.staff
WHERE SALARIO + COMIS > 20000
ORDER BY 2 DESC
Resultado:
NOME
GRAHAM
OLIVEIRA

TOTAL
21200.30
20094.15

Exemplo 2:
SELECT CARGO, SALARIO + COMIS
FROM x.staff
ORDER BY CARGO, 2

38 #59585

19/11/98

DB2 - CONCEITOS E UTILIZAO

19/11/98

OPERADORES DE CONCATENAO
string1 || string2

string1string2

ABC || XYZ

ABCXYZ

TABELAX ( colunas varchar : SNOM e NOME )


SNOM
JONES
MARQUES
.

NOME
JOHN
FRANCO
.

MID
P
X
.

SELECT SNOM || , || NOME|| || MID || .


FROM TABELAX
Resultado:
JONES,JOHN P.
MARQUES,FRANCO X.
.
.
.

#59585

39

DB2 - CONCEITOS E UTILIZAO

19/11/98

SELECT AVANADO
FUNES DE COLUNA
Transforma dados de uma coluna em um nico valor.

Dados numricos
SUM Total dos valores de uma coluna
AVG Mdia dos valores de uma coluna

Quaisquer tipos de dados


MIN Menor valor de uma coluna
MAX Maior valor de uma coluna
COUNT
Nmero de ocorrncias

Notas:
Informaes detalhadas no podem ser mostradas. Por exemplo, se
for pedida a mdia salarial por departamento, os valores da coluna
NOME no podem ser mostrados.

Nulos so ignorados nos clculos.

40 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

SUM AVG MAX MIN

Exemplo:
SELECT SUM(SALARIO), AVG(SALARIO),
MIN(COMIS), MAX(COMIS)
FROM x.staff
WHERE DEPT = 66
Resultado:
86076.20

17215.24

55.50

844.00

Notas:
Geram um nico valor a partir de um conjunto de valores de uma
nica coluna.
O resultado no contm detalhes de linhas individuais.
Podem ser pedidas mais de um funo para a mesma coluna,
conforme o exemplo.
Nulos so excludos.
Preciso (parte inteira, casa decimal) deriva da coluna.
Para a funo AVG de uma coluna DECIMAL(p,s) o resultado ter
preciso.
Expresses do seguinte tipo tambm podem ser argumento de uma
funo de coluna.
Exemplo:

#59585

AVG(SALARIO + COMIS)

41

DB2 - CONCEITOS E UTILIZAO

19/11/98

COUNT
COUNT(*)

Nmero de linhas que satisfazem a condio WHERE

COUNT(DISTINCT coluna)

Nmero de valores diferentes na coluna


Nulos no so contados.

Contar as pessoas cujo salrio exceda $ 18.000 e contar os seus


respectivos departamentos. Mostre a mdia salarial.
SELECT COUNT(DISTINCT DEPT), COUNT(*), AVG(SALARIO)
FROM x.staff
WHERE SALARIO > 18000
Resultado:
8

16

19604.190625

SELECT AVG(COMIS), SUM(COMIS) FROM x.staff


Resultado:
513.31

12319.45

LITERAIS
SELECT MED: AVG(COMIS), SOMA: SUM(COMIS)
FROM x.staff
Resultado:
MED:

513.31 SOMA:

12319.45

Notas:
Literais podem ser mostradas no resultado de um SELECT
So Particularmente teis quando usadas com funes de coluna que
no exibem cabealhos.
GROUP BY
42 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

Com o GROUP BY, a funo de coluna calcula um valor para cada


AGRUPAMENTO.
SELECT DEPT, SUM(SALARIO) as TOTSAL,
SUM(COMIS) as TOTCOM
FROM x.staff
WHERE CARGO <> GER
GROUP BY DEPT
Resultado:
DEPT
15
20
38
:

TOTSAL
41269.53
45928.60
59778.80
:

TOTCOM
1468,70
867.15
1913.30
:

Notas:
A Funo desta clusula mostrar informaes calculadas por
grupo de dados.
Note que o resultado classificado.
Isto porque o GROUP BY classifica a tabela numa fase
intermediria para facilitar o clculo para os grupos.
A classificao se d em ordem ascendente a menos que exista um
ndice definido para a coluna. Neste caso a classificao no feita.
A sequncia obedecer a sequncia do ndice que pode estar
definida como sendo de ordem descendente.

#59585

43

DB2 - CONCEITOS E UTILIZAO

19/11/98

GROUP BY ... ORDER BY

Podemos alterar a ordem de classificao


SELECT DEPT, SUM(SALARIO) AS TOTSAL,
SUM(COMIS) AS TOTCOM
FROM x.staff
WHERE CARGO <> GER
GROUP BY DEPT
ORDER BY 3

Resultado:
DEPT
20
.
15
.
38

TOTSAL
45928.60
.
41269.53
.
59778.80

TOTCOM
867.15
.
1468.70
.
1913.30

Notas:
Podemos fazer GROUP BY sobre mltiplas colunas. Isto faz com que sejam
formados subgrupos dentro de grupos.

GROUP BY DEPT, CARGO


Colunas GROUP BY no precisam ser referenciadas pelo SELECT.
Mas colunas referenciadas pelo SELECT que no sejam funo
precisam ser agrupadas pelo GROUP BY. Isto um erro muito
frequente.
Resultado contm uma linha sumrio para cada grupo.
Todos os valores nulos so considerados como um grupo.

44 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

GROUP BY ... HAVING

Condies sobre grupos


SELECT . . .
WHERE . . .

FROM . . .

GROUP BY . . .
HAVING . . .

WHERE
HAVING

FILTROS

- Escolhe linhas
- Escolhe grupos

SELECT DEPT, SUM(SALARIO) AS TOTSAL


FROM x.staff
GROUP BY DEPT
DEPT
10
15
20
38
42
:

TOTSAL
83463.45
61929.33
64286.10
77285.55
58369.05
:

SELECT DEPT, SUM(SALARIO) AS TOTSAL


FROM x.staff
GROUP BY DEPT
HAVING SUM(SALARIO) > 65000
DEPT
10
38
:

#59585

TOTSAL
83463.45
77285.55
:

45

DB2 - CONCEITOS E UTILIZAO

19/11/98

EXEMPLOS DE HAVING(Continuao)

Mdia salarial por departamento. Considerar apenas os no-gerentes dos


departamentos com mais de 3 pessoas sem cargo gerencial.
SELECT DEPT, AVG(SALARIO) AS MEDIASAL
FROM x.staff
WHERE CARGO <> GER
HAVING COUNT(*) > 3
Mdia salarial por departamento em ordem decrescente de mdia.
Considerar apenas os no-gerentes dos departamentos compostos por
pessoas com experincia mnima de 5 anos.

SELECT DEPT, AVG(SALARIO) AS MEDIASAL


FROM x.staff
WHERE CARGO <> GER
GROUP BY DEPT
HAVING MIN(ANOS) >= 5
ORDER BY 2 DESC

Notas:
Primeiro exemplo mostra que o SELECT e o HAVING podem usar
funes diferentes.
O Segundo exemplo ilustra que a tabela resultante pode ser
classificada.

46 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

SUMRIO FUNES DE COLUNA

Funes de colunas s podem ser especificados em:


SELECT
HAVING

SELECT pode especificar somente:


Funo de Colunas
Colunas especificadas no GROUP BY

HAVING pode especificar:


Funo de colunas sobre qualquer coluna contida numa tabela
especificada na FROM.

Funes de Colunas no podem ser embutidas uma dentro da outra

FUNES ESCALARES

Transforma um nico valor em outro valor.

Funes STRING
Funes de converso
Funes DATE/TIME

Notas:
Ao contrrio das Funes de colunas que transformam um conjunto
de valores de uma coluna num nico valor, as funes Escalares operam
somente sobre um nico valor.
Funes escalares podem ser embutidas uma dentro da outra.
Exemplo:
SUBSTR(SUBSTR(...)...)
Funes de colunas podem ser argumento de uma funo escalar.
Exemplo:
MAX(SUBSTR(...))

#59585

47

DB2 - CONCEITOS E UTILIZAO

19/11/98

SUBSTR(string, incio, comprimento)


SELECT DEPTNOME, SUBSTR(DEPTNOME,1,4) as NOMEPARC
FROM x.org
Resultado:
DEPTNOME
MATRIZ
CAMPINAS
RIO
MINAS
BAHIA
.

NOMEPARC
MATR
CAMP
RIO
MINA
BAHI
.

SELECT DEPTCOD, DIVISO


FROM x.org
WHERE SUBSTR(DIVISO,4) = ESTE

Resultado:
DEPTCOD
15
20
38

DIVISO
SUDESTE
SUDESTE
SUDESTE

Notas:
Se o Comprimento no for especificado, a funo pega todo o resto.
Se a posio do incio ultrapassar o final do string teremos erro.
Se o incio + comprimento ultrapassar o final do string teremos
erro.
Substring de nulo nulo.

48 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

LENGTH

SELECT NOME, LENGTH(NOME) AS TAMNOME,


CARGO, LENGTH(CARGO) AS TAMCAR
FROM x.staff

Resultado:
NOME
SANTANA
ORSINI
GONZALES
.

TAMNOME CARGO
7 GER
6 VENDAS
8 VENDAS
.
.

TAMCAR
6
6
6
.

Notas:

Fornece o tamanho de uma coluna do tipo caracter.


Se o argumento nulo, o resultado tambm ser nulo.

#59585

49

DB2 - CONCEITOS E UTILIZAO

19/11/98

VALUE

Dada uma lista de argumentos, mostra o primeiro no nulo


SELECT ID, COMIS, VALUE(COMIS, 0)
FROM x.staff

Resultado:
ID

COMIS
10
20
30
.

612.45
.

0.00
612.45
0.00
.

Notas:
Dada uma lista de argumentos, esta funo faz a varredura da
esquerda para a direita at encontrar o primeiro valor no nulo.
Todos os argumentos devem ter data types comparveis (todos
numricos ou todos caracteres).
Se todos argumentos forem nulos, o resultado ser nulo.

50 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

FUNES DE CONVERSO

Converte um tipo de representao em outro.


DECIMAL, FLOAT, INTEGER
DIGITS
HEX

Nmero - Nmero
Nmero - Alfa
Hexadecimal - Alfa

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


FROM EMP
WHERE ID = 55
Se coluna SAL (DEC (7,2)):
17506.75

17506.7

17506

Notas:
DECIMAL, FLOAT, INTEGER: Converte dados numricos
DIGITS: Representao alfanumrica de um valor numrico
HEX: Representao hexadecimal de um argumento. Cada digito
hexadecimal representada por 2 caracteres do string resultante.

#59585

51

DB2 - CONCEITOS E UTILIZAO

19/11/98

DADOS DATE/TIME
DATE, TIME, TIMESTAMP armazenados como decimal compactado
sem sinal
Data Types
DATE
TIME
TIMESTAMP

Formato Interno
aaaammdd
hhmmss
aaaammddhhmmssnnnnnn

Programas lidam s com FORMATO EXTERNO: string de


caracteres
Formato
ISO
USA
EUR
JIS

52 #59585

Formato TIME
hh.mm.ss
hh.mm AM/PM
hh.mm.ss
hh:mm:ss

Tamanho
8 bytes
8 bytes
8 bytes
8 bytes

Formato Date
aaaa-mm-dd
mm/dd/aaaa
dd.mm.aaaa
aaaa.mm.dd

Tamanho
10 bytes
10 bytes
10 bytes
10 bytes

DB2 - CONCEITOS E UTILIZAO

19/11/98

ARITMTICA DATE/TIME

Somente adio e subtrao


Pode usar MIN, MAX, COUNT
No pode usar SUM e AVG

DURACAO DATE/TIME

DURAO SIMPLES
Horrio + ou - Horrio
data + ou - data

Durao em hhmmss
(packed decimal(8,0))
Durao em aaaammdd
(packed decimal(8,0))

Durao Rotulada
Nmero n seguida da palavra chave:
YEARS, MONTHS, DAYS, HOURS, MINUTES, SECONDS,
MICROSECONDS

Somando/Subtraindo durao
DATACOL1 + 3 MONTHS
Resulta em Data
TEMPCOL1 - 30 MINUTES - 20 SECONDS Resulta em tempo
TSTCOL + 2 DAYS - 3 HOURS
TMSTCOL + 50000 MICROSECONDS

Subtraindo datas e tempos


DATACOL1 - DATACOL2
DATACOL1 - 25.12.1998
TEMPCOL1 - TEMPCOL2
TEMPCOL1 - 11.30.00

#59585

53

DB2 - CONCEITOS E UTILIZAO

19/11/98

EXEMPLOS ARITMTICA DATE/TIME

Tabela DT
PROJCOD
AX001
AX002
AX003

DATAINI
DATAFIM
HRINI
HRFIM
31.01.1990
31.03.2005
00:00:00
15:30:00
29.02.1988
31.08.1988
00:00:00
00:00:00
01.02.1987
01.02.1987
16:00:00
23:41:59

SELECT PROJCOD, DATAINI + 1 YEAR AS DATAINI,


DATAFIM - 2 MONTHS AS DATAFIM ...

Resultado:
PROJCOD
AX001
AX002
AX003

DATAINI
DATAFIM
31.01.1991
31.01.2005
28.02.1989
30.06.1988
01.02.1988
01.12.1986

SELECT PROJCOD, DATAFIM - DATAINI AS aaaammdd,


HRFIM - HRINI AS hhmmss ...

Resultado:
PROJCOD
AX001
AX002
AX003

54 #59585

aaaammdd
00150200
00000602
00000000

hhmmss
153000
000000
074159

DB2 - CONCEITOS E UTILIZAO

19/11/98

FUNES ESCALARES DATE/TIME


CHAR: Controla formato externo de dados DATE/TIME
SELECT CHAR(HRFIM,ISO) AS HR_ISO,
CHAR(HRFIM,USA) AS HR_USA
FROM DT
WHERE PROJCOD = AX001
Resultado:
HR_ISO
15.30.00

HR_USA
03:30 PM

DAY, MONTH, YEAR


HOURS, MINUTE, SECOND
MICROSECOND
Extrai parte de uma data, horrio ou timestamp
Resulta num inteiro binrio.
SELECT DAY(DATAINI) AS DIA, MONTH(DATAINI) AS MS,
YEAR(DATAINI) AS ANO FROM DT
WHERE YEAR(DATAINI) > 1988

Resultado:
DIA
31

#59585

MS
1

ANO
1990

55

DB2 - CONCEITOS E UTILIZAO

19/11/98

FUNES ESCALARES DATE/TIME(Continuao)


DAYS

Nmero de dias desde 31/01/0000

SELECT DATAFIM - DATAIN AS DATAS, DAYS(DATAFIM) DAYS(DATAIN) AS NU_DIAS FROM DT


WHERE PROJCOD = AX001
Resultado:
DATAS
00150228
aaaammdd

NU_DIAS
5538
(n. dias)

DATE, TIME
Extrai data ou horrio de um timestamp.

CURRENT DATE
Data de hoje
CURRENT TIME
Horrio do momento.
CURRENT TIMESTAMP
Data e horrio do momento convertido para Timestamp.

56 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

JOIN DE TABELAS
Mesmo domnio

ID
10
20
30
40
50
60
70
80
90
100
.

NOME
SANTANA
ORSINI
DANTAS
OBRIEN
SOUZA
SUZUKI
ALMEIDA
JAMES
KOONITZ
PLOTZ
.

DEPT
20
20
38
38
15
38
15
20
42
42
.

DEPTCOD
10
15
20
38
42
51

DEPTNOME
MATRIZ
CAMPINAS
RIO
MINAS
BAHIA
RECIFE

GERENTE
160
50
10
30
100
140

Esta tcnica serve para obtermos informaes que esto


espalhadas em uma ou mais tabelas.
Tabelas so relacionadas via dados comuns
Join implementado pelas clusulas FROM
Resultado um subconjunto do produto cartesiano das tabelas.

#59585

57

DB2 - CONCEITOS E UTILIZAO

19/11/98

JOIN DE TABELAS(Continuao)

Listar o nome dos departamentos e seus respectivos gerentes.


SELECT DEPTNOME, NOME
FROM x.staff, x.org
WHERE GERENTE = ID

Resultado:
DEPTNOME
RIO
MINAS
CAMPINAS
.

NOME
SANTANA
DANTAS
SOUZA
.

Listar o nome dos departamentos da diviso Sudeste e seus respectivos


gerentes.
SELECT DEPTNOME, NOME
FROM x.staff, x.org
WHERE DIVISAO = SUDESTE AND GERENTE = ID

ATENO:- Procure no fazer JOIN de tabelas sem a clusula WHERE.


SELECT A1, B1 FROM TBLA, TBLB Produto Cartesiano.

A1
A
B
C

A2

58 #59585

A3

R1
A
A
B
B
C
C

R2
X
Y
X
Y
X
Y

B1
X
Y

B2

B3

DB2 - CONCEITOS E UTILIZAO

19/11/98

JOIN COM MAIS DE DUAS TABELAS


SELECT ID, NOME, DEPT, DEPTNOME, CODPEDIDO
FROM x.staff, x.org, x.vendas
WHERE DEPT = DEPTCOD AND ID=COD_RVENDA
Resultado:
ID
20
20
20
20
40
.

COD
10
20
.

NOME
ORSINI
ORSINI
ORSINI
ORSINI
OBRIEN
.

DEPT
20
20
20
20
38
.

DEPTNOME
RIO
RIO
RIO
RIO
MINAS
.

CODPEDIDO
3456
6667
3580
7010
4567
.

QUALIFICADORES
NOME
SANTANA
ORSINI
.

DEPT
20
20
.

CARGO
GER
VENDA
.

COD
10
.
10

DEPTNOME
MATRIZ
.
RIO

GERENTE
160
.
10

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


departamentos.
SOLUO:

Qualificar com o nome da tabela


SELECT NOME, x.org.CODIGO, DEPTNOME
FROM x.staff, x.org
WHERE CARGO = GER AND DEPT = x.org.CODIGO

Qualificador correlacionado

SELECT NOME, Z.CODIGO, DEPTNOME


FROM x.staff, x.org Z
WHERE CARGO = GER AND DEPT = Z.CODIGO

#59585

59

DB2 - CONCEITOS E UTILIZAO

19/11/98

QUALIFICADORES
Notas:
Aqui neste exemplo temos um caso onde duas colunas de tabelas distintas
tem o mesmo nome.
A soluo para distingui-las qualificar o nome da coluna com o nome da
tabela.
Outra tcnica a utilizao do qualificador correlacionado onde
atribumos um rtulo tabela.
No nosso caso exemplo a tabela x.org foi rotulada como Z. Assim a
coluna Z.CODIGO uma referncia coluna x.org.CODIGO.
Esta rotulao no permanente e vale somente durante a execuo da
instruo SELECT que faz uso da mesma.

60 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

JOIN DE UMA TABELA COM ELA MESMA


Liste os empregados que ganham mais que os seus gerentes
CONCEITUALMENTE:
1.
Obter um empregado da VEMPR
MATR
NOME
...
SALARIO
150
OLIVEIRA
19456.50

...

GER
140

2.
Obter informaes do gerente da VEMPR
MATR
NOME
...
SALARIO
140
SANTANA
18357.50

...

GER
050

3.

Comparar o salrio dos dois

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

Soluo:
SELECT E.NOME, E.SALARIO, G.NOME, G.SALARIO
FROM VEMPR E, VEMPR G
WHERE E.GER = G.MATR AND E.SALARIO > G.SALARIO

Resultado:
NOME
OLIVEIRA
.
.

#59585

SALARIO
NOME
19456.50 SANTANA
.
.
.
.

SALARIO
18357.50
.
.

61

DB2 - CONCEITOS E UTILIZAO

19/11/98

INNER JOIN

Uma outra maneira de codificar o JOIN entre duas tabelas


SELECT DEPTNOME, NOME
FROM x.staff INNER JOIN x.org
ON GERENTE = ID

Resultado:
DEPTNOME
RIO
MINAS
CAMPINAS
.

NOME
SANTANA
DANTAS
SOUZA
.

Nota:
Quando utilizamos a clusulas JOIN deve mudar o predicado WHERE por
ON.

TABELAS EXEMPLOS:
EMPL
EMPNO
NOME
10 HAAS
150 ADAMSON
20 THOMPSON
250 SMITH
100 SPENSER
70 PILASKI
140 NATZ

62 #59585

DEPTO
DEPTNOME
SPIFFY COMPUTER
DEVELOPMENT
SOFTWARE
ADMINISTRATION
BRANCH OFFICE

CODEMP
10
100
700
-

DB2 - CONCEITOS E UTILIZAO

19/11/98

OUTER JOIN
Seleciona todas as linhas de um INNER JOIN mais as linhas no
selecionadas de ambas as tabelas.
RIGHT OUTER JOIN
Seleciona as linhas da tabela
direita.
LEFT OUTER JOIN
Seleciona as linhas da tabela
esquerda.
FULL OUTER JOIN
Seleciona as linhas de ambas as
tabelas.

SELECT NOME, DEPTNOME


FROM EMPL RIGHT OUTER JOIN DEPTO
ON EMPNO = CODEMP
SELECT NOME, DEPTNOME
FROM EMPL LEFT OUTER JOIN DEPTO
ON EMPNO = CODEMP
Resultados:
RIGHT OUTER JOIN
NOME
DEPTNOME
HAAS
SPENSER
PULASKI
-

#59585

SPIFFY COMPUTER
DEVELOPMENT
SOFTWARE
ADMINISTRATION
BRANCH OFFICE

LEFT OUTER JOIN


NOME
DEPTNOME
HAAS
ADAMSON
THOMPSON
SMITH
SPENSER
PULASKI
NATZ

SPIFFY COMPUTER
SOFTWARE
ADMINISTRATION
-

63

DB2 - CONCEITOS E UTILIZAO

19/11/98

EXPRESSES CASE
Em tempo de retorno do resultado da Query podemos atribuir
valores a serem mostrados/exibidos a determinados retornos, o
exemplo abaixo nos dar uma boa noo desta facilidade.
SELECT PARTNO, DESCRIPT, COLOR,
CASE WHEN SIZE = S THEN Small
WHEN SIZE = M THEN Medium
WHEN SIZE = L THEN Large
WHEN SIZE = X THEN Xlarge
ELSE DESCONHECIDO END AS SIZE, QTY
FROM QTY <= REORDER_PT

Resultado:
PARTNO
12-234
12-235
14-276

DESCRIPT
SWEATER
SWEATER
JACKET

COLOR
BLUE
RED
GREEN

SIZE
SMALL
MEDIUM
DESCONHECIDO

Mais Expresses CASE

Usando na clusulas WHERE

... WHERE (CASE WHEN SALARY = 0 THEN NULL


ELSE COMM/SALARY END) > .25

Usando em Funes de colunas

... MIN (CASE WHEN QTY > 0 THEN QTY


ELSE NULL END)

64 #59585

QTY
18
22
9

DB2 - CONCEITOS E UTILIZAO

19/11/98

UNION
UNION junta as tabelas resultado
SELECT A1, A4 FROM TBLA
WHERE A2 = Z
Resultado

UNION
SELECT B3, B4 + B2 FROM TBLB
WHERE B1 >= N
Resultado

Notas:
Esta tcnica faz a unio de uma ou mais tabelas resultado.
Query complexas podem ser feitas usando o UNION.
A Quantidade de colunas deve ser a mesma em todos os SELECTs.
Os data types das colunas correspondentes devem ser iguais.
O tamanho das colunas correspondentes podem ser diferentes.
O operador UNION une as tabelas resultantes e elimina as linhas
duplicadas, que implica num sort.
operador UNION ALL tambm une tabelas mas no elimina linha
duplicadas. No chama o SORT portanto.
Para os nomes das colunas no cabealho so adotadas as do primeiro bloco
de SELECT.

#59585

65

DB2 - CONCEITOS E UTILIZAO

19/11/98

UNION(Continuao)
A faixa de salrio dos atendentes atingiria a faixa de salrios do pessoal
de vendas se fosse dado um aumento de 17% e 2% respectivamente ?
SELECT CARGO, SALARIO * 1.17 AS SALARIO
FROM x.staff
WHERE CARGO = ATEND
UNION
SELECT CARGO, SALARIO * 1.02
FROM x.staff
WHERE CARGO = VENDAS
ORDER BY 2 DESC
Resultado:
CARGO
VENDAS
.
.
VENDAS
ATEND
VENDAS

SALARIO
21420.0000
.
.
17144.4660
16918.2000
16832.8866

SELECT NOME FROM X.CANDIDATOS


WHERE ENDERECO LIKE %SP
UNION ALL
UNION
SELECT SOBRENOME FROM X.ENTREVISTADOS
WHERE SIT = REP
Cabealho do
primeiro
SELECT

Resultado:
NOME
JACOBS
MARQUES
ARANTES
SILVA
MARQUES
JACOBS

66 #59585

NOME
ARANTES
JACOBS
MARQUES
SILVA

DB2 - CONCEITOS E UTILIZAO

19/11/98

SUBQUERY

um SELECT embutido dentro de um SELECT


O resultado de uma subquery usado pelo SELECT EXTERNO

Exemplo de SUBQUERY.
Listar empregados cujo departamento esteja subordinado ao
departamento A00

SNOME

DEPARTAMENTO

DCOD

DSUPER

SELECT SNOME, DEPARTAMENTO


FROM EMP
WHERE DEPARTAMENTO IN (SELECT DCOD
FROM DEPT
WHERE DSUPER = A00)

RESULTADO SOMENTE
DO SELECT DE NVEL
MAIS ALTO

RESULTADO DA SUBQUERY
RETORNADO PARA O
NVEL SUPERIOR

Consideraes SUBQUERY:
1. Pode ser usada no WHERE ou no HAVING
2. Pode ser encadeado
3. A escolha do operador do SELECT externo depende da quantidade de
linhas do SUBQUERY.
4. Deve estar a direita do operador na condio de seleo.
5. Deve ser colocado entre parnteses.
6. O SUBQUERY deve selecionar apenas um coluna.
7. O SUBQUERY pode retornar uma ou mais linhas e isto acaba
determinando o operador a ser usado na condio de procurar.
8. No pode conter UNION, UNIN ALL ou ORDER BY.
9. SUBQUERY conhecido como SUBSELECT.
#59585

67

DB2 - CONCEITOS E UTILIZAO

19/11/98

SUBQUERY DE UMA LINHA


Listar os funcionrios com salrio superior mdia da companhia
SELECT NOME, SALARIO
FROM x.staff
WHERE SALARIO > (SELECT AVG(SALARIO)
FROM x.staff)

Resultado:
NOME
SANTANA
ORSINI

SALARIO
18357.50
18171.25

Mostrar o funcionrio com o maior salrio.

SELECT NOME, SALARIO


FROM x.staff
WHERE SALARIO = (SELECT MAX(SALARIO)
FROM x.staff)

Resultado:
NOME
MOLINARI

68 #59585

SALARIO
22959.20

DB2 - CONCEITOS E UTILIZAO

19/11/98

SUBQUERY COM VRIAS LINHAS: ALL


Lista classificada dos funcionrios com salrio superior a toda e qualquer
mdia salarial departamental.
Encontrar mdia salarial para cada departamento.
(SELECT AVG(SALARIO) FROM x.staff GROUP BY DEPT)
Compare o salrio de cada funcionrio com a lista devolvida pela
SUBQUERY.

SELECT NOME, SALARIO FROM x.staff


WHERE SALARIO > ALL (SELECT AVG(SALARIO)
FROM x.staff GROUP BY DEPT)
ORDER BY NOME
Resultado:
NOME
FRAYE
GRAHAM
JONES
MOLINARE

SALARIO
21150.00
21000.00
21234.00
22959.20

Lista classificada dos funcionrios com salrio maior que a mdia salarial
de qualquer departamento.
Encontrar a mdia salarial para cada departamento.
Compare o salrio e cada funcionrio com a lista devolvida pela
SUBQUERY.
SELECT NOME, SALARIO FROM x.staff
WHERE SALARIO > ANY(SELECT AVG(SALARIO)
FROM x.staff GROUP BY DEPT)
ORDER BY NOME
Resultado:
NOME
DANIELS
DAVIS
EDWARDS

#59585

SALARIO
19260.25
15454.50
17844.00

69

DB2 - CONCEITOS E UTILIZAO

19/11/98

IN
Lista de gerentes da diviso Sul
SELECT DEPT, NOME FROM x.staff
WHERE ID = ANY (SELECT GERENTE FROM x.org
WHERE DIVISAO = SUL)

SUBQUERY Resulta numa lista de Gerentes da diviso SUL


IN equivale a um srie de OR ... = sobre uma coluna
=ANY pode substituir IN
SELECT DEPT, NOME FROM x.staff
WHERE ID IN (SELECT GERENTE FROM x.org
WHERE DIVISAO = SUL)

HAVING COM SUBQUERY


Liste os departamentos cuja mdia salarial seja inferior mdia da
companhia. Ignore os gerentes. Mostre as mdias e ordene pelas mesmas.
SELECT DEPT, AVG(SALARIO) FROM x.staff
WHERE CARGO <> GER GROUP BY DEPT
HAVING AVG(SALARIO) < (SELECT AVG(SALARIO)
FROM x.staff
WHERE CARGO <> GER)
ORDER BY 2 DESC
Resultado:
DEPT
66
51
84
20

70 #59585

16880.175000000
16235.200000000
15443.000000000
15309.530000000

DB2 - CONCEITOS E UTILIZAO

19/11/98

SUBQUERY CORRELACIONADA
Listar os empregados com salrio superior mdia de seus respectivos
departamento.
SELECT NOME, SALARIO
FROM x.staff CV
WHERE SALARIO > (SELECT AVG(SALARIO) FROM x.staff
WHERE DEPT = CV.DEPT)
Uma SUBQUERY correlacionada executada a cada linha devolvida
ao SELECT externo!

Listar os gerentes ganhando menos que $18.000 se existir pelo menos um


gerentes com salrio superior $22.000.

SELECT ID, NOME, SALARIO, DEPT FROM x.staff


WHERE CARGO = GER AND SALARIO < 18000
AND EXISTS(SELECT * FROM x.staff
WHERE CARGO = GER AND
SALARIO > 22000)
ID
30

NOME
MARENGHI

SALARIO
17506.75

DEPT
38

Verdadeiro/Falso no SELECT interno


Determina se o SELECT externo ser executado.

Notas:
Este um operador que tem como argumento um SELECT.
Esta SUBQUERY no devolve nenhuma tabela resultante.
EXISTS devolve V ou F e como faz parte de uma condio de
procura, determina uma eventual execuo ou no do SELECT externo.
EXISTS pode ser negado por um NOT.

#59585

71

DB2 - CONCEITOS E UTILIZAO


MANUTENO DE DADOS

19/11/98

INSERT

Insert de uma linha


INSERT INTO PROJ
VALUES(MA2114, , B01, , NULL, CURRENT DATE, NULL)
OU
INSERT INTO PROJ
(DEPT, PCODIGO, PNOME, RESP, DATAINI)
VALUES(B01, MA2114, , , CURRENT DATE)
Resultado:
PCODIGO
...........
OP2011
OP2012
OP2013
MA2114

PNOME
..............
SUPORTE
APLICACAO
DB/DC

DEPT
.......
E21
E21
E21
B01

RESP
........
320
330
340

EQUIPE
.............
001.00
001.00
001.00
?

DATAINI
.................
25.12.1998
25.12.1998
25.12.1998
26.12.1998

DATAFIM
................
01.02.1999
01.02.1999
01.02.1999
?

INSERT de mltiplas linhas


TESTPROJ
PCOD

PROJNOME

DEPT

RESP

EQUIPE

DATAINI

DATAFIM

INSERT INTO TESTPROJ


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

72 #59585

PROJNOME
......
OPERAO
SUPORTE II
.....
.....
.....

DEPT
B01
E11
E21
E21
E21
E21

RESP
20
90
100
320
330
340

EQUIPE
001.00
005.00
004.00
001.00
001.00
001.00

DATAINI
01.01.1987
01.01.1986
01.01.1982
01.01.1982
01.01.1982
01.01.1982

DATAFIM
15.09.1987
01.05.1988
01.02.1988
01.02.1988
01.02.1988
01.02.1988

DB2 - CONCEITOS E UTILIZAO


MANUTENO DE DADOS

19/11/98

UPDATE

Update de colunas
Antes:
PCOD
PL2100
OP1010
OP2010
OP2011
OP2012
OP2013

PROJNOME
......
OPERAO
SUPORTE II
.....
.....
.....

DEPT
B01
E11
E21
E21
E21
E21

RESP
20
90
100
320
330
340

EQUIPE
001.00
005.00
004.00
001.00
001.00
001.00

DATAINI
01.01.1987
01.01.1986
01.01.1982
01.01.1982
01.01.1982
01.01.1982

DATAFIM
15.09.1987
01.05.1988
01.02.1988
01.02.1988
01.02.1988
01.02.1988

UPDATE TESTPROJ
SET EQUIPE = EQUIPE*2, DATAFIM=NULL,
DATAINI=02.01.1999
WHERE DEPT = B01
Depois:
PCOD
PL2100
OP1010
OP2010
OP2011
OP2012
OP2013

PROJNOME
......
OPERAO
SUPORTE II
.....
.....
.....

DEPT
B01
E11
E21
E21
E21
E21

RESP
20
90
100
320
330
340

EQUIPE
002.00
005.00
004.00
001.00
001.00
001.00

DATAINI
02.01.1999
01.01.1986
01.01.1982
01.01.1982
01.01.1982
01.01.1982

DATAFIM
?
01.05.1988
01.02.1988
01.02.1988
01.02.1988
01.02.1988

Um subconjunto de linhas
UPDATE PESSOAL
SET SALARIO = SALARIO + 300
WHERE CARGO = ATEND

Todas as linhas:
UPDATE PESSOAL
SET ANOS = ANOS + 1

#59585

73

DB2 - CONCEITOS E UTILIZAO


MANUTENO DE DADOS

19/11/98

DELETE

Antes:
PCOD
PL2100
OP1010
OP2010
OP2011
OP2012
OP2013

PROJNOME
......
OPERAO
SUPORTE II
.....
.....
.....

DEPT
B01
E11
E21
E21
E21
E21

RESP
20
90
100
320
330
340

EQUIPE
002.00
005.00
004.00
001.00
001.00
001.00

DATAINI
02.01.1999
01.01.1986
01.01.1982
01.01.1982
01.01.1982
01.01.1982

DATAFIM
?
01.05.1988
01.02.1988
01.02.1988
01.02.1988
01.02.1988

EQUIPE
005.00
004.00
001.00
001.00
001.00

DATAINI
01.01.1986
01.01.1982
01.01.1982
01.01.1982
01.01.1982

DATAFIM
01.05.1988
01.02.1988
01.02.1988
01.02.1988
01.02.1988

DELETE FROM TESTPROJ


WHERE DEPT = B01

Depois:
PCOD
OP1010
OP2010
OP2011
OP2012
OP2013

PROJNOME
OPERAO
SUPORTE II
.....
.....
.....

DEPT
E11
E21
E21
E21
E21

RESP
90
100
320
330
340

Eliminar todas as ocorrncias de uma tabela


DELETE FROM TESTPROJ

Depois:
PCOD

74 #59585

PROJNOME

DEPT

RESP

EQUIPE

DATAINI

DATAFIM

DB2 - CONCEITOS E UTILIZAO

19/11/98

DDL

DATA DEFINITION LANGUAGE

#59585

75

DB2 - CONCEITOS E UTILIZAO

19/11/98

DDL
A Data Definition Language(DDL) faz parte das instrues SQL e dividese em trs grupos.
1. CREATE
2. ALTER
3. DROP

Definio de objetos
Alterao da definio dos objetos
Eliminao de objetos

A execuo de DDL permitido somente auth-ids devidamente


autorizados.
O Criador (auth-id) do objeto normalmente o proprietrio (OWNER) do
mesmo. Mas o DB2 permite que sejam criados objetos para outros auth-id,
isto , posso criar objetos das quais no serei o proprietrio.
O proprietrio de um objeto tem todos os privilgios sobre o mesmo.
A equipe de suporte (SYSADM, SYSCTRL, DBADM) ou proprietrio do
objeto o responsvel pela concesso de autorizao para acesso e/ou uso
dos objetos.
A execuo das instrues ALTER ou DROP esto reservadas equipe de
suporte ou o proprietrio dos objetos.

76 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

STORAGE GROUP
O nome de um STORAGE GROUP no deve ultrapassar 8 caracteres
Podem ser especificados at 133 volumes do mesmo device type no
parmetro VOLUMES.
VCAT aponta para o catlogo ICF que qualificar os Datasets dos
Tablespaces e dos Indexspaces.
Exemplos:
Para criao de um Storage Group
CREATE STOGROUP CURXSG01
VOLUMES(PRD510)
VCAT DES;
COMMIT;
Alterao de um Storage Group:
ALTER STOGROUP CURXSG01
ADD VOLUMES(PRD512, PRD513)
REMOVE VOLUMES(PRD510);
COMMIT;
ALTER STOGROUP CURXSG01
VCAT CUR;
COMMIT;

#59585

77

DB2 - CONCEITOS E UTILIZAO

19/11/98

DATABASE
O Database uma definio lgica, onde podemos agrupar todos os
Tablespaces, Tabelas, ndices com o mesmo critrio de administrao.
Autorizao necessria para Criao de um DATABASE
Privilgio de CREATEDBA
Privilgio de CREATEDBC
Autoridade de SYSADM ou SYSCTRL

CREATE DATABASE CURXSG01


BUFFERPOOL BP0
STOGROUP CURXSG01;
COMMIT;

Parmetros do Create DATABASE


1. BUFFERPOOL Indica o Buffer pool default para os Tablespaces e
ndices deste Database.
2. STOGROUP
Indica o Stogroup default para todos os Objetos
deste Database.

78 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

TABLESPACE
uma VSAM LDS, onde sero definidas as tabelas.
Existem 3 tipos de Tablespaces:
1. SIMPLES
As pginas de seus datasets contm dados de
uma ou mais tabelas. Aqui na CEF no utilizamos este tipo de
Tablespace.
2. Segmentado
dividido em segmentos que variam de 4 a 64
pginas e sempre em mltiplos de 4. E cada segmento s pode
conter ocorrncias de uma nica tabela, tamanho mximo deste
tipo de tablespace 2Gbytes.
3. Particionado
Utilizada para tabelas com grande quantidade
de dados, podendo chegar at 64Gbytes, assim distribudos:
At 16 Parties
Cada partio com 4Gbytes
de 17 a 32 Parties
Cada partio com 2Gbytes

de 33 a 64 Parties

Cada partio com 1Gbytes

Exemplo de Criao de Tablespace SEGMENTADO.


CREATE TABLESPACE CURXTS01 IN CURXDB01
USING STOGROUP CURXSG01
PRIQTY
144
SECQTY
48
ERASE
NO
LOCKSIZE ANY
BUFFERPOOL BP0
CLOSE
NO
FREEPAGE
4
PCTFREE
25
SEGSIZE
8;
COMMIT;

ALTER TABLESPACE CURXDB01.CURXTS01


PRIQTY 240
USING STOGROUP CURXSG02;
COMMIT;

#59585

79

DB2 - CONCEITOS E UTILIZAO

19/11/98

TABLESPACE
Parmetros
PRIQTY, SECQTY - rea de alocao em Kbytes.
LOCKSIZE
- Tipo de Locking, as opes so:
Any
- o valor default , com este valor a deciso
pelo Locking fica por conta do DB2.
Tablespace
- Locking pelo tablespace
Table
- Locking pela Tabela
PAGE
- Locking por pgina
ROW
- Locking por Linha
ERASE
- Especifica se o espao ocupado pelo
datasets devem ser preenchidos com zero quando forem eliminados
(DROP).
CLOSE
- Especifica se o Dataset do tablespace
deve ser fechado quando no esta sendo utilizado.
FREEPAGE
- Especifica o intervalo de pginas que devem
existir entre as pginas livres quando um tablespace carregado ou
reorganizado. O intervalo pode variar de 0 255. Se o tablespace
segmentado, o nmero deve ser menor que o tamanho do segmento.
PCTFREE
- Especifica qual a frao percentual
das pginas que devem ser mantidas livres quando o tablespace
carregado ou reorganizado.
SEGSIZE
- Se especificado, determina que o
tablespace ser segmentado. O tamanho de um segmento dado em
quantidade de pginas, deve ser inteiro mltiplos de 4, variando de 4
64.
NUMPARTS
- Parmetro mutuamente exclusivo como o
SEGSIZE, quando especificado indica que o Tablespace ser
Particionado, acompanhado de um nmero que indica a quantidade de
parties. Este nmero pode variar de 1 64.

Se nem SEGSIZE e nem NUMPARTS forem especificados, o Tablespace


ser Simples.

80 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

TABLE
um conjunto de linhas coma as mesmas colunas. Os atributos das colunas
dever ser do tipo:
NOT NULL
NOT NULL WITH DEFAULT
assume o valor default
NULL

Preenchimento obrigatrio
Quando no preenchido,
Preenchimento opcional

Definies para colunas numricas:


SMALLINT
Inteiros, valor entre -32768 a 32767
INTEGER
Inteiros, valor entre -2147483648 a
2147483648
DECIMAL (x,y)
x=Dgitos e y=Decimais, at 31 Dgitos
FLOAT
Ponto Flutuante 5.4E-79 TO 7.2E+75
Smallint uma halfword (2bytes)
Integer uma fullword(4bytes)
Decimal armazena nmeros em decimal compactado. A faixa de valores
depende da quantidade de casas decimais.
Definies para colunas alfanumricas:
CHAR(x)
String de tamanho fixo, mximo 254
caracteres
VARCHAR(x)
String de tamanho varivel, onde x pode
variar de 0 a 4096 caracter.
Uma pgina DB2 no totalmente utilizada para os dados pois existe um
espao ocupado para informao de controle.
Definies para colunas DBCS:
GRAPHIC(x)
String de tamanho fixo, mximo 127 caracteres.
VARGRAPHIC(x) String de tamanho varivel, onde x pode variar
de 0 a 2048 caracteres.
Double Byte Caracter so caracteres especiais como ideogramas asiticos
que requerem 2 bytes para serem identificados.

#59585

81

DB2 - CONCEITOS E UTILIZAO

19/11/98

TABLE
CREATE TABLE SICUR.CURXTB01FUNCAO
(CODIGO
SMALLINT
NOT NULL,
DESC_FUNCAO
CHAR(20)
NOT NULL,
DATA_INCLUSAO
DATE
NOT NULL,
PRIMARY KEY
(CODIGO))
IN CURXDB01.CURXTS01;
CREATE TABLE SICUR.CURXTB02CONCEITOS
( MATR
CHAR(9)
NOT NULL,
ALUNO
CHAR(30)
NOT NULL.
FUNCAO
SMALLINT
NOT NULL,
NOTA
SMALLINT
,
CLASSIFICACAO
SMALLINT
,
PRIMARY KEY(
MATR
,
ALUNO
),
FOREIGN KEY (FUNCAO) REFERENCES SICUR.CURXTB01FUNCAO
ON DELETE CASCADE)
IN CURXDB01.CURXTS01;
ALTER TABLE SICUR.CURXTB02CONCEITO
ADD DT_PROVA DATE
;
COMMIT;
PRIMARY KEY
Especifica a chave primria da tabela, sendo que
a chave
pode ser composta de at 64 colunas. O comprimento de uma
chave primria no pode exceder 254 bytes. Apenas uma chave
primria permitida por tabela.
FOREIGN KEY
Especifica a chave estrangeira da tabela. A definio de uma
chave estrangeira deve ser igual tamanho e tipo de dados. A
palavra chave REFERENCES identifica a tabela me (Parent
table). A Palavra chave ON DELETE especifica a regra de
deleo.

82 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

NDICE
utilizado para agilizar o acesso aos dados.

CREATE [ UNIQUE ] INDEX SICUR.CURXPX02


ON SICUR.CURXTB02CONCEITO
(MATR
ASC,
ALUNO
ASC)
USING STOGROUP CURXSG02
PRIQTY
48
SECQTY
48
ERASE
NO
BUFFERPOOL BP1
CLOSE
YES
FREEPAGE
4
PCTFREE
15
CLUSTER;
COMMIT;
ALTER INDEX CURXPX02
USING STOGROUP CURXPX02
PRIQTY
192
CLOSE YES ;
COMMIT;

Parmetros:

UNIQUE

CLUSTER
clusterizado

Palavra chave que indica que o ndice no


permite duplicidade nas colunas compostas
neste ndice.
Indica que o dados devem estar
pelo ndice

#59585

83

DB2 - CONCEITOS E UTILIZAO

19/11/98

VIEW
A View pode poder um subconjuto de uma ou mais tabelas.
Uma view um objeto lgico e assim, seus dados no ocupam espao fsico.

CREATE VIEW SIXXX.CURXVW01JUNCAO


(CODIGO, FUNCAO, ALUNO)
AS
SELECT CODIGO, DESC_FUNCAO, ALUNO
FROM SICUR.CURXTB02CONCEITO INNER JOIN
SICUR.CURXTB01FUNCAO
ON CODIGO = FUNCAO;
COMMIT;

SYNONYM E ALIAS
CREATE SYNONYM FUNCAO FOR SICUR.CURXTB01FUNCAO;
COMMIT;
CREATE ALIAS CONCEITO FROM SICUR.CURXTB02CONCEITO;
COMMIT;
Diferena entre e o SYNONYM e ALIAS:
SYNONYM restrita a um AUTH-ID.
ALIAS de uso compartilhado a todos.

84 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

DROP
Usado para eliminar qualquer objeto criado a partir de um comando
CREATE no DB2.

DROP DATABASE CURXDB01


Quando se elimina um Database, todos os objetos vinculados ele
tambm so eliminados, tais como TABLESPACE, TABLE, INDEX, VIEW,
ALIAS e SYNONYM.

DROP TABLESPACE CURXDB01.CURXTS01


A sua eliminao acarreta a eliminao de Table, Index, View, Alias,
Synonym e Relacionamentos vinculadas a qualquer objeto deste
Tablespace, deleta fisicamente do Disco.
DROP TABLE SICUR.CURXTB01FUNCAO
A eliminao vem acompanhada da eliminao de Index, View, Alias,
Synonym e Relacionamento.

DROP INDEX SICUR.CURXPX01


Elimina o ndice, inclusive o INDEXSPACE.

DROP VIEW SICUR.CURXVW01


Elimina logicamente do DB2 o apontamento dos dados para a VIEW.

DROP SYNONYM/ALIAS CONCEITO


Elimina Sinnimo/Alias

DROP STOGROUP CURXSG01


S podemos eliminar este objeto se o mesmo no estiver mais sendo
referenciado por um outro objeto.

#59585

85

DB2 - CONCEITOS E UTILIZAO

19/11/98

SQL ESTTICO vs. SQL DINMICO

.....................................................
.....................................................
Exec SQL
Delete from Dept
End-Exec.
.....................................................
acesso .....................................................
.....................................................

Instruo SQL Completa


Fixo

Estratgia de
pr-estabelecida.

.....................................................
Var
.
.....................................................
Exec SQL
Execute Immediate : Var
End-Exec
.....................................................

ESTTICO

DINMICO

Instruo SQL fornecida


durante a execuo.
Estratgia de acesso
pr-estabelecida.

Delete from Dept

Notas:
A diferena entre o SQL esttico e o dinmico est no instante em que o
plano montado.
No esttico o plano montado antes da primeira execuo da instruo.
No SQL dinmico a instruo parcial ou totalmente desconhecida e o
DB2 no tem como determinar previamente a estratgia de acesso, validar
autorizao, etc.
Uma instruo onde o desconhecido apenas o valor que est sendo
comparado com uma coluna na clusulas WHERE candidata a esttico.
Exemplo:
WHERE SALARIO = :SAL AND NOME LIKE :STR

86 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

PROGRAMAO EM SQL
Para podermos trabalhar com o SQL dentro de programas em linguagens
tradicionais, devemos codific-lo usando delimitadores especiais. Esta
tcnica conhecida como SQL embutido e assemelha-se ao COMMAND
LEVEL do CICS.
O SQL trabalha com tabelas e linhas. uma linguagem desenvolvida para
manipular conjuntos.
J as linguagens tradicionais trabalham com arquivos e registros e no
conseguem reconhecer tabelas e linhas.
Para simularmos um arquivo com seus registros existe o CURSOR do DB2.
Assim o programa pode acessar a manipular linhas de uma tabela como se
estivesse trabalhando com um arquivo comum.
As colunas no so manipuladas diretamente pelas linguagens tradicionais.
Para contornar isto so utilizadas as chamadas variveis HOST que
Hospedam o contedo.

Instruo SQL entre delimitadores.


EXEC SQL DELETE FROM DEPT END-EXEC

Os compilador das linguagens tradicionais no entende instrues SQL.


As instrues SQL devem ser embutidas dentro de um programa
separados por delimitadores para que possam ser tratados antes de serem
submetidas ao compilador.
Cada linguagem tem seu delimitador prprio para isolar as instrues SQL.
O delimitador que indica o incio de uma instruo SQL comum todas
as linguagens.

#59585

87

DB2 - CONCEITOS E UTILIZAO

19/11/98

VARIVEL HOST
As variveis HOST so utilizadas para permuta de valores entre a
linguagem SQL e a linguagem de programao.
Uma das possveis utilizaes da varivel HOST a de fornecer um valor a
uma instruo AQL, tornando-a assim uma instruo genrica.
A referencia varivel HOST deve ser precedida pelo caracter :. Seu
uso facultativo mas recomenda-se sua utilizao para evitar
possibilidade de confuso.
O uso da varivel HOST opcional. Seu uso obrigatrio somente para as
instrues SELECT.
A varivel HOST deve ser compatvel com a coluna quanto ao seu data
type e ao seu tamanho.
As variveis HOST no devem ser utilizadas para referenciar nomes de
tabelas ou de colunas.
Exemplo de Variveis HOST:
EXEC SQL
INSERT INTO EMPR
(MATR, SOBRENOME) VALUES ( :MATR, :SNOME )
END-EXEC
EXEC SQL
UPDATE EMPR
SET SALARIO = SALARIO * :PERCENT
WHERE CARGO = :CARGO
END-EXEC
EXEC SQL
SELECT MATR, SOBRENOME
INTO :MATR, :SNOME
FROM EMPR
WHERE CARGO = :CARGO
END-EXEC

88 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

PROCESSAMENTO DE MLTIPLAS LINHAS


Se o resultado de um Select pode ter mltiplas linhas, o programa deve
trabalhar com um CURSOR, pois no tem como prever o tamanho da tabela
resultante.
Quando o programa executa um OPEN de um CURSOR, o DB2 executa o
SELECT e a tabela resultante fica presa, esperando pelo processamento.
O programa deve prover variveis HOST para cada coluna do CURSOR.
O programa executa a instruo SQL FETCH, para movimentar o
CURSOR para o prximo registro. As variveis HOST contero os valores
do registro (linha) apontado.

SELECT
MATR SOBRENOME
30 SILVA
290 SANTOS
300 ALMEIDA

OPEN

FETCH
MATR SOBRENOME

30 SILVA

290 SANTOS
300 ALMEIDA

FETCH
MATR SOBRENOME
30 SILVA

290 SANTOS
300 ALMEIDA

#59585

89

DB2 - CONCEITOS E UTILIZAO

19/11/98

SELECT COM FETCH

Definio de um CURSOR
EXEC SQL
DECALRE CUR001 CURSOR FOR
SELECT MATR, SOBRENOME
FROM EMPR
WHERE DEPT = :DEPT
END-EXEC

Abrindo um CURSOR previamente definido.


EXEC SQL OPEN CUR001

END-EXEC

FETCH das linhas resultantes


EXEC SQL
FETCH CUR001 INTO :MATR, :SNOM
END-EXEC

Fechando o CURSOR quando terminar a leitura dos dados.


EXEC SQL CLOSE CUR001

END-EXEC

OPEN posiciona o CURSOR antes da primeira linha da tabela


resultante.

FETCH avana o CURSOR uma linha para frente.

No possvel fazer o FETCH voltar o CURSOR.

CLOSE no CURSOR no implica em COMMIT.

90 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

COMMIT / ROLLBACK

COMMIT
Indica trmino bem sucedido de uma unidade de trabalho
Alterao dos dados sero gravadas.
Todas os PAGE LOCKS sero liberados
CURSOR fechado, exceto para CURSOR WITH HOLD

ROLLBACK
Unidade de trabalho corrente abandonado
Atualizao dos dados desde o ltimo COMMIT so desfeitas
Todos os PAGE LOCKS so liberados
CURSOR fechado

#59585

91

DB2 - CONCEITOS E UTILIZAO

19/11/98

BIND
Preparao de Programa

Cdigo Fonte
SQL

Biblioteca de
Include

PRECOMPILAO

Cdigo Fonte
Modificado

DBRM
Biblioteca de
Usurio
Catlogo DB2

Compilao

BIND

Descrio da tabela
Autorizao

Mdulo Objeto
DBRM

Linkedio
Diretrio
Plano/Package
Mdulo de Carga
Language Interface

92 #59585

Execuo

DB2 - CONCEITOS E UTILIZAO

19/11/98

BIND

Notas:
A preparao de programa o nome que damos ao processo que torna um
programa fonte em um mdulo de carga executvel.
A preparao de um programa constitudo das seguintes fases:
Precompilao
Compilao e Linkedio
BIND
O precompilador pode ser executado com o DB2 fora. Mas sua funo
gerar a partir de fonte dois data sets selados com um Timestamp. Os
data sets gerados so:

DBRM (Database Request Module)

Contm todas as instrues SQL embutidas no fonte.

Fonte Modificada

fonte copiado para este data set com modificaes. As


instrues SQL so transformadas em comentrios e os CALLs para
o DB2 so inseridos logo a seguir.

Eventualmente cdigos de definio de variveis HOST so


copiados a partir de uma biblioteca de INCLUDE (DCLGEN book
das tabelas)

O precompilador faz a checagem da sintaxe das instrues SQL e da


validade das variveis HOST utilizadas. Um relatrio de execuo com
eventuais mensagens de erro tambm gerado.
O compilador gera o mdulo objeto a partir do fonte modificado pelo
precompilador. O Timestamp copiado do fonte.

#59585

93

DB2 - CONCEITOS E UTILIZAO

19/11/98

BIND
O linkage editor gera o mdulo de carga partir do mdulo da linguagem
de interface do DB2. O Timestamp original copiado do mdulo Objeto.
O processador de BIND gera o Plano ou Package partir do DBRM. O
Timestamp copiado do DBRM.
Um Plano ou Package contm a estratgia de acesso aos dados DB2 com
informaes do tipo:

ndices utilizados
Estratgia de Locking
Estratgia de execuo do SQL
E outros

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


separadamente e podem ser executadas em qualquer ordem.

94 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

BIND
O propsito de BIND a gerao do Plano ou de um Package. partir do
DBRM e do catlogo so executados os seguintes procedimentos:

Checagem das consistncias das instrues SQL com os


Objetos manipulados. So checados nomes, data type das colunas,
etc.

Checagem da autorizao necessria para a execuo das


instrues SQL.

Determinao da estratgia de acesso aos Objetos da


manipulao, pelo otimizador do DB2.

Plano/Package armazenado no diretrio e uma cpia do


DBRM carregado no Catlogo.

BIND ADD
Utilizado para criar um novo Plano/Package

BIND REPLACE
Utilizado quando a prpria instruo SQL foi alterada e queremos
refazer o Plano/Package existente.

REBIND
Utilizado quando o SQL permanece inalterado mas queremos
refletir uma modificao ocorrida no ambiente tais como
criao/eliminao de ndices ou atualizaes das estatstica do
Catlogo.

#59585

95

DB2 - CONCEITOS E UTILIZAO

19/11/98

BIND
BIND ADD
Adiciona
Plano Novo

REBIND

BIND REPLACE

Refaz Plano
(Ambiente alterado)

Refaz Plano
(SQL Alterado)

OTIMIZADOR

DBRM

DBRM

96 #59585

CATLOGO

PLANO
PACKAGE

DIRETRIO

DB2 - CONCEITOS E UTILIZAO

19/11/98

SEGURANA INTERNA DO DB2


A segurana interna do DB2 pode ser ativada ou no durante a gerao.
Quando existe uma solicitao de atividade, o DB2 verifica trs fatores:
Auth-id
Privilgios
Recurso

- Quem fez a solicitao?


- O que se deseja fazer com o recurso?
- Qual o Objeto de manipulao?

Estas informaes ficam armazenadas no catlogo.


Auth-id representa um usurio ou um grupo de usurio e informado ao
DB2 atravs do monitor de transaes.
TABELAS
VIEW

SELECT
UPDATE [Lista de colunas]
INSERT

PLANOS
PACKAGES

BIND
EXECUTE

STOGROUP
BUFFERPOOL
TABLESPACE

USE

DB2

SYSADM
RECOVER
TRACE, etc..

DATABASE

DBADM
CREATETS
LOAD, etc..

#59585

97

DB2 - CONCEITOS E UTILIZAO

19/11/98

SEGURANA INTERNA DO DB2


Recursos DB2
Podemos proteger:

OBJETOS

Tabela, View

PLANOS/PACKAGES

Programas, QMF, SPUFI

COMANDOS DB2

-Bind, -Display

UTILITRIS DB2

Load, Recover

RECURSOS DO SISTEMA

Buffer, Storage Group

ATRIBUIO DE AUTORIDADE
Instruo SQL

GRANT

REVOKE

Privilgio
Sobre
Recurso

TO

Privilgio
Sobre
Recurso

FROM

AUTH-ID

AUTH-ID

Exemplo: GRANT SELECT ON EMPR TO PUBLIC


REVOKE SELECT FROM EMPR FROM PUBLIC

98 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

UTLITRIOS DO DB2

Divididos em 3 grandes grupos:

ONLINE
1.
LOAD
Carga de arquivo sequencial para uma
tabela.
2.
CHECK INDEX
Checa a consistncia entre o ndex e os
Dados.
3.
CHECK DATA
Checa a integridade entre a Chave
Primria e a Chave estrangeira.
4.
REORG
Reorganiza um Tablespace, Partio de
um Tablespace ou ndex.
5.
RUNSTATS
Atualiza informaes do catlogo sobre
os Tablespaces e Indexes.
6.
STOSPACE
Atualiza informaes sobre a utilizao
em Disco do Storage Group.
7.
COPY
Copia um Tablespace para um dataset
Sequencial
8.
MERGECOPY
Utilizado para juntar um ImageCopy FULL
com outro Incremental.
9.
RECOVER
Recuperao de um Tablespace, Partio
ou Recuperao de ndex.
10.
QUIESCE
Estabelece um ponto de sincronismo de
uma lista de tablespaces.
11.
MODIFY
Manuteno no catlogo DB2.
12.
REPORT
Listas informaes de Recovery para
Tablespaces.
13.
REPAIR
Funo de reparo fsico em Disco.

OFFLINE
1.
CHANGE LOG INVENTORY
BSDS.
2.
PRINT LOG MAP

#59585

Atualiza log datasets no


Listas dados de Log BSDS.

99

DB2 - CONCEITOS E UTILIZAO


3.

19/11/98

UTLITRIOS DO DB2(Continuao)

SERVICE AIDS
1.
DSN1COPY
2.
DSN1PRNT
3.
DSN1COMP
arquivados(DB2)
4.
DSN1LOGP
display.
5.
DSN1CHKR
catlogo.
6.
DSNTIAUL
sequencial.
7.
DSNTEP2
8.
DSNTIAD
SELECT.

Trata user data por data set


Listas e formatas data set pages
Estimativas de espaos a ser
L o contedo da Log e formata para
Verifica a Integridade dos diretrios e
Unload de tabelas para uma arquivo
Para emisso de SQL dinmico.
Para emisso de SQL dinmico exceto

SYSIBM.SYSUTILX
Uma Tabela de Diretrio DB2.

UTILID

JOB
NOME

UTILITY
NOME

CHECKPOINT
INFORMAO....

Identificador
nico

Coluna inserida no Incio do Utility.


Coluna atualizada em Pontos de Checkpoints e Parada de Utility.
Coluna eliminada quando do termino do Utility.

100 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

LOAD

Faz carga de arquivo sequencial para um Tablespace


Pode se carregar mltiplas tabelas em um mesmo Tablespace
Converso de dados sero feitas.

Construir ndices definidos


ndice nico no permite chaves duplicadas

Checagem Integridade
Cada chave estrangeira deve conter uma chave primria
correspondente.
Pode ser inibida esta checagem.

Notas:
Os dados podem ser carregado de 2 maneiras:
1. Atravs do INSERT (SQL).
2. Atravs do Utilitrio LOAD.
S no sero carregadas as tabelas:
Se a converso dos dados forem diferentes do formato do
Tablespace
Se os ndices nicos detectar violaes.
Caso haja relacionamento no existir a chave primria.

#59585

101

DB2 - CONCEITOS E UTILIZAO

19/11/98

LOAD
Definio da Tabela:
CREATE TABLE PROD.EMPRESA
(NOME_EMPRESA
CHAR(6)
PRIMEIRO_NOME
VARCHA(12)
INTERM_NOME
CHAR(1)
ULTIMO_NOME
VARCHAR(15)
FONE
CHAR(4)
SALARIO
DECIMAL(8,2)
DEPTO
CHAR(3)
PRIMARY KEY(NOME_EMPRESA),
FOREIGN KEY(DEPTO)
REFERNCES DEPT
ON DELETE SET NULL)
IN TESTEDB1.TESTTSP1;

NOT
NOT
NOT
NOT
,
,
,

NULL,
NULL,
NULL,
NULL,

Exemplo do Registo para o LOAD:


....+.....1....+....2....+....3....+....4....+....5....+....6....+....7
000010 KARINA
L BEZERRA
A00 3978 650101 66 18 F 330814 52750

LOAD JCL
//LOADTEST EXEC DSNUPROC,....
//DSNUPROC.SYSREC
DD DSN=ARQUIVO.ENTRADA ,DISP=SHR
//DSNUPROC.SYSUT1 DD DSN=ARQUIVO.SYSUT1,DISP=( MOD,DELETE,CATLG),...
//DSNUPROC.SORTOUT DD
DSN=ARQUIVO.SORTOUT,DISP=(MOD,DELETE,CATLG),...
//DSNUPROC.SYSERR DD DSN=ARQUIVO.SYSERR,DISP=(MOD,DELETE,CATLG),...
//DSNUPROC.SYSMAP DD DSN=ARQIVO.SYSMAP,DISP=(MOD,DELETE,CATLG),...
//DSNUPROC.SYSIN
DD *

LOAD DATA INTO TABLE PROD.EMPRESA WHEN (32:34) = A00


(NOME_EMPRESA
POSITION (1:6),
PRIMEIRO_NOME
POSITION(8:16) CHAR,
INTERM_NOME
POSITION(19),
ULTIMO_NOME
POSITION(21:30) CHAR,
DEPTO
POSITION(32:34),
FONE
POSITION(36:39) NULLIF PHONE = ,
SALARIO
POSITION(65:69) DECIMAL EXTERNAL)

102 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

LOAD
Load Logging
O default LOG YES, a vantagem de no ser necessrio fazer ImageCopy
aps a carga. Mas deve ser usar com critrios:
Carregar uma tabela em um Tablespace compartilhado
Carga e em tabelas pequenas
Carga com RESUME YES
Quando o volume de carga grande, deve ser usar LOG NO, pois isto evita
uma trabalho do DB2 para registrar cada registro na LOG, e
consequentemente a LOG poder ficar mais tempo em DISCO para um
possvel RECOVERY.

LOG YES
Cada pgina ser registrada na LOG.

LOG NO

Carga mais rpida

Requer ImageCopy

Modificao por SQL no permitida enquanto no fizer o


ImageCopy
SQL error code 904

LOAD RESUME NO
REPLACE

LOAD RESUME YES

LOAD RESUME NO
(Cond. Code = 8)
TABLESPACE

#59585

103

DB2 - CONCEITOS E UTILIZAO

19/11/98

LOAD
LOAD RESUME NO
Usada somente quando a tabela estiver vazia, caso haja algum
registro na tabela ocorrer abend com Return-Code 8.
LOAD RESUME YES
Opo para adicionar novas ocorrncias na tabela.
LOAD RESUME NO REPLACE
Opo para carregar novas ocorrncias na tabela eliminando todas
as ocorrncias existentes dentro da tabelas.
A Variao do LOAD permite trabalhar a nvel de Partio.
LOAD INTO TABLE tabelax PART x RESUME NO
Carrega ocorrncias em uma partio vazia
LOAD INTO TABLE tabelax PART x RESUME YES
Adiciona novas ocorrncias partio.
LOAD INTO TABLE tabelax PART x RESUME YES REPLACE
Carrega ocorrncias em uma nica partio, eliminando as
ocorrncias existente na partio.

Violao de ndice nico


Quando do LOAD, se inserido duas ou mais ocorrncias com a mesma
chave o DB2 descartas todas as ocorrncias deste LOAD.
CHAVE ENTRADA
A
B
C
D
B

104 #59585

CARGA NA TABELA
A

DESCARTES
B

C
D
B

DB2 - CONCEITOS E UTILIZAO

19/11/98

LOAD
Integridade Referencial

ENFORCES CONSTRAINTS o default.

Verifica se existe uma chave primria para a chave


estrangeira.

Pode se inibido com ENFORCE NO


Se encontrado Violao, a ocorrncia eliminada.

FASES DO LOAD
Dados de Entrada
(SYSREC)

Sada
Tabela

Sysut1

RELOAD
Syserr

Sysmap

Sysut1

Sortout
Sysut1

SORT

BUILD

Sortout

Sysut1
Syserr

Indexes

Sysut1
Syserr

#59585

IDEXVAL

Sada

Tabelas

105

DB2 - CONCEITOS E UTILIZAO

19/11/98

FASES DO LOAD
Sysut1

Sysut1

Sortout

ENFORCES

Parent
Tables

Sada

Tabelas

Sortout
Syserr

Dados entrada
(SYSREC)

Sortout
Syserr

DISCARD

Sysdisc

Sysmap

Sortout
Syserr

106 #59585

REPORT

Relatrio
Sumrio

DB2 - CONCEITOS E UTILIZAO

19/11/98

FASES DO LOAD
RELOAD
Esta fase faz a carga do sequencial para a Tabela, Armazena as
chaves dos ndices e chave estrangeira no indexados (Se ENFORCE
CONSTRAINTS) na SYSUT1.
O DD SYSDISC conter as ocorrncias descartadas
Caso ocorra algum este requer:
SYSERR
- Qualquer erro ser armazenado.
Se SYSERR no informado, o RELOAD abend antes de
qualquer carga de dados.
Se descartes no requerido. Reload termina no primeiro error.
Se SYSMAP necessrio (Violao de chave nica ou Violao RI),
informaes da posio da ocorrncia no SYSREC.

SORT
Sorteia o registros da SYSUT1 pelo Chave do ndices, e Chaves
estrangeiras seguem a chave indexadas.
O SORT pode ser inibido em uma das condies:
No existe mais que um chave por tabela
O dados carregados j esto em sequncia.
Todas as chaves devem ser do mesmo tipo.
BUILD
Constri os ndice do SORTOUT e adiciona informaes de erros na
SYSERR, e informaes na SYSUT1 caso no ocorra erros.
INDEXVAL
Das informaes recolhidas dos SYSERR/SYSUT1 so removidas as
ocorrncias da tabelas.

#59585

107

DB2 - CONCEITOS E UTILIZAO

19/11/98

FASES DO LOAD
ENFORCE
De acordo com o SORTOUT, e o relacionamento definido para a
tabela, esta fase faz a checagem para a violao da RI. A Checagem
envolves a tabela me onde se verifica a chave estrangeira carregada.
Todas as ocorrncias sem um PAI sero removidos da tabela, e
includa na SYSDISC.
REPORT
Listas um relatrio de sumrio contendo os erros.

Recomendaes:

Pr processamento para remover os erros.


Sorteia os dados de entradas na sequncia da clusterizao.
Criar todos os ndices antes de carregar os dados.
Use LOG NO para evitar excessivo I/O na LOG
Carregar primeiros as PARENT TABLES (Tabelas mes).
Preferir sempre ENFORCE CONSTRAINTS.
Usar BLKSIZE otimizado para SYSUT1, SORTOUT e SORTWWKxx

108 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

CHECK DATA
Checa todas as chaves estrangeiras de uma lista de tablespaces com os
valores de chaves primrias correspondentes.
Checa todas as ocorrncias dependentes, ou somente as adicionadas pelo
LOAD.
Opcionalmente copia ocorrncias rf para uma tabela de exceo, e
elimina a ocorrncia da tabela ou no.
Tirar do Status de CHECK PENDING
Nenhuma violao foi detectado, ou
Erros so eliminados com a opo DELETE YES.

//DSNUPROC. SYSIN DD *
CHECK DATA
TABLESPACE PRD.EMPRESA
TABLESPACE PRD.DEPTO
SCOPE
PENDING ou ALL
FOR EXCEPTION
IN PRD.EMPRESA USE prd.EmpresaX
IN PRD.DEPTO
USE prd.DeptoX
DELETE
YES ou NO
EXCEPTIN n

Se SCOPE ALL checa todas as chaves estrangeiras de um tablespaces.


Se SCOPE PENDING checa apenas as chaves estrangeiras adicionada pelo
LOAD.
DELETE YES deleta todas as ocorrncias RF de um Tablespace
EXCEPTIONS especifica os limite de exceo, quando excede este limite
o CHECK termina.

#59585

109

DB2 - CONCEITOS E UTILIZAO

19/11/98

FASES DO CHECK DATA


Repetida para Dependent Table (Tabela FILHA)
Dependent table

SYSUT1
SCANTAB

SYSUT1

SORTOUT
SORT

Sortout/ndice chave estrangeira


SYSERR
SCANTAB

ndice chave Primria

Dependent/Descendent Tables

SYSERR

110 #59585

Tabela Exceo

REPORTCK

Relatrio de Sumrio

DB2 - CONCEITOS E UTILIZAO

19/11/98

FASES DO CHECK DATA


1. SCANTAB
Esta fase extrai as chaves estrangeiras necessrias e grava no
SYSUT1
2. SORT
Sorteia a entradas contidas no SYSUT1 pelo nome da constraints e o
valor da chave estrangeira.
3. CHECKDAT
Esta fase produz um erro para cada chave estrangeira no encontrada.
4. REPORTCK
Se DELETE YES especificado, este fase deleta as ocorrncias, e copia
para a tabela de Exceo. Produz tambm um Relatrio de sumarizao
para cada tabela.
5. UTILTERM
Esta fase termina o processo.

#59585

111

DB2 - CONCEITOS E UTILIZAO

19/11/98

CHECK INDEX

O CHECK INDEX testa a consistncia entre o dados e o ndices. O


Check procura a inconsistncia e emite uma mensagem de erro,
descrevendo qual o problema.
Exemplos de SYSIN:
//DSNUPROC.SYSIN DD *
CHECK INDEX NAME(prd.indice1, prd.index2)
CHECK INDEX(prd.indice1 PART 3)
CHECK INDEX(ALL) TABLESPACE PRD.EMPRESA

FASES DO CHECK INDEX

ndices

UNLOAD

Sysut1

Sysut1

SORT

Sysut1

Sysut1

CHECKINDEX
Tabelas

112 #59585

Relatrio
Sumrio

DB2 - CONCEITOS E UTILIZAO

19/11/98

REORG
A fase de UNLOAD dos registros de uma tabela.
Descarrega as ocorrncias na sequncia do ndice de clusterizao
Fase de RELOAD
carrega os dados de volta a tabela, respeitando os FREE PAGE,
PCTFREE, etc.
FASE de SORT
Sorteia as chaves dos ndices contidas no SYSUT1, gravando no
SORTOUT.
Fase de BUILD
Reconstro os ndices com a sada do SORT.

FASES DO REORG
Table
space

UNLOAD

Sada dos Dados


(SYSREC)
Entrada dos Dados
(SYSREC)

Table
space

RELOAD

Sysut1

Sysut1

Sortout

#59585

SORT

BUILD

Sortout

Indexes

113

DB2 - CONCEITOS E UTILIZAO

19/11/98

REORG

UNLOAD CONTINUE

RESTART

UNLOAD PAUSE
STOP
Edit/Field

UNLOAD ONLY
Edit/Field

Field/Edit

TERMINATE

LOAD REPLACE
Validation/Field/Edit

Existem 3 opo de UNLOAD para o utilitrio REORG.


1. Unload Continue
Todas as fases sero concludas em uma execuo
2. Unload Pause
O Utilitrio parado aps o Unload do Tablespace ou ndices.
O Utilitrio deve ser reestartdo para completar
O Edit and Field so invocados duranto o Unload e Reload Fases.
3. Unload Only
Aps a fase de Unload terminado o Utilid
A sada pode ser usada como entrada do utilitrio LOAD.

114 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

REORG
Exemplos de SYSIN:
//DSNUPROC.SYSIND DD *
REORG TABLESPACE PRD.EMPRESA
REORG TABLESPACE PRD.EMPRESA
REORG TABLESPACE PRD.EMPRESA
REORG TABLESPACE PRD.EMPRESA
REORG INDEX PRD.NDICE1

#59585

UNLOAD CONTINUE LOG NO


UNLOAD PAUSE LOG NO
UNLOAD ONLY
PART 3

115

DB2 - CONCEITOS E UTILIZAO

19/11/98

COPY

Cria um Backup do Tablespace


COPY TABLESPACE CURXDB01.CURXTS01
FULL YES SHRLEVEL REFERENCE
Permite Atualizao
Leitura compartilhada
Se no quiser compartilhar acesso a base, emita o comando no DB2:
-START DB(CURXDB01) SPACE(CURXTS01) ACCESS(UT)
Assim somente utilitrios podem agir sobre os Objetos.

Controle de Cpia Incremental


SPACE
MAP
PAGE

Altera Indicadores de Pginas

Altera bit no HEADER


DATA
PAGE

O Copy Full e Incremental desliga o bit.


Fazer sempre Image Copy FULL aps REORG LOG NO ou LOAD LOG
NO.
Se mais que 15% das pginas foram alteradas, opte por COPY FULL.
Especifique DISP=(MOD,CATLG) para permitir restart do utilitrio.

116 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

MERGECOPY

MERGECOPY

Image Copys Incremental


Incremental

Merge Image Copy

SYSIN:
MERGECOPY TABLESPACE PRD.EMPRESA NEWCOPY NO

Incremental

MERGECOPY

Full

Full Image Copy

SYSIN:
MERGECOPY TABLESPACE PRD.EMPRESA NEWCOPY YES

NEWCOPY YES insere um apontamentos no catalogo DB2 como FULL


Image Copy.
NEWCOPY NO atualiza os registros com Image Copy Incremental.

#59585

117

DB2 - CONCEITOS E UTILIZAO

19/11/98

RECOVERY
TABLESPACE
RECOVER

DATASET
RECOVER

TABLESPACE CURXDB01.EMPRESA
TABLESPACE CURXDB01.DEPTO

TABLESPACE CURXDB01.EMPRESA DSNUM 3


TABLESPACE CURXDB01.DEPTO
DSNUM 2

Funes do Utilitrio RECOVER


1.
2.
3.
4.
5.

Inicializao
Alocao Dinmica se no existir apontamento no statements DD
Define os datasets do Tablespaces.
Image Copy Merge e Restaura
Aplica a log.

ndices e Tablespace DB2 podem ser copiados por este utilitrio no DB2.
DB2 RECOVER aceita somente as seguintes entradas:
Image Copy + Log
Image Copy somente
Logs DB2 somente

118 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

RECOVERY

22:00

IMAGECOPY
EMPRESA FULL YES

RUN PROGRAM
XYZ

22:20

08:45

Descobre que programa


Atualizou dados errados

09:00

Restaurar a partir do ltimo


Image Copy

PONTOS DE RECOVERY
Permite restaurar ate:
Um especifico Full ou Incremental Image Copy
RECOVER .... TOCOPY I.D15.CUR.DBP0TS01.G0001V00
Um especifico LOG RBA.
RECOVER .... TORBA X005E00123456

#59585

119

DB2 - CONCEITOS E UTILIZAO

19/11/98

QUIESCE

Verifica restries para os tablespaces especificados e cria um ponto de


consistncia para eles. Para cada tabespace, o Quiesce cria uma entrada
na SYSCOPY com RBA vlido para a recuperao.
QUIESCE

TABLESPACE CURXDB01.CURXTS01
TABLESPACE CURXDB01.CURXTS02

REPORT
Listas dados sobre Tablespaces. O relatrio pode Ter 2 tipos de sadas:
TABLESPACESET Tablespace e tabelas que participam de
Relacionamento de Integridade Relacional (RI).
RECOVERY
- Informaes de recuperao a partir do catlogo,
diretrio e BSDS.

REPORT TABLESPACESET TABLESPACE CURXDB01.CURXTS01


REPORT RECOVERY TABLESPACE CURXDB01.CURXTS01.

120 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

INDEX RECOVERY
Fase UNLOAD

Fase SORT

Fase BUILD
Index1

UNLOAD
Sysut1
BUILD

Arquivo de Trabalho
Index2

SORT
Tablespace
Sysut1

Exemplos de SYSIN:
RECOVER INDEX(PRD.INDICE1, PRD.INDICE2)
RECOVER INDEX (ALL) TABLESPACE PRDXDB01.EMPRESA
RECOVER INDEX(PRD.INDICE1 PART 2)

#59585

121

DB2 - CONCEITOS E UTILIZAO

19/11/98

RECOVERY PENDING
Tablespace ou Index deve ser recuperado
1.
RECP significa que a partio de um Index ou Tablespace
esta pendente
2.
PSRCP significa que a entrada de um Index no particionado
esta com RECOVERY Pendente.
Acesso proibido exceto para:
1. RECOVER
2. LOAD REPLACE
3. REPAIR
4. MERGE COPY
-DISPLAY DB revela os status RECP/PSRCP
RECP/PSRCP resetado por:
1. RECOVER tablespace ou Index
2. LOAD REPLACE
3. REPAIR com SET NORCVRPEND
4. START DB .... ACCESS(FORCE)

RECOVERY PENDING segue as seguintes condies:


Condio
Term Util
Term Util

UTILITRIO FASE
Recover TS
-------Recover Index BUILD
RELOAD
Term Util
Reorg/Load
SORT
BUILD
Point in Time Recover
-------TS Recovery Tablespace

122 #59585

OBJETOS colocado em RECP


TABLESPACE
ndice ainda no construdos
Tablespace, Parties e ndices
Todos os ndices
ndice ainda no construdos
Todos os ndices

DB2 - CONCEITOS E UTILIZAO

19/11/98

MODIFY
Elimina Image Copy desnecessrios e log ranges do catlogo DB2, As
entradas so da SYSCOPY e SYSLGRNG.
Possvel acesso concorrente durante o MODIFY com exceo do SYSCOPY
e SYLGRNG.
Exemplo:
MODIFY RECOVERY TABLESPACE(CURXDB01.CURXTS01)
DELETE DATE(19981101).
MODIFY RECOVERY TABLESPACE(CURXDB01.CURXTS01)
DELETE AGE(90)
DELETE DATE eliminados as ocorrncias da data informada para trs
DELETE AGE todos ocorrncias com a quantidades de dias maior que a
informadas sero eliminadas.

DIAGNOSE
Ajuda no diagnstico de problemas de utilitrios.
Normalmente sua utilizao a pedido do SUPORTE IBM
STOSPACE
Colhe informao de espao alocado para cada Storage Groups,
Tablespaces e ndices relacionados. A informao registrada no
catlogo DB2.

#59585

123

DB2 - CONCEITOS E UTILIZAO

19/11/98

RUNSTATS
Varre um Tablespace ou ndice para atualizao no catlogo de
utilizao de espao e eficincia do ndices. Esses dados so
utilizados pelo otimizador do DB2.
O Runstats atualizadas as tabelas:
Estatstica usada pelo OTIMIZADOR
1.
SYSTABLES
2.
SYSTABLESPACE
3.
SYSINDEXES
4.
SYSCOLUMNS
5.
SYSCOLDIST

Outras para informaes do DBA


1.
SYSTABLEPART
2.
SYSINDEXPART
3.
SYSCOLDISTSTAS
4.
SYSCOLSTATS
5.
SYSINDEXSTATS
6.
SYSTABSTATS

REPAIR
Repara dado do usurio, ndices, catlogo, Space Map, etc.
REPAIR deve ser usado com extrema cautela.

124 #59585

DB2 - CONCEITOS E UTILIZAO

19/11/98

DSNTIAUL
Permite gerar um arquivo sequencial dos dados da tabelas, e um outro com
as informaes de onde inicia e termina os registros, alem das
informaes necessria para o LOAD.
Exemplo do JCL:
//UNLOAD EXEC PGM=IKJEFT01,DYNAMNBR=20
//SYSUDUMP DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSPUNCH DD DSN=P915537.FONTES.CAPXTS14,UNIT=SYSDA,
//
DISP=(,CATLG,DELETE),SPACE=(TRK,(50,10),RLSE)
//SYSREC00 DD DSN=P915537.DADOS.CAPXTS14,UNIT=SYSDA,
//
DISP=(,CATLG,DELETE),SPACE=(CYL,(80,05),RLSE)
//SYSTSIN DD *
DSN SYSTEM(DBP0)
RUN PROGRAM(DSNTIAUL) PLAN(DSNTIB41) PARMS('SQL') LIB('DB2P1.V4R1M0.RUNLIB.LOAD')
//SYSIN
DD *
SELECT * FROM SICAP.CAPXTB14ENTRADA
;
/*

#59585

125

DB2 - CONCEITOS E UTILIZAO

19/11/98

COMANDOS DB2
Principais comandos DB2
-DIS DB(ABE*) SPACE(*) LIMIT(*)
Verifica os status de todos os Tablespace e Indexspace do
DATABASE que comece com ABE.

-DIS DB(*) SPACE(*) LIMIT(*) RESTRICT


Verifica todos os Tablespaces e Indexspace com alguma Restrio

-START DB2 / -STOP DB2


Inicializa e encerra o DB2 (Comandos na console OS/390)

-DIS UTIL(*)
Mostra todos os UTILID com seus respectivos STATUS

-TERM UTIL(IMAGCCP)
Termina o UTILID IMAGCCP

-START DB(ABEXDB01) SPACE(*) ACCESS(RW)


Libera todos Indexspace e Tablespaces para acesso de READ/WRITE

-START DB(ABEXDB01) SPACE(ABEXTS12,ABEXPX12) ACCESS(UT)


Starta os Tablespace ABEXTS12 e o Indexspace ABEXPX12 somente
para acesso de utilitrios DB2.

-DIS DB(ABEXDB01) SPACE(*) LIMIT(*) LOCKS


Mostra todos os Tablespaces e Indexspaces do Database ABEXDB01 e
as respectivas alocao.

-DIS THREAD(*)
Mostra todas as threads conectado ao DB2.

126 #59585