Вы находитесь на странице: 1из 0

Banco de Dados Oracle 10g:

Fundamentos de SQL II
Guia do Aluno Volume 1
D17111BP10
Produo 1.0
Junho 2004
D39569
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Esta documentao contm informaes de propriedade da Oracle Corporation. Ela
fornecida sob um contrato de licena que contm restries quanto ao uso e
divulgao, alm de ser protegida pela legislao de direitos autorais. proibida a
engenharia reversa do software. Se esta documentao for distribuda a uma
Agncia Governamental subordinada ao Departamento de Defesa dos EUA, ela ter
direitos restritos e o seguinte aviso dever ser aplicado:
Aviso de Direitos Restritos
A utilizao, a duplicao ou a divulgao pelo governo estar sujeita s restries
impostas a um software comercial e devero ser aplicadas as leis federais relativas a
um software com direitos restritos, como definidos no subpargrafo (c)(1)(ii) de
DFARS 252.227-7013, Rights in Technical Data and Computer Software (Direitos
sobre Dados Tcnicos e Software de Computadores) (outubro de 1988).
Este material, ou parte dele, no poder ser copiado de qualquer forma ou por
qualquer meio sem a prvia permisso expressa por escrito da Oracle Corporation.
Qualquer outra cpia constituir uma violao da legislao de direitos autorais e
poder resultar em indenizaes civis e/ou criminais.
Se esta documentao for distribuda a uma Agncia Governamental que no
pertena ao Departamento de Defesa dos EUA, ela ter "direitos restritos", conforme
definido no FAR 52.227-14, Rights in Data-General (Direitos Gerais sobre Dados),
incluindo Alternate III (Alternativa III) (junho de 1987).
As informaes contidas neste documento esto sujeitas a alteraes sem aviso
prvio. Se voc encontrar algum problema na documentao, envie ao departamento
Worldwide Education Services uma descrio de tal problema por escrito. Oracle
Corporation, 500 Oracle Parkway, Box SB-6, Redwood Shores, CA 94065 - USA.
Distribuidor no Brasil: Oracle do Brasil Sistemas Ltda. Rua Jos Guerra, 127, So
Paulo, SP - 04719-030 - Brasil - CNPJ: 59.456.277/0001-76. A Oracle Corporation
no garante que esta documentao esteja isenta de erros.
Oracle e todas as referncias a produtos da Oracle so marcas comerciais ou
registradas da Oracle Corporation.
Todos os outros nomes de empresas e produtos so usados com o nico propsito
de identificao e podem ser marcas comerciais dos respectivos proprietrios.
Autor
Priya Vennapusa
Revisores e
Colaboradores Tcnicos
Nancy Greenberg
Priya Nathan
Andrew Brannigan
Angelika Krupp
Brian Boxx
Christopher Lawless
Joel Goodman
Malika Marghadi
Marjolein Dekkers
Stefan Grenstad
Zarko Cesljas
Rosita Hanoman
Ruediger Steffan
Editor
Joseph Fernandez
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio
I Introduo
Objetivos I-2
Objetivos do Curso I-3
Viso Geral do Curso I-4
Sumrio I-6
1 Controlando o Acesso dos Usurios
Objetivos 1-2
Controlando o Acesso dos Usurios 1-3
Privilgios 1-4
Privilgios de Sistema 1-5
Criando Usurios 1-6
Privilgios de Sistema do Usurio 1-7
Concedendo Privilgios de Sistema 1-8
O Que uma Atribuio? 1-9
Criando e Concedendo Privilgios a uma Atribuio 1-10
Alterando a Senha 1-11
Privilgios de Objeto 1-12
Concedendo Privilgios de Objeto 1-14
Passando Privilgios 1-15
Confirmando Privilgios Concedidos com Grant 1-16
Revogando Privilgios de Objeto 1-17
Sumrio 1-19
Exerccio 1: Viso Geral 1-20
2 Gerenciar Objetos de Esquema
Objetivos 2-2
A Instruo ALTER TABLE 2-3
Adicionando uma Coluna 2-5
Modificando uma Coluna 2-6
Eliminando uma Coluna 2-7
A Opo SET UNUSED 2-8
Adicionando uma Sintaxe de Constraint 2-10
Adicionando uma Constraint 2-11
ON DELETE CASCADE 2-12
Adiando Constraints 2-13
Eliminando uma Constraint 2-14
Desativando Constraints 2-15
Ativando Constraints 2-16
Constraints em Cascata 2-18
Viso Geral de ndices 2-20
Contedo
iii
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
CREATE INDEX com a Instruo CREATE TABLE 2-21
ndices Baseados em Funo 2-23
Removendo um ndice 2-25
DROP TABLE ...PURGE 2-26
A Instruo FLASHBACK TABLE 2-27
Tabelas Externas 2-29
Criando um Diretrio para a Tabela Externa 2-31
Criando uma Tabela Externa 2-33
Criando uma Tabela Externa Usando ORACLE_LOADER 2-35
Consultando Tabelas Externas 2-37
Sumrio 2-38
Exerccio 2: Viso Geral 2-39
3 Manipulando Grandes Conjuntos de Dados
Objetivos 3-2
Usando Subconsultas para Manipular Dados 3-3
Copiando Linhas de Outra Tabela 3-4
Insero Usando uma Subconsulta como Destino 3-5
Recuperando Dados com uma Subconsulta como Origem 3-7
Atualizando Duas Colunas com uma Subconsulta 3-8
Atualizando Linhas com Base em Outra Tabela 3-9
Deletando Linhas com Base em Outra Tabela 3-10
Usando a Palavra-Chave WITH CHECK OPTION em Instrues DML 3-11
Viso Geral do Recurso de Default Explcito 3-12
Usando Valores de Default Explcitos 3-13
Viso Geral de Instrues INSERT em Vrias Tabelas 3-14
Tipos de Instrues INSERT em Vrias Tabelas 3-16
Instrues INSERT em Vrias Tabelas 3-17
INSERT ALL Incondicional 3-19
INSERT ALL Condicional 3-20
FIRST INSERT Condicional 3-22
INSERT de Criao de Piv 3-24
A Instruo MERGE 3-27
A Sintaxe da Instruo MERGE 3-28
Intercalando Linhas 3-29
Controlando Alteraes nos Dados 3-31
Exemplo de Flashback de Consulta de Verso 3-32
A Clusula VERSIONS BETWEEN 3-34
Sumrio 3-35
Exerccio 3: Viso Geral 3-36
4 Gerando Relatrios por Agrupamento de Dados Relacionados
Objetivos 4-2
Anlise de Functions de Grupo 4-3
iv
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Anlise da Clusula GROUP BY 4-4
Anlise da Clusula HAVING 4-5
GROUP BY com Operadores ROLLUP e CUBE 4-6
Operador ROLLUP 4-7
Operador ROLLUP: Exemplo 4-8
Operador CUBE 4-9
Operador CUBE: Exemplo 4-10
Function GROUPING 4-11
Function GROUPING: Exemplo 4-12
GROUPING SETS 4-13
GROUPING SETS: Exemplo 4-15
Colunas Compostas 4-17
Colunas Compostas: Exemplo 4-19
Agrupamentos Concatenados 4-21
Agrupamentos Concatenados: Exemplo 4-22
Sumrio 4-23
Exerccio 4: Viso Geral 4-24
5 Gerenciando Dados em Diferentes Fusos Horrios
Objetivos 5-2
Fusos Horrios 5-3
Parmetro de Sesso TIME_ZONE 5-4
CURRENT_DATE, CURRENT_TIMESTAMP e LOCALTIMESTAMP 5-5
CURRENT_DATE 5-6
CURRENT_TIMESTAMP 5-7
LOCALTIMESTAMP 5-8
DBTIMEZONE e SESSIONTIMEZONE 5-9
Tipo de Dados TIMESTAMP 5-10
Tipos de Dados TIMESTAMP 5-11
Campos TIMESTAMP 5-12
Diferena entre DATE e TIMESTAMP 5-13
Tipo de Dados TIMESTAMP WITH TIMEZONE 5-14
TIMESTAMP WITH TIMEZONE: Exemplo 5-15
TIMESTAMP WITH LOCAL TIMEZONE 5-16
TIMESTAMP WITH LOCAL TIMEZONE: Exemplo 5-17
Tipos de Dados INTERVAL 5-18
Campos INTERVAL 5-20
Tipo de Dados INTERVAL YEAR TO MONTH 5-21
INTERVAL YEAR TO MONTH Exemplo 5-22
Tipo de Dados INTERVAL DAY TO SECOND 5-23
Tipo de Dados INTERVAL DAY TO SECOND: Exemplo 5-24
EXTRACT 5-25
v
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
TZ_OFFSET 5-26
Converso de TIMESTAMP Usando FROM_TZ 5-28
Convertendo em TIMESTAMP Usando TO_TIMESTAMP e TO_TIMESTAMP_TZ 5-29
Converso de Intervalo de Tempo com TO_YMINTERVAL 5-30
Usando TO_DSINTERVAL: Exemplo 5-31
Horrio de Vero 5-32
Sumrio 5-34
Exerccio 5: Viso Geral 5-35
6 Recuperando Dados Usando Subconsultas
Objetivos 6-2
Subconsultas de Vrias Colunas 6-3
Comparaes de Colunas 6-4
Subconsulta de Comparao Emparelhada 6-5
Subconsulta de Comparao No Emparelhada 6-6
Expresses de Subconsultas Escalares 6-7
Subconsultas Escalares: Exemplos 6-8
Subconsultas Correlacionadas 6-10
Usando Subconsultas Correlacionadas 6-12
Usando o Operador EXISTS 6-14
Localizar Funcionrios com Pelo Menos um Subordinado 6-15
Localizar Todos os Departamentos sem Funcionrios 6-16
Instruo UPDATE Correlacionada 6-17
Usando a Subconsulta UPDATE Correlacionada 6-18
Instuo DELETE Correlacionada 6-20
Usando a Subconsulta DELETE Correlacionada 6-21
A Clusula WITH 6-22
Clusula WITH: Exemplo 6-23
Sumrio 6-25
Exerccio 6: Viso Geral 6-27
7 Recuperao Hierrquica
Objetivos 7-2
Dados de Amostra da Tabela EMPLOYEES 7-3
Estrutura em rvore Natural 7-4
Consultas Hierrquicas 7-5
Percorrendo a rvore 7-6
Percorrendo a rvore: De Baixo para Cima 7-8
Percorrendo a rvore: De Cima para Baixo 7-9
Classificando Linhas com a Pseudocoluna LEVEL 7-10
Formatando Relatrios Hierrquicos Usando LEVEL e LPAD 7-11
Reduzindo Ramificaes 7-13
Sumrio 7-14
Exerccio 7: Viso Geral 7-15
vi
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
8 Suporte a Expresses Comuns
Objetivos 8-2
Viso Geral de Expresses Comuns 8-3
Metacaracteres 8-4
Usando Metacaracteres 8-5
Observaes 8-6
Functions de Expresses Comuns 8-8
A Sintaxe da Function REGEXP 8-9
Executando Pesquisas Bsicas 8-10
Verificando a Presena de um Padro 8-11
Exemplo de Extrao de Substrings 8-12
Substituindo Padres 8-13
Expresses Comuns e Constraints de Verificao 8-14
Sumrio 8-15
Exerccio 8: Viso Geral 8-16
Apndice A: Solues dos Exerccios
Apndice B: Descries e Dados de Tabelas
Apndice C: Criando Scripts Avanados
Objetivos C-2
Usando SQL para Gerar SQL C-3
Criando um Script Bsico C-4
Controlando o Ambiente C-5
O Panorama Completo C-6
Fazendo Dump do Contedo de uma Tabela para um Arquivo C-7
Gerando um Predicado Dinmico C-9
Sumrio C-11
Apndice D: Componentes da Arquitetura Oracle
Objetivos D-2
Arquitetura do Banco de Dados Oracle: Viso Geral D-3
Arquitetura Fsica do Banco de Dados D-4
Arquivos de Controle D-5
Arquivos de Redo Log D-6
Tablespaces e Arquivos de Dados D-7
Segmentos, Extenses e Blocos D-8
Gerenciamento de Instncias Oracle D-9
Estruturas de Memria Oracle D-10
Processos Oracle D-12
Outras Estruturas Fsicas Importantes D-13
Processando uma Instruo SQL D-14
vii
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Estabelecendo Conexo com uma Instncia D-15
Processando uma Consulta D-17
O Shared Pool D-18
Cache de Buffer do Banco de Dados D-20
PGA (Program Global Area)
Processando uma Instruo DML D-22
Buffer de Redo Log D-24
Segmento de Rollback D-25
Processamento de COMMIT D-26
Sumrio D-28
ndice
Exerccios Adicionais
Solues dos Exerccios Adicionais
viii
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio - 2
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio - 3
Perfil
Antes de Iniciar o Curso
Antes de iniciar este curso, voc deve ter experincia prtica com SQL.
Pr-requisitos
Banco de Dados Oracle 10g: Fundamentos de SQL I
Organizao Deste Curso
Banco de Dados Oracle 10g: Fundamentos de SQL I I um curso conduzido por instrutor que contm
informaes tericas e exerccios prticos. As sesses de demonstrao on-line e os exerccios reforam as
tcnicas e os conceitos apresentados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio - 4
Publicaes Relacionadas
Publicaes Adicionais
Boletins de releases de sistemas
Guias de instalao e do usurio
Arquivos Read-me
Artigos do IOUG (International Oracle Users Group)
Oracle Magazine
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio - 5
Convenes Tipogrficas
Convenes Tipogrficas do Texto
Conveno Elemento Exemplo
Negrito Palavras e expresses
enfatizadas somente no
contedo da Web
Para navegar nessa aplicao, no clique
nos botes Back e Forward.
Itlico negrito Termos de glossrio (se
houver glossrio)
O Algoritmoinsere a nova chave.
Colchetes Nomes das teclas Pressione [Enter].
Maisculas e
minsculas
Botes,
caixas de seleo,
triggers,
janelas
Clique no boto Executable.
Marque a caixa de seleo Registration
Required.
Designe um trigger When-Validate-Item. - -
Abra a janela Master Schedule.
Sinais de
maior e menor
Menus ou caminhos Selecione File > Save.
Vrgulas Seqncias de teclas Pressione e solte estas teclas uma de
cada vez:
[Alt], [F], [D]
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio - 6
Convenes Tipogrficas (continuao)
Convenes Tipogrficas do Texto (continuao)
Conveno Objeto ou Termo Exemplo
Courier New,
distino entre
minsculas e
maisculas
Sada de cdigo,
elementos de cdigo
SQL e PL/SQL,
elementos de cdigo
Java, nomes de
diretrios, nomes de
arquivos, senhas,
nomes de caminho,
URLs, entrada do
usurio, nomes de
usurios
Sada de cdigo: debug.setiI,(300);
elementos de cdigo SQL: Use o comando SELECT para
exibir as informaes armazenadas na coluna last_name
da tabela emp.
Elementos de cdigo Java: A programao em Java envolve
as classes String e StringBuffer.
Nomes de diretrios: bin (DOS), $FMHOME (UNIX)
Nomes de arquivos: Localize o arquivo init.ora
Senhas: Use tiger como sua senha.
Caminhos: Abra c:\my_docs\projects.
URLs: V para http://www.oracle.com.
Entrada do usurio: Informe 300.
Nomes de usurios: Efetue logon como scott.
Inicial
maiscula
Labels de grficos (a
menos que o termo
seja um nome prprio)
Endereo do cliente (exceto Oracle Payables)
Itlico Palavras e expresses
enfatizadas em
publicaes impressas,
ttulos de manuais e
cursos, e variveis
No salve alteraes no banco de dados.
Para obter mais informaes, consulte Oracle7 Server SQL
Language Reference Manual.
Informe user_id@us.oracle.com, onde user_id o
nome do usurio.
.
Sinais de
adio
Combinaes de
teclas
Pressione e mantenha estas teclas pressionadas
simultaneamente: [Control] + [Alt] + [Delete]
Aspas Ttulos de lies e
captulos em
referncias cruzadas,
elementos de interface
com nomes longos
com apenas a inicial
em maiscula
Este assunto ser abordado na Unidade II, Lio 3,
"Trabalhando com Objetos".
Selecione "Include a reusable module component" e clique
em Finish.
Use a propriedade "WHERE clause of query".
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Prefcio - 7
Convenes Tipogrficas (continuao)
Convenes Tipogrficas em Caminhos de Navegao
Este curso usa caminhos de navegao simplificados, como o exemplo a seguir, para orient-lo nos
Aplicativos Oracle.
Exemplo:
Sumrio de Lotes de NFFs
(N) Invoice > Entry > Invoice Batches Summary (M) Query > Find (B) Approve
Esse caminho simplificado pode ser traduzido da seguinte forma:
1. (N) Na janela Navigator, selecione Invoice > Entry > Invoice Batches Summary.
2. (M) No menu, selecione Query > Find.
3. (B) Clique no boto Approve.
Notao:
(N) = Navigator (I) = cone
(M) = Menu (H) = Hiperlink
(T) = Guia (Tab) (B) = Boto
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Introduo
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II I-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Listar os objetivos do curso
Descrever as amostras de tabelas usadas no curso
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II I-3
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos do Curso
Aps concluir este curso, voc ser capaz de:
Usar tcnicas avanadas de recuperao de dados
via SQL para recuperar dados das tabelas do banco
de dados
Aplicar tcnicas avanadas em um exerccio que
simula uma situao real
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II I-4
Copyright 2004, Oracle. Todos os direitos reservados.
Viso Geral do Curso
Neste curso, voc usar tcnicas avanadas de
recuperao de dados via SQL, tais como:
Functions de data/horrio
Operadores ROLLUP, CUBE e GROUPING SETS
Consultas hierrquicas
Subconsultas correlacionadas
Instrues INSERT em vrias tabelas
Operao de intercalao
Tabelas externas
Uso de expresses comuns
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II I-5
Copyright 2004, Oracle. Todos os direitos reservados.
EMPLOYEES DEPARTMENTS
COUNTRIES REGIONS
LOCATIONS
Aplicao do Curso
Tabelas Usadas no Curso
As seguintes tabelas so usadas neste curso:
EMPLOYEES: A tabela EMPLOYEES contm informaes sobre todos os funcionrios,
como nomes e sobrenomes, IDs de cargo, salrios, datas de admisso, IDs de departamento
e IDs de gerente. Esta tabela filha da tabela DEPARTMENTS.
DEPARTMENTS: A tabela DEPARTMENTS contm informaes como ID de
departamento, nome do departamento, ID de gerente e ID de localizao. Esta a tabela de
chave primria da tabela EMPLOYEES.
LOCATIONS: Esta tabela contm informaes sobre a localizao do departamento. Ela
contm informaes sobre o ID do local, endereo, estado, provncia, cdigo postal e ID de
pas. a tabela de chave primria da tabela DEPARTMENTS e uma filha da tabela
COUNTRIES.
COUNTRIES: Esta tabela contm os nomes e as IDs dos pases e das regies. Ela uma
filha da tabela REGIONS. Esta a tabela de chave primria da tabela LOCATIONS.
REGIONS: Esta tabela contm IDs e nomes de regies de vrios pases. uma tabela de
chave primria da tabela COUNTRIES.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II I-6
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Neste lio, voc dever ter aprendido que:
Os objetivos do curso
As amostras de tabelas usadas no curso
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Controlando o Acesso dos Usurios
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Diferenciar privilgios de sistema de privilgios
de objeto
Conceder privilgios em tabelas
Exibir privilgios do dicionrio de dados
Conceder atribuies
Distinguir privilgios de atribuies
Objetivos
Nesta lio, voc aprender a controlar o acesso a objetos especficos do banco de dados e a
adicionar novos usurios com nveis distintos de privilgios de acesso.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-3
Copyright 2004, Oracle. Todos os direitos reservados.
Controlando o Acesso dos Usurios
Administrador do
banco de dados
Usurios
Nome de usurio e senha
Privilgios
Controlando o Acesso dos Usurios
Em um ambiente com vrios usurios, voc deve manter a segurana de acesso e uso do
banco de dados. Com a segurana de banco de dados do Oracle Server, voc pode fazer o
seguinte:
Controlar o acesso ao banco de dados
Permitir acesso a objetos especficos do banco de dados
Confirmar privilgios concedidos e recebidos com o dicionrio de dados Oracle
Criar sinnimos para objetos de banco de dados
possvel classificar a segurana de um banco de dados em duas categorias: segurana do
sistema e segurana de dados. A segurana do sistema abrange o acesso e o uso do banco de
dados no nvel do sistema, como o nome de usurio e a senha, o espao em disco alocado
para os usurios e as operaes do sistema que os usurios podem executar. A segurana do
banco de dados abrange o acesso e o uso dos objetos do banco de dados e as aes que os
usurios podem executar nesses objetos.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-4
Copyright 2004, Oracle. Todos os direitos reservados.
Privilgios
Segurana do banco de dados:
Segurana do sistema
Segurana de dados
Privilgios de sistema: acesso ao banco de dados.
Privilgios de objeto: manipulao do contedo dos
objetos do banco de dados
Esquemas: conjuntos de objetos, como tabelas,
views e seqncias
Privilgios
Privilgios so direitos de executar instrues SQL especficas. O DBA (administrador de
banco de dados) um usurio de alto nvel com a capacidade de criar usurios e conceder
com grant acesso de usurios ao banco de dados e seus objetos. Os usurios precisam de
privilgios do sistema para obter acesso ao banco de dados, e de privilgios de objeto para
manipular o contedo dos objetos do banco de dados. Tambm possvel oferecer aos
usurios o privilgio de conceder com grant privilgios adicionais a outros usurios ou
atribuies, que so grupos nomeados de privilgios relacionados.
Esquemas
Um esquema um conjunto de objetos, como tabelas, views e seqncias. O esquema
pertence a um usurio do banco de dados e tem o mesmo nome do usurio.
Para obter mais informaes, consulte o manual de referncia Application Developers
Guide Fundamentals do Banco de Dados Oracle 10g.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-5
Copyright 2004, Oracle. Todos os direitos reservados.
Privilgios de Sistema
Existem mais de 100 privilgios disponveis.
O administrador de banco de dados tem privilgios
de sistema de alto nvel para tarefas como:
Criar novos usurios
Remover usurios
Remover tabelas
Fazer backup de tabelas
Privilgios de Sistema
Existem mais de 100 privilgios de sistema distintos disponveis para usurios e atribuies.
Em geral, eles so fornecidos pelo administrador do banco de dados.
Privilgios Tpicos de DBA
Privilgio de Sistema Operaes Autorizadas
CREATE USER
O grantee pode criar outros usurios Oracle .
DROP USER
O grantee pode eliminar outro usurio.
DROP ANY TABLE
O grantee pode eliminar uma tabela de qualquer esquema.
BACKUP ANY TABLE
O grantee pode efetuar backup de qualquer tabela em
qualquer esquema com o utilitrio de exportao.
SELECT ANY TABLE
O grantee pode consultar tabelas, views ou snapshots de
qualquer esquema
CREATE ANY TABLE
O grantee pode criar tabelas em qualquer esquema.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-6
Copyright 2004, Oracle. Todos os direitos reservados.
Criando Usurios
O DBA cria usurios com a instruo CREATE USER.
CREATE USER HR
IDENTIFIED BY HR;
User created.
CREATE USER user
IDENTIFIED BY password;
Criando um Usurio
O DBA (administrador de banco de dados) cria o usurio executando a instruo CREATE
USER. Nesse momento, o usurio no tem privilgios. Depois, o DBA pode conceder com
grant privilgios a esse usurio. Esses privilgios determinam o que o usurio pode fazer no
nvel do banco de dados.
O slide informa a sintaxe resumida de criao de um usurio.
Na sintaxe:
user o nome do usurio a ser criado
Password especifica que o usurio deve efetuar login com esta senha
Para obter mais informaes, consulte "GRANT" e "CREATE USER" no manual Oracle
Database 10g SQL Reference.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-7
Copyright 2004, Oracle. Todos os direitos reservados.
Privilgios de Sistema de Usurio
Depois de criar um usurio, o DBA pode conceder
com grant privilgios de sistema especficos a ele.
Um desenvolvedor de aplicaes, por exemplo, pode
ter os seguintes privilgios de sistema:
CREATE SESSION
CREATE TABLE
CREATE SEQUENCE
CREATE VIEW
CREATE PROCEDURE
GRANT privilege [, privilege...]
TO user [, user| role, PUBLIC...];
Privilgios Tpicos de Usurio
Depois de criar um usurio, o DBA pode atribuir privilgios a ele.
Na sintaxe:
privilege o privilgio de sistema a ser concedido com grant
user |role|PUBLIC o nome do usurio, o nome da atribuio ou
PUBLIC designa que todo usurio receber o
privilgio
Observao: Os privilgios de sistema atuais podem ser encontrados na view de dicionrio
de dados SESSION_PRIVS.
Privilgio de Sistema Operaes Autorizadas
CREATE SESSION
Estabelecer conexo com o banco de dados
CREATE TABLE
Criar tabelas no esquema do usurio
CREATE SEQUENCE
Criar uma seqncia no esquema do usurio
CREATE VIEW
Criar uma view no esquema do usurio
CREATE PROCEDURE
Criar um procedure, uma function ou um package
armazenado no esquema do usurio
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-8
Copyright 2004, Oracle. Todos os direitos reservados.
Concedendo Privilgios de Sistema
O DBA pode conceder com grant privilgios de sistema
especficos a um usurio.
GRANT create session, create table,
create sequence, create view
TO scott;
Grant succeeded.
Concedendo Privilgios de Sistema
O DBA usa a instruo GRANT para alocar privilgios de sistema para o usurio. Aps
receber os privilgios, o usurio pode us-los imediatamente.
No exemplo do slide, o usurio Scott recebeu os privilgios para criar sesses, tabelas,
seqncias e views.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-9
Copyright 2004, Oracle. Todos os direitos reservados.
O Que uma Atribuio?
Alocando privilgios
sem uma atribuio
Alocando privilgios
com uma atribuio
Privilgios
Usurios
Gerente
O Que uma Atribuio?
Uma atribuio um grupo nomeado de privilgios relacionados que podem ser concedidos
com grant ao usurio. Esse mtodo facilita a revogao e a manuteno de privilgios.
Um usurio pode ter acesso a vrias atribuies e possvel designar a mesma atribuio a
vrios usurios. Em geral, as atribuies so criadas para aplicaes de banco de dados.
Criando e Designando uma Atribuio
Primeiro, o DBA deve criar a atribuio. Depois, ele pode designar privilgios e usurios
para a atribuio.
Sintaxe
CREATE ROLE role;
Na sintaxe:
role o nome da atribuio criada
Aps a criao da atribuio, o DBA pode usar a instruo GRANT para designar usurios e
privilgios atribuio.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-10
Copyright 2004, Oracle. Todos os direitos reservados.
Criando e Concedendo
Privilgios a uma Atribuio
Crie uma atribuio
Conceda privilgios a uma atribuio
Conceda uma atribuio a usurios
CREATE ROLE manager;
Role created.
GRANT create table, create view
TO manager;
Grant succeeded.
GRANT manager TO DE HAAN, KOCHHAR;
Grant succeeded.
Criando uma Atribuio
O exemplo do slide cria uma atribuio de gerente e permite que os gerentes criem tabelas e
views. Em seguida, a atribuio de gerente concedida com grant a DeHaan e Kochhar.
Agora, DeHaan e Kochhar podem criar tabelas e views.
Se os usurios receberam a concesso de vrias atribuies, eles recebero todos os
privilgios associados a todas as atribuies.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-11
Copyright 2004, Oracle. Todos os direitos reservados.
Alterando a Senha
O DBA cria sua conta de usurio e inicializa
sua senha.
Voc pode alterar sua senha com a instruo
ALTER USER.
ALTER USER HR
IDENTIFIED BY employ;
User altered.
Alterando a Senha
O DBA cria uma conta e inicializa uma senha para cada usurio. Voc pode alterar sua
senha com a instruo ALTER USER.
Sintaxe
ALTER USER user IDENTIFIED BY password;
Na sintaxe:
user o nome do usurio
password especifica a nova senha
Embora seja possvel usar essa instruo para alterar a senha, existem vrias outras opes.
Voc precisa ter o privilgio ALTER USER para alterar outras opes.
Para obter mais informaes, consulte o manual Oracle Database10g SQL Reference.
Observao: O SQL*Plus conta com um comando PASSWORD (PASSW) que pode ser
usado para alterar a senha de um usurio quando ele est conectado. Esse comando no se
encontra disponvel no iSQL*Plus.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-12
Copyright 2004, Oracle. Todos os direitos reservados.
Privilgios de Objeto
Privilgio de
Objeto Tabela View Seqncia Procedure
ALTER
DELETE
EXECUTE
INDEX
INSERT
REFERENCES
SELECT
UPDATE
Privilgios de Objeto
Um privilgio de objeto um privilgio ou direito de realizar determinada ao em uma
tabela, uma view, uma seqncia ou um procedure especfico. Cada objeto tem um conjunto
determinado de privilgios que podem ser concedidos. A tabela do slide lista os privilgios
de vrios objetos. Lembre-se de que os nicos privilgios que se aplicam a uma seqncia
so SELECT e ALTER. Voc pode restringir UPDATE, REFERENCES e INSERT com a
especificao de um subconjunto de colunas atualizveis. possvel restringir um privilgio
SELECT criando uma view com um subconjunto de colunas e concedendo com grant esse
privilgio view. Um privilgio concedido com grant em um sinnimo convertido em um
privilgio na tabela-base referenciada pelo sinnimo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-13
Copyright 2004, Oracle. Todos os direitos reservados.
Privilgios de Objeto
Os privilgios de objeto variam de acordo com
o objeto.
Um proprietrio tem todos os privilgios no objeto.
Um proprietrio pode conceder com grant privilgios
especficos em seus prprios objetos.
GRANT object_priv [(columns)]
ON object
TO {user|role|PUBLIC}
[WITH GRANT OPTION];
Concedendo Privilgios de Objeto
Existem privilgios de objeto distintos disponveis para tipos diferentes de objetos de
esquema. Um usurio tem automaticamente todos os privilgios para os objetos de esquema
contidos no seu prprio esquema. Um usurio pode conceder com grant privilgios de
objeto em qualquer objeto de seu prprio esquema a outros usurios ou atribuies. Se a
concesso incluir WITH GRANT OPTION, o grantee poder conceder com grant o
privilgio de objeto a outros usurios. Caso contrrio, ele poder usar o privilgio, mas sem
conced-lo a outros usurios.
Na sintaxe:
object_priv um privilgio de objeto a ser concedido com grant
ALL especifica todos os privilgios de objeto
columns especifica a coluna de uma tabela ou view na qual os
privilgios so concedidos com grant
ON object o objeto no qual os privilgios so concedidos com grant
TO identifica a quem o privilgio concedido com grant
PUBLIC concede privilgios de objeto a todos os usurios
WITH GRANT OPTION permite ao grantee conceder com grant os privilgios de
objeto a outros usurios e atribuies
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-14
Copyright 2004, Oracle. Todos os direitos reservados.
Concedendo Privilgios de Objeto
Conceda privilgios de consulta na tabela EMPLOYEES.
Conceda privilgios para atualizar colunas especficas
a usurios e atribuies.
GRANT select
ON employees
TO sue, rich;
Grant succeeded.
GRANT update (department_name, location_id)
ON departments
TO scott, manager;
Grant succeeded.
Diretrizes
Para conceder com grant privilgios em um objeto, esse objeto deve estar no seu
prprio esquema ou voc precisa ter recebido os privilgios WITH GRANT
OPTION.
Um proprietrio de objeto pode conceder qualquer privilgio no objeto a outros
usurios ou atribuies do banco de dados.
O proprietrio de um objeto adquire automaticamente todos os privilgios nesse
objeto.
O primeiro exemplo do slide concede aos usurios Sue e Rich o privilgio para consultar
a tabela EMPLOYEES. O segundo exemplo concede privilgios UPDATE em colunas
especficas da tabela DEPARTMENTS a Scott e atribuio de gerente.
Para usar uma instruo SELECT a fim de obter dados da tabela EMPLOYEES, Sue ou
Rich dever usar esta sintaxe:
SELECT * FROM HR.employees;
Como alternativa, esses usurios podem criar um sinnimo para a tabela e executar a
instruo SELECT com o sinnimo:
CREATE SYNONYM emp FOR HR.employees;
SELECT * FROM emp;
Observao: Em geral, os DBAs alocam privilgios de sistema. Qualquer usurio que
tenha um objeto pode conceder privilgios de objeto.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-15
Copyright 2004, Oracle. Todos os direitos reservados.
Passando Privilgios
Oferea a um usurio autoridade para passar
privilgios.
Permita a todos os usurios do sistema consultar
dados da tabela DEPARTMENTS de Alice.
GRANT select, insert
ON departments
TO scott
WITH GRANT OPTION;
Grant succeeded.
GRANT select
ON alice.departments
TO PUBLIC;
Grant succeeded.
Palavra-chave WITH GRANT OPTION
Um grantee que tenha recebido um privilgio com a clusula WITH GRANT OPTION
poder pass-lo a outros usurios e atribuies. Os privilgios de objeto concedidos com a
clusula WITH GRANT OPTION so revogados com revoke quando o privilgio do
concessor revogado.
O exemplo do slide concede ao usurio Scott acesso tabela DEPARTMENTS com os
privilgios para consult-la e adicionar linhas a ela. O exemplo tambm mostra que Scott
pode conceder com grant esses privilgios a outros.
Palavra-chave PUBLIC
Um proprietrio de uma tabela pode conceder com grant acesso a todos os usurios usando
a palavra-chave PUBLIC.
O segundo exemplo permite a todos os usurios do sistema consultar dados da tabela
DEPARTMENTS de Alice.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-16
Copyright 2004, Oracle. Todos os direitos reservados.
Confirmando Privilgios Concedidos com Grant
View de Dicionrio de Dados Descrio
ROLE_SYS_PRIVS Privilgios de sistema concedidos a
atribuies
ROLE_TAB_PRIVS Privilgios de tabela concedidos a
atribuies
USER_ROLE_PRIVS Atribuies acessveis ao usurio
USER_TAB_PRIVS_MADE Privilgios de objeto concedidos para os
objetos do usurio
USER_TAB_PRIVS_RECD Privilgios de objeto concedidos ao usurio
USER_COL_PRIVS_MADE Privilgios de objeto concedidos nas
colunas dos objetos do usurio
USER_COL_PRIVS_RECD Privilgios de objeto concedidos ao usurio
em colunas especficas
USER_SYS_PRIVS Privilgios de sistema concedidos ao usurio
Confirmando Privilgios Concedidos
Se voc tentar executar uma operao no autorizada por exemplo, deletar uma linha de
uma tabela na qual no tem o privilgio DELETE o Oracle Server no permitir que a
operao ocorra.
Se o Oracle Server enviar a mensagem de erro "table or view does not exist", voc executou
uma destas operaes:
Nomeou uma tabela ou uma view que no existe
Tentou executar uma operao em uma tabela ou view cujo privilgio apropriado voc
no tem
Voc pode acessar o dicionrio de dados para exibir os privilgios que tem. A tabela do
slide descreve diversas views de dicionrio de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-17
Copyright 2004, Oracle. Todos os direitos reservados.
Revogando Privilgios de Objeto
Use a instruo REVOKE para revogar privilgios
concedidos com grant a outros usurios.
Os privilgios concedidos a outros atravs da
clusula WITH GRANT OPTION tambm so
revogados com revoke.
REVOKE {privilege [, privilege...]|ALL}
ON object
FROM {user[, user...]|role|PUBLIC}
[CASCADE CONSTRAINTS];
Revogando Privilgios de Objeto
Voc pode remover privilgios concedidos a outros usurios usando a instruo REVOKE.
Quando voc usa a instruo REVOKE, os privilgios especificados so revogados dos
usurios nomeados e dos outros usurios aos quais esses privilgios so concedidos pelo
usurio revogado.
Na sintaxe:
A opo CASCADE necessria para remover constraints de integridade referenciais feitas
para o objeto CONSTRAINTS por meio do privilgio REFERENCES
Para obter mais informaes, consulte o manual Oracle Database10g SQL Reference.
Observao: Se um usurio sair da empresa e for necessrio revogar os privilgios dele,
conceda novamente os privilgios que ele possa ter concedido a outros usurios. Se voc
eliminar a conta do usurio sem revogar os respectivos privilgios, os privilgios de sistema
concedidos por esse usurio a outros usurios no sero afetados por essa ao.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-18
Copyright 2004, Oracle. Todos os direitos reservados.
Revogando Privilgios de Objeto
Como usuria Alice, revogue os privilgios SELECT e
INSERT concedidos com grant ao usurio Scott na
tabela DEPARTMENTS.
REVOKE select, insert
ON departments
FROM scott;
Revoke succeeded.
Revogando Privilgios de Objeto (continuao)
O exemplo do slide revoga os privilgios SELECT e INSERT concedidos com grant ao
usurio Scott na tabela DEPARTMENTS.
Observao: Se for concedido a um usurio um privilgio com a clusula WITH GRANT
OPTION, esse usurio tambm poder conceder o privilgio com essa clusula,
possibilitando a existncia de uma longa cadeia de grantees, mas no so permitidos grants
circulares. Se o proprietrio revogar com revoke um privilgio de um usurio que concedeu
com grant esse privilgio a outros usurios, todos os privilgios concedidos sero revogados
em cascata.
Por exemplo, se o usurio A conceder com grant o privilgio SELECT em uma tabela ao
usurio B, incluindo a clusula WITH GRANT OPTION, o usurio B tambm poder
conceder ao usurio C o privilgio SELECT com a mesma clusula, e o usurio C poder,
ento, conceder ao usurio D o privilgio SELECT. Se o usurio A revogar com revoke os
privilgios do usurio B, os privilgios concedidos com grant aos usurios C e D tambm
sero revogados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-19
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc conheceu as instrues que controlam
o acesso ao banco de dados e aos respectivos objetos.
Instruo Ao
CREATE USER Cria um usurio (geralmente executado por
um DBA)
GRANT Concede a outros usurios privilgios para
acessar os objetos
CREATE ROLE Cria um conjunto de privilgios (geralmente
executado por um DBA)
ALTER USER Altera a senha de um usurio
REVOKE Remove os privilgios de usurio sobre um
objeto
Sumrio
Os DBAs estabelecem a segurana do banco de dados inicial para os usurios, designando
privilgios aos usurios.
O DBA cria usurios que precisam ter uma senha. O DBA tambm responsvel pela
definio dos privilgios de sistema iniciais de um usurio.
Depois que o usurio cria um objeto, ele pode passar qualquer um dos privilgios de
objeto disponveis a outros usurios ou a todos os usurios, usando a instruo GRANT.
Um DBA pode criar atribuies usando a instruo CREATE ROLE para passar um
conjunto de privilgios de sistema ou de objeto a vrios usurios. As atribuies
facilitam a manuteno da concesso e da revogao de privilgios.
Os usurios podem alterar suas senhas com a instruo ALTER USER.
Voc pode remover os privilgios de usurios com a instruo REVOKE.
Com as views de dicionrio de dados, os usurios podem exibir os privilgios que
receberam e os que foram concedidos aos seus objetos.
Com os vnculos de bancos de dados, voc pode acessar dados de bancos de dados
remotos. Os privilgios no podem ser concedidos a objetos remotos.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-20
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 1: Viso Geral
Este exerccio aborda os seguintes tpicos:
Concedendo privilgios a outros usurios sobre a
sua tabela
Modificando a tabela de outro usurio usando os
privilgios concedidos a voc
Criando um sinnimo
Consultando as views de dicionrio de dados
relacionadas a privilgios
Exerccio 1: Viso Geral
Forme um grupo com outros alunos para fazer este exerccio sobre controle de acesso aos
objetos do banco de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-21
Exerccio 1
Para responder da pergunta 6 em diante, voc precisar conectar-se ao banco de dados
usando o iSQL*Plus. Para isso, acione o browser Internet Explorer no computador cliente.
Informe o URL no formato http://machinename:5561/isqlplus/ e use a conta oraxx, a
respectiva senha e o identificador de servio (no formato Tx) fornecidos pelo instrutor para
efetuar o logon no banco de dados.
1. Que privilgio deve ser concedido a um usurio para que ele efetue logon no
servidor Oracle? Este privilgio de sistema ou de objeto?
______________________________________________________________
2. Que privilgio deve ser concedido a um usurio para que ele crie tabelas?
______________________________________________________________
3. Se voc criar uma tabela, quem poder passar privilgios a outros usurios da sua
tabela?
______________________________________________________________
4. Voc o DBA. Voc est criando vrios usurios que precisam dos mesmos
privilgios de sistema. O que voc deve usar para facilitar o seu trabalho?
______________________________________________________________
5. Que comando voc pode usar para alterar a senha?
______________________________________________________________
6. Conceda a outro usurio acesso sua tabela DEPARTMENTS. Faa com que o
usurio conceda a voc acesso de consulta tabela DEPARTMENTS dele.
7. Consulte todas as linhas da tabela DEPARTAMENTS.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-22
Exerccio 1 (continuao)
8. Adicione uma nova linha tabela DEPARTMENTS. A Equipe 1 deve adicionar
Educao como departamento nmero 500. A Equipe 2 deve adicionar Recursos
Humanos como departamento nmero 510. Consulta a tabela da outra equipe.
9. Crie um sinnimo para a tabela DEPARTMENTS da outra equipe.
10. Consulte todas as linhas da tabela DEPARTMENTS da outra equipe, usando o
sinnimo.
Resultados da instruo SELECT da Equipe 1:
Resultados da instruo SELECT da Equipe 2:

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 1-23
Exerccio 1 (continuao)
11. Consulte o dicionrio de dados USER_TABLES para ver as informaes das suas
tabelas.
12. Consulte a view de dicionrio de dados ALL_TABLES para ver as informaes de
todas as tabelas que voc pode acessar. Exclua as suas tabelas.
Observao: Talvez a sua lista no corresponda exatamente lista mostrada
abaixo.
13. Revogue o privilgio SELECT da outra equipe.
14. Remova a linha que voc inseriu na tabela DEPARTMENTS na etapa 8 e salve as
alteraes.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Gerenciar Objetos de Esquema
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Adicionar constraints
Criar ndices
Criar ndices usando a instruo CREATE TABLE
Criar ndices baseados em funo
Eliminar colunas e definir uma coluna como UNUSED
Executar operaes FLASHBACK
Criar e usar tabelas externas
Objetivos
Esta lio contm informaes sobre a criao de ndices e constraints e a alterao de
objetos existentes. Voc tambm conhecer as tabelas externas e a nomeao do ndice
durante a criao da constraint de chave primria.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-3
Copyright 2004, Oracle. Todos os direitos reservados.
A Instruo ALTER TABLE
Use a instruo ALTER TABLE para:
Adicionar uma nova coluna
Modificar uma coluna existente
Definir um valor default para a nova coluna
Eliminar uma coluna
A Instruo ALTER TABLE
Depois de criar uma tabela, talvez voc precise alterar sua estrutura para acrescentar uma
coluna omitida, alterar a definio de uma coluna ou remover colunas. Para fazer isso, use a
instruo ALTER TABLE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-4
Copyright 2004, Oracle. Todos os direitos reservados.
A Instruo ALTER TABLE
Use a instruo ALTER TABLE para adicionar, modificar
ou eliminar colunas.
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[, column datatype]...);
ALTER TABLE table
MODIFY (column datatype [DEFAULT expr]
[, column datatype]...);
ALTER TABLE table
DROP (column);
A Instruo ALTER TABLE (continuao)
Voc pode adicionar, modificar e eliminar colunas de uma tabela usando a instruo
ALTER TABLE.
Na sintaxe:
table o nome da tabela
ADD|MODIFY|DROP o tipo de modificao
column o nome da nova coluna
datatype o tipo de dados e o tamanho da nova coluna
DEFAULT expr especifica o valor default para uma nova coluna
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-5
Copyright 2004, Oracle. Todos os direitos reservados.
Adicionando uma Coluna
Use a clusula ADD para adicionar colunas.
A nova coluna ser a ltima coluna.

ALTER TABLE dept80


ADD (job_id VARCHAR2(9));
Table altered.
Diretrizes para Adicionar uma Coluna
Voc pode adicionar ou modificar colunas.
No possvel especificar onde a coluna ser exibida. A nova coluna ser a ltima
coluna.
O exemplo do slide adiciona uma coluna denominada JOB_ID tabela DEPT80. A coluna
JOB_ID torna-se a ltima coluna da tabela.
Observao: Se uma tabela j contiver linhas quando uma coluna for adicionada,
inicialmente, todas as linhas da nova coluna tero valores nulos. No possvel adicionar
uma coluna NOT NULL obrigatria a uma tabela que contm dados nas outras colunas. S
possvel adicionar uma coluna NOT NULL a uma tabela vazia.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-6
Copyright 2004, Oracle. Todos os direitos reservados.
Modificando uma Coluna
Voc pode alterar o tipo de dados, o tamanho e o
valor default de uma coluna.
Uma alterao no valor default afeta apenas as
inseres subseqentes na tabela.
ALTER TABLE dept80
MODIFY (last_name VARCHAR2(30));
Table altered.
Modificando uma Coluna
Voc pode modificar a definio de uma coluna usando a instruo ALTER TABLE com a
clusula MODIFY. A modificao de uma coluna pode incluir alteraes de tipo de dados,
tamanho e valor default da coluna.
Diretrizes
Voc pode aumentar a largura ou a preciso de uma coluna numrica.
possvel aumentar a largura de colunas numricas ou de caracteres.
Voc pode diminuir a largura de uma coluna se:
A coluna contiver apenas valores nulos
A tabela no tiver nenhuma linha
A reduo na largura da coluna no for inferior aos valores existentes nessa
coluna
Voc poder alterar o tipo de dados se a coluna contiver apenas valores nulos. A
exceo a essa regra a converso de CHAR em VARCHAR2, que pode ser feita com
dados contidos nas colunas.
Voc s poder converter uma coluna com o tipo de dados CHAR em VARCHAR2 ou
vice-versa se a coluna contiver valores nulos ou se seu tamanho no for alterado.
Uma alterao no valor default de uma coluna afeta apenas as inseres subseqentes
na tabela.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-7
Copyright 2004, Oracle. Todos os direitos reservados.
Eliminando uma Coluna
Use a clusula DROP COLUMN para eliminar da tabela
as colunas que no so mais necessrias.
ALTER TABLE dept80
DROP COLUMN job_id;
Table altered.
Eliminando uma Coluna
Voc pode eliminar uma coluna de uma tabela usando a instruo ALTER TABLE com a
clusula DROP COLUMN.
Diretrizes
A coluna pode ou no conter dados.
Com a instruo ALTER TABLE, s possvel eliminar uma coluna por vez.
A tabela deve reter, pelo menos, uma coluna depois de alterada.
No possvel recuperar uma coluna depois de eliminada.
No possvel eliminar uma coluna se ela fizer parte de uma constraint ou de uma
chave de ndice, a menos que a opo de cascata seja adicionada.
A eliminao de uma coluna pode demorar um pouco quando ela tem muitos valores.
Nesse caso, talvez seja melhor defini-la como no utilizada e elimin-la quando o
nmero de usurios no sistema diminuir, a fim de evitar bloqueios de longa durao.
Observao: Algumas colunas no podem ser eliminadas. Este o caso das colunas que
fazem parte da chave de particionamento de uma tabela particionada ou das colunas que
fazem parte da chave primria de uma tabela organizada por ndice.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-8
Copyright 2004, Oracle. Todos os direitos reservados.
A Opo SET UNUSED
Use a opo SET UNUSED para marcar uma ou mais
colunas como no utilizadas.
Use a opo DROP UNUSED COLUMNS para remover
colunas marcadas como no utilizadas.
ALTER TABLE <table_name>
SET UNUSED(<column_name>);
ALTER TABLE <table_name>
SET UNUSED COLUMN <column_name>;
OU
ALTER TABLE <table_name>
DROP UNUSED COLUMNS;
A Opo SET UNUSED
A opo SET UNUSED marca uma ou mais colunas como no utilizadas de forma que elas
possam ser eliminadas quando a demanda de recursos do sistema for menor. A
especificao dessa clusula, na verdade, no remove as colunas de destino de cada linha da
tabela (isto , no restaura o espao em disco usado por essas colunas). Portanto, o tempo de
resposta mais rpido do que se voc executasse a clusula DROP. As colunas no
utilizadas so tratadas como se tivessem sido eliminadas, embora os respectivos dados
permaneam nas linhas da tabela. Voc no ter mais acesso a uma coluna depois que ela
for marcada como no utilizada. Uma consulta SELECT * no recuperar dados de colunas
no utilizadas. Alm disso, os nomes e os tipos de colunas marcadas como no utilizadas
no sero exibidos durante uma instruo DESCRIBE, e voc poder adicionar uma nova
coluna tabela com o mesmo nome da coluna no utilizada. As informaes da opo SET
UNUSED so armazenadas na view de dicionrio de dados USER_UNUSED_COL_TABS.
Observao: As diretrizes para definir colunas como UNUSED so semelhantes s usadas
para elimin-las.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-9
A Opo DROP UNUSED COLUMNS
A opo DROP UNUSED COLUMNS remove da tabela todas as colunas marcadas como
no utilizadas no momento. Voc poder usar essa instruo quando quiser solicitar o
espao extra em disco de colunas no utilizadas da tabela. Se a tabela no contiver colunas
no utilizadas, a instruo no retornar erros.
ALTER TABLE dept80
SET UNUSED (last_name);
Table altered.
ALTER TABLE dept80
DROP UNUSED COLUMNS;
Table altered.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-10
Copyright 2004, Oracle. Todos os direitos reservados.
Adicionando uma Sintaxe de Constraint
Use a instruo ALTER TABLE para:
Adicionar ou eliminar uma constraint, mas no para
modificar sua estrutura
Ativar ou desativar constraints
Adicionar uma constraint NOT NULL usando a
clusula MODIFY
ALTER TABLE <table_name>
ADD [CONSTRAINT <constraint_name>]
type (<column_name>);
Adicionando uma Constraint
Voc pode adicionar uma constraint para tabelas existentes usando a instruo ALTER
TABLE com a clusula ADD.
Na sintaxe:
table o nome da tabela
constraint o nome da constraint
type o tipo de constraint
column o nome da coluna afetada pela constraint
A sintaxe de nome de constraint opcional, embora recomendada. Se voc no nomear suas
constraints, o sistema gerar nomes para elas.
Diretrizes
Voc pode adicionar, eliminar, ativar ou desativar uma constraint, mas no pode
modificar sua estrutura.
Voc pode adicionar uma constraint NOT NULL a uma coluna existente usando a
clusula MODIFY da instruo ALTER TABLE.
Observao: Voc s poder definir uma coluna NOT NULL se a tabela estiver vazia ou se
a coluna tiver um valor para cada linha.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-11
Copyright 2004, Oracle. Todos os direitos reservados.
Adicionando uma Constraint
Adicione uma constraint FOREIGN KEY tabela EMP2
para indicar que j deve existir um gerente como
funcionrio vlido nessa tabela.
ALTER TABLE emp2
modify employee_id Primary Key;
Table altered.
ALTER TABLE emp2
ADD CONSTRAINT emp_mgr_fk
FOREIGN KEY(manager_id)
REFERENCES emp2(employee_id);
Table altered.
Adicionando uma Constraint (continuao)
O primeiro exemplo do slide modifica a tabela EMP2 para adicionar uma constraint
PRIMARY KEY coluna EMPLOYEE_ID. Observe que, como no foi especificado
nenhum nome de constraint, a constraint automaticamente nomeada pelo servidor Oracle.
O segundo exemplo do slide cria uma constraint FOREIGN KEY na tabela EMP2. A
constraint garante que exista um gerente na condio de funcionrio vlido na tabela EMP2.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-12
Copyright 2004, Oracle. Todos os direitos reservados.
ON DELETE CASCADE
Delete linhas filhas quando uma chave me for
deletada.
ALTER TABLE Emp2 ADD CONSTRAINT emp_dt_fk
FOREIGN KEY (Department_id)
REFERENCES departments ON DELETE CASCADE);
Table altered.
ON DELETE CASCADE
A ao ON DELETE CASCADE permite a deleo, mas no a atualizao, de dados da
chave me referenciados pela tabela filha. Quando os dados da chave me so deletados,
tambm so deletadas todas as linhas da tabela filha que dependem dos valores deletados da
chave me. Para especificar essa ao referencial, inclua a opo ON DELETE CASCADE
na definio da constraint FOREIGN KEY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-13
Copyright 2004, Oracle. Todos os direitos reservados.
Adiando Constraints
As constraints podem ter os seguintes atributos:
DEFERRABLE ou NOT DEFERRABLE
INITIALLY DEFERRED ou INITIALLY IMMEDIATE
ALTER TABLE dept2
ADD CONSTRAINT dept2_id_pk
PRIMARY KEY (department_id)
DEFERRABLE INITIALLY DEFERRED
ALTER SESSION
SET CONSTRAINTS= IMMEDIATE
SET CONSTRAINTS dept2_id_pk IMMEDIATE
Adiando uma constraint
durante a criao
Alterando todas as
constraints para uma sesso
Alterando um atributo
especfico de constraint
Adiando Constraints
Voc pode adiar a verificao da validade das constraints at o fim da transao. Uma
constraint ser adiada se o sistema verificar que ela s atendida no commit. Se uma
constraint adiada for violada, o commit causar o rollback da transao. Se uma constraint
for imediata (no adiada), ela ser verificada ao final de cada instruo. Se ela for violada, o
rollback da instruo ocorrer imediatamente. Se uma constraint gerar uma ao (por
exemplo, DELETE CASCADE), essa ao sempre ser considerada como parte da instruo
que a causou, sendo que a constraint pode ser imediata ou adiada. Use a instruo SET
CONSTRAINTS para especificar, para determinada transao, se uma constraint adivel
verificada aps cada instruo DML ou quando a transao submetida a commit. A fim de
criar constraints adiveis, voc deve criar um ndice no exclusivo para essa constraint.
Voc pode definir uma constraint como adivel ou no adivel, e como inicialmente adivel
ou inicialmente imediata. Esses atributos podem ser diferentes para cada constraint.
Cenrio de uso: A poltica da empresa determina que o nmero de departamento 40 deve
ser alterado para 45. A alterao da coluna DEPARTMENT_ID afeta os funcionrios
atribudos a esse departamento. Portanto, voc torna a chave primria e as chaves
estrangeiras adiveis e inicialmente adiadas. Voc atualiza as informaes de departamentos
e funcionrios e, no momento do commit, todas as linhas so validadas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-14
Copyright 2004, Oracle. Todos os direitos reservados.
Eliminando uma Constraint
Remova a constraint de gerente da tabela EMP2.
Remova a constraint PRIMARY KEY da tabela DEPT2
e elimine a constraint FOREIGN KEY associada da
coluna EMP2.DEPARTMENT_ID.
ALTER TABLE emp2
DROP CONSTRAINT emp_mgr_fk;
Table altered.
ALTER TABLE dept2
DROP PRIMARY KEY CASCADE;
Table altered.
Eliminando uma Constraint
Para eliminar uma constraint, voc pode identificar o respectivo nome nas views de
dicionrio de dados USER_CONSTRAINTS e USER_CONS_COLUMNS. Depois, use a
instruo ALTER TABLE com a clusula DROP. A opo CASCADE da clusula DROP
elimina tambm as constraints dependentes.
Sintaxe
ALTER TABLE table
DROP PRIMARY KEY | UNIQUE (column) |
CONSTRAINT constraint [CASCADE];
Na sintaxe:
table o nome da tabela
column o nome da coluna afetada pela constraint
constraint o nome da constraint
Quando voc elimina uma constraint de integridade, ela no mais imposta pelo servidor
Oracle e no continua disponvel no dicionrio de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-15
Copyright 2004, Oracle. Todos os direitos reservados.
Desativando Constraints
Execute a clusula DISABLE da instruo ALTER
TABLE para desativar uma constraint de integridade.
Aplique a opo CASCADE para desativar as
constraints de integridade dependentes.
ALTER TABLE emp2
DISABLE CONSTRAINT emp_dt_fk;
Table altered.
Desativando uma Constraint
Voc pode desativar uma constraint sem elimin-la, ou recri-la usando a instruo ALTER
TABLE com a clusula DISABLE.
Sintaxe
ALTER TABLE table
DISABLE CONSTRAINT constraint [CASCADE];
Na sintaxe:
table o nome da tabela
constraint o nome da constraint
Diretrizes
Voc pode usar a clusula DISABLE nas instrues CREATE TABLE e ALTER
TABLE.
A clusula CASCADE desativa constraints de integridade dependentes.
A desativao de uma constraint de chave exclusiva ou primria remove o ndice
exclusivo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-16
Copyright 2004, Oracle. Todos os direitos reservados.
Ativando Constraints
Ative uma constraint de integridade desativada no
momento da definio da tabela usando a clusula
ENABLE.
Um ndice UNIQUE ser automaticamente criado se
voc ativar uma constraint de chave UNIQUE ou
PRIMARY.
ALTER TABLE emp2
ENABLE CONSTRAINT emp_dt_fk;
Table altered.
Ativando uma Constraint
Voc pode ativar uma constraint sem elimin-la, ou recri-la usando a instruo ALTER
TABLE com a clusula ENABLE.
Sintaxe
ALTER TABLE table
ENABLE CONSTRAINT constraint;
Na sintaxe:
table o nome da tabela
constraint o nome da constraint
Diretrizes
Se voc ativar uma constraint, ela ser aplicada a todos os dados da tabela. Todos os
dados da tabela devem estar de acordo com a constraint.
Se voc ativar uma chave UNIQUE ou PRIMARY, um ndice de chave UNIQUE ou
PRIMARY ser criado automaticamente. Caso j exista um ndice, ele poder ser usado
por essas chaves.
Voc pode usar a clusula ENABLE nas instrues CREATE TABLE e ALTER
TABLE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-17
Adicionando uma Constraint (continuao)
Diretrizes (continuao)
A ativao de uma constraint de chave primria que tenha sido desativada com a opo
CASCADE no ativar as chaves estrangeiras dependentes da chave primria.
Para ativar uma constraint de chave UNIQUE ou PRIMARY, voc deve ter os
privilgios necessrios para criar um ndice na tabela.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-18
Copyright 2004, Oracle. Todos os direitos reservados.
Constraints em Cascata
A clusula CASCADE CONSTRAINTS usada com a
clusula DROP COLUMN.
A clusula CASCADE CONSTRAINTS elimina todas as
constraints de integridade referencial que fazem
referncia a chaves primrias e exclusivas definidas
nas colunas eliminadas.
A clusula CASCADE CONSTRAINTS tambm elimina
as constraints de vrias colunas definidas nas
colunas eliminadas.
Constraints em Cascata
Esta instruo ilustra o uso da clusula CASCADE CONSTRAINTS. Suponha que a tabela
TEST1 seja criada da seguinte maneira:
CREATE TABLE test1 (
pk NUMBER PRIMARY KEY,
fk NUMBER,
col1 NUMBER,
col2 NUMBER,
CONSTRAINT fk_constraint FOREIGN KEY (fk) REFERENCES test1,
CONSTRAINT ck1 CHECK (pk > 0 and col1 > 0),
CONSTRAINT ck2 CHECK (col2 > 0));
Ser retornado um erro para as seguintes instrues:
ALTER TABLE test1 DROP (pk); pk uma chave me.
ALTER TABLE test1 DROP (col1); col1 referenciado pela constraint
de vrias colunas ck1.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-19
Copyright 2004, Oracle. Todos os direitos reservados.
Constraints em Cascata
Exemplo:
ALTER TABLE emp2
DROP COLUMN employee_id CASCADE CONSTRAINTS;
Table altered.
ALTER TABLE test1
DROP (pk, fk, col1) CASCADE CONSTRAINTS;
Table altered.
Constraints em Cascata (continuao)
A submisso da seguinte instruo elimina a coluna EMPLOYEE_ID, a constraint de chave
primria e todas as constraints de chave estrangeira que faam referncia constraint de
chave primria para a tabela EMP2:
ALTER TABLE emp2 DROP COLUMN employee_id CASCADE CONSTRAINTS;
Se todas as colunas s quais as constraints definidas nas colunas eliminadas fizerem
referncia tambm forem eliminadas, a clusula CASCADE CONSTRAINTS no ser
necessria. Por exemplo, supondo que nenhuma constraint referencial de outras tabelas faa
referncia coluna PK, ser vlido submeter a seguinte instruo, sem a clusula CASCADE
CONSTRAINTS, para a tabela TEST1 criada na pgina anterior:
ALTER TABLE test1 DROP (pk, fk, col1);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-20
Copyright 2004, Oracle. Todos os direitos reservados.
Viso Geral de ndices
Os ndices so criados:
Automaticamente:
Criao de PRIMARY KEY
Criao de UNIQUE KEY
Manualmente
Instruo CREATE INDEX
Instruo CREATE TABLE
Viso Geral de ndices
possvel criar dois tipos de ndice. Um tipo o ndice exclusivo. O servidor Oracle cria
automaticamente um ndice exclusivo quando voc define uma constraint de chave
PRIMARY ou UNIQUE para uma coluna ou um grupo de colunas de uma tabela. O nome do
ndice aquele especificado para a constraint.
O outro tipo o ndice no exclusivo, que pode ser criado pelo usurio. Por exemplo, voc
pode criar um ndice para uma coluna FOREIGN KEY para ser usado em joins a fim de
aumentar a velocidade de recuperao.
Voc pode criar um ndice em uma ou mais colunas executando a instruo CREATE
INDEX.
Para obter mais informaes, consulte o manual Oracle Database 10g SQL Reference.
Observao: Voc pode criar manualmente um ndice exclusivo, mas recomendvel criar
uma constraint exclusiva, que gera implicitamente um ndice exclusivo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-21
Copyright 2004, Oracle. Todos os direitos reservados.
CREATE INDEX com a
Instruo CREATE TABLE
CREATE TABLE NEW_EMP
(employee_id NUMBER(6)
PRIMARY KEY USING INDEX
(CREATE INDEX emp_id_idx ON
NEW_EMP(employee_id)),
first_name VARCHAR2(20),
last_name VARCHAR2(25));
Table created.
SELECT INDEX_NAME, TABLE_NAME
FROM USER_INDEXES
WHERE TABLE_NAME = 'NEW_EMP';
CREATE INDEX com a Instruo CREATE TABLE
No exemplo do slide, a clusula CREATE INDEX usada com a instruo CREATE
TABLE para criar um ndice de chave primria explicitamente. Voc pode nomear os
ndices no momento da criao da chave primria para diferenci-lo do nome da constraint
PRIMARY KEY. O exemplo a seguir ilustra o comportamento do banco de dados se o
ndice no for explicitamente nomeado:
CREATE TABLE EMP_UNNAMED_INDEX
(employee_id NUMBER(6) PRIMARY KEY ,
first_name VARCHAR2(20),
last_name VARCHAR2(25));
Table created.
SELECT INDEX_NAME, TABLE_NAME
FROM USER_INDEXES
WHERE TABLE_NAME = 'EMP_UNNAMED_INDEX';
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-22
CREATE INDEX com a Instruo CREATE TABLE (continuao)
Observe que o servidor Oracle fornece um nome genrico ao ndice criado para a coluna de
chave primria.
Tambm possvel usar um ndice existente para a coluna de chave primria; por exemplo,
quando voc estiver esperando uma carga de dados volumosa e quiser acelerar a operao.
Voc pode desativar as constraints enquanto executa a carga e, em seguida, ativ-las. Nesse
caso, a existncia de um ndice exclusivo na chave primria far com que os dados sejam
verificados durante a carga. Sendo assim, voc pode primeiro criar um ndice no exclusivo
na coluna designada como PRIMARY KEY e depois criar a coluna PRIMARY KEY e
especificar que ela deve usar o ndice existente. Os exemplos abaixo ilustram esse
processo:
Etapa 1: Crie a tabela
CREATE TABLE NEW_EMP2
( employee_id NUMBER(6)
first_name VARCHAR2(20),
last_name VARCHAR2(25)
);
Etapa 2: Crie o ndice
CREATE INDEX emp_id_idx2 ON
new_emp2(employee_id);
Etapa 3: Crie a Chave Primria
ALTER TABLE new_emp2 ADD PRIMARY KEY (employee_id) USING INDEX
emp_id_idx2;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-23
Copyright 2004, Oracle. Todos os direitos reservados.
CREATE INDEX upper_dept_name_idx
ON dept2(UPPER(department_name));
Index created.
SELECT *
FROM dept2
WHERE UPPER(department_name) = 'SALES';
ndices Baseados em Funo
Um ndice baseado em funo utiliza expresses.
A expresso do ndice criada a partir de colunas de
tabela, constantes, funes SQL e funes definidas
pelo usurio.
ndices Baseados em Funo
Os ndices baseados em funo com as palavras-chave UPPER(column_name) ou
LOWER(column_name) permitem pesquisas sem distino entre maisculas e
minsculas. Por exemplo, o ndice:
CREATE INDEX upper_last_name_idx ON emp2 (UPPER(last_name));
facilita o processamento de consultas como:
SELECT * FROM emp2 WHERE UPPER(last_name) = 'KING';
O servidor Oracle usa o ndice apenas quando essa funo especfica usada em uma
consulta. Por exemplo, talvez a instruo abaixo use o ndice, mas, sem a clusula WHERE,
o servidor Oracle poder executar uma varredura integral de tabela:
SELECT *
FROM employees
WHERE UPPER (last_name) IS NOT NULL
ORDER BY UPPER (last_name);
Observao: O parmetro de inicializao QUERY_REWRITE_ENABLED deve ser
definido como TRUE para que seja usado um ndice baseado em funo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-24
ndices Baseados em Funo (continuao)
O servidor Oracle trata os ndices com colunas marcadas com DESC como ndices baseados
em funo. As colunas marcadas com DESC so classificadas em ordem decrescente.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-25
Copyright 2004, Oracle. Todos os direitos reservados.
Removendo um ndice
Para remover um ndice do dicionrio de dados,
use o comando DROP INDEX.
Remova o ndice UPPER_DEPT_NAME_IDX do
dicionrio de dados.
Para eliminar um ndice, voc precisa ser o
proprietrio ou ter o privilgio DROP ANY INDEX.
DROP INDEX upper_dept_name_idx;
Index dropped.
DROP INDEX index;
Removendo um ndice
No possvel modificar ndices. Para alterar um ndice, elimine-o e, depois, recrie-o.
Remova uma definio de ndice do dicionrio de dados executando a instruo DROP
INDEX. Para eliminar um ndice, voc precisa ser o proprietrio ou ter o privilgio DROP
ANY INDEX.
Na sintaxe:
index o nome do ndice
Observao: Se voc eliminar uma tabela, os ndices e as constraints sero eliminados
automaticamente, mas as views e as seqncias permanecero.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-26
Copyright 2004, Oracle. Todos os direitos reservados.
DROP TABLE PURGE
DROP TABLE dept80 PURGE;
DROP TABLE PURGE
O Banco de Dados Oracle 10g apresenta um novo recurso para a eliminao de tabelas.
Quando voc elimina uma tabela, o banco de dados no libera imediatamente o espao
associado a ela. Em vez disso, o banco de dados renomeia a tabela e a coloca em uma
lixeira, de onde pode ser posteriormente recuperada com a instruo FLASHBACK TABLE,
caso voc tenha eliminado a tabela por engano. Se quiser liberar imediatamente o espao
associado tabela no momento da execuo da instruo DROP TABLE, inclua a clusula
PURGE, conforme mostrado na instruo do slide.
Especifique PURGE apenas se quiser eliminar a tabela e liberar o espao associado a ela em
uma nica etapa. Caso especifique PURGE, o banco de dados no colocar a tabela e seus
objetos dependentes na lixeira.
O uso dessa clusula equivale a eliminar a tabela e depois expurg-la da lixeira. Essa
clusula economiza uma etapa do processo. Ela tambm oferece segurana avanada caso
voc queira impedir que material confidencial seja exibido na lixeira.
Observao: No possvel executar rollback de uma instruo DROP TABLE com a
clusula PURGE, nem recuperar uma tabela eliminada com a clusula PURGE. Esse recurso
no estava disponvel em releases anteriores.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-27
Copyright 2004, Oracle. Todos os direitos reservados.
A Instruo FLASHBACK TABLE
Ferramenta de correo de modificaes acidentais
em tabelas
Restaura uma tabela at um momento anterior
Vantagens: Facilidade de uso, disponibilidade,
execuo rpida
Pode ser executada localmente
Sintaxe:
FLASHBACK TABLE[schema.]table[,
[ schema.]table ]...
TO { TIMESTAMP | SCN } expr
[ { ENABLE | DISABLE } TRIGGERS ];
A Instruo FLASHBACK TABLE
Recurso de Autocorreo
O Banco de Dados Oracle 10g contm um novo comando SQL DDL, a instruo
FLASHBACK TABLE, para restaurar o estado de uma tabela at um momento anterior, caso
ela tenha sido inadvertidamente deletada ou modificada. O comando FLASHBACK TABLE
uma ferramenta de autocorreo para restaurar dados em uma tabela, juntamente com os
atributos associados, como ndices ou views. Isso ocorre quando o banco de dados est on-
line, fazendo o rollback apenas das alteraes subseqentes da tabela. Quando comparado
com mecanismos tradicionais de recuperao, o recurso oferece vantagens significativas,
como facilidade de uso e restaurao mais rpida. Ele tambm libera o DBA do trabalho de
localizar e restaurar propriedades especficas da aplicao. O recurso de tabela de flashback
no corrige o dano fsico causado por um disco ruim.
Sintaxe
Voc pode chamar uma operao de tabela de flashback em uma ou mais tabelas, mesmo
em tabelas de esquemas diferentes. Voc especifica o momento para o qual deseja fazer a
reverso, especificando um timestamp vlido. Por default, os triggers de banco de dados so
desativados para todas as tabelas envolvidas. possvel sobrepor esse comportamento
default, especificando a clusula ENABLE TRIGGERS.
Observao: Para obter mais informaes sobre a lixeira e a semntica de flashback,
consulte o Oracle Database Administrators Reference 10g Release 1 (10.1).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-28
Copyright 2004, Oracle. Todos os direitos reservados.
A Instruo FLASHBACK TABLE
DROP TABLE emp2;
Table dropped
FLASHBACK TABLE emp2 TO BEFORE DROP;
Flashback complete

SELECT original_name, operation, droptime,


FROM recyclebin;
A Instruo FLASHBACK TABLE (continuao)
Sintaxe e Exemplos (continuao)
O exemplo restaura a tabela EMP2 ao estado anterior a uma instruo DROP.
Na prtica, a lixeira uma tabela de dicionrio de dados que contm informaes sobre os
objetos eliminados. As tabelas eliminadas e os objetos associados, como ndices,
constraints, tabelas aninhadas e outros, no so removidas e continuam ocupando espao.
Elas continuam sendo contabilizadas nas cotas de espao do usurio, at serem
especificamente expurgadas da lixeira ou at que ocorra a situao improvvel na qual as
tabelas precisam ser expurgadas pelo banco de dados devido a restries de espao no
tablespace.
Cada usurio pode ser considerado como proprietrio de uma lixeira, pois, a menos que ele
tenha privilgios de SYSDBA, os nicos objetos que ele poder acessar na lixeira sero os
de sua propriedade. Um usurio pode exibir seus objetos na lixeira usando a seguinte
instruo:
SELECT * FROM RECYCLEBIN;
Quando voc elimina um usurio, os objetos que ele possui no so colocados na lixeira, e
os objetos da lixeira so expurgados.
possvel expurgar a lixeira com a seguinte instruo:
PURGE RECYCLEBIN;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-29
Copyright 2004, Oracle. Todos os direitos reservados.
Tabelas Externas
Tabelas Externas
Uma tabela externa uma tabela somente para leitura cujos metadados so armazenados no
banco de dados, embora os dados sejam armazenados fora do banco de dados. Pense nessa
definio de tabela externa como uma view que usada para executar consultas SQL em
dados externos sem carreg-los primeiramente no banco de dados. Os dados de tabela
externa podem ser consultados e unidos diretamente e em paralelo sem que os dados
externos sejam carregados primeiramente no banco de dados. Voc pode usar SQL, PL/SQL
e Java para consultar os dados de uma tabela externa.
A principal diferena entre as tabelas externas e as tabelas comuns que as tabelas
organizadas externamente so somente para leitura. No possvel executar operaes
DML, e nenhum ndice pode ser criado nessas tabelas. No entanto, possvel criar uma
tabela externa e, assim, descarregar dados usando o comando CREATE TABLE AS
SELECT.
O Oracle Server fornece dois drivers principais de acesso a tabelas externas. Um deles, o
driver de acesso de carregador ou ORACLE_LOADER, permite ler os dados de arquivos
externos cujo formato possa ser interpretado pelo utilitrio SQL*Loader. Observe que nem
todas as funes do SQL*Loader so suportadas em tabelas externas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-30
Tabelas Externas (continuao)
O driver de acesso ORACLE_DATAPUMP pode ser usado para importar e exportar dados
usando um formato que independe de plataforma. O driver de acesso ORACLE_DATAPUMP
grava as linhas de uma instruo SELECT para serem carregadas em uma tabela externa
como parte de uma instruo CREATE TABLE ...ORGANIZATION
EXTERNAL...AS SELECT. Em seguida, voc poder usar SELECT para ler os dados do
arquivo de dados. Tambm possvel criar uma definio de tabela externa em outro
sistema e usar esse arquivo de dados. Com isso, possvel mover os dados entre bancos de
dados Oracle.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-31
Copyright 2004, Oracle. Todos os direitos reservados.
Criando um Diretrio para a Tabela Externa
Crie um objeto DIRECTORY que corresponda ao
diretrio no sistema de arquivos em que a origem dos
dados externos reside.
CREATE OR REPLACE DIRECTORY emp_dir
AS '//emp_dir';
GRANT READ ON DIRECTORY emp_dir TO hr;
Exemplo de Criao de uma Tabela Externa
Use a instruo CREATE DIRECTORY para criar um objeto de diretrio. Um objeto de
diretrio especifica um apelido para um diretrio no sistema de arquivos do servidor em que
reside uma origem de dados externos. Voc pode usar nomes de diretrios quando fizer
referncia a uma origem de dados externos, em vez de codificar o nome do caminho do
sistema operacional, possibilitando uma maior flexibilidade de gerenciamento de arquivos.
preciso ter os privilgios de sistema CREATE ANY DIRECTORY para criar diretrios.
Ao criar um diretrio, voc recebe automaticamente o privilgio de objeto READ e WRITE
e pode conceder privilgios READ e WRITE a outros usurios e atribuies. O DBA
(administrador de banco de dados) tambm pode conceder com grant esses privilgios a
outros usurios e atribuies.
Um usurio precisa de privilgios READ para todos os diretrios usados nas tabelas externas
a serem acessadas e de privilgios WRITE para os diretrios em que esto sendo usados
arquivos de log, de registros incorretos e de descarte.
Alm disso, necessrio um privilgio WRITE quando o framework de tabela externa est
sendo usado para descarregar dados.
O Oracle tambm fornece o tipo ORACLE_DATAPUMP, com o qual possvel descarregar
dados (ou seja, ler os dados de uma tabela do banco de dados e inseri-los em uma tabela
externa) e, em seguida, recarreg-los em um banco de dados Oracle. Trata-se de uma
operao nica que pode ser feita quando a tabela criada. Aps a criao e o
preenchimento inicial da tabela, no ser possvel atualizar, inserir nem deletar linhas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-32
Exemplo de Criao de uma Tabela Externa (continuao)
Sintaxe
CREATE [OR REPLACE] DIRECTORY AS 'path_name';
Na sintaxe:
OR REPLACE Especifique OR REPLACE para recriar o objeto do banco
de dados do diretrio, caso j exista. Voc pode usar esta
clusula para alterar a definio de um diretrio existente
sem eliminar, recriar e conceder com grant privilgios de
objeto de banco de dados concedidos anteriormente no
diretrio. Os usurios aos quais foram anteriormente
concedidos privilgios em um diretrio redefinido podem
continuar acessando o diretrio sem precisar que os
privilgios sejam novamente concedidos.
directory Especifique o nome do objeto de diretrio a ser criado.
O tamanho mximo do nome do diretrio de 30 bytes.
No possvel qualificar um objeto de diretrio com um
nome de esquema.
'path_name' Especifique o nome de caminho completo do diretrio do
sistema operacional considerando que o nome de caminho
faz distino entre maisculas e minsculas.
A sintaxe para usar o driver de acesso ORACLE_DATAPUMP a seguinte:
CREATE TABLE extract_emps
ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY
ACCESS PARAMETERS ( )
LOCATION ()
PARALLEL 4
REJECT LIMIT UNLIMITED
AS
SELECT * FROM ;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-33
Copyright 2004, Oracle. Todos os direitos reservados.
Criando uma Tabela Externa
CREATE TABLE <table_name>
( <col_name> <datatype>, )
ORGANIZATION EXTERNAL
(TYPE <access_driver_type>
DEFAULT DIRECTORY <directory_name>
ACCESS PARAMETERS
( ) )
LOCATION ('<location_specifier>') )
REJECT LIMIT [0 | <number> | UNLIMITED];
Criando uma Tabela Externa
Crie tabelas externas usando a clusula ORGANIZATION EXTERNAL da instruo
CREATE TABLE. Na verdade, em vez de criar uma tabela, voc estar criando metadados
no dicionrio de dados que permitem acessar dados externos. A clusula ORGANIZATION
permite especificar a ordem na qual as linhas de dados da tabela so armazenadas. Para
indicar que se trata de uma tabela somente para leitura localizada fora do banco de dados,
especifique EXTERNAL na clusula ORGANIZATION. Observe que os arquivos externos j
devero existir fora do banco de dados.
TYPE access_driver_type indica o driver de acesso da tabela externa. O driver de
acesso a API que interpreta os dados externos para o banco de dados. Se voc no
especificar TYPE, o Oracle usar o driver de acesso default, ORACLE_LOADER. A
outra opo ORACLE_DATAPUMP.
Voc usa a clusula DEFAULT DIRECTORY para especificar um ou mais objetos de banco
de dados de diretrio Oracle que correspondem a diretrios no sistema de arquivos nos
quais as origens de dados externos podem residir.
A clusula opcional ACCESS PARAMETERS permite que voc designe valores aos
parmetros do driver de acesso especfico para essa tabela externa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-34
Criando uma Tabela Externa (continuao)
Use a clusula LOCATION para especificar um localizador externo para cada origem de
dados externos. Em geral, mas no necessariamente, o <location_specifier> um
arquivo.
A clusula REJECT LIMIT permite especificar quantos erros de converso podem ocorrer
durante uma consulta de dados externos antes que um erro Oracle seja retornado e a
consulta seja abortada. O valor default 0.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-35
Copyright 2004, Oracle. Todos os direitos reservados.
Criando uma Tabela Externa
Usando ORACLE_LOADER
CREATE TABLE oldemp (
fname char(25), lname CHAR(25))
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY emp_dir
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE
NOBADFILE
NOLOGFILE
FIELDS TERMINATED BY ','
(fname POSITION ( 1:20) CHAR,
lname POSITION (22:41) CHAR))
LOCATION ('emp.dat'))
PARALLEL 5
REJECT LIMIT 200;
Table created.
Exemplo de Criao de uma Tabela Externa Usando o Driver de Acesso
ORACLE_LOADER
Suponha que exista um arquivo sem formatao com os seguintes registros:
10,jones,11-Dec-1934
20,smith,12-Jun-1972
Os registros so delimitados por novas linhas e os campos so encerrados por uma vrgula (
, ). O nome do arquivo : /emp_dir/emp.dat
Para converter esse arquivo na origem de dados para uma tabela externa cujos metadados
residiro no banco de dados, siga estas etapas:
1. Crie um objeto de diretrio emp_dir da seguinte maneira:
CREATE DIRECTORY emp_dir AS '/emp_dir' ;
2. Execute o comando CREATE TABLE mostrado no slide.
O exemplo do slide ilustra a especificao para criar uma tabela externa para o arquivo:
/emp_dir/emp.dat
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-36
Exemplo de Criao de uma Tabela Externa Usando o Driver de Acesso
ORACLE_LOADER (continuao)
No exemplo, a especificao TYPE s fornecida para ilustrar seu uso. ORACLE_LOADER
o driver de acesso default, caso nenhum outro seja especificado. A opo ACCESS
PARAMETERS fornece os valores para os parmetros do driver de acesso especfico, os
quais so interpretados por esse driver, e no pelo servidor Oracle.
A clusula PARALLEL permite que cinco servidores de execuo paralela varram
simultaneamente as origens de dados externos, isto , os arquivos dessas origens, durante a
execuo da instruo INSERT INTO TABLE. Por exemplo, se PARALLEL=5 tiver sido
especificado, mais de um servidor de execuo paralela poder estar trabalhando em uma
origem de dados. Como as tabelas externas podem ser bem grandes, por motivos de
desempenho, aconselhvel especificar a clusula PARALLEL ou uma dica paralela para a
consulta.
A clusula REJECT LIMIT especifica que, se ocorrerem mais de 200 erros de converso
durante uma consulta aos dados externos, a consulta ser abortada e ser retornado um erro.
Esses erros de converso podero surgir quando o driver de acesso tentar transformar os
dados do arquivo de dados para coincidirem com a definio de tabela externa.
Depois que o comando CREATE TABLE for executado com sucesso, a tabela externa
OLDEMP poder ser descrita e consultada com uma tabela relacional.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-37
Copyright 2004, Oracle. Todos os direitos reservados.
Consultando Tabelas Externas
SELECT *
FROM oldemp
emp.dat
OLDEMP
Consultando Tabelas Externas
Uma tabela externa no descreve os dados armazenados no banco de dados. Ela tambm
no descreve como os dados so armazenados na origem externa. Na verdade, ela descreve
como a camada da tabela externa precisa apresentar os dados ao servidor. O driver de
acesso e a camada da tabela externa so responsveis pela execuo das transformaes
necessrias nos dados contidos no arquivo de dados para que eles correspondam definio
da tabela externa.
Ao acessar os dados de uma origem externa, o servidor de banco de dados chama o driver
de acesso apropriado para obter os dados dessa origem na forma esperada pelo servidor.
importante lembrar que a descrio dos dados da origem de dados separada da definio
da tabela externa. O arquivo de origem pode conter um nmero maior ou menor de campos
que o nmero de colunas existentes na tabela. Alm disso, os tipos de dados dos campos da
origem de dados podem ser diferentes dos tipos de dados das colunas da tabela. O driver de
acesso responsvel por assegurar que os dados da origem de dados sejam processados para
corresponderem definio da tabela externa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-38
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc aprendeu a:
Adicionar constraints
Criar ndices
Criar uma constraint de chave primria usando
um ndice
Criar ndices usando a instruo CREATE TABLE
Criar ndices baseados em funo
Eliminar colunas e definir uma coluna como UNUSED
Executar operaes FLASHBACK
Criar e usar tabelas externas
Sumrio
Altere tabelas para adicionar ou modificar colunas ou constraints. Crie ndices e ndices
baseados em funo usando a instruo CREATE INDEX. Elimine as colunas no
utilizadas. Use mecanismos de FLASHBACK para restaurar tabelas. Use a clusula
external_table para criar uma tabela externa, que uma tabela somente para leitura,
sendo que seus metadados so armazenados no banco de dados, mas seus dados so
armazenados fora do banco de dados. Ue tabelas externas para consultar dados sem antes
carreg-las no banco de dados. Nomeie os ndices da coluna PRIMARY KEY ao criar a
tabela com a instruo CREATE TABLE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-39
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 2: Viso Geral
Este exerccio aborda os seguintes tpicos:
Alterando tabelas
Adicionando colunas
Eliminando colunas
Criando ndices
Criando tabelas externas
Exerccio 2: Viso Geral
Neste exerccio, voc usar o comando ALTER TABLE para modificar colunas e adicionar
constraints. Voc usar o comando CREATE INDEX para criar ndices ao criar uma tabela,
juntamente com o comando CREATE TABLE. Voc criar tabelas externas. Voc eliminar
colunas e usar a operao FLASHBACK.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-40
Exerccio 2
1. Crie a tabela DEPT2 com base no grfico de instncias de tabela a seguir. Inclua a
sintaxe em um script denominado lab02_01.sql e execute a instruo do script
para criar a tabela. Confirme a criao da tabela.
2. Preencha a tabela DEPT2 com dados da tabela DEPARTMENTS. Inclua apenas as
colunas de que necessita.
3. Crie a tabela EMP2 com base no grfico de instncias de tabela a seguir. Inclua a
sintaxe em um script denominado lab02_03.sql e execute a instruo do script
para criar a tabela. Confirme a criao da tabela.
Column Name
ID NAME
Key Type
Nulls/Unique
FK Table
FK Column
Data type
NUMBER VARCHAR2
Length 7 25
Column Name
ID LAST_NAME FIRST_NAME DEPT_ID
Key Type
Nulls/Unique
FK Table
FK Column
Data type
NUMBER VARCHAR2 VARCHAR2 NUMBER
Length 7 25 25 7
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-41
Exerccio 2 (continuao)
4. Modifique a tabela EMP2 para que aceite sobrenomes mais longos de funcionrios.
Confirme a modificao.
5. Confirme se as tabelas DEPT2 e EMP2 foram armazenadas no dicionrio
de dados. (Dica: USER_TABLES)
6. Crie a tabela EMPLOYEES2 com base na estrutura da tabela EMPLOYEES. Inclua
apenas as colunas EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY e
DEPARTMENT_ID. Nomeie as colunas da nova tabela como ID, FIRST_NAME,
LAST_NAME, SALARY e DEPT_ID, respectivamente.
7. Elimine a tabela EMP2.
8. Veja se a tabela est na lixeira.
9. Cancele a eliminao da tabela EMP2.
10. Elimine a coluna FIRST_NAME da tabela EMPLOYEES2. Confirme a modificao
verificando a descrio da tabela.
11. Na tabela EMPLOYEES2, marque a coluna DEPT_ID como UNUSED. Confirme a
modificao verificando a descrio da tabela.
12. Elimine todas as colunas UNUSED da tabela EMPLOYEES2. Confirme a
modificao verificando a descrio da tabela.
13. Adicione uma constraint PRIMARY KEY em nvel de tabela para a tabela EMP2 na
coluna ID. A constraint deve ser nomeada durante a criao. Nomeie-a como
my_emp_id_pk.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 2-42
Exerccio 2 (continuao)
14. Crie uma constraint PRIMARY KEY para a tabela DEPT2 usando a coluna ID.
A constraint deve ser nomeada durante a criao. Nomeie-a como
my_dept_id_pk.
15. Adicione uma referncia de chave estrangeira tabela EMP2 que garante que o
funcionrio no foi designado para um departamento inexistente. Nomeie a
constraint como my_emp_dept_id_fk.
16. Confirme a adio das constraints consultando a view USER_CONSTRAINTS.
Anote os tipos e os nomes das constraints.
17. Exiba os nomes e os tipos de objetos da view de dicionrio de dados
USER_OBJECTS para as tabelas EMP2 e DEPT2. Observe que foram criadas novas
tabelas e um novo ndice.
Se tiver tempo, faa o seguinte exerccio:
18. Modifique a tabela EMP2. Adicione uma coluna COMMISSION do tipo de dados
NUMBER, preciso 2, escala 2. Adicione uma constraint coluna COMMISSION que
garanta um valor de comisso maior do que zero.
19. Elimine as tabelas EMP2 e DEPT2 de modo que no possam ser restauradas.
Verifique a lixeira.
20. Crie a tabela DEPT_NAMED_INDEX com base no grfico de instncias de tabela a
seguir. Nomeie o ndice para a coluna PRIMARY KEY como DEPT_PK_IDX.
Nome da Coluna Deptno Dname
Chave primria Sim
Tipo de Dados
Nmero VARCHAR2
Length 4 30
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Manipulando Grandes
Conjuntos de Dados
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Manipular dados usando subconsultas
Descrever os recursos de inseres em vrias tabelas
Usar os seguintes tipos de inseres em vrias
tabelas:
INSERT Incondicional
INSERT de Criao de Piv
ALL INSERT Condicional
FIRST INSERT Condicional
Intercalar linhas em uma tabela
Controlar as alteraes de dados durante um perodo
Objetivos
Nesta lio, voc aprender a manipular os dados do banco de dados Oracle usando
subconsultas. Voc tambm conhecer as instrues de insero em vrias tabelas e a
instruo MERGE, alm de aprender a controlar as alteraes feitas no banco de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-3
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Subconsultas para Manipular Dados
possvel usar subconsultas em instrues DML para:
Copiar dados de uma tabela para outra
Recuperar dados de uma view em linha
Atualizar dados em uma tabela com base nos
valores de outra tabela
Deletar linhas de uma tabela com base nas linhas
de outra tabela
Usando Subconsultas para Manipular Dados
As subconsultas podem ser usadas para recuperar dados a partir de uma tabela usada como
entrada para fazer um INSERT em uma tabela diferente. Desse modo, voc pode copiar
facilmente grandes volumes de dados de uma tabela para outra com uma nica instruo
SELECT. Da mesma forma, voc pode usar subconsultas para fazer atualizaes e delees
em massa, incluindo-as na clusula WHERE das instrues UPDATE e DELETE. Tambm
possvel usar subconsultas na clusula FROM de uma instruo SELECT. Esse processo se
chama view em linha.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-4
Copyright 2004, Oracle. Todos os direitos reservados.
Copiando Linhas de Outra Tabela
Crie a instruo INSERT com uma subconsulta.
No use a clusula VALUES.
Estabelea uma correspondncia entre o nmero de
colunas na clusula INSERT e o nmero de colunas
na subconsulta.
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';
4 rows created.
Copiando Linhas de Outra Tabela
possvel usar a instruo INSERT para adicionar linhas a uma tabela cujos valores so
provenientes de tabelas existentes. No lugar da clusula VALUES, use uma subconsulta.
Sintaxe
INSERT INTO table [ column (, column) ] subquery;
Na sintaxe:
table o nome da tabela
column o nome da coluna da tabela a ser preenchida
Subquery a subconsulta que retorna linhas para a tabela
O nmero de colunas e os respectivos tipos de dados na lista de colunas da clusula
INSERT devem corresponder ao nmero de valores e aos respectivos tipos de dados na
subconsulta. Para criar uma cpia das linhas de uma tabela, use SELECT * na subconsulta.
INSERT INTO EMPL3
SELECT *
FROM employees;
Para obter mais informaes, consulte o manual Oracle Database 10g SQL Reference.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-5
Copyright 2004, Oracle. Todos os direitos reservados.
Insero Usando uma Subconsulta como Destino
INSERT INTO
(SELECT employee_id, last_name,
email, hire_date, job_id, salary,
department_id
FROM empl3
WHERE department_id = 50)
VALUES (99999, 'Taylor', 'DTAYLOR',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000, 50);
1 row created.
Insero Usando uma Subconsulta como Destino
possvel usar uma subconsulta no lugar do nome da tabela na clusula INTO da instruo
INSERT.
A lista de seleo da subconsulta deve ter o mesmo nmero de colunas que a lista de
colunas da clusula VALUES. Para a execuo bem-sucedida da instruo INSERT, todas
as regras nas colunas da tabela base devem ser cumpridas. Por exemplo, no possvel
especificar um ID de funcionrio duplicado nem omitir um valor de uma coluna NOT
NULL obrigatria.
Essa aplicao de subconsultas ajuda a evitar que seja necessrio criar uma view apenas
para executar uma insero.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-6
Copyright 2004, Oracle. Todos os direitos reservados.
Insero Usando uma Subconsulta como Destino
Verifique os resultados.
SELECT employee_id, last_name, email, hire_date,
job_id, salary, department_id
FROM employees
WHERE department_id = 50;

Insero Usando uma Subconsulta como Destino (continuao)


O exemplo mostra os resultados da subconsulta usada para identificar a tabela para a
instruo INSERT.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-7
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT a.last_name, a.salary,
a.department_id, b.salavg
FROM employees a, (SELECT department_id,
AVG(salary) salavg
FROM employees
GROUP BY department_id) b
WHERE a.department_id = b.department_id
AND a.salary > b.salavg;
Recuperando Dados com
uma Subconsulta como Origem

Recuperando Dados Usando uma Subconsulta como Origem


Voc pode usar uma subconsulta na clusula FROM da instruo SELECT, que muito
semelhante forma como as views so usadas. Uma subconsulta na clusula FROM de uma
instruo SELECT tambm chamada de view em linha. Uma subconsulta na clusula
FROM de uma instruo SELECT define uma origem de dados apenas para essa instruo
SELECT especfica. O exemplo do slide exibe os sobrenomes dos funcionrios, os salrios,
os nmeros dos departamentos e os salrios mdios de todos os funcionrios que recebem
mais que o salrio mdio dos respectivos departamentos. A subconsulta na clusula FROM
denominada b, e a consulta exterior faz referncia coluna SALAVG usando esse apelido.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-8
Copyright 2004, Oracle. Todos os direitos reservados.
Atualizando Duas Colunas
com uma Subconsulta
Atualize o cargo e o salrio do funcionrio 114 para
corresponder ao cargo e ao salrio do funcionrio 205.
UPDATE empl3
SET job_id = (SELECT job_id
FROM employees
WHERE employee_id = 205),
salary = (SELECT salary
FROM employees
WHERE employee_id = 205)
WHERE employee_id = 114;
1 row updated.
Atualizando Duas Colunas com uma Subconsulta
possvel atualizar diversas colunas na clusula SET de uma instruo UPDATE criando
vrias subconsultas.
Sintaxe
UPDATE table
SET column =
(SELECT column
FROM table
WHERE condition)
[ ,
column =
(SELECT column
FROM table
WHERE condition)]
[WHERE condition ] ;
Observao: Se nenhuma linha for atualizada, a mensagem "0 rows updated." ser
exibida:
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-9
Copyright 2004, Oracle. Todos os direitos reservados.
Atualizando Linhas com
Base em Outra Tabela
Use subconsultas nas instrues UPDATE para atualizar
linhas de uma tabela com base em valores de outra
tabela.
UPDATE empl3
SET department_id = (SELECT department_id
FROM employees
WHERE employee_id = 100)
WHERE job_id = (SELECT job_id
FROM employees
WHERE employee_id = 200);
1 row updated.
Atualizando Linhas com Base em Outra Tabela
possvel usar subconsultas em instrues UPDATE para atualizar as linhas de uma tabela.
O exemplo do slide atualiza a tabela EMPL3 com base nos valores da tabela EMPLOYEES.
Ele altera o nmero do departamento de todos os funcionrios com o ID de cargo do
funcionrio 200 para o nmero do departamento atual do funcionrio 100.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-10
Copyright 2004, Oracle. Todos os direitos reservados.
Deletando Linhas com
Base em Outra Tabela
Use subconsultas em instrues DELETE para remover
linhas de uma tabela com base nos valores de outra
tabela.
DELETE FROM empl3
WHERE department_id =
(SELECT department_id
FROM departments
WHERE department_name
LIKE '%Public%');
1 row deleted.
Deletando Linhas com Base em Outra Tabela
possvel usar subconsultas para deletar linhas de uma tabela com base nos valores de
outra tabela. O exemplo do slide deleta todos os funcionrios que trabalham em um
departamento cujo nome contm a string "Public". A subconsulta pesquisa a tabela
DEPARTMENTS para localizar o nmero do departamento com base no nome do
departamento que contm a string "Public". Em seguida, a subconsulta informa o nmero do
departamento para a consulta principal, que deleta as linhas de dados da tabela
EMPLOYEES com base nesse nmero de departamento.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-11
Copyright 2004, Oracle. Todos os direitos reservados.
Usando a Palavra-Chave WITH CHECK
OPTION em Instrues DML
Uma subconsulta usada para identificar a tabela e
as colunas da instruo DML.
A palavra-chave WITH CHECK OPTION impede a
alterao de linhas que no esto na subconsulta.
INSERT INTO (SELECT employee_id, last_name, email,
hire_date, job_id, salary
FROM empl3
WHERE department_id = 50
WITH CHECK OPTION)
VALUES (99998, 'Smith', 'JSMITH',
TO_DATE('07-JUN-99', 'DD-MON-RR'),
'ST_CLERK', 5000);
INSERT INTO
*
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
A Palavra-Chave WITH CHECK OPTION
Especifique WITH CHECK OPTION para indicar que, se a subconsulta for usada no lugar
de uma tabela em uma instruo INSERT, UPDATE ou DELETE, no sero permitidas
alteraes nessa tabela que produzam linhas no includas na subconsulta.
No exemplo mostrado, a palavra-chave WITH CHECK OPTION usada. A subconsulta
identifica linhas que esto no departamento 50, mas o ID do departamento no est na lista
SELECT e no tem um valor especificado na lista VALUES. A insero dessa linha resulta
em um ID de departamento nulo, que no est na subconsulta.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-12
Copyright 2004, Oracle. Todos os direitos reservados.
Viso Geral do Recurso de Default Explcito
Com o recurso de default explcito, possvel usar a
palavra-chave DEFAULT como um valor de coluna
onde se deseja especificar o valor default de coluna.
Esse recurso includo para manter a
compatibilidade com o padro SQL:1999.
O recurso permite ao usurio controlar onde e
quando o valor default deve ser aplicado aos dados.
possvel usar defaults explcitos em instrues
INSERT e UPDATE.
Defaults Explcitos
possvel usar a palavra-chave DEFAULT em instrues INSERT e UPDATE para
identificar um valor de coluna default. Se no houver um valor default, ser usado um valor
nulo.
A opo DEFAULT dispensa a codificao do valor default nos programas e a consulta ao
dicionrio para encontr-lo, como se fazia antes da introduo deste recurso. A codificao
do valor default um problema quando ele se altera porque o cdigo conseqentemente
precisa ser alterado. O acesso ao dicionrio geralmente no feito em um programa de
aplicao. Portanto, trata-se de um recurso muito importante.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-13
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Valores Default Explcitos
DEFAULT com INSERT:
DEFAULT com UPDATE:
INSERT INTO deptm3
(department_id, department_name, manager_id)
VALUES (300, 'Engineering', DEFAULT);
UPDATE deptm3
SET manager_id = DEFAULT
WHERE department_id = 10;
Usando Valores Default Explcitos
Especifique DEFAULT para definir a coluna para o valor especificado anteriormente como o
seu valor default. Se no tiver sido especificado um valor default para a coluna
correspondente, o servidor Oracle definir a coluna como nula.
No primeiro exemplo do slide, a instruo INSERT usa um valor default para a coluna
MANAGER_ID. Se no houver um valor default definido para a coluna, um valor nulo ser
inserido.
O segundo exemplo usa a instruo UPDATE para definir a coluna MANAGER_ID com um
valor default para o departamento 10. Se nenhum valor default for definido para a coluna, o
valor ser alterado para nulo.
Observao: Ao criar uma tabela, voc poder especificar um valor default para uma
coluna. Esse assunto ser abordado na lio intitulada "Criando e Gerenciando Tabelas".
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-14
Copyright 2004, Oracle. Todos os direitos reservados.
Viso Geral de Instrues
INSERT em Vrias Tabelas
Table_a
Table_b
Table_c
INSERT ALL
INTO table_a VALUES(,,)
INTO table_b VALUES(,,)
INTO table_c VALUES(,,)
SELECT
FROM sourcetab
WHERE ;
Viso Geral de Instrues INSERT em Vrias Tabelas
Em uma instruo INSERT em vrias tabelas, so inseridas as linhas calculadas derivadas
das linhas retornadas da avaliao de uma subconsulta em uma ou mais tabelas.
As instrues INSERT em vrias tabelas podem desempenhar um papel muito til em um
cenrio de data warehouse. Carregue o data warehouse regularmente para que ele atenda ao
propsito de facilitar a anlise de negcios. Para isso, necessrio extrair e copiar os dados
de um ou mais sistemas operacionais para o warehouse. O processo de extrao de dados do
sistema de origem e de adio desses dados ao data warehouse comumente chamado de
ETL (Extraction, Transformation and Loading), que significa extrao, transformao e
carga.
Durante a extrao, os dados desejados precisam ser identificados e extrados de vrias
origens distintas, tais como aplicaes e sistemas de banco de dados. Depois da extrao, os
dados precisam ser transportados fisicamente para o sistema de destino ou para um sistema
intermedirio para processamento adicional. Dependendo do meio de transporte escolhido,
possvel realizar algumas transformaes durante esse processo. Por exemplo, uma
instruo SQL que acesse diretamente um destino remoto atravs de um gateway pode
concatenar duas colunas como parte da instruo SELECT.
Aps a carga dos dados no banco de dados Oracle, possvel executar transformaes nos
dados usando operaes SQL. Uma instruo INSERT em vrias tabelas uma das tcnicas
para implementar transformaes de dados SQL.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-15
Copyright 2004, Oracle. Todos os direitos reservados.
Viso Geral de Instrues
INSERT em Vrias Tabelas
A instruo INSERTSELECT pode ser usada para
inserir linhas em vrias tabelas como parte de uma
nica instruo DML.
Vrias instrues INSERT podem ser usadas em
sistemas de data warehouse para transferir dados de
uma ou mais origens operacionais para um conjunto
de tabelas de destino.
Elas permitem uma melhoria significativa no
desempenho em relao a:
Uma nica instruo DML x vrias instrues
INSERTSELECT
Uma nica instruo DML x um procedimento para
executar vrias inseres usando a sintaxe IF...THEN
Viso Geral de Instrues INSERT em Vrias Tabelas (Continuao)
As instrues INSERT em vrias tabelas oferecem os benefcios da instruo INSERT
... SELECT quando h vrias tabelas como destino. Antes do Banco de Dados Oracle9i,
para usar essa funcionalidade, era necessrio lidar com n instrues INSERT ...
SELECT independentes, processando, assim, os mesmos dados-fonte n vezes e aumentando
a carga de trabalho de transformao n vezes.
Como ocorre com a instruo INSERT ... SELECT existente, a nova instruo pode ser
paralelizada e usada com o mecanismo de carga direta para garantir um melhor
desempenho.
Agora os registros de qualquer fluxo de entrada, como, por exemplo, uma tabela de banco
de dados no relacional, podem ser convertidos em vrios registros para um ambiente de
tabela de banco de dados mais relacional. Para implementar essa funcionalidade
opcionalmente, foi solicitado que voc criasse vrias instrues INSERT.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-16
Copyright 2004, Oracle. Todos os direitos reservados.
Tipos de Instrues INSERT em Vrias Tabelas
Os diversos tipos de instrues INSERT em vrias
tabelas so:
INSERT Incondicional
ALL INSERT Condicional
FIRST INSERT Condicional
INSERT de Criao de Piv
Tipos de Instrues INSERT em Vrias Tabelas
Os tipos de instrues INSERT em vrias tabelas so:
INSERT Incondicional
ALL INSERT Condicional
FIRST INSERT Condicional
INSERT de Criao de Piv
Use clusulas distintas para indicar o tipo de instruo INSERT a ser executada.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-17
Copyright 2004, Oracle. Todos os direitos reservados.
Instrues INSERT em Vrias Tabelas
Sintaxe
conditional_insert_clause
INSERT [ALL] [conditional_insert_clause]
[insert_into_clause values_clause] (subquery)
[ALL] [FIRST]
[WHEN condition THEN] [insert_into_clause values_clause]
[ELSE] [insert_into_clause values_clause]
Instrues INSERT em Vrias Tabelas
O slide exibe o formato genrico para as instrues INSERT em vrias tabelas.
INSERT Incondicional: ALL into_clause
Especifique ALL seguido por diversas insert_into_clauses para executar uma
insero incondicional em vrias tabelas. O servidor Oracle executa cada
insert_into_clause uma vez por linha retornada pela subconsulta.
INSERT Condicional: conditional_insert_clause
Especifique conditional_insert_clause para executar uma instruo INSERT
condicional em vrias tabelas. O servidor Oracle filtra cada insert_into_clause pela
condio WHEN correspondente, que determina se essa insert_into_clause ser
executada. Uma nica instruo INSERT em vrias tabelas pode conter at 127 clusulas
WHEN.
INSERT Condicional: ALL
Se voc especificar ALL, o servidor Oracle avaliar cada clusula WHEN independentemente
dos resultados da avaliao de qualquer outra clusula WHEN. Para cada clusula WHEN cuja
condio avaliada como verdadeira, o servidor Oracle executa a lista de clusulas INTO
correspondente.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-18
Instrues INSERT em Vrias Tabelas (continuao)
INSERT Condicional: FIRST
Se voc especificar FIRST, o servidor Oracle avaliar cada clusula WHEN na ordem em
que aparece na instruo. Se a primeira clusula WHEN for avaliada como verdadeira, o
servidor Oracle executar a clusula INTO correspondente e ignorar as clusulas WHEN
subseqentes relativas a essa linha.
INSERT Condicional: Clusula ELSE
Para uma linha especfica, se nenhuma clusula WHEN for avaliada como verdadeira:
Caso voc tenha especificado uma clusula ELSE, o servidor Oracle executar a lista
de clusulas INTO associada clusula ELSE.
Caso voc no especifique uma clusula ELSE, o servidor Oracle no executar
nenhuma ao para essa linha.
Restries s Instrues INSERT em Vrias Tabelas
Voc pode executar instrues INSERT em vrias tabelas apenas em tabelas, mas no
em views nem em views materializadas.
No possvel executar uma instruo INSERT em vrias tabelas em uma tabela
remota.
No possvel especificar uma expresso de coleta de tabelas ao executar uma
instruo INSERT em vrias tabelas.
Em uma instruo INSERT em vrias tabelas, no possvel combinar todas as
insert_into_clauses para especificar mais de 999 colunas de destino.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-19
Copyright 2004, Oracle. Todos os direitos reservados.
INSERT ALL Incondicional
Selecione os valores de EMPLOYEE_ID, HIRE_DATE,
SALARY e MANAGER_ID na tabela EMPLOYEES para os
funcionrios cujo EMPLOYEE_ID maior que 200.
Insira esses valores nas tabelas SAL_HISTORY e
MGR_HISTORY usando uma instruo INSERT em
vrias tabelas.
INSERT ALL
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID, hire_date HIREDATE,
salary SAL, manager_id MGR
FROM employees
WHERE employee_id > 200;
8 rows created.
INSERT ALL Incondicional
O exemplo do slide insere linhas nas tabelas SAL_HISTORY e MGR_HISTORY.
A instruo SELECT recupera, na tabela EMPLOYEES, os detalhes sobre o ID do
funcionrio, a data de admisso, o salrio e o ID do gerente dos funcionrios cujo ID
maior que 200. Os detalhes sobre o ID do funcionrio, a data de admisso e o salrio so
inseridos na tabela SAL_HISTORY. Os detalhes sobre o ID do funcionrio, o ID do gerente
e o salrio so inseridos na tabela MGR_HISTORY.
Essa instruo INSERT denominada INSERT incondicional, pois no so aplicadas
outras restries s linhas recuperadas pela instruo SELECT. Todas as linhas recuperadas
pela instruo SELECT so inseridas nas duas tabelas, SAL_HISTORY e MGR_HISTORY.
A clusula VALUES nas instrues INSERT especifica as colunas da instruo SELECT
que precisam ser inseridas em cada uma das tabelas. Cada linha retornada pela instruo
SELECT resulta em duas inseres, uma na tabela SAL_HISTORY e outra na tabela
MGR_HISTORY.
possvel interpretar as 8 linhas criadas e retornadas como um total de oito
inseres executadas nas tabelas-base, SAL_HISTORY e MGR_HISTORY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-20
Copyright 2004, Oracle. Todos os direitos reservados.
INSERT ALL Condicional
Selecione os valores de EMPLOYEE_ID, HIRE_DATE,
SALARY e MANAGER_ID na tabela EMPLOYEES para os
funcionrios cujo EMPLOYEE_ID maior que 200.
Se o valor de SALARY for maior que $10.000, insira
esse valor na tabela SAL_HISTORY usando uma
instruo INSERT condicional em vrias tabelas.
Se o valor de MANAGER_ID for maior que 200, insira
esse valor na tabela MGR_HISTORY usando uma
instruo INSERT condicional em vrias tabelas.
INSERT ALL Condicional
As orientaes para criar uma instruo INSERT ALL condicional esto especificadas no
slide. A soluo para esse problema est indicada na prxima pgina.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-21
Copyright 2004, Oracle. Todos os direitos reservados.
INSERT ALL Condicional
INSERT ALL
WHEN SAL > 10000 THEN
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
WHEN MGR > 200 THEN
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID,hire_date HIREDATE,
salary SAL, manager_id MGR
FROM employees
WHERE employee_id > 200;
4 rows created.
INSERT ALL Condicional (continuao)
O exemplo do slide semelhante ao exemplo do slide anterior, pois ele insere linhas nas
tabelas SAL_HISTORY e MGR_HISTORY. A instruo SELECT recupera, na tabela
EMPLOYEES, os detalhes sobre o ID do funcionrio, a data de admisso, o salrio e o ID do
gerente dos funcionrios cujo ID maior que 200. Os detalhes sobre o ID do funcionrio, a
data de admisso e o salrio so inseridos na tabela SAL_HISTORY. Os detalhes sobre o ID
do funcionrio, o ID do gerente e o salrio so inseridos na tabela MGR_HISTORY.
Essa instruo INSERT denominada ALL INSERT condicional, pois so aplicadas
outras restries s linhas recuperadas pela instruo SELECT. Das linhas recuperadas pela
instruo SELECT, apenas aquelas cujo valor na coluna SAL maior que 10.000 so
inseridas na tabela SAL_HISTORY. Da mesma forma, apenas as linhas cujo valor na coluna
MGR maior que 200 so inseridas na tabela MGR_HISTORY.
Observe que, diferentemente do exemplo anterior, no qual oito linhas foram inseridas nas
tabelas, neste exemplo, apenas quatro linhas so inseridas.
possvel interpretar as 4 linhas criadas e retornadas como um total de quatro
operaes INSERT executadas nas tabelas-base, SAL_HISTORY e MGR_HISTORY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-22
Copyright 2004, Oracle. Todos os direitos reservados.
FIRST INSERT Condicional
Selecione DEPARTMENT_ID, SUM(SALARY) e
MAX(HIRE_DATE) na tabela EMPLOYEES.
Se o valor de SUM(SALARY) for maior que $25.000,
insira esse valor em SPECIAL_SAL usando uma
instruo FIRST INSERT condicional em vrias
tabelas.
Se a primeira clusula WHEN for avaliada como
verdadeira, as clusulas WHEN subseqentes relativas
a essa linha devero ser ignoradas.
Insira as linhas que no atenderem primeira
condio WHEN na tabela HIREDATE_HISTORY_00,
HIREDATE_HISTORY_99 ou HIREDATE_HISTORY,
com base no valor da coluna HIRE_DATE usando
uma instruo INSERT condicional em vrias tabelas.
FIRST INSERT Condicional
As orientaes para criar uma instruo FIRST INSERT condicional esto especificadas
no slide. A soluo para esse problema est indicada na prxima pgina.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-23
Copyright 2004, Oracle. Todos os direitos reservados.
INSERT FIRST Condicional
INSERT FIRST
WHEN SAL > 25000 THEN
INTO special_sal VALUES(DEPTID, SAL)
WHEN HIREDATE like ('%00%') THEN
INTO hiredate_history_00 VALUES(DEPTID,HIREDATE)
WHEN HIREDATE like ('%99%') THEN
INTO hiredate_history_99 VALUES(DEPTID, HIREDATE)
ELSE
INTO hiredate_history VALUES(DEPTID, HIREDATE)
SELECT department_id DEPTID, SUM(salary) SAL,
MAX(hire_date) HIREDATE
FROM employees
GROUP BY department_id;
8 rows created.
INSERT FIRST Condicional (continuao)
O exemplo do slide insere linhas em mais de uma tabela, usando uma nica instruo
INSERT. A instruo SELECT recupera os detalhes sobre o ID, o salrio total e a data de
admisso mxima relativos a todos os departamentos da tabela EMPLOYEES.
Essa instruo INSERT denominada FIRST INSERT condicional, pois feita uma
exceo para os departamentos cujo salrio total maior que $25.000. A condio WHEN
ALL > $25.000 avaliada primeiro. Se o salrio total de um departamento for maior
que $25.000, o registro ser inserido na tabela SPECIAL_SAL independentemente da data
de admisso. Se a primeira clusula WHEN for avaliada como verdadeira, o servidor Oracle
executar a clusula INTO correspondente e ignorar as clusulas WHEN subseqentes
relativas a essa linha.
Quando as linhas no atendem primeira condio WHEN (WHEN SAL > 25.000), as
outras condies so avaliadas exatamente como a instruo INSERT condicional, e os
registros recuperados pela instruo SELECT so inseridos na tabela
HIREDATE_HISTORY_00, HIREDATE_HISTORY_99 ou HIREDATE_HISTORY, com
base no valor da coluna HIREDATE.
possvel interpretar as 8 linhas criadas e retornadas como um total de oito
operaes INSERT executadas nas tabelas-base, SPECIAL_SAL,
HIREDATE_HISTORY_00, HIREDATE_HISTORY_99 e HIREDATE_HISTORY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-24
Copyright 2004, Oracle. Todos os direitos reservados.
INSERT de Criao de Piv
Suponha que voc receba um conjunto de registros de
vendas de uma tabela de banco de dados no
relacional, SALES_SOURCE_DATA, no seguinte formato:
EMPLOYEE_ID, WEEK_ID, SALES_MON, SALES_TUE,
SALES_WED, SALES_THUR, SALES_FRI
Voc quer armazenar esses registros na tabela
SALES_INFO em um formato relacional mais usado:
EMPLOYEE_ID, WEEK, SALES
Com uma instruo INSERT de criao de piv,
converta o conjunto de registros de vendas da tabela
de banco de dados no relacional em um formato
relacional.
INSERT de Criao de Piv
A criao de piv uma operao na qual voc precisa criar uma transformao de forma
que cada registro de qualquer fluxo de entrada, como uma tabela de banco de dados no
relacional, seja convertido em vrios registros para um ambiente de tabela de banco de
dados mais relacional.
Para solucionar o problema mencionado no slide, preciso criar uma transformao para
que cada registro da tabela de banco de dados no relacional original,
SALES_SOURCE_DATA, seja convertido em cinco registros para a tabela SALES_INFO
de data warehouse. Essa operao geralmente chamada de criao de piv.
As orientaes para desenvolver uma instruo INSERT de criao de piv esto
especificadas no slide. A soluo para esse problema est indicada na prxima pgina.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-25
Copyright 2004, Oracle. Todos os direitos reservados.
INSERT de Criao de Piv
INSERT ALL
INTO sales_info VALUES (employee_id,week_id,sales_MON)
INTO sales_info VALUES (employee_id,week_id,sales_TUE)
INTO sales_info VALUES (employee_id,week_id,sales_WED)
INTO sales_info VALUES (employee_id,week_id,sales_THUR)
INTO sales_info VALUES (employee_id,week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI
FROM sales_source_data;
5 rows created.
INSERT de Criao de Piv (continuao)
No exemplo do slide, os dados de vendas, relativos aos detalhes das vendas realizadas
por um representante de vendas em cada dia de uma semana com um ID de semana
especfico, so recebidos da tabela de banco de dados no relacional
SALES_SOURCE_DATA.
DESC SALES_SOURCE_DATA
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-26
INSERT de Criao de Piv (continuao)
SELECT * FROM SALES_SOURCE_DATA;
DESC SALES_INFO
SELECT * FROM sales_info;
No exemplo anterior, observe que, ao usar uma instruo INSERT de criao de piv, uma
linha da tabela SALES_SOURCE_DATA convertida em cinco registros para a tabela
relacional, SALES_INFO.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-27
Copyright 2004, Oracle. Todos os direitos reservados.
A Instruo MERGE
Permite atualizar ou inserir dados de forma
condicional em uma tabela de banco de dados
Executa uma operao UPDATE se a linha existir e
uma operao INSERT se a linha for nova
Evita atualizaes separadas
Melhora o desempenho e facilita o uso
til nas aplicaes de data warehouse
Instrues MERGE
O servidor Oracle suporta a instruo MERGE para as operaes INSERT, UPDATE e
DELETE. Ao usar essa instruo, voc pode atualizar, inserir ou deletar uma linha de forma
condicional em uma tabela, evitando, assim, vrias instrues DML. A deciso de efetuar
uma atualizao, insero ou deleo na tabela de destino baseia-se na condio na clusula
ON.
Voc precisa ter privilgios de objeto INSERT e UPDATE na tabela de destino e o
privilgio de objeto SELECT na tabela de origem. Para especificar a clusula DELETE de
merge_update_clause, preciso ter o privilgio de objeto DELETE na tabela de
destino.
A instruo MERGE determinante. No possvel atualizar a mesma linha da tabela de
destino vrias vezes na mesma instruo MERGE.
Uma abordagem alternativa usar loops PL/SQL e vrias instrues DML. No entanto, a
instruo MERGE fcil de usar e expressa de forma mais simples como uma nica
instruo SQL.
A instruo MERGE apropriada para vrias aplicaes de data warehouse. Por exemplo,
em uma aplicao de data warehouse, talvez seja necessrio trabalhar com dados
provenientes de vrias origens, alguns dos quais podem ser duplicados. Com a instruo
MERGE, possvel adicionar ou modificar linhas de forma condicional.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-28
Copyright 2004, Oracle. Todos os direitos reservados.
A Sintaxe da Instruo MERGE
possvel inserir ou atualizar as linhas de uma tabela
de forma condicional usando a instruo MERGE.
MERGE INTO table_name table_alias
USING (table|view|sub_query) alias
ON (join condition)
WHEN MATCHED THEN
UPDATE SET
col1 = col_val1,
col2 = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list)
VALUES (column_values);
Intercalando Linhas
possvel atualizar linhas existentes e inserir novas linhas de forma condicional usando a
instruo MERGE.
Na sintaxe:
Clusula INTO especifica a tabela de destino para atualizao ou insero
Clusula USING identifica a origem dos dados a serem atualizados ou
inseridos; pode ser uma tabela, uma view ou uma
subconsulta
Clusula ON a condio com base na qual a operao MERGE efetua a
atualizao ou insero
WHEN MATCHED | instrui o servidor sobre como responder aos resultados da
condio de join
WHEN NOT MATCHED
Para obter mais informaes, consulte o item "MERGE" do manual Oracle Database 10g
SQL Reference.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-29
Copyright 2004, Oracle. Todos os direitos reservados.
MERGE INTO empl3 c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
...
c.department_id = e.department_id
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id,
e.department_id);
Intercalando Linhas
Insira ou atualize linhas da tabela EMPL3 para
corresponder tabela EMPLOYEES.
Exemplo de Intercalao de Linhas
MERGE INTO empl3 c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
c.first_name = e.first_name,
c.last_name = e.last_name,
c.email = e.email,
c.phone_number = e.phone_number,
c.hire_date = e.hire_date,
c.job_id = e.job_id,
c.salary = e.salary,
c.commission_pct = e.commission_pct,
c.manager_id = e.manager_id,
c.department_id = e.department_id
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.first_name, e.last_name,
e.email, e.phone_number, e.hire_date, e.job_id,
e.salary, e.commission_pct, e.manager_id,
e.department_id);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-30
Copyright 2004, Oracle. Todos os direitos reservados.
Intercalando Linhas
MERGE INTO empl3 c
USING employees e
ON (c.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET
...
WHEN NOT MATCHED THEN
INSERT VALUES...;
TRUNCATE TABLE empl3;
SELECT *
FROM empl3;
no rows selected
SELECT *
FROM empl3;
20 rows selected.
Exemplo de Intercalao de Linhas (continuao)
O exemplo do slide estabelece a correspondncia entre EMPLOYEE_ID da tabela EMPL3 e
EMPLOYEE_ID da tabela EMPLOYEES. Caso seja encontrada uma correspondncia, a
linha da tabela EMPL3 ser atualizada para corresponder linha da tabela EMPLOYEES. Se
no for encontrada, a linha ser inserida na tabela EMPL3.
A condio c.employee_id = e.employee_id ser avaliada. Como a tabela
EMPL3 est vazia, a condio retorna FALSE, indicando que no h correspondncias. A
lgica corresponde clusula WHEN NOT MATCHED, e o comando MERGE insere as linhas
da tabela EMPLOYEES na tabela EMPL3.
Se houver linhas na tabela EMPL3, e os IDs dos funcionrios corresponderem nas duas
tabelas (EMPL3 e EMPLOYEES), as linhas existentes na tabela EMPL3 sero atualizadas
para corresponderem tabela EMPLOYEES.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-31
Copyright 2004, Oracle. Todos os direitos reservados.
Controlando Alteraes nos Dados
Verses de linhas recuperadas
SELECT

Controlando Alteraes nos Dados


Voc poder perceber que, de alguma maneira, os dados de uma tabela foram alterados
de forma inadequada. Para pesquisar isso, possvel usar vrias consultas de flashback
para exibir dados das linhas em momentos especficos. Com mais eficincia, possvel
usar o recurso Flashback de Consulta de Verso para exibir todas as alteraes feitas em
uma linha durante um perodo. Esse recurso permite que voc anexe a clusula
VERSIONS a uma instruo SELECT que especifique um SCN ou uma faixa de
timestamp dentro da qual deseja exibir as alteraes feitas nos valores das linhas. A
consulta tambm pode retornar metadados associados, tais como a transao responsvel
pela alterao.
Alm disso, aps identificar uma transao errada, voc poder usar o recurso Flashback
de Consulta de Transao para identificar outras alteraes feitas por essa transao. Em
seguida, voc poder usar o recurso Flashback de Tabela para restaurar a tabela at um
estado anterior s alteraes.
possvel consultar uma tabela com a clusula VERSIONS para produzir todas as
verses de todas as linhas que existem ou que j existiram entre o momento da consulta e
o momento da execuo do parmetro undo_retention, segundos antes do momento
atual. undo_retention um parmetro de inicializao auto-ajustvel. A consulta
que inclui uma clusula VERSIONS denomina-se consulta de verso. Os resultados de
uma consulta de verso se comportam como se a clusula WHERE fosse aplicada s
verses das linhas. A consulta de verso retorna verses das linhas apenas durante as
transaes.
SCN (nmero de alterao do sistema): O servidor Oracle atribui um SCN (System
Change Number) para identificar os registros de redo para cada transao submetida a
commit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-32
Copyright 2004, Oracle. Todos os direitos reservados.
Exemplo de Flashback de Consulta de Verso
SELECT salary FROM employees3
WHERE employee_id = 107;
UPDATE employees3 SET salary = salary * 1.30
WHERE employee_id = 107;
COMMIT;
SELECT salary FROM employees3
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE employee_id = 107;
1
2
3
Exemplo de Flashback de Consulta de Verso
No exemplo do slide, o salrio do funcionrio 107 recuperado (1). O salrio do
funcionrio 107 aumentado em 30%, e essa alterao submetida a commit (2). So
exibidas as diferentes verses de salrio (3).
A clusula VERSIONS no altera o plano da consulta. Por exemplo, se voc executar uma
consulta para uma tabela que usa o mtodo de acesso por ndice, a mesma consulta na
mesma tabela com uma clusula VERSIONS continuar usando o mtodo de acesso por
ndice. As verses de linhas retornadas pela consulta so as verses das linhas durante as
transaes. A clusula VERSIONS no tem efeito sobre o comportamento transacional de
uma consulta. Isso significa que uma consulta a uma tabela com a clusula VERSIONS
tambm herda o ambiente de consulta da transao em andamento.
A clusula VERSIONS default pode ser especificada como VERSIONS BETWEEN
{SCN|TIMESTAMP} MINVALUE AND MAXVALUE.
A clusula VERSIONS uma extenso SQL apenas para consultas. possvel ter operaes
DML e DDL que usam uma clusula VERSIONS dentro de subconsultas. A consulta de
verso da linha recupera todas as verses submetidas a commit das linhas selecionadas. As
alteraes feitas pela transao ativa atual no so retornadas. A consulta de verso recupera
todas as verses de linhas. Isso significa, essencialmente, que as verses retornadas incluem
verses de linhas deletadas e subseqentemente reinseridas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-33
Exemplo de Obteno de Verses de Linhas
O acesso a linha para uma consulta de verso pode ser definido em uma destas duas
categorias:
Acesso a linha baseado no ID de linha: Em caso de acesso baseado no ID de linha,
todas as verses do ID de linha especificado so retornadas, no importando o
contedo da linha. Isso significa, essencialmente, que so retornadas todas as verses
do slot do bloco indicado pelo ID de linha.
Todos os demais acessos a linha: Para os demais acessos a linha, so retornadas todas
as verses de linha.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-34
Copyright 2004, Oracle. Todos os direitos reservados.
A Clusula VERSIONS BETWEEN
SELECT versions_starttime "START_DATE",
versions_endtime "END_DATE",
salary
FROM employees
VERSIONS BETWEEN SCN MINVALUE
AND MAXVALUE
WHERE last_name = 'Lorentz';
A Clusula VERSIONS BETWEEN
Voc pode usar a clusula VERSIONS BETWEEN para recuperar todas as verses das
linhas que existem ou que j existiram entre o momento da consulta e um momento
passado.
Se o tempo de reteno de undo for menor que o limite inferior de tempo/SCN da clusula
BETWEEN, a consulta recuperar apenas as verses at o perodo de reteno de undo. O
intervalo de tempo da clusula BETWEEN pode ser especificado como um intervalo SCN ou
como uma faixa de horrios. Esse intervalo de tempo definido pelos limites inferior e
superior.
No exemplo, as alteraes do salrio de Lorentz so recuperadas. O valor nulo para
END_DATE na primeira verso indica que esta era a verso existente no momento da
consulta. O valor nulo para START_DATE na ltima verso indica que essa verso foi
criada em um momento anterior ao tempo de reteno de undo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-35
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc aprendeu a:
Usar instrues DML e controlar transaes
Descrever os recursos de inseres em vrias tabelas
Usar os seguintes tipos de inseres em vrias
tabelas:
INSERT Incondicional
INSERT de Criao de Piv
ALL INSERT Condicional
FIRST INSERT Condicional
Intercalar linhas em uma tabela
Manipular dados usando subconsultas
Controlar as alteraes de dados durante um perodo
Sumrio
Nesta lio, voc aprendeu a manipular os dados do banco de dados Oracle usando
subconsultas. Voc tambm conheceu as instrues INSERT em vrias tabelas e a instruo
MERGE, alm de aprender a controlar as alteraes feitas no banco de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-36
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 3: Viso Geral
Este exerccio aborda os seguintes tpicos:
Executando INSERTs em vrias tabelas
Executando operaes MERGE
Controlando verses de linhas
Exerccio 3: Viso Geral
Neste exerccio, voc adiciona linhas tabela emp_data, atualiza e deleta dados da tabela
e controla suas transaes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-37
Exerccio 3
1. Execute o script lab_03_01.sql da pasta lab para criar a tabela
SAL_HISTORY.
2. Exiba a estrutura da tabela SAL_HISTORY.
3. Execute o script lab_03_03.sql da pasta lab para criar a tabela
MGR_HISTORY.
4. Exiba a estrutura da tabela MGR_HISTORY.
5. Execute o script lab_03_05.sql da pasta lab para criar a tabela
SPECIAL_SAL.
6. Exiba a estrutura da tabela SPECIAL_SAL.
7. a. Crie uma consulta que faa o seguinte:
Recupere na tabela EMPLOYEES os detalhes de ID do funcionrio, data de
admisso, salrio e o ID do gerente desses funcionrios cujo ID inferior a
125.
Se o salrio for superior a $20.000, insira os detalhes sobre o ID do
funcionrio e o salrio na tabela SPECIAL_SAL.
Insira o ID do funcionrio, a data de admisso e o salrio na tabela
SAL_HISTORY.
Insira os detalhes sobre o ID do funcionrio, o ID do gerente e o salrio na
tabela MGR_HISTORY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-38
Exerccio 3 (continuao)
b. Exiba os registros da tabela SPECIAL_SAL.
c. Exiba os registros da tabela SAL_HISTORY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-39
Exerccio 3 (continuao)
d. Exiba os registros da tabela MGR_HISTORY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-40
Exerccio 3 (continuao)
8. a. Execute o script lab_03_08a.sql da pasta lab para criar a tabela
SALES_SOURCE_DATA.
b. Execute o script lab_03_08b.sql da pasta lab para inserir registros na
tabela SALES_SOURCE_DATA.
c. Exiba a estrutura da tabela SALES_SOURCE_DATA.
d. Exiba os registros da tabela SALES_SOURCE_DATA.
e. Execute o script lab_03_08c.sql da pasta lab para criar a tabela
SALES_INFO.
f. Exiba a estrutura da tabela SALES_INFO.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-41
Exerccio 3 (continuao)
g. Crie uma consulta que faa o seguinte:
Recupere da tabela SALES_SOURCE_DATA os detalhes sobre o ID do
funcionrio, o ID da semana, vendas na segunda-feira, vendas na tera-feira,
vendas na quarta-feira, vendas na quinta-feira e vendas na sexta-feira.
Crie uma transformao de modo que cada registro recuperado da tabela
SALES_SOURCE_DATA seja convertido em vrios registros para a tabela
SALES_INFO.
Dica: Use uma instruo INSERT de criao de piv.
h. Exiba os registros da tabela SALES_INFO.
9. Voc tem os dados dos antigos funcionrios armazenados em um arquivo sem
formatao denominado emp.data e deseja armazenar em uma tabela os nomes e
os IDs de e-mail de todos os funcionrios, antigos e atuais. Para isso, primeiro crie
uma tabela externa denominada EMP_DATA usando o arquivo de origem emp.dat
no diretrio emp_dir. Voc pode usar o script lab_03_09.sql para essa tarefa.
10. Em seguida, execute o script lab_03_10.sql para criar a tabela EMP_HIST.
a. Aumente o tamanho da coluna de e-mail para 45.
b. Intercale os dados da tabela EMP_DATA criada no ltimo laboratrio com os
dados da tabela EMP_HIST. Suponha que os dados da tabela externa EMP_DATA
sejam os mais atualizados. Se uma linha da tabela EMP_DATA corresponde
tabela EMP_HIST, atualize a coluna de e-mail da tabela EMP_HIST para
corresponder linha da tabela EMP_DATA. Se uma linha da tabela EMP_DATA
no corresponder tabela EMP_HIST, insira-a na tabela EMP_HIST. As linhas
so coincidentes quando o nome e o sobrenome do funcionrio so idnticos.
c. Recupere as linhas da tabela EMP_HIST aps a intercalao.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 3-42
Exerccio 3 (continuao)
11. Crie a tabela EMP3 usando o script lab_03_11.sql. Na tabela EMP3, altere o
departamento de Kochhar para 60 e faa commit da alterao. Em seguida, altere o
departamento de Kochhar para 50 e faa commit da alterao. Controle as alteraes
de Kochhar usando o recurso Row Versions.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Gerando Relatrios por Agrupamento
de Dados Relacionados
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Usar a operao ROLLUP para produzir
valores de subtotais
Usar a operao CUBE para produzir valores de
tabelas de referncia cruzada
Usar a function GROUPING para identificar os valores
das linhas criadas por ROLLUP ou CUBE
Usar GROUPING SETS para produzir um nico
conjunto de resultados
Objetivos
Nesta lio, voc aprender a:
Agrupar dados para obter:
Valores de subtotais usando o operador ROLLUP
Valores de tabelas de referncia cruzada usando o operador CUBE
Usar a function GROUPING para identificar o nvel de agregao no conjunto de
resultados produzido por um operador ROLLUP ou CUBE.
Usar GROUPING SETS para produzir um nico conjunto de resultados que seja
equivalente a um mtodo UNION ALL
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-3
Copyright 2004, Oracle. Todos os direitos reservados.
Anlise de Functions de Grupo
As functions de grupo operam em conjuntos de
linhas para fornecer um resultado por grupo.
Exemplo:
SELECT [column,] group_function(column). . .
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
SELECT AVG(salary), STDDEV(salary),
COUNT(commission_pct),MAX(hire_date)
FROM employees
WHERE job_id LIKE 'SA%';
Functions de Grupo
Voc pode usar a clusula GROUP BY para dividir as linhas de uma tabela em grupos. Em
seguida, voc pode usar functions de grupo para retornar informaes resumidas de cada
grupo. As functions de grupo podem aparecer em listas de seleo e nas clusulas ORDER
BY e HAVING. O servidor Oracle aplica as functions de grupo a cada grupo de linhas e
retorna uma nica linha de resultados para cada grupo.
Tipos de function de grupo: Cada uma das functions AVG, SUM, MAX, MIN, COUNT,
STDDEV e VARIANCE aceita apenas um argumento. As functions AVG, SUM, STDDEV e
VARIANCE operam apenas em valores numricos. MAX e MIN podem operar em valores
numricos, de caracteres e de dados de datas. COUNT retorna o nmero de linhas no nulas
para determinada expresso. No exemplo do slide, so calculados o salrio mdio, o desvio
padro relativo ao salrio, o nmero de funcionrios que recebem comisso e a data de
admisso mxima para os funcionrios cujo JOB_ID comea com SA.
Diretrizes do Uso de Functions de Grupo
Os tipos de dados para os argumentos podem ser CHAR, VARCHAR2, NUMBER ou
DATE.
Todas as functions de grupo, exceto COUNT(*), ignoram valores nulos. Para
substituir um valor por valores nulos, use a function NVL. COUNT retorna um nmero
ou zero.
Quando voc usa a clusula GROUP BY, o servidor Oracle classifica, implicitamente, o
conjunto de resultados das colunas de agrupamento especificadas em ordem crescente.
Para sobrepor essa ordenao default, possvel usar DESC em uma clusula ORDER
BY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-4
Copyright 2004, Oracle. Todos os direitos reservados.
Anlise da Clusula GROUP BY
Sintaxe:
Exemplo:
SELECT department_id, job_id, SUM(salary),
COUNT(employee_id)
FROM employees
GROUP BY department_id, job_id ;
SELECT [column,]
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
group_function(column). . .
Anlise da Clusula GROUP BY
O exemplo ilustrado no slide avaliado pelo servidor Oracle da seguinte forma:
A clusula SELECT especifica que as seguintes colunas devem ser recuperadas:
Colunas de ID do departamento e ID do cargo da tabela EMPLOYEES
A soma de todos os salrios e o nmero de funcionrios de cada grupo
especificado na clusula GROUP BY
A clusula GROUP BY especifica como as linhas devem ser agrupadas na tabela. O
salrio total e o nmero de funcionrios so calculados para cada ID de cargo em cada
departamento. As linhas so agrupadas por ID de departamento e, em seguida, so
agrupadas por cargo, dentro de cada departamento.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-5
Copyright 2004, Oracle. Todos os direitos reservados.
Anlise da Clusula HAVING
Use a clusula HAVING para especificar quais grupos
devem ser exibidos.
Voc pode restringir ainda mais os grupos com base
em uma condio limitante.
SELECT [column,] group_function(column)...
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING having_expression]
[ORDER BY column];
A Clusula HAVING
Os grupos so formados e as functions de grupo so calculadas antes de a clusula HAVING
ser aplicada aos grupos. A clusula HAVING pode anteceder a clusula GROUP BY, mas,
por motivos lgicos, recomendvel usar primeiro a clusula GROUP BY.
Quando voc usa a clusula HAVING, o servidor Oracle segue as seguintes etapas:
1. Agrupa linhas
2. Aplica as functions de grupo aos grupos e exibe os grupos que correspondem aos
critrios da clusula HAVING
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-6
Copyright 2004, Oracle. Todos os direitos reservados.
GROUP BY com Operadores ROLLUP e CUBE
Use o operador ROLLUP ou CUBE com GROUP BY para
produzir linhas superagregadas por colunas de
referncia cruzada.
O agrupamento de ROLLUP produz um conjunto de
resultados com as linhas agrupadas normais e os
valores dos subtotais.
O agrupamento de CUBE produz um conjunto de
resultados com as linhas de ROLLUP e as linhas de
tabelas de referncia cruzada.
GROUP BY com os Operadores ROLLUP e CUBE
Especifique os operadores ROLLUP e CUBE na clusula GROUP BY de uma consulta. O
agrupamento de ROLLUP produz um conjunto de resultados com as linhas agrupadas
normais e as linhas de subtotais. A operao CUBE na clusula GROUP_BY agrupa as linhas
selecionadas com base nos valores de todas as combinaes possveis de expresses na
especificao e retorna uma nica linha de informaes resumidas para cada grupo. Voc
pode usar o operador CUBE para produzir linhas de tabelas de referncia cruzada.
Observao: Quando estiver trabalhando com ROLLUP e CUBE, certifique-se de que as
colunas aps a clusula GROUP BY tenham relacionamentos significativos e reais umas com
as outras; caso contrrio, os operadores retornaro informaes irrelevantes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-7
Copyright 2004, Oracle. Todos os direitos reservados.
Operador ROLLUP
ROLLUP uma extenso da clusula GROUP BY.
Use a operao ROLLUP para produzir agregados
cumulativos, como subtotais.
SELECT [column,] group_function(column). . .
FROM table
[WHERE condition]
[GROUP BY [ROLLUP] group_by_expression]
[HAVING having_expression];
[ORDER BY column];
O Operador ROLLUP
O operador ROLLUP fornece agregados e superagregados para expresses contidas na
instruo GROUP BY. Os autores de relatrios podem usar o operador ROLLUP para extrair
estatsticas e informaes resumidas de conjuntos de resultados. possvel usar agregados
cumulativos em relatrios, tabelas e grficos.
O operador ROLLUP cria agrupamentos movendo-se em uma direo, da direita para a
esquerda, pela lista de colunas especificada na clusula GROUP BY. Depois, ele aplica a
function agregada a esses agrupamentos.
Observao
Para produzir subtotais em n dimenses (isto , n colunas na clusula GROUP BY) sem
um operador ROLLUP, necessrio vincular n+1 instrues SELECT com UNION
ALL. Isso torna a execuo da consulta ineficiente, pois cada uma das instrues
SELECT produz um acesso tabela. O operador ROLLUP rene os resultados com
apenas um acesso tabela. Esse operador ser til quando houver vrias colunas
envolvidas na produo de subtotais.
Os subtotais e totais so produzidos com ROLLUP. CUBE tambm produz totais e faz
um roll-up eficiente dos valores em todas as direes possveis, produzindo dados de
referncia cruzada.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-8
Copyright 2004, Oracle. Todos os direitos reservados.
Operador ROLLUP: Exemplo
SELECT department_id, job_id, SUM(salary)
FROM employees
WHERE department_id < 60
GROUP BY ROLLUP(department_id, job_id);
3
1
2
Exemplo de um Operador ROLLUP
No exemplo do slide:
O total dos salrios de todos os IDs de cargos relativos aos departamentos cujo ID
menor que 60 so exibidos pela clusula GROUP BY.
O operador ROLLUP exibe:
O salrio total de cada departamento cujo ID menor que 60
O salrio total de todos os departamentos cujo ID menor que 60,
independentemente dos IDs dos cargos
Neste exemplo, 1 indica um grupo totalizado por DEPARTMENT_ID e JOB_ID, 2 indica
um grupo totalizado apenas por DEPARTMENT_ID e 3 indica o total geral.
O operador ROLLUP cria subtotais nos quais ocorre um rollup do nvel mais detalhado para
um total geral, seguindo a lista de agrupamento especificada na clusula GROUP BY.
Primeiro, ele calcula os valores agregados padro para os grupos especificados na clusula
GROUP BY (no exemplo, a soma dos salrios agrupada em cada cargo de um departamento).
Em seguida, ele cria subtotais progressivamente mais altos, movendo-se da direita para a
esquerda pela lista de colunas de agrupamento. (No exemplo, a soma dos salrios de cada
departamento calculada, seguida pela soma dos salrios de todos os departamentos.)
Fornecidas n expresses no operador ROLLUP da clusula GROUP BY, a operao
resulta em agrupamentos n + 1 (neste caso, 2 + 1 = 3).
As linhas baseadas nos valores das primeiras n expresses so denominadas linhas ou
linhas normais e as outras so denominadas linhas superagregadas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-9
Copyright 2004, Oracle. Todos os direitos reservados.
Operador CUBE
CUBE uma extenso da clusula GROUP BY.
Voc pode usar o operador CUBE para produzir
valores de tabelas de referncia cruzada com uma
nica instruo SELECT.
SELECT [column,] group_function(column)...
FROM table
[WHERE condition]
[GROUP BY [CUBE] group_by_expression]
[HAVING having_expression]
[ORDER BY column];
O Operador CUBE
O operador CUBE uma alternncia adicional na clusula GROUP BY de uma instruo
SELECT. possvel aplicar esse operador a todas as functions agregadas, inclusive AVG,
SUM, MAX, MIN e COUNT. Ele usado para produzir conjuntos de resultados usados
geralmente em relatrios de tabelas de referncia cruzada. Enquanto ROLLUP produz
somente uma frao das combinaes possveis de subtotais, CUBE produz subtotais para
todas as combinaes possveis de agrupamentos especificados na clusula GROUP BY e um
total geral.
O operador CUBE usado com uma function agregada para gerar outras linhas em um
conjunto de resultados. feita referncia cruzada s colunas includas na clusula
GROUP BY para produzir um superconjunto de grupos. A function agregada especificada
na lista de seleo aplicada a esses grupos para produzir valores resumidos para as
linhas superagregadas adicionais. O nmero de grupos extras no conjunto de resultados
determinado pelo nmero de colunas includas na clusula GROUP BY.
Na verdade, todas as combinaes possveis das colunas ou expresses da clusula
GROUP BY so usadas para produzir superagregados. Se voc tiver n colunas ou
expresses na clusula GROUP BY, haver 2
n
combinaes superagregadas possveis.
Matematicamente, essas combinaes formam um cubo n dimensional, que a origem do
nome do operador.
Com ferramentas de programao e aplicaes, possvel incluir esses valores
superagregados em tabelas e grficos para apresentar os resultados e os relacionamentos
de maneira visual e eficiente.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-10
Copyright 2004, Oracle. Todos os direitos reservados.
Operador CUBE: Exemplo
SELECT department_id, job_id, SUM(salary)
FROM employees
WHERE department_id < 60
GROUP BY CUBE (department_id, job_id) ;
1
2
3
4
Exemplo de um Operador CUBE
possvel interpretar a sada da instruo SELECT no exemplo da seguinte maneira:
O salrio total de todos os cargos de um departamento (para os departamentos com ID
menor que 60) exibido na clusula GROUP BY.
O salrio total dos departamentos cujo ID menor que 60.
O salrio total de todos os cargos independentemente do departamento.
O salrio total dos departamentos cujo ID menor que 60, independentemente dos
cargos.
Neste exemplo, 1 indica o total geral. 2 indica as linhas totalizadas apenas por JOB_ID. 3
indica algumas linhas totalizadas por DEPARTMENT_ID e JOB_ID. 4 indica algumas
linhas totalizadas apenas por DEPARTMENT_ID.
O operador CUBE tambm executou a operao ROLLUP para exibir os subtotais, para os
departamentos cujo ID menor que 60, e o salrio total dos departamentos cujo ID menor
que 60, independentemente dos cargos. Alm disso, o operador CUBE exibe o salrio total
de todos os cargos independentemente do departamento.
Observao: De maneira semelhante ao operador ROLLUP, a produo de subtotais em n
dimenses (isto , n colunas na clusula GROUP BY) sem um operador CUBE exige a
vinculao de 2
n
instrues SELECT com UNION ALL. Portanto, um relatrio com trs
dimenses exige a vinculao de 2
3
= 8 instrues SELECT com UNION ALL.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-11
Copyright 2004, Oracle. Todos os direitos reservados.
Function GROUPING
A Function GROUPING
usada com o operador CUBE ou ROLLUP
usada para localizar os grupos que formam o
subtotal em uma linha
usada para diferenciar valores NULL armazenados
de valores NULL criados por ROLLUP ou CUBE
Retorna 0 ou 1
SELECT [column,] group_function(column) .. ,
GROUPING(expr)
FROM table
[WHERE condition]
[GROUP BY [ROLLUP][CUBE] group_by_expression]
[HAVING having_expression]
[ORDER BY column];
A Function GROUPING
possvel usar a function GROUPING com o operador CUBE ou ROLLUP para
compreender como um valor resumido foi obtido.
A function GROUPING usa uma nica coluna como argumento. O termo expr na function
GROUPING deve corresponder a uma das expresses na clusula GROUP BY. A function
retorna o valor 0 ou 1.
Os valores retornados pela function GROUPING so teis para:
Determinar o nvel de agregao de um subtotal fornecido; isto , o grupo (ou grupos)
no qual o subtotal baseado
Identificar se um valor NULL na coluna da expresso de uma linha do conjunto de
resultados indica:
Um valor NULL da tabela-base (valor NULL armazenado)
Um valor NULL criado por ROLLUP ou CUBE (como resultado da function de
grupo nessa expresso)
O valor 0 retornado pela function GROUPING com base em uma expresso indica uma das
seguintes situaes:
A expresso foi usada para calcular o valor agregado.
O valor NULL na coluna da expresso um valor NULL armazenado.
O valor 1 retornado pela function GROUPING com base em uma expresso indica uma das
seguintes situaes:
A expresso no foi usada para calcular o valor agregado.
O valor NULL na coluna da expresso criado por ROLLUP/CUBE como resultado de
agrupamento.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-12
Copyright 2004, Oracle. Todos os direitos reservados.
Function GROUPING: Exemplo
SELECT department_id DEPTID, job_id JOB,
SUM(salary),
GROUPING(department_id) GRP_DEPT,
GROUPING(job_id) GRP_JOB
FROM employees
WHERE department_id < 50
GROUP BY ROLLUP(department_id, job_id);
1
2
3
Exemplo de uma Function GROUPING
No exemplo do slide, considere o valor resumido 4400 na primeira linha (indicado por 1).
Esse valor resumido o salrio total de cada ID do cargo AD_ASST no departamento 10.
Para calcular esse valor resumido, as colunas DEPARTMENT_ID e JOB_ID foram
consideradas. Assim, o valor 0 retornado para as expresses
GROUPING(department_id) e GROUPING(job_id).
Considere o valor resumido 4400 na segunda linha (indicado por 2). Esse valor o salrio
total do departamento 10 e foi calculado considerando a coluna DEPARTMENT_ID.
Portanto, o valor 0 foi retornado por GROUPING(department_id). Como a coluna
JOB_ID no foi considerada no clculo desse valor, o valor 1 foi retornado para
GROUPING(job_id). Voc pode observar uma sada semelhante na quinta linha.
Na ltima linha, considere o valor resumido 54800 (indicado por 3). Este o salrio total de
todos os cargos dos departamentos cujo ID menor que 50. Para calcular esse valor
resumido, no foram consideradas as colunas DEPARTMENT_ID e JOB_ID. Assim,
retornado o valor 1 para as expresses GROUPING(department_id) e
GROUPING(job_id).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-13
Copyright 2004, Oracle. Todos os direitos reservados.
GROUPING SETS
A sintaxe de GROUPING SETS usada para definir
vrios agrupamentos na mesma consulta.
Todos os agrupamentos especificados na clusula
GROUPING SETS so computados, e os resultados
de agrupamentos individuais so combinados com
uma operao UNION ALL.
Eficincia de conjuntos de agrupamentos:
S preciso uma passagem pela tabela-base
No h necessidade de criar instrues UNION
complexas.
Quanto mais elementos GROUPING SETS houver, mais
vantagens de desempenho sero obtidas.
GROUPING SETS
GROUPING SETS uma extenso da clusula GROUP BY que voc pode usar para
especificar vrios agrupamentos de dados. Essa especificao facilita a agregao eficiente,
portanto facilita tambm a anlise de dados em vrias dimenses.
Agora, possvel criar uma nica instruo SELECT usando GROUPING SETS para
especificar vrios agrupamentos (que tambm podem incluir os operadores ROLLUP ou
CUBE), em vez de diversas instrues SELECT combinadas por operadores UNION ALL.
Por exemplo:
SELECT department_id, job_id, manager_id, AVG(salary)
FROM employees
GROUP BY
GROUPING SETS
((department_id, job_id, manager_id),
(department_id, manager_id),(job_id, manager_id));
Essa instruo calcula agregados em trs agrupamentos:
(department_id, job_id, manager_id), (department_id,
manager_id) e (job_id, manager_id)
Sem esse recurso, so necessrias vrias consultas combinadas com UNION ALL para obter
a sada da instruo SELECT precedente. Uma abordagem de vrias consultas no eficaz,
pois ela requer vrias varreduras nos mesmos dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-14
GROUPING SETS (continuao)
Compare o exemplo anterior com a seguinte alternativa:
SELECT department_id, job_id, manager_id, AVG(salary)
FROM employees
GROUP BY CUBE(department_id, job_id, manager_id);
Essa instruo engloba os 8 agrupamentos (2 *2 *2), apesar de apenas os grupos
(department_id, job_id, manager_id), (department_id,
manager_id) e (job_id, manager_id) serem relevantes para voc.
Outra alternativa seria a seguinte instruo:
SELECT department_id, job_id, manager_id, AVG(salary)
FROM employees
GROUP BY department_id, job_id, manager_id
UNION ALL
SELECT department_id, NULL, manager_id, AVG(salary)
FROM employees
GROUP BY department_id, manager_id
UNION ALL
SELECT NULL, job_id, manager_id, AVG(salary)
FROM employees
GROUP BY job_id, manager_id;
Essa instruo requer trs varreduras da tabela-base, o que a torna ineficiente.
Os operadores CUBE e ROLLUP podem ser considerados conjuntos de agrupamento com
semntica muito especfica. As seguintes equivalncias confirmam esse fato:
GROUPING SETS ((a, b, c), (a, b),(a), ()) ROLLUP(a, b,c)
equivalente a
GROUPING SETS
((a, b, c), (a, b), (a, c), (b, c),
(a), (b), (c), ())
CUBE(a, b, c)
equivalente a
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-15
Copyright 2004, Oracle. Todos os direitos reservados.
GROUPING SETS: Exemplo
SELECT department_id, job_id,
manager_id,avg(salary)
FROM employees
GROUP BY GROUPING SETS
((department_id,job_id), (job_id,manager_id));

2
GROUPING SETS: Exemplo
A consulta do slide calcula agregados em dois agrupamentos. A tabela dividida nos
seguintes grupos:
ID do Cargo, ID do Gerente
ID do Departamento, ID do Cargo
Os salrios mdios de cada um desses grupos so calculados. O conjunto de resultados
exibe o salrio mdio de cada um dos dois grupos.
Na sada, possvel interpretar o grupo marcado por 1 como:
O salrio mdio de todos os funcionrios com o ID de cargo AD_VP abaixo do gerente
100 $17.000.
O salrio mdio de todos os funcionrios com o ID de cargo AC_MGR abaixo do
gerente 101 $12.000 e assim por diante.
O grupo marcado com 2 na sada interpretado como:
O salrio mdio de todos os funcionrios com o ID de cargo FI_MGR no departamento
100 $12.000.
O salrio mdio de todos os funcionrios com o ID de cargo FI_ACCOUNT no
departamento 100 $7.920 e assim por diante.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-16
GROUPING SETS: Exemplo (continuao)
O exemplo do slide tambm pode ser criado assim:
SELECT department_id, job_id, NULL as manager_id,
AVG(salary) as AVGSAL
FROM employees
GROUP BY department_id, job_id
UNION ALL
SELECT NULL, job_id, manager_id, avg(salary) as AVGSAL
FROM employees
GROUP BY job_id, manager_id;
Na ausncia de um otimizador que verifique os blocos de consulta para gerar o plano de
execuo, a consulta precedente precisaria de duas varreduras da tabela-base
(EMPLOYEES). Isso pode ser muito ineficiente. Portando, recomenda-se o uso da instruo
GROUPING SETS.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-17
Copyright 2004, Oracle. Todos os direitos reservados.
Colunas Compostas
Uma coluna composta um conjunto de colunas
tratadas como uma unidade.
ROLLUP (a, , d)
Use parnteses na clusula GROUP BY para agrupar
colunas, de modo que sejam tratadas como uma
unidade no clculo das operaes ROLLUP ou CUBE.
Quando usadas com ROLLUP ou CUBE, as colunas
compostas exigiriam que a agregao fosse
ignorada em certos nveis.
(b,c)
Colunas Compostas
Uma coluna composta um conjunto de colunas tratadas como uma unidade durante o
clculo de agrupamentos. Especifique as colunas entre parnteses como na seguinte
instruo:
ROLLUP (a, (b, c), d)
Em que (b,c) forma uma coluna composta e tratado como uma unidade. Em geral, as
colunas compostas so teis em ROLLUP, CUBE e GROUPING SETS. Por exemplo, em
CUBE ou ROLLUP, as colunas compostas exigiriam que a agregao fosse ignorada em
certos nveis.
Isto , GROUP BY ROLLUP(a, (b, c)) equivale a
GROUP BY a, b, c UNION ALL
GROUP BY a UNION ALL
GROUP BY ()
Em que (b, c) tratado como uma unidade e no aplicado ROLLUP em (b, c).
como se voc tivesse um apelido, por exemplo, z, para (b, c) e a expresso GROUP BY
fosse reduzida a GROUP BY ROLLUP(a, z).
Observao: Normalmente, GROUP BY( ) uma instruo SELECT com valores NULL
para as colunas a e b, e apenas a function agregada. Quase sempre ela usada para gerar
totais gerais.
SELECT NULL, NULL, aggregate_col
FROM <table_name>
GROUP BY ( );
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-18
Colunas Compostas (continuao)
Compare com o ROLLUP normal, como em:
GROUP BY ROLLUP(a, b, c)
que seria
GROUP BY a, b, c UNION ALL
GROUP BY a, b UNION ALL
GROUP BY a UNION ALL
GROUP BY ()
Da mesma forma,
GROUP BY CUBE((a, b), c)
seria equivalente a
GROUP BY a, b, c UNION ALL
GROUP BY a, b UNION ALL
GROUP BY c UNION ALL
GROUP By ()
A tabela a seguir mostra a especificao de conjuntos de agrupamento e a especificao da
clusula GROUP BY equivalente.
GROUP BY a UNION ALL
GROUP BY b UNION ALL
GROUP BY ()
GROUP BY GROUPING SETS(a, (b), ())
GROUP BY a UNION ALL
GROUP BY ROLLUP(b, c)
GROUP BY GROUPING SETS
(a,ROLLUP(b, c))
(A expresso GROUPING SETS tem uma coluna
composta.)
GROUP BY a, b, c GROUP BY GROUPING SETS((a, b, c))
GROUP BY a UNION ALL
GROUP BY b UNION ALL
GROUP BY b, c
GROUP BY GROUPING SETS(a, b,(b, c))
(A expresso GROUPING SETS tem uma coluna
composta.)
GROUP BY a UNION ALL
GROUP BY b UNION ALL
GROUP BY c
GROUP BY GROUPING SETS(a, b, c)
Instrues GROUP BY
Equivalentes
Instrues GROUPING SETS
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-19
Copyright 2004, Oracle. Todos os direitos reservados.
Colunas Compostas: Exemplo
SELECT department_id, job_id, manager_id,
SUM(salary)
FROM employees
GROUP BY ROLLUP( department_id,(job_id, manager_id));

2
3
4
1
Colunas Compostas: Exemplo
Considere o exemplo:
SELECT department_id, job_id,manager_id, SUM(salary)
FROM employees
GROUP BY ROLLUP( department_id,job_id, manager_id);
Esta consulta resulta no clculo do servidor Oracle dos seguintes agrupamentos:
1. (job_id, manager_id)
2. (department_id, job_id, manager_id)
3. (department_id)
4. Total geral
Se voc estiver interessado apenas em grupos especficos, no poder limitar o clculo aos
agrupamentos sem usar colunas compostas. Com colunas compostas, isso possvel
tratando as colunas JOB_ID e MANAGER_ID como uma unidade durante o rollup. As
colunas entre parnteses so tratadas como uma unidade no clculo de ROLLUP e CUBE.
Essa situao ilustrada no exemplo do slide. Colocando as colunas JOB_ID e
MANAGER_ID entre parnteses, voc informa ao servidor Oracle para tratar JOB_ID e
MANAGER_ID como uma unidade, ou seja, como uma coluna composta.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-20
Colunas Compostas: Exemplo (continuao)
O exemplo do slide calcula os seguintes agrupamentos:
(department_id, job_id, manager_id)
(department_id)
( )
O exemplo do slide exibe o seguinte:
O salrio total de cada cargo e gerente (indicado por 1)
O salrio total de cada departamento, cargo e gerente (indicado por 2)
O salrio total de cada departamento (indicado por 3)
Total geral (indicado por 4)
O exemplo do slide tambm pode ser criado assim:
SELECT department_id, job_id, manager_id, SUM(salary)
FROM employees
GROUP BY department_id,job_id, manager_id
UNION ALL
SELECT department_id, TO_CHAR(NULL),TO_NUMBER(NULL), SUM(salary)
FROM employees
GROUP BY department_id
UNION ALL
SELECT TO_NUMBER(NULL), TO_CHAR(NULL),TO_NUMBER(NULL), SUM(salary)
FROM employees
GROUP BY ();
Na ausncia de um otimizador que verifique os blocos de consulta para gerar o plano de
execuo, a consulta precedente precisaria de trs varreduras da tabela-base (EMPLOYEES).
Isso pode ser muito ineficiente. Portanto, recomenda-se o uso de colunas compostas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-21
Copyright 2004, Oracle. Todos os direitos reservados.
Agrupamentos Concatenados
Os agrupamentos concatenados oferecem uma
maneira concisa de gerar combinaes teis de
agrupamentos.
Para especificar conjuntos de agrupamentos
concatenados, separe vrios conjuntos de
agrupamentos, bem como operaes ROLLUP e
CUBE, por vrgulas para que o servidor Oracle os
combine em uma nica clusula GROUP BY.
O resultado um produto hbrido de agrupamentos
de cada conjunto de agrupamentos.
GROUP BY GROUPING SETS(a, b), GROUPING SETS(c, d)
Colunas Concatenadas
Os agrupamentos concatenados oferecem uma maneira concisa de gerar combinaes teis
de agrupamentos. Os agrupamentos concatenados so especificados pela listagem de vrios
conjuntos de agrupamentos, cubos e rollups, separados por vrgulas. Este um exemplo de
conjuntos de agrupamentos concatenados:
GROUP BY GROUPING SETS(a, b), GROUPING SETS(c, d)
Esta instruo SQL define os seguintes agrupamentos:
(a, c), (a, d), (b, c), (b, d)
A concatenao de conjuntos de agrupamentos muito til por estes motivos:
Facilidade de desenvolvimento de consultas: no necessrio enumerar todos os
agrupamentos manualmente.
Uso por aplicaes: a instruo SQL gerada por aplicaes OLAP envolve, com
freqncia, a concatenao de conjuntos de agrupamentos; cada conjunto define os
agrupamentos necessrios para uma dimenso
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-22
Copyright 2004, Oracle. Todos os direitos reservados.

Agrupamentos Concatenados: Exemplo


SELECT department_id, job_id, manager_id,
SUM(salary)
FROM employees
GROUP BY department_id,
ROLLUP(job_id),
CUBE(manager_id);
1
2
3
4
5
Agrupamentos Concatenados: Exemplo
O exemplo do slide resulta nos seguintes agrupamentos:
(job_id, manager_id) (1)
(department_id,job_id, manager_id) (2)
(job_id)(3)
(department_id,manager_id)(4)
(department_id) (5)
O salrio total de cada um desses grupos calculado.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-23
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc aprendeu a usar a:
operao ROLLUP para produzir valores de subtotais
operao CUBE para produzir valores de tabelas de
referncia cruzada
function GROUPING para identificar os valores das
linhas criadas por ROLLUP ou CUBE
sintaxe de GROUPING SETS para definir vrios
agrupamentos na mesma consulta
clusula GROUP BY para combinar expresses de
vrias formas:
Colunas compostas
Conjuntos de agrupamentos concatenados
Sumrio
ROLLUP e CUBE so extenses da clusula GROUP BY.
ROLLUP usado para exibir valores de subtotais e de totais gerais.
CUBE usado para exibir valores de tabelas de referncia cruzada.
A function GROUPING permite determinar se uma linha um agregado produzido
por um operador CUBE ou por um operador ROLLUP.
Com a sintaxe de GROUPING SETS, possvel definir vrios agrupamentos na
mesma consulta. A clusula GROUP BY calcula todos os agrupamentos
especificados e combina-os com UNION ALL.
Na clusula GROUP BY, possvel combinar expresses de vrias formas:
Para especificar colunas compostas, agrupe as colunas entre parnteses de modo
que o servidor Oracle as trate como uma unidade durante o clculo de operaes
ROLLUP ou CUBE.
Para especificar conjuntos de agrupamentos concatenados, separe vrios
conjuntos de agrupamentos, bem como operaes ROLLUP e CUBE, por vrgulas
para que o servidor Oracle os combine em uma nica clusula GROUP BY. O
resultado um produto hbrido de agrupamentos de cada conjunto de
agrupamentos.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-24
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 4: Viso Geral
Este exerccio abrange o uso de:
operadores ROLLUP
operadores CUBE
functions GROUPING
GROUPING SETS
Exerccio 4: Viso Geral
Neste exerccio, voc usar os operadores ROLLUP e CUBE como extenses da clusula
GROUP BY. Voc tambm usar GROUPING SETS.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-25
Exerccio 4
1. Crie uma consulta para exibir as seguintes informaes sobre os funcionrios cujo
ID de gerente menor que 120:
ID do gerente
ID do cargo e salrio total para cada ID de cargo para funcionrios que esto
subordinados ao mesmo gerente
Salrio total desses gerentes
Salrio total desses gerentes, independentemente dos IDs dos cargos

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-26
Exerccio 4 (continuao)
2. Observe a resposta da questo 1. Crie uma consulta usando a function GROUPING
para determinar se os valores NULL nas colunas correspondentes s expresses
GROUP BY so causados pela operao ROLLUP.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-27
Exerccio 4 (continuao)
3. Crie uma consulta para exibir as seguintes informaes sobre os funcionrios cujo
ID de gerente menor que 120:
ID do gerente
Cargo e salrios totais de cada cargo para funcionrios que esto subordinados
ao mesmo gerente
Salrio total desses gerentes
Valores de tabelas de referncia para exibir o salrio total para cada cargo,
independentemente do gerente
Salrio total, independentemente dos cargos

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-28
Exerccio 4 (continuao)
4. Observe a resposta da questo 3. Crie uma consulta usando a function GROUPING
para determinar se os valores NULL nas colunas correspondentes s expresses
GROUP BY so causados pela operao CUBE.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 4-29
Exerccio 4 (continuao)
5. Usando GROUPING SETS, crie uma consulta para exibir os seguintes
agrupamentos:
department_id, manager_id, job_id
department_id, job_id
manager_id, job_id
A consulta deve calcular a soma dos salrios para cada um desses grupos.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Gerenciando Dados em
Diferentes Fusos Horrios
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de usar as
seguintes functions de data/horrio:
TZ_OFFSET
FROM_TZ
TO_TIMESTAMP
TO_TIMESTAMP_TZ
TO_YMINTERVAL
CURRENT_DATE
CURRENT_TIMESTAMP
LOCALTIMESTAMP
DBTIMEZONE
SESSIONTIMEZONE
EXTRACT
Objetivos
Esta lio aborda algumas das functions de data/horrio disponveis no banco de dados
Oracle.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-3
Copyright 2004, Oracle. Todos os direitos reservados.
Fusos Horrios
A imagem representa os horrios
de cada rea quando for 12:00 em
Greenwich.
-08:00
-05:00
+02:00 +10:00
+07:00
Fusos Horrios
As horas do dia so medidas de acordo com o movimento da Terra. O horrio relativo a um
momento em particular depende de onde voc est. Quando meio-dia em Greenwich,
Inglaterra, meia-noite na linha de data internacional. A Terra divide-se em 24 fusos
horrios, um para cada hora do dia. A hora no meridiano principal em Greenwich,
Inglaterra, conhecida como GMT (Greenwich Mean Time). GMT o horrio padro pelo
qual todos os outros fusos horrios do mundo se orientam. O GMT o mesmo durante o ano
inteiro e no afetado pelo horrio de vero. A linha do meridiano uma linha imaginria
que vai do Plo Norte ao Plo Sul. Ela conhecida como longitude zero e a partir dela
que se medem as demais linhas de longitude. Todos os horrios so medidos em relao ao
GMT, e todos os locais esto associados a uma latitude (a distncia ao norte ou ao sul do
Equador) e uma longitude (a distncia a leste ou a oeste do meridiano de Greenwich).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-4
Copyright 2004, Oracle. Todos os direitos reservados.
Parmetro de Sesso TIME_ZONE
O parmetro de sesso TIME_ZONE pode ser definido
como:
Um deslocamento absoluto
Um fuso horrio do banco de dados
Um fuso horrio local do sistema operacional
Determinada regio
ALTER SESSION SET TIME_ZONE = '-05:00';
ALTER SESSION SET TIME_ZONE = dbtimezone;
ALTER SESSION SET TIME_ZONE = local;
ALTER SESSION SET TIME_ZONE = 'America/New_York';
Parmetro de Sesso TIME_ZONE
O banco de dados Oracle suporta o armazenamento do fuso horrio nos seus dados de data e
horrio, bem como fraes de segundos. O comando ALTER SESSION pode ser usado
para alterar os valores de fuso horrio em uma sesso do usurio. Os valores de fuso horrio
podem ser definidos como um deslocamento absoluto, um fuso horrio determinado, um
fuso horrio do banco de dados ou o fuso horrio local.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-5
Copyright 2004, Oracle. Todos os direitos reservados.
CURRENT_DATE, CURRENT_TIMESTAMP
e LOCALTIMESTAMP
CURRENT_DATE
Retorna a data atual do sistema
Tem o tipo de dados de DATE
CURRENT_TIMESTAMP
Retorna o timestamp atual do sistema
Tem um tipo de dados de TIMESTAMP WITH TIME ZONE
LOCALTIMESTAMP
Retorna o timestamp atual da sesso do usurio
Tem um tipo de dados de TIMESTAMP
CURRENT_DATE, CURRENT_TIMESTAMP e LOCALTIMESTAMP
As functions CURRENT_DATE e CURRENT_TIMESTAMP retornam a data e o timestamp
atuais, respectivamente. O tipo de dados de CURRENT_DATE DATE. O tipo de dados de
CURRENT_TIMESTAMP TIMESTAMP WITH TIME ZONE. Os valores retornados exibem
o deslocamento de fuso horrio da sesso SQL que est executando as functions. O
deslocamento de fuso horrio representa a diferena (em horas e minutos) entre o horrio
local e o UTC. O tipo de dados TIMESTAMP WITH TIME ZONE tem o formato:
TIMESTAMP [ (fractional_seconds_precision) ] WITH TIME ZONE
onde fractional_seconds_precision especifica, opcionalmente, o nmero de
dgitos da parte fracionria do campo de data/horrio SECOND e pode ser um nmero entre
0 e 9. O default 6.
A function LOCALTIMESTAMP retorna a data e o horrio atuais do fuso horrio da sesso.
A diferena entre LOCALTIMESTAMP e CURRENT_TIMESTAMP que
LOCALTIMESTAMP retorna um valor TIMESTAMP, enquanto CURRENT_TIMESTAMP
retorna um valor TIMESTAMP WITH TIME ZONE.
Essas functions utilizam NLS, ou seja, os resultados tero os formatos NLS atuais de
calendrio e data/horrio.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-6
Copyright 2004, Oracle. Todos os direitos reservados.
CURRENT_DATE
Exibe a data e a hora atuais no fuso horrio da sesso.
ALTER SESSION SET TIME_ZONE = '-8:0';
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;
ALTER SESSION SET TIME_ZONE = '-5:0';
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;
ALTER SESSION
SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
CURRENT_DATE
A function CURRENT_DATE retorna a data atual no fuso horrio da sesso. O valor
retornado uma data do calendrio gregoriano.
Os exemplos do slide mostram que CURRENT_DATE sensvel ao fuso horrio da sesso.
No primeiro exemplo, a sesso alterada para definir o parmetro TIME_ZONE como 5:0.
O parmetro TIME_ZONE especifica o deslocamento do fuso horrio local default para a
sesso SQL atual. TIME_ZONE somente um parmetro de sesso, e no um parmetro de
inicializao. O parmetro TIME_ZONE definido da seguinte maneira:
TIME_ZONE = '[+ | -] hh:mm'
A mscara de formato ([+ | -] hh:mm) indica as horas e os minutos antes ou depois
do UTC (Coordinated Universal Time, anteriormente conhecido como Greenwich Mean
Time).
Observe na sada que o valor de CURRENT_DATE alterado quando o valor do parmetro
TIME_ZONE modificado para 8:0 no segundo exemplo.
Observao: O comando ALTER SESSION define o formato de data da sesso como
'DD-MON-YYYY HH24:MI:SS', isto , dia do ms (1 a 31)-nome abreviado do ms-ano
com 4 dgitos hora do dia (0 a 23):minuto (0 a 59):segundo (0 a 59).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-7
Copyright 2004, Oracle. Todos os direitos reservados.
CURRENT_TIMESTAMP
Exibe a data e a frao do horrio atuais no fuso
horrio da sesso.
ALTER SESSION SET TIME_ZONE = '-8:0';
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP
FROM DUAL;
ALTER SESSION SET TIME_ZONE = '-5:0';
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP
FROM DUAL;
CURRENT_TIMESTAMP
A function CURRENT_TIMESTAMP retorna a data e o horrio atuais no fuso horrio da
sesso como um valor do tipo de dados TIMESTAMP WITH TIME ZONE. O
deslocamento do fuso horrio reflete o horrio local atual da sesso SQL. A sintaxe da
function CURRENT_TIMESTAMP :
CURRENT_TIMESTAMP (precision)
em que precision um argumento opcional que especifica a preciso de fraes de
segundos do valor do horrio retornado. Se voc omitir a preciso, o default ser 6.
Os exemplos do slide mostram que CURRENT_TIMESTAMP sensvel ao fuso horrio da
sesso. No primeiro exemplo, a sesso alterada para definir o parmetro TIME_ZONE
como 5:0. Observe na sada que o valor de CURRENT_TIMESTAMP alterado quando o
valor do parmetro TIME_ZONE modificado para 8:0 no segundo exemplo.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-8
Copyright 2004, Oracle. Todos os direitos reservados.
LOCALTIMESTAMP
Exibe a data e o horrio atuais no fuso horrio da
sesso em um valor de tipo de dados TIMESTAMP.
LOCALTIMESTAMP retorna um valor TIMESTAMP,
enquanto CURRENT_TIMESTAMP retorna um valor
TIMESTAMP WITH TIME ZONE.
ALTER SESSION SET TIME_ZONE = '-5:0';
SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP
FROM DUAL;
ALTER SESSION SET TIME_ZONE = '-8:0';
SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP
FROM DUAL;
LOCALTIMESTAMP
A function LOCALTIMESTAMP retorna a data e o horrio atuais no fuso horrio da sesso.
LOCALTIMESTAMP retorna um valor TIMESTAMP. A sintaxe da function
LOCAL_TIMESTAMP :
LOCAL_TIMESTAMP (TIMESTAMP_precision)
Em que TIMESTAMP precision um argumento opcional que especifica a preciso de
fraes de segundos do valor de TIMESTAMP retornado.
Os exemplos do slide ilustram a diferena entre LOCALTIMESTAMP e
CURRENT_TIMESTAMP. Observe que LOCALTIMESTAMP no exibe o valor de fuso
horrio, enquanto CURRENT_TIMESTAMP exibe.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-9
Copyright 2004, Oracle. Todos os direitos reservados.
DBTIMEZONE e SESSIONTIMEZONE
Exibe o valor do fuso horrio do banco de dados.
Exibe o valor do fuso horrio da sesso.
SELECT DBTIMEZONE FROM DUAL;
SELECT SESSIONTIMEZONE FROM DUAL;
DBTIMEZONE e SESSIONTIMEZONE
O DBA define o fuso horrio default do banco de dados, especificando a clusula SET
TIME_ZONE da instruo CREATE DATABASE. Se omitido, o fuso horrio default do
banco de dados passa a ser o fuso horrio do sistema operacional. O fuso horrio do banco
de dados no pode ser alterado para uma sesso com uma instruo ALTER SESSION.
A function DBTIMEZONE retorna o valor do fuso horrio do banco de dados. O tipo
retornado um deslocamento do fuso horrio (um tipo de caractere no formato '[+|-
]TZH:TZM') ou o nome de uma regio de fuso horrio, dependendo de como voc
especificou o valor do fuso horrio do banco de dados na instruo CREATE DATABASE
ou ALTER DATABASE mais recente. O exemplo do slide mostra que o horrio do banco de
dados est definido como "05:00", com o parmetro TIME_ZONE no formato:
TIME_ZONE = '[+ | -] hh:mm'
A function SESSIONTIMEZONE retorna o valor do fuso horrio da sesso atual. O tipo
retornado um deslocamento do fuso horrio (um tipo de caractere no formato '[+|-
]TZH:TZM') ou o nome de uma regio de fuso horrio, dependendo de como voc
especificou o valor do fuso horrio da sesso na instruo ALTER SESSION mais recente.
O exemplo do slide mostra que o fuso horrio da sesso est deslocado em relao ao UTC
em 8 horas. Observe que o fuso horrio do banco de dados diferente do fuso horrio da
sesso atual.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-10
Copyright 2004, Oracle. Todos os direitos reservados.
Tipo de Dados TIMESTAMP
O tipo de dados TIMESTAMP uma extenso do tipo
de dados DATE.
Ele armazena o ano, o ms e o dia do tipo de dados
DATE, alm dos valores de hora, minuto, segundo e
frao de segundo.
As variaes de TIMESTAMP so:
TIMESTAMP
[(fractional_seconds_precision)]
TIMESTAMP
[(fractional_seconds_precision)]
WITH TIME ZONE
TIMESTAMP
[(fractional_seconds_precision)]
WITH LOCAL TIME ZONE
Tipos de Dados de Data/Horrio
O tipo de dados TIMESTAMP contm os campos de data/horrio YEAR, MONTH, DAY,
HOUR, MINUTE e SECOND e fraes de segundo.
O tipo de dados TIMESTAMP WITH TIME ZONE contm os campos de data/horrio HOUR,
MINUTE, SECOND, TIMEZONE_HOUR e TIMEZONE_MINUTE e fraes de segundo.
O tipo de dados TIMESTAMP WITH TIME ZONE contm os campos de data/horrio YEAR,
MONTH, DAY, HOUR, MINUTE, SECOND, TIMEZONE_HOUR e TIMEZONE_MINUTE e
fraes de segundo.
Observao: A preciso de fraes de segundos especifica o nmero de dgitos da parte
fracionria do campo de data/horrio SECOND e pode ser um nmero na faixa entre 0 e 9. O
default 6.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-11
Copyright 2004, Oracle. Todos os direitos reservados.
Tipos de Dados TIMESTAMP
Year, Month, Day, Hour, Minute,
Second com fraes de segundos,
TIMESTAMP WITH LOCAL
TIME ZONE
Year, Month, Day, Hour, Minute,
Second com fraes de segundos,
TimeZone_Hour e
TimeZone_Minute ou
TimeZone_Region
TIMESTAMP WITH TIME
ZONE
Year, Month, Day, Hour, Minute,
Second com fraes de segundos
TIMESTAMP
Campos Tipo de Dados
Tipos de Dados TIMESTAMP
TIMESTAMP (fractional_seconds_precision)
Este tipo de dados contm os valores de ano, ms e dia da data, bem como os valores
de hora, minuto e segundo do horrio, onde a preciso significativa de fraes de
segundos o nmero de dgitos da parte fracionria do campo de data/horrio SECOND.
Os valores aceitos para a preciso significativa de fraes de segundos esto entre 0 e 9.
O default 6.
TIMESTAMP (fractional_seconds_precision) WITH TIME ZONE
Este tipo de dados contm todos os valores de TIMESTAMP, bem como o valor de
deslocamento de fuso horrio.
TIMESTAMP (fractional_seconds_precision) WITH LOCAL TIME ZONE
Este tipo de dados contm todos os valores de TIMESTAMP, com as seguintes excees:
Os dados so normalizados para o fuso horrio do banco de dados quando so
armazenados no banco de dados.
Quando os dados so recuperados, os usurios vem os dados no fuso horrio
da sesso.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-12
Copyright 2004, Oracle. Todos os direitos reservados.
Campos TIMESTAMP
TIMEZONE_MINUTE
de 12 a 14 TIMEZONE_HOUR
de 00 a 59,9(N), em que 9(N) preciso SECOND
de 00 a 59 MINUTE
de 00 a 23 HOUR
de 01 a 31 DAY
de 01 a 12 MONTH
de 4712 a 9999 (excluindo-se o ano 0) YEAR
Valores Vlidos Campo de Data/Horrio
de 00 a 59
Campos TIMESTAMP
Cada tipo de dados composto por vrios desses campos. Datas/horrios s podem ser
mutuamente comparados e designados se tiverem os mesmos campos de data/horrio.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-13
Copyright 2004, Oracle. Todos os direitos reservados.
Diferena entre DATE e TIMESTAMP
-- quando hire_date
do tipo DATE
SELECT hire_date
FROM emp5;
ALTER TABLE emp5
MODIFY hire_date TIMESTAMP;
SELECT hire_date
FROM emp5;
B A

Tipo de Dados TIMESTAMP: Exemplo


No slide, o exemplo A mostra os dados da coluna hire_date da tabela EMP5 quando o tipo
de dados da coluna DATE. No exemplo B, a tabela alterada, e o tipo de dados da coluna
hire_date passa a ser TIMESTAMP. A sada mostra as diferenas na exibio. Voc
pode converter DATE em TIMESTAMP quando a coluna tem dados, mas no possvel
converter DATE ou TIMESTAMP em TIMESTAMP WITH TIME ZONE, a menos que a
coluna esteja vazia.
Voc pode especificar a preciso de fraes de segundos para timestamp. Se no for
especificada nenhuma preciso, como no exemplo acima, o default 6 ser assumido.
Por exemplo, a seguinte instruo define a preciso de fraes de segundos como 7:
ALTER TABLE emp5
MODIFY hire_date TIMESTAMP(7);
Observao: Por default, o tipo de dados date do Oracle aparece como mostra o exemplo.
No entanto, o tipo de dados date tambm contm informaes adicionais, como horas,
minutos, segundos, a.m. e p.m. Para obter a data nesse formato, voc pode aplicar uma
mscara de formato ou uma function para o valor de data.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-14
Copyright 2004, Oracle. Todos os direitos reservados.
Tipo de Dados TIMESTAMP WITH TIME ZONE
O tipo de dados TIMESTAMP WITH TIME ZONE
uma variante de TIMESTAMP cujo valor inclui um
deslocamento de fuso horrio.
O deslocamento de fuso horrio representa a
diferena, em horas e minutos, entre o horrio local
e o UTC.
Ele especificado como:
TIMESTAMP[(fractional_seconds_precision)] WITH
TIME ZONE
Tipo de Dados TIMESTAMP WITH TIME ZONE
UTC significa Coordinated Universal Time (anteriormente denominado Greenwich Mean
Time). Dois valores de TIMESTAMP WITH TIME ZONE sero considerados idnticos se
representarem o mesmo instante no UTC, independentemente dos deslocamentos de TIME
ZONE armazenados nos dados. Por exemplo:
TIMESTAMP '1999-04-15 8:00:00 -8:00'
o mesmo que
TIMESTAMP '1999-04-15 11:00:00 -5:00'
Isto , 8:00 a.m. Pacific Standard Time o mesmo que 11:00 a.m. Eastern Standard Time.
Tambm possvel especificar esse valor como:
TIMESTAMP '1999-04-15 8:00:00 US/Pacific'
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-15
Copyright 2004, Oracle. Todos os direitos reservados.
TIMESTAMP WITH TIMEZONE: Exemplo
CREATE TABLE web_orders
(ord_id number primary key,
order_date TIMESTAMP WITH TIME ZONE);
INSERT INTO web_orders values
(ord_seq.nextval, current_date);
SELECT * FROM web_orders;
TIMESTAMP WITH TIME ZONE Exemplo
No exemplo do slide, criada uma nova tabela web_orders com uma coluna de tipo de
dados TIMESTAMP WITH TIME ZONE. Essa tabela ser preenchida sempre que for feito
um pedido na Web. O timestamp e o fuso horrio do usurio que est fazendo o pedido so
inseridos com base no valor de CURRENT_DATE. Desse modo, quando uma empresa
baseada na Web garantir o envio, ser possvel estimar o horrio da entrega com base no
fuso horrio da pessoa que est fazendo o pedido.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-16
Copyright 2004, Oracle. Todos os direitos reservados.
TIMESTAMP WITH LOCAL TIMEZONE
O tipo de dados TIMESTAMP WITH LOCAL TIME ZONE
outra variante cujo valor inclui um deslocamento do
fuso horrio.
Os dados armazenados no banco de dados so
normalizados para o fuso horrio do banco de dados.
O deslocamento de fuso horrio no armazenado
como parte dos dados da coluna.
O banco de dados Oracle retorna os dados no fuso
horrio da sesso local do usurio.
O tipo de dados TIMESTAMP WITH LOCAL TIME ZONE
especificado da seguinte maneira:
TIMESTAMP[(fractional_seconds_precision)] WITH
LOCAL TIME ZONE
TIMESTAMP WITH LOCAL TIMEZONE
Diferentemente de TIMESTAMP WITH TIME ZONE, voc pode especificar colunas do
tipo TIMESTAMP WITH LOCAL TIME ZONE como parte de uma chave primria ou
exclusiva. O deslocamento de fuso horrio representa a diferena (em horas e minutos)
entre o horrio local e o UTC. No existe um literal para TIMESTAMP WITH LOCAL
TIME ZONE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-17
Copyright 2004, Oracle. Todos os direitos reservados.
TIMESTAMP WITH LOCAL TIMEZONE: Exemplo
CREATE TABLE shipping (delivery_time TIMESTAMP WITH
LOCAL TIME ZONE);
INSERT INTO shipping VALUES(current_timestamp + 2);
SELECT * FROM shipping;
ALTER SESSION SET TIME_ZONE = 'EUROPE/LONDON';
SELECT * FROM shipping;
TIMESTAMP WITH LOCAL TIME ZONE: Exemplo
No exemplo do slide, criada uma nova tabela SHIPPING com uma coluna de tipo de
dados TIMESTAMP WITH LOCAL TIME ZONE. Essa tabela ser preenchida com a
insero de dois dias do valor de CURRENT_TIMESTAMP sempre que for feito um pedido.
A sada da tabela DATE_TAB mostra que os dados so armazenados sem o deslocamento de
fuso horrio. A seguir, executado o comando ALTER SESSION para alterar o fuso
horrio para o local da entrega. Uma segunda consulta mesma tabela mostrar os dados
com o fuso horrio local refletido no valor de horrio, de modo que o cliente possa ser
notificado sobre o horrio de entrega estimado.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-18
Copyright 2004, Oracle. Todos os direitos reservados.
Tipos de Dados INTERVAL
Os tipos de dados INTERVAL so usados para armazenar
a diferena entre dois valores de data/horrio.
H dois tipos de intervalos:
Ano-ms
Dia-horrio
A preciso do intervalo :
O subconjunto atual de campos que formam um intervalo
Especificada no qualificador de intervalo
Days, Hour, Minute, Second com
fraes de segundos
INTERVAL DAY TO SECOND
Year, Month INTERVAL YEAR TO MONTH
Campos Tipo de Dados
Tipos de Dados INTERVAL
Os tipos de dados INTERVAL so usados para armazenar a diferena entre dois valores de
data/horrio. H dois tipos de intervalos: intervalos ano-ms e intervalos dia-horrio. Um
intervalo ano-ms composto por um subconjunto contguo de campos de YEAR e MONTH,
enquanto um intervalo dia-horrio composto por um subconjunto contguo de campos
como DAY, HOUR, MINUTE e SECOND. O subconjunto atual de campos que formam um
intervalo chamado de preciso do intervalo e especificado no qualificador de intervalo.
Como o nmero de dias no ano depende do calendrio, o intervalo ano-ms depende do
NLS, enquanto o intervalo dia-horrio no depende do NLS.
O qualificador de intervalo tambm pode especificar a preciso do primeiro campo, que o
nmero de dgitos do primeiro (ou nico) campo, e, caso o segundo campo seja SECOND,
tambm poder especificar uma preciso de fraes de segundos, que o nmero de dgitos
na parte fracionria do valor de SECOND. Se no for especificado, o valor default para a
preciso do primeiro campo ser de 2 dgitos, e o valor default para a preciso de fraes de
segundos ser de 6 dgitos.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-19
Tipos de Dados INTERVAL (continuao)
INTERVAL YEAR (year_precision) TO MONTH
Este tipo de dados armazena um perodo em anos e meses, em que year_precision o
nmero de dgitos no campo data/horrio YEAR. Os valores aceitos vo de 0 a 9. O default
6.
INTERVAL DAY (day_precision) TO SECOND
(fractional_seconds_precision)
Este tipo de dados armazena um perodo em dias, horas, minutos e segundos, em que
day_precision o nmero mximo de dgitos no campo de data/horrio DAY (os valores
aceitos vo de 0 a 9; o default 2), e fractional_seconds_precision o nmero
de dgitos na parte fracionria do campo SECOND. Os valores aceitos vo de 0 a 9. O
default 6.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-20
Copyright 2004, Oracle. Todos os direitos reservados.
Campos INTERVAL
de 00 a 59,9(N), onde 9(N) preciso
SECOND
de 00 a 59
MINUTE
HOUR
DAY
MONTH
YEAR
Campo INTERVAL
de 00 a 23
Qualquer inteiro, positivo ou negativo
de 00 a 11
Qualquer inteiro, positivo ou negativo
Valores Vlidos para o Intervalo
Campos INTERVAL
INTERVAL YEAR TO MONTH pode ter os campos YEAR e MONTH.
INTERVAL DAY TO SECOND pode ter os campos DAY, HOUR, MINUTE e SECOND.
O subconjunto atual de campos que formam um item de um dos tipos de intervalo
definido por um qualificador de intervalo, e este subconjunto conhecido como preciso do
item.
Os intervalos ano-ms so mutuamente comparados e designados apenas em relao a
outros intervalos ano-ms, e os intervalos dia-horrio so mutuamente comparados e
designados apenas em relao a outros intervalos dia-horrio.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-21
Copyright 2004, Oracle. Todos os direitos reservados.
Tipo de Dados INTERVAL YEAR TO MONTH
O tipo de dados INTERVAL YEAR TO MONTH armazena
um perodo usando os campos de data/horrio YEAR
e MONTH.
Por exemplo:
INTERVAL YEAR [(year_precision)] TO MONTH
'312-2' designado a INTERVAL YEAR(3) TO MONTH
Indica um intervalo de 312 anos e 2 meses
'312-0' designado a INTERVAL YEAR(3) TO MONTH
Indica 312 anos e 0 meses
'0-3' designado a INTERVAL YEAR TO MONTH
Indica um intervalo de 3 meses
Tipo de Dados INTERVAL YEAR TO MONTH
O tipo de dados INTERVAL YEAR TO MONTH armazena um perodo usando os campos
de data/horrio YEAR e MONTH. Especifique esse tipo de dados da seguinte maneira:
INTERVAL YEAR [(year_precision)] TO MONTH
em que year_precision o nmero de dgitos no campo de data/horrio YEAR. O valor
default de year_precision 2.
Restrio: O primeiro campo deve conter um valor maior que o segundo. Por exemplo,
INTERVAL '0-1' MONTH TO YEAR no vlido.
O prximo literal INTERVAL YEAR TO MONTH indica um intervalo de 123 anos, 3
meses:
INTERVAL '123-3' YEAR(3) TO MONTH
INTERVAL '123' YEAR(3) indica um intervalo de 123 anos e 0 meses.
INTERVAL '3' MONTH indica um intervalo de 3 meses.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-22
Copyright 2004, Oracle. Todos os direitos reservados.
INTERVAL YEAR TO MONTH Exemplo
CREATE TABLE warranty
(prod_id number, warranty_time INTERVAL YEAR(3)
TO MONTH);
INSERT INTO warranty VALUES (123, INTERVAL '8'
MONTH);
INSERT INTO warranty VALUES (155, INTERVAL '200'
YEAR(3));
INSERT INTO warranty VALUES (678, '200-11');
SELECT * FROM warranty;
Tipo de Dados INTERVAL YEAR TO MONTH (continuao)
O tipo de dados INTERVAL YEAR TO MONTH armazena um perodo usando os campos
de data/horrio YEAR e MONTH. Especifique INTERVAL YEAR TO MONTH da seguinte
maneira:
INTERVAL YEAR [(year_precision)] TO MONTH
em que year_precision o nmero de dgitos no campo de data/horrio YEAR. O
valor default de year_precision 2.
Restrio: O primeiro campo deve conter um valor maior que o segundo. Por exemplo,
INTERVAL '0-1' MONTH TO YEAR no vlido.
O banco de dados Oracle suporta dois tipos de intervalos de dados: Intervalo de Ano para
Ms e Intervalo de Dia para Segundo; o tipo de coluna, o argumento PL/SQL, a varivel e o
tipo de retorno devem ser um dos dois intervalos. No entanto, para os literais de intervalo, o
sistema reconhece outros tipos de intervalo ANSI, como INTERVAL '2' YEAR ou
INTERVAL '10' HOUR. Nesses casos, cada intervalo convertido em um dos dois tipos
suportados.
No exemplo acima, criada uma tabela WARRANTY, contendo uma coluna
warranty_time que adota o tipo de dados INTERVAL YEAR(3) TO MONTH. Nela
so inseridos valores diferentes para indicar anos e meses para vrios produtos. Quando
essas linhas so recuperadas da tabela, possvel ver um valor de ano exibido ao lado de um
valor de ms, separados por um (-).
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-23
Copyright 2004, Oracle. Todos os direitos reservados.
Tipo de Dados INTERVAL DAY TO SECOND
INTERVAL DAY TO SECOND
(fractional_seconds_precision) armazena um
perodo em dias, horas, minutos e segundos.
Por exemplo:
INTERVAL DAY[(day_precision)] TO Second
INTERVAL '6 03:30:16' DAY TO SECOND
Indica um intervalo de 6 dias, 3 horas, 30 minutos e
16 segundos
INTERVAL '6 00:00:00' DAY TO SECOND
Indica um intervalo de 6 dias, 0 horas, 0 minutos e
0 segundos
Tipo de Dados INTERVAL DAY TO SECOND
INTERVAL DAY (day_precision) TO SECOND
(fractional_seconds_precision) armazena um perodo em dias, horas, minutos
e segundos, em que day_precision o nmero mximo de dgitos no campo de
data/horrio DAY (os valores aceitos vo de 0 a 9; o default 2), e
fractional_seconds_precision o nmero de dgitos na parte fracionria do
campo SECOND. Os valores aceitos vo de 0 a 9. O default 6.
No exemplo acima, 6 representa o nmero de dias, e 03:30:15 indica os valores para horas,
minutos e segundos.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-24
Copyright 2004, Oracle. Todos os direitos reservados.
Tipo de Dados
INTERVAL DAY TO SECOND: Exemplo
SELECT * FROM lab;
CREATE TABLE lab
( exp_id number, test_time INTERVAL DAY(2) TO
SECOND);
INSERT INTO lab VALUES (100012, '90 00:00:00');
INSERT INTO lab VALUES (56098,
INTERVAL '6 03:30:16' DAY TO SECOND);
Tipo de Dados INTERVAL DAY TO SECOND: Exemplo
No exemplo acima, voc est criando uma tabela de laboratrio com uma coluna
test_time e tipo de dados INTERVAL DAY TO SECOND. Em seguida, insira nela o
valor "90 00:00:00" para indicar 90 dias e 0 horas/minutos/segundos e INTERVAL '6
03:30:16' DAY TO SECOND. A instruo SELECT mostra como esses dados so
exibidos no banco de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-25
Copyright 2004, Oracle. Todos os direitos reservados.
EXTRACT
Exiba o componente YEAR de SYSDATE.
Exiba o componente MONTH de HIRE_DATE para os
funcionrios cujo MANAGER_ID igual a 100.
SELECT EXTRACT (YEAR FROM SYSDATE) FROM DUAL;
SELECT last_name, hire_date,
EXTRACT (MONTH FROM HIRE_DATE)
FROM employees
WHERE manager_id = 100;
EXTRACT
A expresso EXTRACT extrai e retorna o valor de um campo de data/horrio especificado
de uma expresso de valor de data/horrio ou intervalo. possvel extrair qualquer um dos
componentes mencionados na sintaxe a seguir usando a function EXTRACT. A sintaxe da
function EXTRACT :
SELECT EXTRACT ([YEAR] [MONTH][DAY] [HOUR] [MINUTE][SECOND]
[TIMEZONE_HOUR] [TIMEZONE_MINUTE]
[TIMEZONE_REGION] [TIMEZONE_ABBR]
FROM [datetime_value_expression] [interval_value_expression]);
Quando voc extrai TIMEZONE_REGION ou TIMEZONE_ABBR (abreviatura), o valor
retornado uma string com a abreviatura ou o nome do fuso horrio apropriado. Depois de
extrado, um dos outros valores retornado como uma data no formato do calendrio
gregoriano. Quando executada a extrao de uma data/horrio, com um valor de fuso
horrio, o valor retornado est em UTC.
No primeiro exemplo do slide, a function EXTRACT usada para extrair o ano de
SYSDATE. No segundo exemplo do slide, a function EXTRACT usada para extrair o ms
da coluna HIRE_DATE da tabela EMPLOYEES, para aqueles funcionrios que esto
subordinados ao gerente cujo EMPLOYEE_ID igual a 100.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-26
Copyright 2004, Oracle. Todos os direitos reservados.
TZ_OFFSET
Exiba o deslocamento para o fuso horrio
'US/Eastern'.
Exiba o deslocamento para o fuso horrio
'Canada/Yukon'.
Exiba o deslocamento para o fuso horrio
'Europe/London'.
SELECT TZ_OFFSET('US/Eastern') FROM DUAL;
SELECT TZ_OFFSET('Canada/Yukon') FROM DUAL;
SELECT TZ_OFFSET('Europe/London') FROM DUAL;
TZ_OFFSET
A function TZ_OFFSET retorna o deslocamento de fuso horrio correspondente ao valor
informado. O valor informado depende da data em que a instruo executada. Por
exemplo, se a function TZ_OFFSET retorna o valor 08:00, o fuso horrio do local onde
esse comando foi executado tem oito horas a menos que o UTC. possvel informar um
nome de fuso horrio vlido, um deslocamento de fuso horrio em relao ao UTC (o
prprio retornado) ou a palavra-chave SESSIONTIMEZONE ou DBTIMEZONE. A sintaxe
da function TZ_OFFSET :
TZ_OFFSET ( ['time_zone_name'] '[+ | -] hh:mm' ]
[ SESSIONTIMEZONE] [DBTIMEZONE]
A matriz da Fold Motor Company fica em Michigan, E.U.A., que est no fuso horrio
US/Eastern. O presidente da empresa, Sr. Fold, quer fazer uma teleconferncia com o vice-
presidente de operaes do Canad e o vice-presidente de operaes da Europa, que esto
nos fusos horrios de Canada/Yukon e Europe/London, respectivamente. O Sr. Fold quer
saber o melhor horrio em cada um desses locais para ter certeza de que esses executivos
estaro disponveis para participar da teleconferncia. Seu secretrio, Sr. Scott, est
ajudando a executar as consultas mostradas no exemplo e obtm os seguintes resultados:
O fuso horrio 'US/Eastern' tem quatro horas a menos que o UTC.
O fuso horrio 'Canada/Yukon' tem sete horas a menos que o UTC.
O fuso horrio 'Europe/London' tem uma hora a mais que o UTC.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-27
TZ_OFFSET (continuao)
Para obter uma lista com valores de nomes de fusos horrios vlidos, voc pode consultar a
view dinmica de desempenho V$TIMEZONE_NAMES.
SELECT * FROM V$TIMEZONE_NAMES;

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-28
Copyright 2004, Oracle. Todos os direitos reservados.
Converso de TIMESTAMP Usando FROM_TZ
Exiba o valor TIMESTAMP '2000-03-28 08:00:00'
como um valor TIMESTAMP WITH TIME ZONE.
Exiba o valor TIMESTAMP '2000-03-28 08:00:00'
como um valor TIMESTAMP WITH TIME ZONE para a
regio de fuso horrio 'Australia/North'.
SELECT FROM_TZ(TIMESTAMP
'2000-03-28 08:00:00','3:00')
FROM DUAL;
SELECT FROM_TZ(TIMESTAMP
'2000-03-28 08:00:00', 'Australia/North')
FROM DUAL;
Converso de TIMESTAMP Usando FROM_TZ
A function FROM_TZ converte um valor TIMESTAMP em um valor TIMESTAMP WITH
TIME ZONE.
A sintaxe da function FROM_TZ :
FROM_TZ(TIMESTAMP timestamp_value, time_zone_value)
em que time_zone_value uma string de caracteres no formato 'TZH:TZM' ou uma
expresso de caracteres que retorna uma string em TZR (Time Zone Region) com formato
TZD opcional. TZD uma string abreviada de fuso horrio com informaes do horrio de
vero. TZR representa a regio do fuso horrio em strings de entrada de data/horrio.
Alguns exemplos so 'Australia/North', 'PST' para US/Pacific Standard Time e
'PDT' para US/Pacific Daylight Time etc. Para obter uma lista com os valores vlidos para
os elementos de formato TZR e TZD, consulte a view de dinmica de desempenho
V$TIMEZONE_NAMES.
O exemplo do slide converte um valor TIMESTAMP em TIMESTAMP WITH TIME ZONE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-29
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT
TO_TIMESTAMP_TZ('1999-12-01 11:00:00 -8:00',
'YYYY-MM-DD HH:MI:SS TZH:TZM')
FROM DUAL;
Convertendo em TIMESTAMP Usando
TO_TIMESTAMP e TO_TIMESTAMP_TZ
Exiba a string de caracteres '2000-12-01 11:00:00'
como um valor TIMESTAMP.
Exiba a string de caracteres '1999-12-01 11:00:00 -
8:00' como um valor TIMESTAMP WITH TIME ZONE.
SELECT TO_TIMESTAMP ('2000-12-01 11:00:00',
'YYYY-MM-DD HH:MI:SS')
FROM DUAL;
Convertendo em TIMESTAMP Usando TO_TIMESTAMP e TO_TIMESTAMP_TZ
A function TO_TIMESTAMP converte uma string de tipo de dados CHAR, VARCHAR2,
NCHAR ou NVARCHAR2 em um valor de tipo de dados TIMESTAMP. A sintaxe da function
TO_TIMESTAMP :
TO_TIMESTAMP (char,[fmt],['nlsparam'])
O parmetro fmt opcional especifica o formato de char. Caso seja omitido, a string deve
estar no formato default do tipo de dados TIMESTAMP. O parmetro opcional nlsparam
especifica o idioma em que so retornados os nomes de meses e dias e as abreviaes. Esse
argumento pode ter a seguinte forma:
'NLS_DATE_LANGUAGE = language'
Caso voc omita o parmetro nlsparams, essa function usar o idioma default para datas
da sua sesso. O exemplo do slide converte uma string de caracteres em um valor de
TIMESTAMP.
A function TO_TIMESTAMP_TZ converte uma string de tipo de dados CHAR, VARCHAR2,
NCHAR ou NVARCHAR2 em um valor de tipo de dados TIMESTAMP WITH TIME ZONE. A
sintaxe da function TO_TIMESTAMP_TZ :
TO_TIMESTAMP_TZ (char,[fmt],['nlsparam'])
O parmetro opcional fmt especifica o formato de char. Caso seja omitido, dever haver
uma string no formato default do tipo de dados TIMESTAMP WITH TIME ZONE. O
exemplo do slide converte uma string de caracteres em um valor de TIMESTAMP WITH
TIME ZONE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-30
Copyright 2004, Oracle. Todos os direitos reservados.
Converso de Intervalo de Tempo com
TO_YMINTERVAL
Exiba uma data que seja um ano e dois meses posterior
data de admisso para funcionrios que trabalham
em um departamento com DEPARTMENT_ID igual a 20.
SELECT hire_date,
hire_date + TO_YMINTERVAL('01-02') AS
HIRE_DATE_YMININTERVAL
FROM employees
WHERE department_id = 20;
Converso de Intervalo de Tempo com TO_YMINTERVAL
A function TO_YMINTERVAL converte uma string de caracteres de tipo de dados CHAR,
VARCHAR2, NCHAR ou NVARCHAR2 em um tipo de dados INTERVAL YEAR TO MONTH.
O tipo de dados INTERVAL YEAR TO MONTH armazena um perodo usando os campos de
data/horrio YEAR e MONTH. O formato de INTERVAL YEAR TO MONTH :
INTERVAL YEAR [(year_precision)] TO MONTH
em que year_precision o nmero de dgitos no campo de data/horrio YEAR. O
valor default de year_precision 2.
A sintaxe da function TO_YMINTERVAL :
TO_YMINTERVAL (char)
em que char a string de caracteres a ser convertida.
O exemplo do slide calcula uma data que um ano e dois meses posterior data de
admisso dos funcionrios que trabalham no departamento 20 da tabela EMPLOYEES.
Tambm possvel fazer um clculo inverso usando a function TO_YMINTERVAL. Por
exemplo:
SELECT hire_date, hire_date + TO_YMINTERVAL('-02-04') AS
HIRE_DATE_YMINTERVAL
FROM EMPLOYEES WHERE department_id = 20;
Observe que a string de caracteres passada para a function TO_YMINTERVAL tem valor
negativo. O exemplo retorna uma data que dois anos e quatro meses anterior data de
admisso para os funcionrios que trabalham no departamento 20 da tabela EMPLOYEES.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-31
Copyright 2004, Oracle. Todos os direitos reservados.
Usando TO_DSINTERVAL: Exemplo
TO_DSINTERVAL: Converte uma string de caracteres em
um tipo de dados INTERVAL DAY TO SECOND
SELECT last_name,
TO_CHAR(hire_date, 'mm-dd-yy:hh:mi:ss') hire_date,
TO_CHAR(hire_date +
TO_DSINTERVAL('100 10:00:00'),
'mm-dd-yy:hh:mi:ss') hiredate2
FROM employees;

TO_DSINTERVAL
A function TO_DSINTERVAL converte uma string de caracteres de tipo de dados CHAR,
VARCHAR2, NCHAR ou NVARCHAR2 em um tipo de dados INTERVAL DAY TO SECOND.
No exemplo acima, a data obtida 100 dias e 10 horas posterior data de admisso.
TO_YMINTERVAL
A function TO_YMINTERVAL converte uma string de caracteres de tipo de dados CHAR,
VARCHAR2, NCHAR ou NVARCHAR2 em um tipo de dados INTERVAL YEAR TO MONTH.
No exemplo a seguir, a data obtida um ano e dois meses posterior data de admisso.
SELECT hire_date, hire_date + TO_YMINTERVAL('01-02') ytm
FROM employees;
HIRE_DATE YTM
--------- ---------
17-JUN-87 17-AUG-88
21-SEP-89 21-NOV-90
13-JAN-93 13-MAR-94
03-JAN-90 03-MAR-91
21-MAY-91 21-JUL-92

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-32
Copyright 2004, Oracle. Todos os direitos reservados.
Horrio de Vero
Primeiro Domingo de Abril
A hora passa de 01:59:59 para 03:00:00.
Os valores de 02:00:00 at 02:59:59 no so vlidos.
ltimo Domingo de Outubro
A hora passa de 02:00:00 para 01:00:01.
Os valores de 01:00:01 a 02:00:00 so ambguos
porque so utilizados duas vezes.
Horrio de Vero (DST)
A maioria dos pases ocidentais adianta o relgio em uma hora durante os meses de vero.
Esse perodo chamado de horrio de vero. O horrio de vero vai desde o primeiro
domingo de abril at o ltimo domingo de outubro em grande parte dos Estados Unidos,
Mxico e Canad. Os pases da Unio Europia tambm seguem o horrio de vero. Na
Europa, o horrio de vero comea uma semana mais cedo do que na Amrica do Norte,
mas termina na mesma poca.
O banco de dados Oracle determina, automaticamente, para determinada regio de fuso
horrio, se o horrio de vero est em vigor e retorna os valores de hora local da forma
adequada. O valor de data/horrio sempre suficiente para que o banco de dados Oracle
determine se o horrio de vero est em vigor em determinada regio, exceto nos casos
limtrofes. Um caso limtrofe ocorre por ocasio do incio ou do fim do horrio de vero.
Por exemplo, na regio US-Eastern, quando o horrio de vero entra em vigor, a hora passa
de 01:59:59 para 3:00:00. Esse intervalo de uma hora entre 02:00:00 e 02:59:59 no existe.
Quando o horrio de vero termina, a hora passa de 02:00:00 para 01:00:01, e o intervalo de
hora entre 01:00:01 e 02:00:00 se repete.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-33
Horrio de Vero (DST) (continuao)
ERROR_ON_OVERLAP_TIME
ERROR_ON_OVERLAP_TIME um parmetro de sesso que serve para notificar ao
sistema que ele deve emitir uma mensagem de erro quando encontrar uma data/horrio que
ocorra no perodo de sobreposio e no for especificada nenhuma abreviatura de fuso
horrio para distinguir o perodo.
Por exemplo, se o horrio de vero terminar em 31 de outubro, s 02:00:01, os perodos de
sobreposio sero:
de 31/10/2004, 01:00:01 at 31/10/2004, s 02:00:00 (EDT)
de 31/10/2004, 01:00:01 at 31/10/2004, s 02:00:00 (EST)
Caso informe uma string de data/horrio que ocorre em um desses dois perodos, voc
precisar especificar a abreviatura de fuso horrio (por exemplo, EDT ou EST) na string de
entrada para que o sistema determine o perodo. Sem essa abreviatura de fuso horrio, o
sistema far o seguinte:
Se o valor do parmetro ERROR_ON_OVERLAP_TIME for FALSE, o sistema assumir que
o horrio de entrada o horrio padro (por exemplo, EST). Caso contrrio, ocorrer um
erro.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-34
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc aprendeu a usar as seguintes
functions:
TZ_OFFSET
FROM_TZ
TO_TIMESTAMP
TO_TIMESTAMP_TZ
TO_YMINTERVAL
CURRENT_DATE
CURRENT_TIMESTAMP
LOCALTIMESTAMP
DBTIMEZONE
SESSIONTIMEZONE
EXTRACT
Sumrio
Esta lio abordou algumas das functions de data/horrio disponveis no banco de dados
Oracle.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-35
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 5: Viso Geral
Este exerccio aborda o uso das functions de
data/horrio.
Exerccio 5: Viso Geral
Neste exerccio, voc exibir os deslocamentos de fuso horrio, CURRENT_DATE,
CURRENT_TIMESTAMP e LOCALTIMESTAMP. Voc tambm definir fusos horrios e
usar a function EXTRACT.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-36
Exerccio 5
1. Altere a sesso para definir NLS_DATE_FORMAT como DD-MON-YYYY
HH24:MI:SS.
2. a. Crie consultas para exibir os deslocamentos (TZ_OFFSET) para os
seguintes fusos horrios:
US/Pacific-New
Singapore
Egypt
b. Altere a sesso para definir o valor do parmetro TIME_ZONE com o
deslocamento de fuso horrio de US/Pacific-New.
c. Exiba CURRENT_DATE, CURRENT_TIMESTAMP e LOCALTIMESTAMP para
esta sesso.
d. Altere a sesso para definir o valor do parmetro TIME_ZONE como o
deslocamento do fuso horrio de Singapore.
e. Exiba CURRENT_DATE, CURRENT_TIMESTAMP e LOCALTIMESTAMP para
esta sesso.
Observao: A sada poder ser diferente, dependendo da data de execuo do
comando.
Observao: Observe que, no exerccio anterior, CURRENT_DATE,
CURRENT_TIMESTAMP e LOCALTIMESTAMP so sensveis ao fuso horrio da
sesso.
3. Crie uma consulta para exibir DBTIMEZONE e SESSIONTIMEZONE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-37
Exerccio 5 (continuao)
4. Crie uma consulta para extrair o ano da coluna HIRE_DATE da tabela EMPLOYEES
em relao aos funcionrios que trabalham no departamento 80.
5. Altere a sesso para definir NLS_DATE_FORMAT como DD-MON-YYYY.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-38
Exerccio 5 (continuao)
6. Examine e execute o script lab05_06.sql para criar a tabela SAMPLE_DATES e
preench-la.
a. Selecione na tabela e exiba os dados.
b. Modifique o tipo de dados da coluna DATE_COL e altere-o para TIMESTAMP.
Selecione na tabela para exibir os dados.
c. Tente modificar o tipo de dados da coluna DATE_COL e altere-o para
TIMESTAMP WITH TIME ZONE. O que acontece?
7. Crie uma consulta para recuperar os sobrenomes da tabela EMPLOYEES e calcular o
status da avaliao. Se o ano de admisso foi 2000, exiba Needs Review para o
status da avaliao. Caso contrrio, exiba not this year! Nomeie a coluna de
status da avaliao como Review. Classifique os resultados pela coluna
HIRE_DATE.
Dica: Use uma expresso CASE com function EXTRACT para calcular o status da
avaliao.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 5-39
Exerccio 5 (continuao)
8. Crie uma consulta para imprimir os sobrenomes e os anos de servio de cada
funcionrio. Se o funcionrio foi contratado h cinco anos ou mais, imprima 5
years of service. Se o funcionrio foi contratado h 10 anos ou mais,
imprima 10 years of service. Se o funcionrio foi contratado h 15 anos ou
mais, imprima 15 years of service. Se no houver correspondncia com
nenhuma dessas condies, imprima maybe next year! Classifique os
resultados pela coluna HIRE_DATE. Use a tabela EMPLOYEES.
Dica: Use expresses CASE e TO_YMINTERVAL.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Recuperando Dados Usando
Subconsultas
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Criar uma subconsulta de vrias colunas
Usar subconsultas escalares em SQL
Solucionar problemas com subconsultas
correlacionadas
Atualizar e deletar linhas usando subconsultas
correlacionadas
Usar os operadores EXISTS e NOT EXISTS
Usar a clusula WITH
Objetivos
Nesta lio, voc aprender a criar subconsultas de vrias colunas e subconsultas na
clusula FROM de uma instruo SELECT. Voc tambm aprender a solucionar problemas
usando as subconsultas escalares, as subconsultas correlacionadas e a clusula WITH.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-3
Copyright 2004, Oracle. Todos os direitos reservados.
Subconsultas de Vrias Colunas
Cada linha da consulta principal comparada a valores
de uma subconsulta de vrias linhas e vrias colunas.
Consulta principal
WHERE (MANAGER_ID, DEPARTMENT_ID) IN
Subconsulta
100 90
102 60
124 50
Subconsultas de Vrias Colunas
At ento, voc criou subconsultas de uma nica linha e subconsultas de vrias linhas em
que apenas uma coluna retornada pela instruo SELECT interna; essa coluna usada
para avaliar a expresso na instruo SELECT me. Para comparar duas ou mais colunas,
crie uma clusula WHERE composta usando operadores lgicos. Usando subconsultas de
vrias colunas, possvel combinar condies WHERE duplicadas em uma nica clusula
WHERE.
Sintaxe
SELECT column, column, ...
FROM table
WHERE (column, column, ...) IN
(SELECT column, column, ...
FROM table
WHERE condition);
O grfico no slide mostra que os valores das colunas MANAGER_ID e DEPARTMENT_ID
da consulta principal esto sendo comparados aos valores das mesmas colunas recuperados
pela subconsulta. Como esto sendo comparadas mais de uma coluna, o exemplo qualifica-
se como uma subconsulta de vrias colunas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-4
Copyright 2004, Oracle. Todos os direitos reservados.
Comparaes de Colunas
As comparaes de colunas em uma subconsulta de
vrias colunas podem ser:
Comparaes emparelhadas
Comparaes no emparelhadas
Comparaes Emparelhadas e No Emparelhadas
As comparaes de colunas em uma subconsulta de vrias colunas podem ser comparaes
emparelhadas ou no emparelhadas.
No exemplo do prximo slide, uma comparao emparelhada executada na clusula
WHERE. Cada linha candidata na instruo SELECT deve ter os mesmos valores nas colunas
MANAGER_ID e DEPARTMENT_ID que os funcionrios com EMPLOYEE_ID 199 ou 174.
Uma subconsulta de vrias colunas tambm pode ser uma comparao no emparelhada.
Em uma comparao no emparelhada, cada uma das colunas da clusula WHERE da
instruo SELECT me comparada individualmente a diversos valores recuperados pela
instruo SELECT interna. As colunas individuais podem corresponder a qualquer um dos
valores recuperados pela instruo SELECT interna. Porm, coletivamente, todas as
condies da instruo SELECT principal devem ser atendidas para que a linha seja exibida.
O exemplo da prxima pgina ilustra uma comparao emparelhada.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-5
Copyright 2004, Oracle. Todos os direitos reservados.
Subconsulta de Comparao Emparelhada
Exiba os detalhes dos funcionrios que esto
subordinados ao mesmo gerente e que trabalham no
mesmo departamento que os funcionrios com
EMPLOYEE_ID 199 ou 174
SELECT employee_id, manager_id, department_id
FROM employees
WHERE (manager_id, department_id) IN
(SELECT manager_id, department_id
FROM employees
WHERE employee_id IN (199,174))
AND employee_id NOT IN (199,174);
Subconsulta de Comparao Emparelhada
O exemplo do slide exibe uma subconsulta de vrias colunas, isto , uma subconsulta que
retorna mais de uma coluna. Ela compara os valores das colunas MANAGER_ID e
DEPARTMENT_ID de cada linha da tabela EMPLOYEES com os valores das mesmas
colunas para os funcionrios com EMPLOYEE_ID 199 ou 174.
Primeiro, a subconsulta para recuperar os valores de MANAGER_ID e DEPARTMENT_ID
para os funcionrios com EMPLOYEE_ID 199 ou 174 executada. Esses valores so
comparados com as colunas MANAGER_ID e DEPARTMENT_ID de cada linha da tabela
EMPLOYEES. Se houver correspondncia entre os valores, a linha ser exibida. Na sada, os
registros dos funcionrios com EMPLOYEE_ID 199 ou 174 no sero exibidos. A sada da
consulta no slide a seguinte:
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-6
Copyright 2004, Oracle. Todos os direitos reservados.
Subconsulta de Comparao No Emparelhada
Exiba os detalhes dos funcionrios que esto
subordinados ao mesmo gerente que os funcionrios
com EMPLOYEE_ID 174 ou 199 e que trabalham no
mesmo departamento desses funcionrios.
SELECT employee_id, manager_id, department_id
FROM employees
WHERE manager_id IN
(SELECT manager_id
FROM employees
WHERE employee_id IN (174,199))
AND department_id IN
(SELECT department_id
FROM employees
WHERE employee_id IN (174,199))
AND employee_id NOT IN(174,199);
Subconsulta de Comparao No Emparelhada
O exemplo mostra uma comparao no emparelhada de colunas. Ele exibe as colunas
EMPLOYEE_ID, MANAGER_ID e DEPARTMENT_ID dos funcionrios cujo ID do gerente
corresponde a um dos IDs de gerente dos funcionrios com os IDs 174 ou 199 e com um
valor de DEPARTMENT_ID correspondente aos IDs de departamento desses mesmos
funcionrios.
Primeiro, a subconsulta para recuperar os valores de MANAGER_ID para os funcionrios
com EMPLOYEE_ID 174 ou 199 executada. Depois, a segunda subconsulta para
recuperar os valores de DEPARTMENT_ID para os funcionrios com EMPLOYEE_ID 174
ou 199 executada. Os valores recuperados das colunas MANAGER_ID e
DEPARTMENT_ID so comparados com os valores das mesmas colunas para cada linha da
tabela EMPLOYEES. Se a coluna MANAGER_ID da linha da tabela EMPLOYEES
corresponder a qualquer um dos valores da coluna MANAGER_ID recuperados pela
subconsulta interna e se a coluna DEPARTMENT_ID da linha da tabela EMPLOYEES
corresponder a qualquer um dos valores da coluna DEPARTMENT_ID recuperados pela
segunda subconsulta, o registro ser exibido. A sada da consulta no slide a seguinte:
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-7
Copyright 2004, Oracle. Todos os direitos reservados.
Expresses de Subconsultas Escalares
Uma expresso de subconsulta escalar uma
subconsulta que
retorna exatamente um valor de coluna de uma linha.
As subconsultas escalares podem ser usadas:
Na parte da expresso e da condio DECODE e CASE
Em todas as clusulas de SELECT, com exceo de
GROUP BY
Subconsultas Escalares em SQL
Uma subconsulta que retorna exatamente um valor de coluna de uma linha tambm
denominada subconsulta escalar. As subconsultas de vrias colunas criadas para comparar
duas ou mais colunas, usando uma clusula WHERE composta e operadores lgicos, no se
qualificam como subconsultas escalares.
O valor da expresso da subconsulta escalar corresponde ao valor do item da lista de seleo
da subconsulta. Se a subconsulta retornar 0 linhas, o valor da expresso da subconsulta
escalar ser NULL. Se a subconsulta retornar mais de uma linha, o servidor Oracle retornar
um erro. O servidor Oracle sempre suportou o uso de uma subconsulta escalar em uma
instruo SELECT. possvel usar subconsultas escalares:
Na parte da expresso e da condio DECODE e CASE
Em todas as clusulas de SELECT, com exceo de GROUP BY
Na clusula SET e na clusula WHERE de uma instruo UPDATE
No entanto, as subconsultas escalares no so vlidas em expresses nos seguintes locais:
Como valores default para colunas e expresses hash para clusters
Na clusula RETURNING de instrues DML
Como a base de um ndice baseado em function
Em clusulas GROUP BY, constraints CHECK e condies WHEN
Em clusulas CONNECT BY
Em instrues no relacionadas a consultas, como CREATE PROFILE
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-8
Copyright 2004, Oracle. Todos os direitos reservados.
Subconsultas Escalares: Exemplos
Subconsultas escalares em expresses CASE
Subconsultas escalares em clusulas ORDER BY
SELECT employee_id, last_name,
(CASE
WHEN department_id =
(SELECT department_id
FROM departments
WHERE location_id = 1800)
THEN 'Canada' ELSE 'USA' END) location
FROM employees;
SELECT employee_id, last_name
FROM employees e
ORDER BY (SELECT department_name
FROM departments d
WHERE e.department_id = d.department_id);
20
Subconsultas Escalares: Exemplos
O primeiro exemplo do slide demonstra que possvel usar subconsultas escalares em
expresses CASE. A consulta interna retorna o valor 20, que o ID do departamento cujo
ID de local 1800. A expresso CASE na consulta externa usa o resultado da consulta
interna para exibir o ID dos funcionrios, os sobrenomes e o valor Canada ou USA,
dependendo de o ID do departamento do registro recuperado pela consulta externa ser ou
no 20.
Este o resultado do primeiro exemplo do slide:

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-9
Subconsultas Escalares: Exemplos (continuao)
O segundo exemplo do slide demonstra que as subconsultas escalares podem ser usadas na
clusula ORDER BY. O exemplo ordena a sada com base no valor de
DEPARTMENT_NAME, estabelecendo uma correspondncia entre DEPARTMENT_ID da
tabela EMPLOYEES e DEPARTMENT_ID da tabela DEPARTMENTS. Essa comparao
feita em uma subconsulta escalar na clusula ORDER BY. Este o resultado do segundo
exemplo:
O segundo exemplo usa uma subconsulta correlacionada. Em uma subconsulta
correlacionada, a subconsulta faz referncia a uma coluna de uma tabela referenciada na
instruo me. As subconsultas correlacionadas sero explicadas posteriormente nesta lio.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-10
Copyright 2004, Oracle. Todos os direitos reservados.
Subconsultas Correlacionadas
As subconsultas correlacionadas so usadas para
processamento por linha. Cada subconsulta
executada uma vez para cada linha da consulta externa.
GET
a linha candidata da consulta externa
EXECUTE
a consulta interna usando o valor da linha candidata
USE
os valores da consulta interna para qualificar
ou desqualificar a linha candidata
Subconsultas Correlacionadas
O servidor Oracle executa uma subconsulta correlacionada quando essa subconsulta faz
referncia a uma coluna de uma tabela referenciada na instruo me. Uma subconsulta
correlacionada avaliada uma vez para cada linha processada pela instruo me. A
instruo me pode ser uma instruo SELECT, UPDATE ou DELETE.
Subconsultas Aninhadas e Subconsultas Correlacionadas
Em uma subconsulta aninhada normal, a consulta SELECT interna executada primeiro e
apenas uma vez, retornando os valores a serem usados pela consulta principal. No entanto,
uma subconsulta correlacionada executada uma vez para cada linha candidata considerada
pela consulta externa. Em outras palavras, a consulta interna orientada pela consulta
externa.
Execuo de Subconsulta Aninhada
A consulta interna executada primeiro e localiza um valor.
A consulta externa executada uma vez, usando o valor da consulta interna.
Execuo de Subconsulta Correlacionada
Obtenha uma linha candidata (resultado do fetch da consulta externa).
Execute a consulta interna usando o valor da linha candidata.
Use os valores resultantes da consulta interna para qualificar ou desqualificar a linha
candidata.
Repita at que no existam mais linhas candidatas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-11
Copyright 2004, Oracle. Todos os direitos reservados.
Subconsultas Correlacionadas
A subconsulta faz referncia a uma coluna de uma
tabela da consulta me.
SELECT column1, column2, ...
FROM table1
WHERE column1 operator
(SELECT column1, column2
FROM table2
WHERE expr1 =
.expr2);
outer
outer
Subconsultas Correlacionadas (continuao)
Uma subconsulta correlacionada uma forma de ler todas as linhas de uma tabela e
comparar os valores de cada linha com os dados relacionados. Ela usada sempre que uma
subconsulta precisa retornar um resultado ou um conjunto de resultados diferente para cada
linha candidata considerada pela consulta principal. Em outras palavras, use uma
subconsulta correlacionada para responder a uma pergunta com vrias partes cuja resposta
depende do valor de cada linha processada pela instruo me.
O servidor Oracle executa uma subconsulta correlacionada quando essa subconsulta faz
referncia a uma coluna de uma tabela na consulta me.
Observao: Voc pode usar os operadores ANY e ALL em uma subconsulta
correlacionada.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-12
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Subconsultas Correlacionadas
Localize todos os funcionrios que recebem mais que
o salrio mdio nos respectivos departamentos.
Sempre que uma linha
da consulta externa
for processada, a
consulta interna ser
avaliada.
SELECT last_name, salary, department_id
FROM employees outer
WHERE salary >
(SELECT AVG(salary)
FROM employees
WHERE department_id =
outer.department_id);
Usando Subconsultas Correlacionadas
O exemplo do slide determina quais funcionrios recebem mais que o salrio mdio dos
respectivos departamentos. Nesse caso, a subconsulta correlacionada calcula
especificamente o salrio mdio de cada departamento.
Como as consultas externa e interna usam a tabela EMPLOYEES na clusula FROM,
fornecido um apelido a essa tabela na instruo SELECT externa para maior clareza. Alm
de o apelido tornar a instruo SELECT inteira mais legvel, sem ele a consulta no
funcionar adequadamente, porque a instruo interna no conseguir diferenciar a coluna
da tabela interna da coluna da tabela externa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-13
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Subconsultas Correlacionadas
Exiba os detalhes dos funcionrios que mudaram
de cargo pelo menos duas vezes.
SELECT e.employee_id, last_name,e.job_id
FROM employees e
WHERE 2 <= (SELECT COUNT(*)
FROM job_history
WHERE employee_id = e.employee_id);
Usando Subconsultas Correlacionadas (continuao)
O exemplo do slide exibe os detalhes dos funcionrios que mudaram de cargo pelo menos
duas vezes. O servidor Oracle avalia uma subconsulta correlacionada da seguinte
maneira:
1. Seleciona uma linha da tabela especificada na consulta externa. Essa ser a linha
candidata atual.
2. Armazena o valor da coluna referenciada na subconsulta dessa linha candidata.
(No exemplo do slide, a coluna qual feita referncia na subconsulta
E.EMPLOYEE_ID.)
3. Executa a subconsulta cuja condio faz referncia ao valor da linha candidata da
consulta externa. (No exemplo do slide, a function de grupo COUNT(*) avaliada
com base no valor da coluna E.EMPLOYEE_ID obtido na etapa 2.)
4. Avalia a clusula WHERE da consulta externa com base nos resultados da
subconsulta executada na etapa 3. Essa ao determina se a linha candidata ser
selecionada para a sada. (No exemplo, o nmero de vezes que um funcionrio
mudou de cargo, avaliado pela subconsulta, comparado com 2 na clusula WHERE
da consulta externa. Se a condio for atendida, o registro desse funcionrio ser
exibido.)
5. Repita o procedure para a prxima linha candidata da tabela, e assim por diante, at
que todas as linhas da tabela tenham sido processadas.
A correlao estabelecida usando um elemento da consulta externa na subconsulta.
Neste exemplo, voc compara o valor de EMPLOYEE_ID da tabela na subconsulta com o
valor de EMPLOYEE_ID da tabela na consulta externa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-14
Copyright 2004, Oracle. Todos os direitos reservados.
Usando o Operador EXISTS
O operador EXISTS verifica a existncia de linhas no
conjunto de resultados da subconsulta.
Se for localizado um valor de linha na subconsulta:
A pesquisa na consulta interna no continuar
A condio ser marcada como TRUE
Se no for localizado um valor de linha na
subconsulta:
A condio ser marcada como FALSE
A pesquisa na consulta interna continuar
O Operador EXISTS
Em instrues SELECT aninhadas, todos os operadores lgicos so vlidos. Alm disso,
voc pode usar o operador EXISTS. Esse operador freqentemente usado com
subconsultas correlacionadas para verificar se um valor recuperado pela consulta externa
existe no conjunto de resultados dos valores recuperados pela consulta interna. Se a
subconsulta retornar, pelo menos, uma linha, o operador retornar TRUE. Se o valor no
existir, o operador retornar FALSE. Da mesma forma, NOT EXISTS verifica se um valor
recuperado pela consulta externa no faz parte do conjunto de resultados dos valores
recuperados pela consulta interna.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-15
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT employee_id, last_name, job_id, department_id
FROM employees outer
WHERE EXISTS ( SELECT 'X'
FROM employees
WHERE manager_id =
outer.employee_id);
Localizar Funcionrios com Pelo
Menos um Subordinado
Usando o Operador EXISTS
O operador EXISTS garantir que a pesquisa na consulta interna no continuar quando
pelo menos uma correspondncia for encontrada para esse nmero de funcionrio e de
gerente com a condio:
WHERE manager_id = outer.employee_id.
Observe que a consulta SELECT interna no precisa retornar um valor especfico. Portanto,
ser possvel selecionar uma constante.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-16
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT department_id, department_name
FROM departments d
WHERE NOT EXISTS (SELECT 'X'
FROM employees
WHERE department_id
= d.department_id);
Localizar Todos os Departamentos
sem Funcionrios
Usando o Operador NOT EXISTS
Soluo Alternativa
possvel usar um construct NOT IN como uma alternativa para um operador NOT
EXISTS, como mostra o seguinte exemplo:
SELECT department_id, department_name
FROM departments
WHERE department_id NOT IN (SELECT department_id
FROM employees);
No entanto, NOT IN ser avaliado como FALSE se um membro do conjunto for um valor
NULL. Assim, a consulta no retornar linhas mesmo se houver linhas na tabela de
departamentos que atendam condio WHERE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-17
Copyright 2004, Oracle. Todos os direitos reservados.
Instruo UPDATE Correlacionada
Use uma subconsulta correlacionada para atualizar
as linhas de uma tabela com base nas linhas de
outra tabela.
UPDATE table1 alias1
SET column = (SELECT expression
FROM table2 alias2
WHERE alias1.column =
alias2.column);
Instruo UPDATE Correlacionada
No caso da instruo UPDATE, voc pode usar uma subconsulta correlacionada para
atualizar linhas de uma tabela com base nas linhas de outra tabela.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-18
Copyright 2004, Oracle. Todos os direitos reservados.
Usando a Subconsulta UPDATE Correlacionada
Desnormalize a tabela EMP6 adicionando uma coluna
para armazenar o nome do departamento.
Preencha a tabela usando uma instruo UPDATE
correlacionada.
ALTER TABLE empl6
ADD(department_name VARCHAR2(25));
UPDATE empl6 e
SET department_name =
(SELECT department_name
FROM departments d
WHERE e.department_id = d.department_id);
Instruo UPDATE Correlacionada (continuao)
O exemplo do slide desnormaliza a tabela EMPL6 adicionando uma coluna para armazenar
o nome do departamento e, depois, preenche a tabela usando uma instruo UPDATE
correlacionada.
A seguir, outro exemplo de uma instruo UPDATE correlacionada.
Instruo em Questo
A tabela REWARDS tem uma lista de funcionrios que superaram as expectativas de
desempenho. Use uma subconsulta correlacionada para atualizar as linhas da tabela EMP6
com base nas linhas da tabela REWARDS:
UPDATE empl6
SET salary = (SELECT employees.salary + rewards.pay_raise
FROM rewards
WHERE employee_id =
employees.employee_id
AND payraise_date =
(SELECT MAX(payraise_date)
FROM rewards
WHERE employee_id = employees.employee_id))
WHERE employees.employee_id
IN (SELECT employee_id FROM rewards);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-19
Instruo UPDATE Correlacionada (continuao)
Este exemplo usa a tabela REWARDS. A tabela REWARDS tem as colunas EMPLOYEE_ID,
PAY_RAISE e PAYRAISE_DATE. Sempre que um funcionrio recebe um aumento de
salrio, inserido um registro com os detalhes de ID do funcionrio, o valor do aumento de
salrio e a data de recebimento do aumento na tabela REWARDS. A tabela REWARDS pode
conter mais de um registro para um funcionrio. A coluna PAYRAISE_DATE usada para
identificar o aumento de salrio mais recente de um funcionrio.
No exemplo, a coluna SALARY da tabela EMPL6 atualizada para refletir o aumento de
salrio mais recente recebido pelo funcionrio. Para isso, adicionado o salrio atual do
funcionrio com o respectivo aumento de salrio da tabela REWARDS.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-20
Copyright 2004, Oracle. Todos os direitos reservados.
Instruo DELETE Correlacionada
Use uma subconsulta correlacionada para deletar
as linhas de uma tabela com base nas linhas de
outra tabela.
DELETE FROM table1 alias1
WHERE column operator
(SELECT expression
FROM table2 alias2
WHERE alias1.column = alias2.column);
Instruo DELETE Correlacionada
No caso de uma instruo DELETE, voc pode usar uma subconsulta correlacionada para
deletar apenas as linhas que tambm existem em outra tabela. Se voc decidir manter
apenas os ltimos quatro registros do histrico de cargos na tabela JOB_HISTORY, quando
um funcionrio for transferido para o quinto cargo, delete a linha mais antiga dessa tabela.
Para isso, consulte o valor de MIN(START_DATE) relativo ao funcionrio na tabela
JOB_HISTORY. O cdigo a seguir ilustra como possvel executar a operao precedente
usando uma instruo DELETE correlacionada.
DELETE FROM emp_history JH
WHERE employee_id =
(SELECT employee_id
FROM employees E
WHERE JH.employee_id = E.employee_id
AND START_DATE =
(SELECT MIN(start_date)
FROM job_history JH
WHERE JH.employee_id = E.employee_id)
AND 5 > (SELECT COUNT(*)
FROM job_history JH
WHERE JH.employee_id = E.employee_id
GROUP BY EMPLOYEE_ID
HAVING COUNT(*) >= 4));
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-21
Copyright 2004, Oracle. Todos os direitos reservados.
DELETE FROM empl6 E
WHERE employee_id =
(SELECT employee_id
FROM emp_history
WHERE employee_id = E.employee_id);
Usando a Subconsulta DELETE Correlacionada
Use uma subconsulta correlacionada para deletar
apenas as linhas da tabela EMPL6 que tambm existem
na tabela EMP_HISTORY:
Instruo DELETE Correlacionada (continuao)
Exemplo
Nesse exemplo, so usadas duas tabelas. So elas:
A tabela EMPL6, que fornece os detalhes de todos os funcionrios atuais
A tabela EMP_HISTORY, que fornece os detalhes dos ex-funcionrios
A tabela EMP_HISTORY contm dados relativos a ex-funcionrios. Portanto, ser um erro
se o registro do mesmo funcionrio existir nas tabelas EMPL6 e EMP_HISTORY. Voc
pode deletar esses registros errados usando a subconsulta correlacionada mostrada no slide.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-22
Copyright 2004, Oracle. Todos os direitos reservados.
A Clusula WITH
Permite usar o mesmo bloco de consulta em uma
instruo SELECT quando ele ocorre mais de uma
vez em uma consulta complexa.
A clusula WITH recupera os resultados de um bloco
de consulta e os armazena no tablespace temporrio
do usurio.
A clusula WITH melhora o desempenho.
A Clusula WITH
Usando a clusula WITH, possvel definir um bloco de consulta antes de us-lo em uma
consulta. Essa clusula (anteriormente conhecida como subquery_factoring_clause) permite
reutilizar o mesmo bloco de consulta em uma instruo SELECT quando ele ocorre mais de
uma vez em uma consulta complexa. Ela especialmente til quando uma consulta faz
diversas referncias ao mesmo bloco de consulta e existem joins e agregaes.
Com a clusula WITH, voc poder reutilizar a mesma consulta quando for custoso avaliar o
bloco de consulta e ele ocorrer mais de uma vez em uma consulta complexa. Usando a
clusula WITH, o servidor Oracle recupera os resultados de um bloco de consulta e os
armazena no tablespace temporrio do usurio. Essa caracterstica pode melhorar o
desempenho.
Vantagens da Clusula WITH
Facilita a leitura da consulta
Avalia uma clusula apenas uma vez, mesmo quando ela aparece diversas vezes na
consulta
Na maioria dos casos, pode melhorar o desempenho para consultas grandes
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-23
Copyright 2004, Oracle. Todos os direitos reservados.
Clusula WITH: Exemplo
Com a clusula WITH, crie uma consulta para exibir o
nome e o salrio total dos departamentos cujo salrio
total maior que o salrio mdio de todos os
departamentos.
Clusula WITH: Exemplo
O problema do slide exigir os seguintes clculos intermedirios:
1. Calcule o salrio total de cada departamento e armazene o resultado usando uma
clusula WITH.
2. Calcule o salrio mdio dos departamentos e armazene o resultado usando uma
clusula WITH.
3. Compare o salrio total calculado na primeira etapa com o salrio mdio calculado na
segunda etapa. Se o salrio total de um departamento especfico for maior que o salrio
mdio dos departamentos, exiba o nome do departamento e o salrio total
correspondente.
A soluo para esse problema mostrada na prxima pgina.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-24
Copyright 2004, Oracle. Todos os direitos reservados.
Clusula WITH: Exemplo
WITH
dept_costs AS (
SELECT d.department_name, SUM(e.salary) AS dept_total
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_name),
avg_cost AS (
SELECT SUM(dept_total)/COUNT(*) AS dept_avg
FROM dept_costs)
SELECT *
FROM dept_costs
WHERE dept_total >
(SELECT dept_avg
FROM avg_cost)
ORDER BY department_name;
Clusula WITH: Exemplo (continuao)
O cdigo SQL do slide um exemplo de situao na qual possvel melhorar o
desempenho e criar cdigo SQL mais simples usando a clusula WITH. A consulta cria os
nomes de consultas DEPT_COSTS e AVG_COST e os utiliza no corpo da consulta principal.
Internamente, a clusula WITH resolvida como uma view em linha ou uma tabela
temporria. O otimizador escolhe a resoluo apropriada de acordo com o custo/benefcio
do armazenamento temporrio dos resultados da clusula WITH.
A sada gerada pelo cdigo SQL no slide ser esta:
Notas de Uso da Clusula WITH
usada apenas com instrues SELECT.
Um nome de consulta pode ser visto por todos os blocos de consulta de elemento
WITH (incluindo os respectivos blocos de subconsulta) definidos depois dele e pelo
prprio bloco de consulta (incluindo os respectivos blocos de subconsulta).
Quando o nome da consulta igual ao de uma tabela existente, o parser pesquisa de
dentro para fora. O nome do bloco de consulta tem precedncia sobre o nome da
tabela.
A clusula WITH pode conter mais de uma consulta. Nesse caso, cada consulta
separada por uma vrgula.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-25
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Neste lio, voc dever ter aprendido que:
Uma subconsulta de vrias colunas retorna mais de
uma coluna.
Comparaes de vrias colunas podem ser
emparelhadas ou no emparelhadas.
Uma subconsulta de vrias colunas tambm pode
ser usada na clusula FROM de uma instruo
SELECT.
Sumrio
Voc pode usar subconsultas de vrias colunas para combinar vrias condies WHERE em
uma nica clusula WHERE. As comparaes de colunas em uma subconsulta de vrias
colunas podem ser comparaes emparelhadas ou no emparelhadas.
possvel usar uma subconsulta para definir uma tabela para ser usada por uma consulta.
As subconsultas escalares podem ser usadas:
Na parte da expresso e da condio DECODE e CASE
Em todas as clusulas de SELECT, com exceo de GROUP BY
Na clusula SET e na clusula WHERE da instruo UPDATE
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-26
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
As subconsultas correlacionadas so teis sempre
que uma subconsulta tiver que retornar um
resultado diferente para cada linha candidata.
O operador EXISTS um operador booleano que
testa a presena de um valor.
As subconsultas correlacionadas podem ser usadas
com instrues SELECT, UPDATE e DELETE.
possvel utilizar a clusula WITH para usar o
mesmo bloco de consulta em uma instruo SELECT
quando ocorrer mais de uma vez.
Sumrio (continuao)
O servidor Oracle executa uma subconsulta correlacionada quando essa subconsulta faz
referncia a uma coluna de uma tabela referenciada na instruo me. Uma subconsulta
correlacionada avaliada uma vez para cada linha processada pela instruo me. A
instruo me pode ser uma instruo SELECT, UPDATE ou DELETE. Com a clusula
WITH, voc poder reutilizar a mesma consulta quando for custoso reavaliar o bloco de
consulta e ele ocorrer mais de uma vez em uma consulta complexa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-27
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 6: Viso Geral
Este exerccio aborda os seguintes tpicos:
Criando subconsultas de vrias colunas
Criando subconsultas correlacionadas
Usando o operador EXISTS
Usando subconsultas escalares
Usando a clusula WITH
Exerccio 6: Viso Geral
Neste exerccio, voc cria subconsultas de vrias colunas e subconsultas correlacionadas e
escalares. Voc tambm soluciona problemas com a criao da clusula WITH.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-28
Exerccio 6
1. Crie uma consulta para exibir o sobrenome, o nmero de departamento e o salrio de
qualquer funcionrio cujo nmero de departamento e salrio coincidam com o
nmero de departamento e salrio de qualquer funcionrio que receba comisso.
2. Exiba o sobrenome, o nome do departamento e o salrio de qualquer funcionrio
cujo salrio e comisso coincidam com o salrio e a comisso de qualquer
funcionrio que esteja na localizao ID 1700.
3. Crie uma consulta para exibir o sobrenome, a data de admisso e o salrio de
todos os funcionrios que tenham o mesmo salrio e a mesma comisso de
Kochhar.
Observao: No exiba Kochhar no conjunto de resultados.
4. Crie uma consulta para exibir os funcionrios que recebem um salrio mais alto do
que o salrio dos gerentes de vendas (JOB_ID = 'SA_MAN'). Classifique os
resultados dos salrios do maior para o menor.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-29
Exerccio 6 (continuao)
5. Exiba os detalhes do ID do funcionrio, o sobrenome e o ID do departamento dos
funcionrios que vivem em cidades que comeam com a letra T.
6. Crie uma consulta para localizar todos os funcionrios que recebem mais que o
salrio mdio nos respectivos departamentos.
Exiba o sobrenome, o salrio, o ID do departamento e o salrio mdio do
departamento. Classifique pelo salrio mdio. Use apelidos para as colunas
recuperadas pela consulta, conforme indicado no exemplo de sada.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-30
Exerccio 6 (continuao)
7. Descubra todos os funcionrios que no so supervisores.
a. Primeiramente, faa isto usando o operador NOT EXISTS.
b. Isto pode ser feito usando o operador NOT IN? Como ou por que no?
8. Crie uma consulta para exibir os sobrenomes dos funcionrios que recebem menos
que o salrio mdio nos respectivos departamentos.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-31
Exerccio 6 (continuao)
9. Crie uma consulta para exibir os sobrenomes dos funcionrios que tm um ou mais
colegas de trabalho nos respectivos departamentos com datas de admisso
posteriores, mas com salrios mais altos.
10. Crie uma consulta para exibir o ID do funcionrio, os sobrenomes e os nomes de
departamento de todos os funcionrios.
Observao: Use uma subconsulta escalar para recuperar o nome do departamento
na instruo SELECT.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 6-32
Exerccio 6 (continuao)
11. Crie uma consulta para exibir os nomes dos departamentos cujo custo total de salrio
est acima de 1/8 do custo total de salrio de toda a empresa. Use a clusula WITH
para criar esta consulta. Nomeie a consulta SUMMARY.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Recuperao Hierrquica
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de:
Interpretar o conceito de uma consulta hierrquica
Criar um relatrio estruturado em rvore
Formatar dados hierrquicos
Excluir ramificaes da estrutura em rvore
Objetivos
Nesta lio, voc aprender a usar consultas hierrquicas para criar relatrios estruturados
em rvore.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-3
Copyright 2004, Oracle. Todos os direitos reservados.
Dados de Amostra da Tabela EMPLOYEES

Dados de Amostra da Tabela EMPLOYEES


Ao usar consultas hierrquicas, voc poder recuperar dados com base em um
relacionamento hierrquico natural entre as linhas de uma tabela. Um banco de dados
relacional no armazena registros de forma hierrquica. No entanto, quando existe um
relacionamento hierrquico entre as linhas de uma tabela, um processo denominado
percurso da rvore permite que a hierarquia seja construda. Uma consulta hierrquica um
mtodo de organizar os galhos de uma rvore em uma ordem especfica.
Imagine uma rvore genealgica onde os membros mais velhos ficam na base da rvore, e
os mais novos representam os galhos. Os galhos podem ter suas prprias ramificaes e
assim por diante.
Pode ser feita uma consulta hierrquica quando existe um relacionamento entre as linhas de
uma tabela. Por exemplo, no slide, possvel verificar que os funcionrios com IDs de
cargos AD_VP, ST_MAN, SA_MAN e MK_MAN esto diretamente subordinados ao
presidente da empresa. Sabemos disso porque a coluna MANAGER_ID desses registros
contm um ID de funcionrio igual a 100, que pertence ao presidente (AD_PRES).
Observao: As rvores hierrquicas so usadas em vrias reas, como genealogia humana
(rvores genealgicas), rebanhos (para fins de fertilizao), gerncia corporativa
(hierarquias de gerncia), indstria (montagem de produtos), pesquisa evolutiva
(desenvolvimento de espcies) e pesquisa cientfica.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-4
Copyright 2004, Oracle. Todos os direitos reservados.
Estrutura em rvore Natural
De Haan
King
Hunold
EMPLOYEE_ID = 100 (Pai)
MANAGER_ID = 100 (Filho)
Whalen
Kochhar
Higgins
Mourgos Zlotkey
Rajs Davies Matos
Gietz Ernst Lorentz
Hartstein
Fay
Abel Taylor Grant
Vargas
Estrutura em rvore Natural
A tabela EMPLOYEES tem uma estrutura em rvore que representa a linha de relatrios de
gerenciamento. possvel criar a hierarquia examinando o relacionamento entre os valores
equivalentes nas colunas EMPLOYEE_ID e MANAGER_ID. Para explorar esse
relacionamento, possvel unir a tabela a ela mesma. A coluna MANAGER_ID contm o
nmero de funcionrio do gerente do funcionrio.
O relacionamento pai/filho de uma estrutura em rvore permite controlar:
A direo em que a hierarquia percorrida
A posio inicial na hierarquia
Observao: O slide exibe uma estrutura em rvore invertida da hierarquia de
gerenciamento dos funcionrios na tabela EMPLOYEES.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-5
Copyright 2004, Oracle. Todos os direitos reservados.
Consultas Hierrquicas
Condio WHERE:
expr comparison_operator expr
SELECT [LEVEL], column, expr...
FROM table
[WHERE condition(s)]
[START WITH condition(s)]
[CONNECT BY PRIOR condition(s)] ;
Palavras-Chave e Clusulas
possvel identificar as consultas hierrquicas pela presena das clusulas CONNECT BY e
START WITH.
Na sintaxe:
SELECT a clusula SELECT padro
LEVEL Para cada linha retornada por uma consulta hierrquica, a
pseudocoluna LEVEL retorna 1 para uma linha-raiz, 2 para uma
linha filha da raiz, e assim por diante.
FROM table Especifica a tabela, a view ou o snapshot que contm as colunas.
Voc s pode fazer selees em uma tabela.
WHERE Restringe as linhas retornadas pela consulta sem afetar outras linhas
da hierarquia
condition uma comparao com expresses
START WITH Especifica as linhas-raiz da hierarquia (onde comear). Esta clusula
necessria para uma consulta hierrquica verdadeira.
CONNECT BY PRIOR especifica as colunas nas quais existe o relacionamento
entre linhas mes e filhas. Esta clusula necessria para uma
consulta hierrquica.
A instruo SELECT no pode conter uma join ou uma consulta de uma view que contm
uma join.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-6
Copyright 2004, Oracle. Todos os direitos reservados.
Percorrendo a rvore
Especifica a condio a ser atendida
Aceita qualquer condio vlida
Usando a tabela EMPLOYEES, comece com o funcionrio
cujo sobrenome Kochhar.
Posio Inicial
...START WITH last_name = 'Kochhar'
START WITH column1 = value
Percorrendo a rvore
As linhas a serem usadas como raiz da rvore so determinadas pela clusula START WITH.
possvel usar a clusula START WITH com qualquer condio vlida.
Exemplos
Usando a tabela EMPLOYEES, comece com King, o presidente da empresa.
... START WITH manager_id IS NULL
Usando a tabela EMPLOYEES, comece com o funcionrio Kochhar. Uma condio START
WITH pode conter uma subconsulta.
... START WITH employee_id = (SELECT employee_id
FROM employees
WHERE last_name = 'Kochhar')
Se a clusula START WITH for omitida, o percurso da rvore comear com todas as linhas
da tabela como linhas-raiz. Se for usada uma clusula WHERE, o percurso comear com
todas as linhas que atenderem condio WHERE. Esse percurso no refletir mais a
verdadeira hierarquia.
Observao: As clusulas CONNECT BY PRIOR e START WITH no seguem o padro
ANSI SQL.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-7
Copyright 2004, Oracle. Todos os direitos reservados.
Percorrendo a rvore
Percorra a rvore de cima para baixo usando a tabela
EMPLOYEES.
Direo
De cima
para baixo
Column1 = Chave Me
Column2 = Chave Filha
De baixo
para cima
Column1 = Chave Filha
Column2 = Chave Me
... CONNECT BY PRIOR employee_id = manager_id
CONNECT BY PRIOR column1 = column2
Percorrendo a rvore (continuao)
A direo da consulta, de me para filha ou de filha para me, determinada pela posio
da coluna CONNECT BY PRIOR. O operador PRIOR faz referncia linha me. Para
localizar as linhas filhas de uma linha me, o servidor Oracle avalia a expresso PRIOR da
linha me e as outras expresses de cada linha da tabela. As linhas para as quais a condio
verdadeira so as linhas filhas da linha me. O servidor Oracle sempre seleciona as linhas
filhas avaliando a condio CONNECT BY relativa a uma linha me atual.
Exemplos
Percorra a rvore de cima para baixo usando a tabela EMPLOYEES. Defina um
relacionamento hierrquico no qual o valor de EMPLOYEE_ID da linha me seja igual ao
valor de MANAGER_ID da linha filha.
... CONNECT BY PRIOR employee_id = manager_id
Percorra a rvore de baixo para cima usando a tabela EMPLOYEES.
... CONNECT BY PRIOR manager_id = employee_id
O operador PRIOR no precisa ser necessariamente codificado logo aps CONNECT BY.
Portanto, a clusula CONNECT BY PRIOR abaixo fornece o mesmo resultado que o
exemplo anterior.
... CONNECT BY employee_id = PRIOR manager_id
Observao: A clusula CONNECT BY no pode conter uma subconsulta.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-8
Copyright 2004, Oracle. Todos os direitos reservados.
Percorrendo a rvore: De Baixo para Cima
SELECT employee_id, last_name, job_id, manager_id
FROM employees
START WITH employee_id = 101
CONNECT BY PRIOR manager_id = employee_id ;
Percorrendo a rvore: De Baixo para Cima
O exemplo do slide exibe uma lista de gerentes comeando com o funcionrio cujo ID
101.
Exemplo
No exemplo a seguir, os valores de EMPLOYEE_ID so avaliados para a linha me e os
valores de MANAGER_ID e SALARY so avaliados para as linhas filhas. O operador PRIOR
s se aplica ao valor de EMPLOYEE_ID.
... CONNECT BY PRIOR employee_id = manager_id
AND salary > 15000;
Para qualificar-se como uma linha filha, a linha deve ter um valor de MANAGER_ID igual
ao valor de EMPLOYEE_ID da linha me e um valor de SALARY maior que $15.000.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-9
Copyright 2004, Oracle. Todos os direitos reservados.
Percorrendo a rvore: De Cima para Baixo

SELECT last_name||' reports to '||


PRIOR last_name "Walk Top Down"
FROM employees
START WITH last_name = 'King'
CONNECT BY PRIOR employee_id = manager_id ;
Percorrendo a rvore: De Cima para Baixo
Se a rvore for percorrida de cima para baixo, os nomes dos funcionrios e respectivos
gerentes sero exibidos. Use o funcionrio King como a posio inicial. Imprima apenas
uma coluna.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-10
Copyright 2004, Oracle. Todos os direitos reservados.
Classificando Linhas com
a Pseudocoluna LEVEL
Nvel 1
raiz/pai
Nvel 3
pai/filho/folha
Nvel 4
folha
De Haan
King
Hunold Whalen
Kochhar
Higgins
Mourgos Zlotkey
Rajs Davies Matos
Gietz Ernst Lorentz
Hartstein
Fay
Abel Taylor Grant
Vargas
Classificando Linhas com a Pseudocoluna LEVEL
Voc pode mostrar explicitamente a classificao ou o nvel de uma linha na hierarquia
usando a pseudocoluna LEVEL. Assim, seu relatrio ser mais legvel. As bifurcaes onde
uma ou mais ramificaes separam-se de uma ramificao maior so chamadas de ns, e a
extremidade de uma ramificao chamada de folha ou n-folha. O diagrama do slide
mostra os ns da rvore invertida com os respectivos valores de LEVEL. Por exemplo, o
funcionrio Higgens um n pai e um n filho; enquanto o funcionrio Davies um n
filho e um n-folha.
A Pseudocoluna LEVEL
No slide, King o n-raiz ou pai (LEVEL = 1). Kochhar, De Hann, Mourgos, Zlotkey,
Hartstein, Higgens e Hunold so ns filhos e tambm ns pais (LEVEL = 2). Whalen, Rajs,
Davies, Matos, Vargas, Gietz, Ernst, Lorentz, Abel, Taylor, Grant e Fay so ns filhos e
ns-folha. (LEVEL = 3 e LEVEL = 4)
Observao: Um n-raiz o n mais alto em uma rvore invertida. Um n filho qualquer
n diferente do n-raiz. Um n pai tem ns filhos. Um n-folha no tem ns filhos. O
nmero de nveis retornados por uma consulta hierrquica pode ser limitado pela memria
disponvel do usurio.
Valor Nvel
1 Um n-raiz
2 Um filho de um n-raiz
3 Um filho de um filho, e assim por diante
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-11
Copyright 2004, Oracle. Todos os direitos reservados.
Formatando Relatrios Hierrquicos
Usando LEVEL e LPAD
Crie um relatrio exibindo os nveis de gerenciamento
da empresa, comeando com o nvel mais elevado e
recuando cada nvel subseqente.
COLUMN org_chart FORMAT A12
SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_')
AS org_chart
FROM employees
START WITH last_name='King'
CONNECT BY PRIOR employee_id=manager_id
Formatando Relatrios Hierrquicos Usando a Pseudocoluna LEVEL
So designados nmeros de nvel aos ns de uma rvore a partir da raiz. Use a function
LPAD com a pseudocoluna LEVEL para exibir um relatrio hierrquico como uma rvore
recuada.
No exemplo do slide:
LPAD(char1,n [,char2]) retorna char1, preenchido esquerda at o
tamanho n com a seqncia de caracteres em char2. O argumento n o tamanho
total do valor retornado como aparece na tela do terminal.
LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') define
o formato da exibio.
char1 o valor de LAST_NAME, n o tamanho total do valor retornado, o
tamanho de LAST_NAME +(LEVEL*2)-2 e char2 '_'.
Em outras palavras, o exemplo informa ao SQL para preencher esquerda o valor de
LAST_NAME com o caractere '_' at que o tamanho da string de caracteres resultante seja
igual ao valor determinado por LENGTH(last_name)+(LEVEL*2)-2.
Para King, LEVEL = 1. Portanto, (2 * 1) -2 = 2 -2 = 0. Assim, King no preenchido com
caracteres '_' e exibido na coluna 1.
Para Kochhar, LEVEL = 2. Portanto, (2 * 2) -2 = 4 2 = 2. Assim, Kochhar preenchido
com 2 caracteres '_' e exibido recuado.
Os outros registros da tabela EMPLOYEES so exibidos de forma semelhante.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-12
Formatando Relatrios Hierrquicos Usando LEVEL (continuao)

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-13
Copyright 2004, Oracle. Todos os direitos reservados.
Reduzindo Ramificaes
Use a clusula WHERE
para eliminar um n.
Use a clusula CONNECT BY
para eliminar uma ramificao.
WHERE last_name != 'Higgins'
CONNECT BY PRIOR
employee_id = manager_id
AND last_name != 'Higgins'
Kochhar
Higgins
Gietz
Whalen
Kochhar
Higgins Whalen
Gietz
Reduzindo Ramificaes
Voc pode usar as clusulas WHERE e CONNECT BY para reduzir a rvore, isto , para
controlar quais ns ou linhas sero exibidos. O predicado usado age como uma condio
booleana.
Exemplos
Comeando na raiz, percorra a rvore de cima para baixo e elimine o funcionrio Higgins
do resultado, mas processe as linhas filhas.
SELECT department_id, employee_id,last_name, job_id, salary
FROM employees
WHERE last_name != 'Higgins'
START WITH manager_id IS NULL
CONNECT BY PRIOR employee_id = manager_id;
Comeando na raiz, percorra a rvore de cima para baixo e elimine o funcionrio Higgins e
todas as linhas filhas.
SELECT department_id, employee_id,last_name, job_id, salary
FROM employees
START WITH manager_id IS NULL
CONNECT BY PRIOR employee_id = manager_id
AND last_name != 'Higgins';
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-14
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc aprendeu que:
possvel usar consultas hierrquicas para exibir
um relacionamento hierrquico entre as linhas
de uma tabela.
Voc especifica a direo e o ponto inicial da
consulta.
Voc pode remover ns ou ramificaes.
Sumrio
possvel usar consultas hierrquicas para recuperar dados com base em um
relacionamento hierrquico natural entre as linhas de uma tabela. A pseudocoluna LEVEL
contabiliza o quanto voc percorreu uma rvore hierrquica. Voc pode especificar a
direo da consulta usando a clusula CONNECT BY PRIOR. possvel especificar o ponto
de partida usando a clusula START WITH. Voc pode usar as clusulas WHERE e
CONNECT BY para reduzir as ramificaes da rvore.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-15
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 7: Viso Geral
Este exerccio aborda os seguintes tpicos:
Diferenciando consultas hierrquicas de consultas
no hierrquicas
Percorrendo uma rvore
Produzindo um relatrio recuado usando a
pseudocoluna LEVEL
Reduzindo a estrutura da rvore
Classificando a sada
Exerccio 7: Viso Geral
Neste exerccio, voc ir adquirir experincia na produo de relatrios hierrquicos.
Observao: A Pergunta 1 dissertativa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-16
Exerccio 7
1. Observe os exemplos de sada a seguir. Essas sadas so o resultado de uma consulta
hierrquica? Explique por que sim e por que no.
Exemplo 1:
Exemplo 2:

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-17
Exerccio 7 (continuao)
Exemplo 3:
2. Gere um relatrio que mostre um organograma do departamento de Mourgos.
Imprima os sobrenomes, os salrios e os IDs dos departamentos.
3. Crie um relatrio que mostre a hierarquia de gerentes para o funcionrio Lorentz.
Exiba primeiramente o seu gerente imediato.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 7-18
Exerccio 7 (continuao)
4. Crie um relatrio recuado mostrando a hierarquia de gerenciamento, comeando
pelo funcionrio cujo LAST_NAME Kochhar. Imprima o sobrenome, o ID do
gerente e o ID do departamento do funcionrio. Defina apelidos para as colunas,
conforme indicado no exemplo de sada.
Se tiver tempo, faa o seguinte exerccio:
5. Produza um organograma que mostre a hierarquia de gerenciamento da empresa.
Comece pela pessoa que est no nvel mais alto e exclua todas as outras que tenham
um ID do cargo igual a IT_PROG. Exclua tambm De Haan e respectivos
subordinados.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Suporte a Expresses Comuns
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Ao concluir esta lio, voc ser capaz de usar o
suporte a expresses SQL comuns para pesquisar,
substituir e estabelecer uma correspondncia com
strings especficas.
Objetivos
Nesta lio, voc aprender a usar o recurso de suporte a expresses comuns que foi
apresentado no Banco de Dados Oracle 10g.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-3
Copyright 2004, Oracle. Todos os direitos reservados.
Viso Geral de Expresses Comuns
ABC
Um mtodo de
descrio de padres
simples e complexos
para pesquisa e
manipulao
Diversas functions
novas para suportar
expresses comuns
Um suporte
multilnge a
expresses comuns
para tipos de strings
SQL e PLSQL
Viso Geral de Expresses Comuns
O Banco de Dados Oracle 10g apresenta o suporte a Expresses Comuns. Esta
implementao compatvel com o POSIX (Portable Operating System for UNIX) padro,
controlado pelo IEEE (Institute of Electrical and Electronics Engineers), para semntica e
sintaxe de correspondncia de dados ASCII. Os recursos multilnges do Oracle ampliam os
recursos de correspondncia dos operadores, superando o padro do POSIX. As expresses
comuns so um mtodo de descrio de padres simples e complexos para pesquisa e
manipulao de dados.
A manipulao e a pesquisa de strings contribuem para um grande percentual de lgica em
uma aplicao baseada na Web. O uso varia desde a tarefa mais simples (encontrar as
palavras "San Francisco" em um texto especificado) at a mais complexa (extrair todos os
URLs do texto), ou tarefas ainda mais complexas (encontrar todas as palavras cujo segundo
caractere uma vogal).
Quando conjugado com o SQL nativo, o uso de expresses comuns possibilita operaes de
pesquisa e manipulao muito eficientes com os dados armazenados no banco de dados
Oracle. possvel usar esse recurso para solucionar problemas que, de outro modo, teriam
uma programao muito complexa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-4
Copyright 2004, Oracle. Todos os direitos reservados.
Metacaracteres
Especifica as classes de equivalncia [==]
Corresponde a uma ou mais ocorrncias +
Estabelece correspondncia com zero ou uma ocorrncia ?
Corresponde a qualquer caractere no conjunto de caracteres suportado,
exceto NULL
.
Expresso de agrupamento, tratada como uma nica subexpresso ()
Expresso de referncia retroativa \n
Especifica uma classe de caracteres e corresponde a qualquer caractere
dessa classe
[: :]
Pode ter 4 significados diferentes: 1. Significa uma barra propriamente
dita. 2. Colocar o prximo caractere entre aspas. 3. Introduzir um
operador. 4. No fazer nada.
\
Descrio Smbolo
Especifica um elemento de comparao, como um elemento de
multicaracteres
Estabelece correspondncia pelo menos m vezes, mas no mais do que
n vezes
Estabelece correspondncia exatamente m vezes
Expresso entre colchetes para uma lista de correspondncias que
contenha qualquer uma das expresses representadas na lista
Estabelece correspondncia com o incio de linha/fim de linha
Operao de alterao para especificar correspondncias alternativas
Estabelece correspondncia com zero ou mais ocorrncias
[..]
{m,n}
{m}
[ ]
^/$
|
*
Metacaracteres
Os metacaracteres so caracteres especiais que tm um significado especial, como um
curinga, um caractere repetitivo, um caractere no correspondente ou uma faixa de
caracteres. Voc pode usar diversos smbolos de metacaracteres predefinidos no padro de
correspondncia.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-5
Copyright 2004, Oracle. Todos os direitos reservados.
Usando Metacaracteres
Problema: Localizar 'abc' em uma string:
Soluo: 'abc'
Corresponde a: abc
No corresponde a: 'def'
Problema: Localizar um 'a' seguido de qualquer caractere, seguido
de 'c'
Metacaractere: qualquer caractere definido por '.'
Soluo: 'a.c'
Corresponde a: abc
Corresponde a: adc
Corresponde a: alc
Corresponde a: a&c
No corresponde a: abb
Problema: Localizar uma ou mais ocorrncias de 'a'
Metacaractere: Use o sinal de adio '+' para estabelecer uma
correspondncia com um ou mais dos caracteres anteriores
Soluo: 'a+'
Corresponde a: a
Corresponde a: aa
No corresponde a: bbb
1
2
3
Usando Metacaracteres
1. No primeiro exemplo, executada uma correspondncia simples.
2. No segundo exemplo, qualquer caractere definido como '.'. Este exemplo pesquisa
o caractere "a" seguido de qualquer caractere, seguido do caractere "c".
3. O terceiro exemplo pesquisa uma ou mais ocorrncias da letra "a". O caractere "+"
usado aqui para indicar uma correspondncia de um ou mais dos caracteres dos
caracteres anteriores.
Voc tambm pode pesquisar listas de caracteres no correspondentes. Uma lista de
caracteres no correspondentes possibilita definir um conjunto de caracteres para os quais
uma correspondncia invlida. Por exemplo, para localizar todos os caracteres, exceto
"a", "b" e "c", voc pode definir "^" para indicar uma no correspondncia.
Expresso: [^abc]
Corresponde a: abcdef
Corresponde a: ghi
No corresponde a: abc
Para estabelecer uma correspondncia com qualquer letra que no esteja entre "a" e "i",
voc pode usar:
Expresso: [^a-i]
Corresponde a: hijk
Corresponde a: lmn
No corresponde a: abcdefghi
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-6
Usando Metacaracteres (continuao)
Estabelece correspondncia com
qualquer caractere da lista ...
Lista de Caracteres de
Correspondncia
[]
Estabelece correspondncia com
qualquer caractere que no esteja
na lista ...
Lista de Caracteres No
Correspondentes
[^]
'a|b' corresponde ao caractere 'a' ou 'b'. Ou |
Trata a expresso ... como uma
unidade.
Subexpresso ou
Agrupamento
()
Estabelece correspondncia com a
subexpresso precedente de nmero n
th
,
onde n um inteiro entre 1 e 9
Referncia retroativa \n
Trata o metacaractere subseqente da
expresso como um literal.
Caractere de Escape \
Estabelece correspondncia com zero
ou uma ocorrncia da subexpresso
precedente
Zero ou Um Quantificador
Ponto de Interrogao
?
Estabelece correspondncia com
qualquer caractere
Qualquer caractere Ponto .
Descrio Nome do Operador Sintaxe do
Metacaractere
Estabelece correspondncia com
exatamente m ocorrncias
pelo menos m ocorrncias
pelo menos m, mas no mais do que n
ocorrncias da subexpresso
precedente
Intervalo Contagem Exata {m}
{m,}
{m,n}
Estabelece correspondncia com zero
ou mais ocorrncias da subexpresso
precedente
Zero ou Mais
Quantificador Asterisco
*
Estabelece correspondncia com uma
ou mais ocorrncias da subexpresso
precedente
Um ou Mais
Quantificador Sinal de
Adio
+
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-7
Usando Metacaracteres (continuao)
Estabelece correspondncia com a
expresso subseqente quando ele
ocorre no incio de uma linha.
Incio de ncora de Linha ^
Estabelece correspondncia apenas
quando ocorre no fim de uma linha.
Fim de ncora de Linha $
Estabelece correspondncia com
qualquer caractere que pertena classe
de caracteres especificada.
Classe de Caracteres do
POSIX
[:class:]
Descrio Nome do Operador Sintaxe do
Metacaractere
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-8
Copyright 2004, Oracle. Todos os direitos reservados.
Functions de Expresses Comuns
Procura em determinada string um padro
de expresso comum e retorna a posio
em que o correspondente foi localizado
REGEXP_INSTR
Pesquisa um padro de expresso comum
em determinada string e retorna a
substring correspondente
REGEXP_SUBSTR
Pesquisa um padro de expresso comum
e o substitui por uma string de
substituio
REGEXP_REPLACE
semelhante ao operador LIKE, mas
executa a correspondncia de expresses
comuns em vez de fazer a correspondncia
de padro simples
REGEXP_LIKE
Descrio Nome da Function
Functions de Expresses Comuns
O Banco de Dados Oracle 10g oferece um conjunto de functions SQL que podem ser usadas
para pesquisar e manipular strings usando expresses comuns. possvel usar essas
functions com qualquer tipo de dados que contenha dados de caractere como CHAR,
NCHAR, CLOB, NCLOB, NVARCHAR2 e VARCHAR2. Uma expresso comum deve ser
delimitada ou encapsulada em aspas simples. Assim, garante-se que a expresso inteira ser
interpretada pela function SQL e que haver maior legibilidade do cdigo.
REGEXP_LIKE: Esta function pesquisa um padro em uma coluna de caracteres. Use esta
function na clusula WHERE de uma consulta para retornar linhas que correspondam
expresso comum especificada.
REGEXP_REPLACE: Esta function pesquisa um padro em uma coluna de caracteres e
substitui cada ocorrncia pelo padro especificado.
REGEXP_INSTR: Esta function pesquisa determinada ocorrncia de um padro de
expresso comum em uma string. Voc especifica qual ocorrncia deseja localizar e a
posio de incio da pesquisa. Esta function retorna um inteiro indicando a posio na string
em que o correspondente foi localizado.
REGEXP_SUBSTR: Esta function retorna a substring real que corresponde ao padro de
expresso comum especificado.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-9
Copyright 2004, Oracle. Todos os direitos reservados.
A Sintaxe da Function REGEXP
REGEXP_LIKE (srcstr, pattern [,match_option])
REGEXP_INSTR (srcstr, pattern [, position [, occurrence
[, return_option [, match_option]]]])
REGEXP_SUBSTR (srcstr, pattern [, position
[, occurrence [, match_option]]])
REGEXP_REPLACE(srcstr, pattern [,replacestr [, position
[, occurrence [, match_option]]]])
A Sintaxe da Function REGEXP
A tabela a seguir contm descries dos termos mostrados no slide de sintaxe.
Ocorrncia a ser pesquisada occurrence
Opo para alterar a correspondncia default. Pode
incluir um ou mais dos seguintes valores:
"c" usa correspondncia com distino entre
maisculas e minsculas (default)
"I" usa correspondncia sem distino entre
maisculas e minsculas
"n" permite operador de correspondncia com
qualquer caractere
"m" trata a string de origem como uma linha mltipla
Padro de substituio da string de caracteres
Posio de incio ou fim da ocorrncia
Posio de incio da pesquisa
Expresso comum
Valor de pesquisa
match_option
replacestr
return_option
position
pattern
srcstr
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-10
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT first_name, last_name
FROM employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$');
Executando Pesquisas Bsicas
Exemplo de REGEXP_LIKE
Nesta consulta tabela EMPLOYEES, sero exibidos todos os funcionrios cujos nomes
contenham Steven ou Stephen. Na expresso usada,
'^Ste(v|ph)en$' :
^ indica o incio da sentena
$ indica o fim da sentena
| indica ou
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-11
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT street_address,
REGEXP_INSTR(street_address,'[^[:alpha:]]')
FROM locations
WHERE
REGEXP_INSTR(street_address,'[^[:alpha:]]')> 1;
Verificando a Presena de um Padro
Verificando a Presena de um Padro
Neste exemplo, a function REGEXP_INSTR usada para pesquisar o endereo a fim de
encontrar o local do primeiro caractere no alfabtico, independentemente se est em
maisculas ou minsculas. A pesquisa executada apenas para os endereos que no
comeam com um nmero. Observe que [:<class>:] implica uma classe de caracteres
e corresponde a qualquer caractere dessa classe; [:alpha:] corresponde a qualquer
caractere alfabtico. Os resultados so exibidos.
Na expresso usada na consulta '[^[:alpha:]]':
[ inicia a expresso
^ indica NOT
[:alpha:] indica a classe de caracteres alfa
] finaliza a expresso
Observao: O operador de classe de caracteres do POSIX permite pesquisar uma
expresso em uma lista de caracteres que membro de uma classe de caracteres especfica
do POSIX. possvel usar este operador para pesquisar uma formatao especfica, como
caracteres maisculos, ou para pesquisar caracteres especiais, como dgitos ou caracteres de
pontuao. Todo o conjunto de classes de caracteres do POSIX suportado. Use a sintaxe
[:class:] em que class o nome da classe de caracteres do POSIX a ser pesquisada. A
expresso comum abaixo pesquisa um ou mais caracteres maisculos consecutivos:
[[:upper:]]+ .
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-12
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT REGEXP_SUBSTR(street_address , ' [^ ]+ ')
"Road" FROM locations;
Exemplo de Extrao de Substrings

Exemplo de uma Extrao de Substring


Neste exemplo, os nomes de ruas so extrados da tabela LOCATIONS. Para isso, o
contedo da coluna STREET_ADDRESS que est antes do primeiro espao retornado
usando a function REGEXP_SUBSTR. Na expresso usada na consulta '[^ ]+ ':
[ inicia a expresso
^ indica NOT
indica espao
] finaliza a expresso
+ indica 1 ou mais
indica espao
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-13
Copyright 2004, Oracle. Todos os direitos reservados.
SELECT REGEXP_REPLACE( country_name, '(.)',
'\1 ') "REGEXP_REPLACE"
FROM countries;
Substituindo Padres

Substituindo Padres
Este exemplo examina COUNTRY_NAME. O banco de dados Oracle reformata este padro
com um espao aps cada caractere no nulo da string. Os resultados so mostrados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-14
Copyright 2004, Oracle. Todos os direitos reservados.
Expresses Comuns e
Constraints de Verificao
ALTER TABLE emp8
ADD CONSTRAINT email_addr
CHECK(REGEXP_LIKE(email,'@'))NOVALIDATE ;
INSERT INTO emp8 VALUES
(500,'Christian','Patel',
'ChrisP2creme.com', 1234567890,
'12-Jan-2004', 'HR_REP', 2000, null, 102, 40) ;
1
2
Expresses Comuns e Constraints de Verificao
As expresses comuns tambm podem ser usadas em constraints de verificao. Neste
exemplo, uma constraint de verificao adicionada coluna EMAIL da tabela
EMPLOYEES. Isso garantir que apenas as strings que contiverem um smbolo "@" sero
aceitas. A constraint testada. A constraint de verificao violada porque o endereo de e-
mail no contm o smbolo solicitado. A clusula NOVALIDATE garante que os dados
existentes no sero verificados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-15
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Nesta lio, voc aprendeu a usar o suporte a
expresses SQL comuns para pesquisar, substituir
e estabelecer uma correspondncia com strings
especficas.
Sumrio
Nesta lio, voc aprendeu a usar o recurso de suporte a expresses comuns que foi
apresentado no Banco de Dados Oracle 10g.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-16
Copyright 2004, Oracle. Todos os direitos reservados.
Exerccio 8: Viso Geral
Este exerccio abrange o uso de expresses comuns.
Exerccio 8: Viso Geral
Este exerccio abrange a pesquisa e a substituio de dados usando expresses comuns.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-17
Exerccio 8
1. Crie uma consulta para pesquisar, na tabela EMPLOYEES, todos os funcionrios
cujos nomes comeam com "Ne" ou "Na".
2. Crie uma consulta que remova, na exibio, os espaos da coluna
STREET_ADDRESS da tabela LOCATIONS.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II 8-18
Exerccio 8 (continuao)
3. Crie uma consulta que, na exibio, substitua "St" por "Street" na coluna
STREET_ADDRESS da tabela LOCATIONS. Tenha cuidado para no afetar as
linhas que j inclurem "Street". Exiba apenas as linhas que forem afetadas.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.

____________________________
Apndice A
Solues dos Exerccios
____________________________


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-2
Exerccio 1: Solues
Para responder da pergunta 6 em diante, voc precisar conectar-se ao banco de dados
usando o iSQL*Plus. Para isso, acione o browser Internet Explorer no computador cliente.
Informe o URL no formato http://machinename:5561/isqlplus/ e use a conta oraxx e a
respectiva senha e identificador de servio (no formato Tx) fornecidos pelo instrutor para
efetuar logon no banco de dados.
1. Que privilgio deve ser concedido a um usurio para que ele efetue logon no servidor
Oracle? Este privilgio de sistema ou de objeto?
O privilgio de sistema CREATE SESSION

2. Que privilgio deve ser concedido a um usurio para que ele crie tabelas?
O privilgio CREATE TABLE

3. Se voc criar uma tabela, quem poder passar privilgios a outros usurios da sua tabela?
Voc ou qualquer outra pessoa a quem tenha concedido esses privilgios que utilize
a clusula WITH GRANT OPTION.

4. Voc o DBA. Voc est criando vrios usurios que precisam dos mesmos privilgios
de sistema. O que voc deve usar para facilitar o seu trabalho?
Criar uma atribuio que contenha os privilgios de sistema e conced-la aos
usurios.

5. Que comando voc pode usar para alterar a senha?
A instruo ALTER USER

6. Conceda a outro usurio acesso sua tabela DEPARTMENTS. Faa com que o usurio
conceda a voc acesso de consulta tabela DEPARTMENTS dele.
A Equipe 2 executa a instruo GRANT.
GRANT select
ON departments
TO <user1>;
A Equipe 1 executa a instruo GRANT.
GRANT select
ON departments
TO <user2>;

Onde user1 o nome da Equipe 1, e user2 o nome da Equipe 2.

7. Consulte todas as linhas da tabela DEPARTMENTS.

SELECT *
FROM departments;

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-3
Exerccio 1: Solues (continuao)
8. Adicione uma nova linha tabela DEPARTMENTS. A Equipe 1 deve adicionar Educao
como departamento nmero 500. A Equipe 2 deve adicionar Recursos Humanos como
departamento nmero 510. Consulta a tabela da outra equipe.

A Equipe 1 executa esta instruo INSERT.
INSERT INTO departments(department_id, department_name)
VALUES (500, 'Education');
COMMIT;
A Equipe 2 executa esta instruo INSERT.
INSERT INTO departments(department_id, department_name)
VALUES (510, 'Human Resources');
COMMIT;


9. Crie um sinnimo para a tabela DEPARTMENTS da outra equipe.

A Equipe 1 cria um sinnimo denominado team2.
CREATE SYNONYM team2
FOR <oraxx>.DEPARTMENTS;
A Equipe 2 cria um sinnimo denominado team1.
CREATE SYNONYM team1
FOR <oraxx>. DEPARTMENTS;


10. Consulte todas as linhas da tabela DEPARTMENTS da outra equipe usando o sinnimo.
A Equipe 1 executa esta instruo SELECT.
SELECT *
FROM team2;
A Equipe 2 executa esta instruo SELECT.
SELECT *
FROM team1;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-4
Exerccio 1: Solues (continuao)
11. Consulte o dicionrio de dados USER_TABLES para ver as informaes das suas tabelas.

SELECT table_name
FROM user_tables;


12. Consulte a view de dicionrio de dados ALL_TABLES para ver as informaes de todas
as tabelas que voc pode acessar. Exclua as suas tabelas.
SELECT table_name, owner
FROM all_tables
WHERE owner <> 'Oraxx';


13. Revogue o privilgio SELECT da outra equipe.

A Equipe 1 revoga o privilgio.
REVOKE select
ON departments
FROM <oraxx>;
A Equipe 2 revoga o privilgio.
REVOKE select
ON departments
FROM <oraxx>;

14. Remova a linha que voc inseriu na tabela DEPARTMENTS na etapa 8 e salve as
alteraes.

A Equipe 1 executa esta instruo INSERT.
DELETE FROM departments
WHERE department_id = 500;
COMMIT;
A Equipe 2 executa esta instruo INSERT.
DELETE FROM departments
WHERE department_id = 510;
COMMIT;

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-5
Exerccio 2: Solues
1. Crie a tabela DEPT2 com base no grfico de instncias de tabela a seguir. Inclua a sintaxe
em um script denominado lab_02_01.sql e execute a instruo do script para criar a tabela.
Confirme a criao da tabela.

CREATE TABLE dept2
(id NUMBER(7),
name VARCHAR2(25));

DESCRIBE dept2

2. Preencha a tabela DEPT2 com dados da tabela DEPARTMENTS. Inclua apenas as
colunas de que necessita.

INSERT INTO dept2
SELECT department_id, department_name
FROM departments;


3. Crie a tabela EMP2 com base no grfico de instncias de tabela a seguir. Inclua a sintaxe
em um script denominado lab_02_03.sql e execute a instruo do script para criar a
tabela. Confirme a criao da tabela.






Nome da Coluna
ID NAME
Tipo de Chave

Nulo/Exclusivo

Tabela FK

Coluna FK

Tipo de dados
NUMBER VARCHAR2
Tamanho 7 25

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-6
Exerccio 2: Solues (continuao)

CREATE TABLE emp2
(id NUMBER(7),
last_name VARCHAR2(25),
first_name VARCHAR2(25),
dept_id NUMBER(7));

DESCRIBE emp2


4. Modifique a tabela EMP2 para que aceite sobrenomes mais longos de funcionrios.
Confirme a modificao.

ALTER TABLE emp2
MODIFY (last_name VARCHAR2(50));

DESCRIBE emp2

5. Confirme se as tabelas DEPT2 e EMP2 foram armazenadas no dicionrio de dados.
(Dica: USER_TABLES)

SELECT table_name
FROM user_tables
WHERE table_name IN ('DEPT2', 'EMP2');


6. Crie a tabela EMPLOYEES2 com base na estrutura da tabela EMPLOYEES. Inclua apenas
as colunas EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY e
DEPARTMENT_ID. Nomeie as colunas da nova tabela como ID, FIRST_NAME,
LAST_NAME, SALARY e DEPT_ID, respectivamente.


CREATE TABLE employees2 AS
SELECT employee_id id, first_name, last_name, salary,
department_id dept_id
FROM employees;


7. Elimine a tabela EMP2.
DROP TABLE emp2;


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-7
Exerccio 2: Solues (continuao)
8. Verifique se a tabela est na lixeira.

SELECT original_name, operation, droptime
FROM recyclebin;


9. Cancele a eliminao da tabela EMP2.


FLASHBACK TABLE emp2 TO BEFORE DROP;
DESC emp2;

10. Elimine a coluna FIRST_NAME da tabela EMPLOYEES2. Confirme a sua modificao
verificando a descrio da tabela.

ALTER TABLE employees2
DROP COLUMN first_name;

DESCRIBE employees2

11. Na tabela EMPLOYEES2, marque a coluna DEPT_ID como UNUSED. Confirme a sua
modificao verificando a descrio da tabela.

ALTER TABLE employees2
SET UNUSED (dept_id);

DESCRIBE employees2

12. Elimine todas as colunas UNUSED da tabela EMPLOYEES2. Confirme a sua
modificao verificando a descrio da tabela.

ALTER TABLE employees2
DROP UNUSED COLUMNS;

DESCRIBE employees2


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-8
Exerccio 2: Solues (continuao)
13. Adicione uma constraint PRIMARY KEY em nvel de tabela para a tabela EMP2 na
coluna ID. A constraint deve ser nomeada durante a criao. Nomeie-a como
my_emp_id_pk.

ALTER TABLE emp2
ADD CONSTRAINT my_emp_id_pk PRIMARY KEY (id);

14. Crie uma constraint PRIMARY KEY para a tabela DEPT2 usando a coluna ID. A
constraint deve ser nomeada durante a criao. Nomeie-a como my_dept_id_pk.

ALTER TABLE dept2
ADD CONSTRAINT my_dept_id_pk PRIMARY KEY(id);

15. Adicione uma referncia de chave estrangeira tabela EMP2 que garante que o
funcionrio no foi designado para um departamento inexistente. Nomeie a constraint como
my_emp_dept_id_fk.

ALTER TABLE emp2
ADD CONSTRAINT my_emp_dept_id_fk
FOREIGN KEY (dept_id) REFERENCES dept2(id);

16. Confirme se as constraints foram adicionadas, consultando a view
USER_CONSTRAINTS.
Anote os tipos e os nomes das constraints.

SELECT constraint_name, constraint_type
FROM user_constraints
WHERE table_name IN ('EMP2', 'DEPT2');

17. Exiba os nomes e os tipos dos objetos da view do dicionrio de dados USER_OBJECTS
para as tabelas EMP2 e DEPT2. Observe que foram criadas tabelas novas e um ndice
novo.

SELECT object_name, object_type
FROM user_objects
WHERE object_name LIKE 'EMP%'
OR object_name LIKE 'DEPT%';

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-9
Exerccio 2: Solues (continuao)
Se tiver tempo, faa o seguinte exerccio:
18. Modifique a tabela EMP2. Adicione uma coluna COMMISSION do tipo de dados
NUMBER, preciso 2, escala 2. Adicione uma constraint coluna COMMISSION que
garanta um valor de comisso maior do que zero.

ALTER TABLE emp2
ADD commission NUMBER(2,2)
CONSTRAINT my_emp_comm_ck CHECK (commission > 0);

19. Elimine as tabelas EMP2 e DEPT2 de modo que no possam ser restauradas. Verifique a
lixeira.

DROP TABLE emp2 PURGE;
DROP TABLE dept2 PURGE;

SELECT original_name, operation, droptime
FROM recyclebin;


20. Crie a tabela DEPT_NAMED_INDEX com base no grfico de instncias de tabela a
seguir. Nomeie o ndice para a coluna PRIMARY KEY como DEPT_PK_IDX.


CREATE TABLE DEPT_NAMED_INDEX
(deptno NUMBER(4)
PRIMARY KEY USING INDEX
(CREATE INDEX dept_pk_idx ON
DEPT_NAMED_INDEX(deptno)),
dname VARCHAR2(30));
Nome da Coluna Deptno Dname
Chave primria Sim
Tipo de Dados Nmero VARCHAR2
Tamanho 4 30

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-10
Exerccio 3: Solues
1. Execute o script lab_03_01.sql da pasta lab para criar a tabela SAL_HISTORY.

2. Exiba a estrutura da tabela SAL_HISTORY.

DESC sal_history

3. Execute o script lab_03_03.sql.sql da pasta lab para criar a tabela
MGR_HISTORY.

4. Exiba a estrutura da tabela MGR_HISTORY.

DESC mgr_history

5. Execute o script lab_03_05.sql.sql da pasta lab para criar a tabela
SPECIAL_SAL.

6. Exiba a estrutura da tabela SPECIAL_SAL.

DESC special_sal

7. a. Crie uma consulta que faa o seguinte:
Recupere na tabela EMPLOYEES os detalhes de ID do funcionrio, data de
contratao, salrio e o ID do gerente desses funcionrios cujo ID inferior a 125.
- Se o salrio for superior a $20.000, insira os detalhes sobre o ID do funcionrio e o
salrio na tabela SPECIAL_SAL.
- Insira os detalhes sobre o ID do funcionrio, a data de contratao e o salrio na
tabela SAL_HISTORY.
- Insira os detalhes sobre o ID do funcionrio, o ID do gerente e o salrio na tabela
MGR_HISTORY.

INSERT ALL
WHEN SAL > 20000 THEN
INTO special_sal VALUES (EMPID, SAL)
ELSE
INTO sal_history VALUES(EMPID,HIREDATE,SAL)
INTO mgr_history VALUES(EMPID,MGR,SAL)
SELECT employee_id EMPID, hire_date HIREDATE,
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-11
Exerccio 3: Solues (continuao)

salary SAL, manager_id MGR
FROM employees
WHERE employee_id < 125;

b. Exiba os registros da tabela SPECIAL_SAL.

SELECT * FROM special_sal;

c. Exiba os registros da tabela SAL_HISTORY.

SELECT * FROM sal_history;

d. Exiba os registros da tabela MGR_HISTORY.

SELECT * FROM mgr_history;

8. a. Execute o script lab_03_08a.sql da pasta lab para criar a tabela
SALES_SOURCE_DATA.

b. Execute o script lab_03_08b.sql da pasta lab para inserir registros na tabela
SALES_SOURCE_DATA.

c. Exiba a estrutura da tabela SALES_SOURCE_DATA.

DESC sales_source_data

d. Exiba os registros da tabela SALES_SOURCE_DATA.

SELECT * FROM SALES_SOURCE_DATA;

e. Execute o script lab_03_08c.sql da pasta lab para criar a tabela
SALES_INFO.

f. Exiba a estrutura da tabela SALES_INFO.

DESC sales_info

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-12
Exerccio 3: Solues (continuao)
g. Crie uma consulta que faa o seguinte:
- Na tabela SALES_SOURCE_DATA, recuperar os detalhes sobre o ID do
funcionrio, o ID da semana, vendas na segunda-feira, vendas na tera-feira,
vendas na quarta-feira, vendas na quinta-feira e vendas na sexta-feira.

- Criar uma transformao de modo que cada registro recuperado da tabela
SALES_SOURCE_DATA seja convertido em vrios registros para a tabela
SALES_INFO.

Dica: Use uma instruo INSERT de criao de piv.

INSERT ALL
INTO sales_info VALUES (employee_id, week_id, sales_MON)
INTO sales_info VALUES (employee_id, week_id, sales_TUE)
INTO sales_info VALUES (employee_id, week_id, sales_WED)
INTO sales_info VALUES (employee_id, week_id,
sales_THUR)
INTO sales_info VALUES (employee_id, week_id, sales_FRI)
SELECT EMPLOYEE_ID, week_id, sales_MON, sales_TUE,
sales_WED, sales_THUR,sales_FRI FROM sales_source_data;

h. Exiba os registros da tabela SALES_INFO.

SELECT * FROM sales_info;

9. Voc tem os dados dos antigos funcionrios armazenados em um arquivo sem formatao
denominado emp.data e deseja armazenar em uma tabela os nomes e os IDs de e-mail
de todos os funcionrios, antigos e atuais. Para isso, primeiro crie uma tabela externa
denominada EMP_DATA usando o arquivo de origem emp.dat no diretrio emp_dir.
Voc pode usar o script lab_03_09.sql para essa tarefa.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-13
Exerccio 3: Solues (continuao)

CREATE TABLE emp_data
(first_name VARCHAR2(20)
,last_name VARCHAR2(20)
, email VARCHAR2(30)
)
ORGANIZATION EXTERNAL
(
TYPE oracle_loader
DEFAULT DIRECTORY emp_dir
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE CHARACTERSET US7ASCII
NOBADFILE
NOLOGFILE
FIELDS
( first_name POSITION ( 1:20) CHAR
, last_name POSITION (22:41) CHAR
, email POSITION (43:72) CHAR )
)
LOCATION ('emp.dat') ) ;

10. Em seguida, execute o script lab_03_10.sql para criar a tabela EMP_HIST.
a. Aumente o tamanho da coluna de e-mail para 45.
b. Intercale os dados da tabela EMP_DATA criada no ltimo laboratrio com os dados da
tabela EMP_HIST. Suponha que os dados da tabela externa EMP_DATA sejam os mais
atualizados. Se uma linha da tabela EMP_DATA corresponde tabela EMP_HIST,
atualize a coluna de e-mail da tabela EMP_HIST para corresponder linha da tabela
EMP_DATA. Se uma linha da tabela EMP_DATA no corresponder tabela EMP_HIST,
insira-a na tabela EMP_HIST. As linhas so coincidentes quando o nome e o
sobrenome do funcionrio so idnticos.


MERGE INTO EMP_HIST f USING EMP_DATA h
ON (f.first_name = h.first_name
AND f.last_name = h.last_name)
WHEN MATCHED THEN
UPDATE SET f.email = h.email
WHEN NOT MATCHED THEN
INSERT (f.first_name
, f.last_name
, f.email)
VALUES (h.first_name
, h.last_name
, h.email);
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-14
Exerccio 3: Solues (continuao)
c. Recupere as linhas da tabela EMP_HIST aps a intercalao.

SELECT * FROM emp_hist;


11. Crie a tabela EMP3 usando o script lab_03_11.sql. Na tabela EMP3, altere o
departamento de Kochhar para 60 e faa commit da alterao. Em seguida, altere o
departamento de Kochhar para 50 e faa commit da alterao. Controle as alteraes de
Kochhar usando o recurso Row Versions.

SELECT VERSIONS_STARTTIME "START_DATE",
VERSIONS_ENDTIME "END_DATE", DEPARTMENT_ID
FROM EMP3
VERSIONS BETWEEN SCN MINVALUE AND MAXVALUE
WHERE LAST_NAME ='Kochhar';
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-15
Exerccio 4: Solues
1. Crie uma consulta para exibir as seguintes informaes sobre os funcionrios cujo ID de
gerente menor que 120:
- ID do gerente
- ID do cargo e salrio total para cada ID de cargo para funcionrios que esto
subordinados ao mesmo gerente
- Salrio total desses gerentes
- Salrio total desses gerentes, independentemente dos IDs dos cargos

SELECT manager_id,job_id,sum(salary)
FROM employees
WHERE manager_id < 120
GROUP BY ROLLUP(manager_id,job_id);

2. Observe a resposta da questo 1. Crie uma consulta usando a funo GROUPING para
determinar se os valores NULL nas colunas correspondentes s expresses GROUP BY
so causados pela operao ROLLUP.

SELECT manager_id MGR ,job_id JOB,
sum(salary),GROUPING(manager_id),GROUPING(job_id)
FROM employees
WHERE manager_id < 120
GROUP BY ROLLUP(manager_id,job_id);

3. Crie uma consulta para exibir as seguintes informaes sobre os funcionrios cujo ID de
gerente menor que 120:
- ID do gerente
- Cargo e salrios totais de cada cargo para funcionrios que esto subordinados ao
mesmo gerente
- Salrio total desses gerentes
- Valores de tabelas de referncia para exibir o salrio total para cada cargo,
independentemente do gerente
- Salrio total, independentemente dos cargos

SELECT manager_id, job_id, sum(salary)
FROM employees
WHERE manager_id < 120
GROUP BY CUBE(manager_id, job_id);




O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-16
Exerccio 4: Solues (continuao)
4. Observe a resposta da questo 3. Crie uma consulta usando a funo GROUPING para
determinar se os valores NULL nas colunas correspondentes s expresses GROUP BY
so causados pela operao CUBE.

SELECT manager_id MGR ,job_id JOB,
sum(salary),GROUPING(manager_id),GROUPING(job_id)
FROM employees
WHERE manager_id < 120
GROUP BY CUBE(manager_id,job_id);

5. Usando GROUPING SETS, crie uma consulta para exibir os seguintes agrupamentos:
department_id, manager_id, job_id
department_id, job_id
manager_id, job_id
A consulta deve calcular a soma dos salrios para cada um desses grupos.

SELECT department_id, manager_id, job_id, SUM(salary)
FROM employees
GROUP BY
GROUPING SETS ((department_id, manager_id, job_id),
(department_id, job_id),(manager_id,job_id));







O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-17
Exerccio 5: Solues
1. Altere a sesso para definir o NLS_DATE_FORMAT como DD-MON-YYYY
HH24:MI:SS.

ALTER SESSION SET NLS_DATE_FORMAT =
'DD-MON-YYYY HH24:MI:SS';

2. a. Crie consultas para exibir os deslocamentos (TZ_OFFSET) dos seguintes fusos
horrios:

EUA/Pacfico Novo
SELECT TZ_OFFSET ('US/Pacific-New') from dual;
Cingapura
SELECT TZ_OFFSET ('Singapore') from dual;
Egito
SELECT TZ_OFFSET ('Egypt') from dual;

b. Altere a sesso para definir o valor do parmetro TIME_ZONE como o deslocamento
do fuso horrio de EUA/Pacfico Novo.

ALTER SESSION SET TIME_ZONE = '-7:00';

c. Exiba SYSDATE, CURRENT_DATE, CURRENT_TIMESTAMP e
LOCALTIMESTAMP para esta sesso.
Observao: A sada poder ser diferente, dependendo da data de execuo do
comando.

SELECT CURRENT_DATE, CURRENT_TIMESTAMP,
LOCALTIMESTAMP FROM DUAL;

d. Altere a sesso para definir o valor do parmetro TIME_ZONE como o deslocamento
do fuso horrio de Cingapura.

ALTER SESSION SET TIME_ZONE = '+8:00';

e. Exiba CURRENT_DATE, CURRENT_TIMESTAMP e LOCALTIMESTAMP para esta
sesso.
Observao: A sada poder ser diferente, dependendo da data de execuo do
comando.

SELECT CURRENT_DATE, CURRENT_TIMESTAMP,
LOCALTIMESTAMP FROM DUAL;

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-18
Exerccio 5: Solues (continuao)
Observao: No exerccio anterior, observe que CURRENT_DATE,
CURRENT_TIMESTAMP e LOCALTIMESTAMP so sensveis ao fuso horrio da
sesso.

3. Crie uma consulta para exibir DBTIMEZONE e SESSIONTIMEZONE.

SELECT DBTIMEZONE,SESSIONTIMEZONE
FROM DUAL;

4. Crie uma consulta para extrair o ano da coluna HIRE_DATE da tabela EMPLOYEES em
relao aos funcionrios que trabalham no departamento 80.

SELECT last_name, EXTRACT (YEAR FROM HIRE_DATE)
FROM employees
WHERE department_id = 80;

5. Altere a sesso para definir NLS_DATE_FORMAT como DD-MON-YYYY.

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY';

6. Examine e execute o script lab_05_06.sql para criar a tabela SAMPLE_DATES e
preench-la.

a. Selecione na tabela e exiba os dados.

SELECT * FROM sample_dates;

b. Modifique o tipo de dados da coluna DATE_COL e altere-o para TIMESTAMP.
Selecione na tabela para exibir os dados.

ALTER TABLE sample_dates MODIFY date_col TIMESTAMP;
SELECT * FROM sample_dates;

c. Tente modificar o tipo de dados da coluna DATE_COL e altere-o para
TIMESTAMP WITH TIME ZONE. O que acontece?

ALTER TABLE sample_dates MODIFY date_col
TIMESTAMP WITH TIME ZONE;

Voc no pode alterar o tipo de dados da coluna DATE_COL, pois o servidor
Oracle no permite a converso de TIMESTAMP em TIMESTAMP WITH
TIMEZONE usando a instruo ALTER.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-19
Exerccio 5: Solues (continuao)
7. Crie uma consulta para recuperar os sobrenomes da tabela EMPLOYEES e calcular o
status da avaliao. Se o ano de admisso foi 2000, exiba Needs Review para o status
da avaliao. Caso contrrio, exiba not this year! Nomeie a coluna de status da
avaliao como Review. Classifique os resultados pela coluna HIRE_DATE.
Dica: Use uma expresso CASE com funo EXTRACT para calcular o status da
avaliao.


SELECT e.last_name
, (CASE extract(year from e.hire_date)
WHEN 1998 THEN 'Needs Review'
ELSE 'not this year!'
END ) AS "Review "
FROM employees e
ORDER BY e.hire_date;

8. Crie uma consulta para imprimir os sobrenomes e os anos de servio de cada funcionrio.
Se o funcionrio foi contratado h cinco anos ou mais, imprima 5 years of
service. Se o funcionrio foi contratado h 10 anos ou mais, imprima 10 years of
service. Se o funcionrio foi contratado h 15 anos ou mais, imprima 15 years of
service. Se no houver correspondncia com nenhuma dessas condies, imprima
maybe next year! Classifique os resultados pela coluna HIRE_DATE. Use a tabela
EMPLOYEES.
Dica: Use expresses CASE e TO_YMINTERVAL.




SELECT e.last_name, hire_date, sysdate,
(CASE
WHEN (sysdate -TO_YMINTERVAL('15-0'))>=
hire_date THEN '15 years of service'
WHEN (sysdate -TO_YMINTERVAL('10-0'))>=
hire_date
THEN '10 years of service'
WHEN (sysdate - TO_YMINTERVAL('5-0'))>=
hire_date
THEN '5 years of service'
ELSE 'maybe next year!'
END) AS "Awards"
FROM employees e;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-20
Exerccio 6: Solues
1. Crie uma consulta para exibir o sobrenome, o nmero de departamento e o salrio de
qualquer funcionrio cujo nmero de departamento e salrio coincidam com o nmero de
departamento e salrio de qualquer funcionrio que receba comisso.

SELECT last_name, department_id, salary
FROM employees
WHERE (salary, department_id) IN
(SELECT salary, department_id
FROM employees
WHERE commission_pct IS NOT NULL);


2. Exiba o sobrenome, o nome do departamento e o salrio de qualquer funcionrio cujo
salrio e comisso coincidam com o salrio e a comisso de qualquer funcionrio que
esteja na localizao ID1700.

SELECT e.last_name, d.department_name, e.salary
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND (salary, NVL(commission_pct,0)) IN
(SELECT salary, NVL(commission_pct,0)
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND d.location_id = 1700);

3. Crie uma consulta para exibir o sobrenome, a data de contratao e o salrio de todos os
funcionrios que tenham o mesmo salrio e a mesma comisso de Kochhar.
Observao: No exiba Kochhar no conjunto de resultados.

SELECT last_name, hire_date, salary
FROM employees
WHERE (salary, NVL(commission_pct,0)) IN
(SELECT salary, NVL(commission_pct,0)
FROM employees
WHERE last_name = 'Kochhar')
AND last_name != 'Kochhar';


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-21
Exerccio 6: Solues (continuao)
4. Crie uma consulta para exibir os funcionrios que recebem um salrio mais alto do que o
salrio dos gerentes de vendas (JOB_ID = 'SA_MAN'). Classifique os resultados dos
salrios do maior para o menor.

SELECT last_name, job_id, salary
FROM employees
WHERE salary > ALL
(SELECT salary
FROM employees
WHERE job_id = 'SA_MAN')
ORDER BY salary DESC;

5. Exiba os detalhes do ID do funcionrio, o sobrenome e o ID do departamento dos
funcionrios que vivem em cidades que comeam com a letra T.

SELECT employee_id, last_name, department_id
FROM employees
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location_id IN
(SELECT location_id
FROM locations
WHERE city LIKE 'T%'));

6. Crie uma consulta para localizar todos os funcionrios que recebem mais que o salrio
mdio nos respectivos departamentos. Exiba o sobrenome, o salrio, o ID do
departamento e o salrio mdio do departamento. Classifique pelo salrio mdio. Use
apelidos para as colunas recuperadas pela consulta, conforme indicado no exemplo de
sada.

SELECT e.last_name ename, e.salary salary,
e.department_id deptno, AVG(a.salary) dept_avg
FROM employees e, employees a
WHERE e.department_id = a.department_id
AND e.salary > (SELECT AVG(salary)
FROM employees
WHERE department_id = e.department_id )
GROUP BY e.last_name, e.salary, e.department_id
ORDER BY AVG(a.salary);


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-22
Exerccio 6: Solues (continuao)
7. Descubra todos os funcionrios que no so supervisores.
a. Primeiramente, faa isso usando o operador NOT EXISTS.

SELECT outer.last_name
FROM employees outer
WHERE NOT EXISTS (SELECT 'X'
FROM employees inner
WHERE inner.manager_id =
outer.employee_id);

b. Isso pode ser feito com o operador NOT IN? Como ou por que no?


SELECT outer.last_name
FROM employees outer
WHERE outer.employee_id
NOT IN (SELECT inner.manager_id
FROM employees inner);

Esta soluo no uma boa alternativa. A subconsulta escolhe um valor NULL, de modo que a
consulta completa no retorna nenhuma linha. O motivo que todas as condies que
comparam um valor NULL resultam em um valor NULL. Sempre que os valores NULL
tenderem a ser parte do valor definido, no use NOT IN como substituto para NOT EXISTS.

8. Crie uma consulta para exibir os sobrenomes dos funcionrios que recebem menos que o
salrio mdio nos respectivos departamentos.

SELECT last_name
FROM employees outer
WHERE outer.salary < (SELECT AVG(inner.salary)
FROM employees inner
WHERE inner.department_id
= outer.department_id);

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-23
Exerccio 6: Solues (continuao)
9. Crie uma consulta para exibir os sobrenomes dos funcionrios que tm um ou mais
colegas de trabalho nos respectivos departamentos com datas de contratao posteriores,
mas com salrios mais altos.

SELECT last_name
FROM employees outer
WHERE EXISTS (SELECT 'X'
FROM employees inner
WHERE inner.department_id =
outer.department_id
AND inner.hire_date > outer.hire_date
AND inner.salary > outer.salary);

10. Crie uma consulta para exibir o ID do funcionrio, os sobrenomes e os nomes de
departamento de todos os funcionrios.
Observao: Use uma subconsulta escalar para recuperar o nome do departamento na
instruo SELECT.

SELECT employee_id, last_name,
(SELECT department_name
FROM departments d
WHERE e.department_id =
d.department_id ) department
FROM employees e
ORDER BY department;

11. Crie uma consulta para exibir os nomes dos departamentos cujo custo total de salrio est
acima de 1/8 do custo total de salrio de toda a empresa. Use a clusula WITH para criar
essa consulta. Nomeie a consulta como SUMMARY.

WITH
summary AS (
SELECT d.department_name, SUM(e.salary) AS dept_total
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_name)
SELECT department_name, dept_total
FROM summary
WHERE dept_total > ( SELECT SUM(dept_total) * 1/8
FROM summary )
ORDER BY dept_total DESC;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-24
Exerccio 7: Solues
1. Observe os exemplos de sada a seguir. Essas sadas so o resultado de uma consulta
hierrquica? Explique por que sim e por que no.
Exemplo 1: Esta no uma consulta hierrquica. O relatrio apenas tem
uma classificao decrescente baseada em SALARY.

Exemplo 2: Esta no uma consulta hierrquica. H duas tabelas envolvidas.

Exemplo 3: Sim, trata-se de uma consulta hierrquica, pois exibe a estrutura
em rvore que representa a linha de relatrios de gerenciamento da tabela
EMPLOYEES.
2. Gere um relatrio que mostre um organograma do departamento de Mourgos. Imprima os
sobrenomes, os salrios e os IDs dos departamentos.

SELECT last_name, salary, department_id
FROM employees
START WITH last_name = 'Mourgos'
CONNECT BY PRIOR employee_id = manager_id;

3. Crie um relatrio que mostre a hierarquia de gerentes para o funcionrio Lorentz. Exiba
primeiramente o seu gerente imediato.

SELECT last_name
FROM employees
WHERE last_name != 'Lorentz'
START WITH last_name = 'Lorentz'
CONNECT BY PRIOR manager_id = employee_id;

4. Crie um relatrio recuado que mostre a hierarquia de gerenciamento, comeando pelo
funcionrio cujo LAST_NAME Kochhar. Imprima o sobrenome, o ID do gerente e o ID
do departamento do funcionrio. Defina apelidos para as colunas, conforme indicado no
exemplo de sada.

COLUMN name FORMAT A20
SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-
2,'_')
name,manager_id mgr, department_id deptno
FROM employees
START WITH last_name = 'Kochhar'
CONNECT BY PRIOR employee_id = manager_id
/
COLUMN name CLEAR
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-25
Exerccio 7: Solues (continuao)
Se tiver tempo, faa os seguintes exerccios:
5. Produza um organograma que mostre a hierarquia de gerenciamento da empresa. Comece
pela pessoa que est no nvel mais alto e exclua todas as outras que tenham um ID do
cargo igual a IT_PROG. Exclua tambm De Haan e respectivos subordinados.

SELECT last_name,employee_id, manager_id
FROM employees
WHERE job_id != 'IT_PROG'
START WITH manager_id IS NULL
CONNECT BY PRIOR employee_id = manager_id
AND last_name != 'De Haan';
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II A-26
Exerccio 8: Solues
1. Crie uma consulta para pesquisar, na tabela EMPLOYEES, todos os funcionrios cujos
nomes comeam com "Ne" ou "Na".

SELECT first_name, last_name,
FROM employees
WHERE REGEXP_LIKE (first_name, '^N(e|a).');

2. Crie uma consulta que remova, na exibio, os espaos da coluna STREET_ADDRESS da
tabela LOCATIONS.

SELECT regexp_replace (street_address, ' ','')
FROM locations;

3. Crie uma consulta que, na exibio, substitua "St" por "Street" na coluna
STREET_ADDRESS da tabela LOCATIONS. Tenha cuidado para no afetar as linhas que j
inclurem "Street". Exiba apenas as linhas que forem afetadas.

SELECT REGEXP_REPLACE (street_address, 'St$',
'Street') FROM locations
WHERE REGEXP_LIKE (street_address, 'St');
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
________________________
Apndice B
Descries e Dados
de Tabelas
________________________
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-2
DIAGRAMA DE RELACIONAMENTO ENTRE ENTIDADES
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-3
Tabelas do Esquema
Guia SELECT * FROM;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-4
Tabela REGIONS
DESCRIBE regions
SELECT * FROM regions;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-5
Tabela COUNTRIES
DESCRIBE countries
SELECT * FROM countries;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-6
Tabela LOCATIONS
DESCRIBE locations;
SELECT * FROM locations;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-7
Tabela DEPARTMENTS
DESCRIBE departments
SELECT * FROM departments;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-8
Tabela JOBS
DESCRIBE jobs
SELECT * FROM jobs;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-9
Tabela EMPLOYEES
DESCRIBE employees
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-10
Tabela EMPLOYEES
Os cabealhos das colunas COMMISSION_PCT, MANAGER_ID e DEPARTMENT_ID
foram definidos como COMM, MGRID e DEPTID na captura de tela abaixo para que os
valores da tabela se ajustassem pgina.
SELECT * FROM employees;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-11
Tabela EMPLOYEES (continuao)
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-12
Tabela EMPLOYEES (continuao)
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II B-13
Tabela JOB_HISTORY
DESCRIBE job_history
SELECT * FROM job_history;
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Criando Scripts Avanados
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II C-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Aps concluir este apndice, voc ser capaz de:
Descrever o tipo de problema solucionado com
instrues SQL que geram cdigo SQL
Criar um script que gera um script de instrues
DROP TABLE
Criar um script que gera um script de instrues
INSERT INTO
Objetivos
Neste apndice, voc aprender a criar e gerar um script SQL.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II C-3
Copyright 2004, Oracle. Todos os direitos reservados.
Usando SQL para Gerar SQL
O SQL pode ser usado para gerar scripts no SQL
O dicionrio de dados:
um conjunto de tabelas e views que contm
informaes do banco de dados
criado e mantido pelo servidor Oracle
Script SQL
SQL
Dicionrio de dados
Usando SQL para Gerar SQL
O SQL pode ser uma ferramenta avanada para gerar outras instrues SQL. Na maioria dos
casos, isso envolve a criao de um arquivo de script. Voc pode usar instrues SQL a
partir de cdigo SQL para:
Evitar codificao repetitiva
Acessar informaes do dicionrio de dados
Eliminar ou recriar objetos do banco de dados
Gerar predicados dinmicos que contm parmetros de runtime
Os exemplos usados nesta lio envolvem a seleo de informaes do dicionrio de dados.
O dicionrio de dados um conjunto de tabelas e views que contm informaes sobre o
banco de dados. Esse conjunto criado e mantido pelo servidor Oracle. Todas as tabelas do
dicionrio de dados pertencem ao usurio SYS. As informaes armazenadas no dicionrio
de dados incluem os nomes dos usurios do servidor Oracle, os privilgios concedidos aos
usurios, os nomes dos objetos do banco de dados, as constraints de tabelas e as
informaes de auditoria. H quatro categorias de views de dicionrio de dados. Cada
categoria possui um prefixo distinto que reflete o uso pretendido.
Prefixo Description
USER_
Contm detalhes dos objetos pertencentes ao usurio
ALL_
Contm detalhes dos objetos para os quais o usurio ganhou direitos de acesso e dos objetos
pertencentes ao usurio
DBA_
Contm detalhes dos usurios com privilgios de DBA para acessar qualquer objeto do banco de dados
V$_
Armazena informaes sobre o desempenho e o bloqueio do servidor do banco de dados;
disponvel apenas para o DBA
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II C-4
Copyright 2004, Oracle. Todos os direitos reservados.
Criando um Script Bsico
SELECT 'CREATE TABLE ' || table_name ||
'_test ' || 'AS SELECT * FROM '
|| table_name ||' WHERE 1=2;'
AS "Create Table Script"
FROM user_tables;
Um Script Bsico
O exemplo do slide produz um relatrio com instrues CREATE TABLE de todas as suas
tabelas. Cada instruo CREATE TABLE produzida no relatrio inclui a sintaxe para criar
uma tabela usando o nome da tabela com um sufixo _test, apenas com a estrutura da
respectiva tabela existente. O antigo nome da tabela obtido na coluna TABLE_NAME da
view de dicionrio de dados USER_TABLES.
A prxima etapa aprimorar o relatrio para automatizar o processo.
Observao: Voc pode consultar as tabelas do dicionrio de dados para exibir os vrios
objetos do banco de dados que voc possui. As views de dicionrio de dados usadas
freqentemente incluem:
USER_TABLES Exibe descrio das tabelas do usurio
USER_OBJECTS Exibe todos os objetos pertencentes ao usurio
USER_TAB_PRIVS_MADE Exibe todas as concesses feitas aos objetos
pertencentes ao usurio
USER_COL_PRIVS_MADE Exibe todas as concesses feitas s colunas de
objetos pertencentes ao usurio
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II C-5
Copyright 2004, Oracle. Todos os direitos reservados.
SPOOL dropem.sql
SPOOL OFF
Controlando o Ambiente
Defina as variveis
do sistema com os
valores apropriados.
Defina as variveis
do sistema novamente
com os valores default.
SQL STATEMENT
SET ECHO OFF
SET FEEDBACK OFF
SET PAGESIZE 0
SET FEEDBACK ON
SET PAGESIZE 24
SET ECHO ON
Controlando o Ambiente
A fim de executar as instrues SQL geradas, voc deve captur-las em um arquivo de
spool que poder, em seguida, ser executado. Tambm preciso planejar a limpeza da sada
gerada e certificar-se da supresso de elementos como cabealhos, mensagens de feedback,
ttulos superiores etc. Voc pode executar tudo isso usando os comandos do iSQL*Plus.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II C-6
Copyright 2004, Oracle. Todos os direitos reservados.
O Panorama Completo
SET ECHO OFF
SET FEEDBACK OFF
SET PAGESIZE 0
SELECT 'DROP TABLE ' || object_name || ';'
FROM user_objects
WHERE object_type = 'TABLE'
/
SET FEEDBACK ON
SET PAGESIZE 24
SET ECHO ON
O Panorama Completo
A sada do comando do slide salva em um arquivo denominado dropem.sql, usando a
opo File Output do iSQL*Plus. Esse arquivo contm os dados a seguir. Agora, para
iniciar o arquivo no iSQL*Plus, localize, carregue e execute o arquivo de script.
Observao: Por default, feito o spool dos arquivos na pasta
ORACLE_HOME\ORANT\BIN no Windows NT.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II C-7
Copyright 2004, Oracle. Todos os direitos reservados.
Fazendo Dump do Contedo
de uma Tabela para um Arquivo
SET HEADING OFF ECHO OFF FEEDBACK OFF
SET PAGESIZE 0
SELECT
'INSERT INTO departments_test VALUES
(' || department_id || ', ''' || department_name ||
''', ''' || location_id || ''');'
AS "Insert Statements Script"
FROM departments
/
SET PAGESIZE 24
SET HEADING ON ECHO ON FEEDBACK ON
Fazendo Dump do Contedo da Tabela para um Arquivo
s vezes, til ter os valores das linhas de uma tabela em um arquivo de texto no formato
de uma instruo INSERT INTO VALUES. Esse script pode ser executado para preencher
a tabela, caso ela tenha sido acidentalmente eliminada.
O exemplo do slide produz instrues INSERT para a tabela DEPARTMENTS_TEST,
capturada no arquivo data.sql usando a opo File Output no iSQL*Plus.
O contedo do arquivo de script data.sql o seguinte:
INSERT INTO departments_test VALUES
(10, 'Administration', 1700);
INSERT INTO departments_test VALUES
(20, 'Marketing', 1800);
INSERT INTO departments_test VALUES
(50, 'Shipping', 1500);
INSERT INTO departments_test VALUES
(60, 'IT', 1400);
...
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II C-8
Copyright 2004, Oracle. Todos os direitos reservados.
Fazendo Dump do Contedo
de uma Tabela para um Arquivo
Source
'''X'''
''''
''''||department_name||''''
''', '''
''');'
Result
'X'
'
'Administration'
','
');
Fazendo Dump do Contedo da Tabela para um Arquivo (continuao)
Voc deve ter reparado na grande quantidade de aspas simples no slide da pgina anterior.
Um conjunto de quatro aspas simples produz uma aspa simples na instruo final. Lembre-
se tambm de que valores de caracteres e de datas devem estar entre aspas.
Para exibir uma aspa simples em uma string, preciso prefix-la com outra aspa simples.
Sendo assim, no quinto exemplo do slide, as aspas circundam a string inteira. A segunda
aspa funciona como um prefixo para exibir a terceira aspa. Com isso, o resultado uma
aspa simples, seguida de parnteses e ponto-e-vrgula.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II C-9
Copyright 2004, Oracle. Todos os direitos reservados.
Gerando um Predicado Dinmico
COLUMN my_col NEW_VALUE dyn_where_clause
SELECT DECODE('&&deptno', null,
DECODE ('&&hiredate', null, ' ',
'WHERE hire_date=TO_DATE('''||'&&hiredate'',''DD-MON-YYYY'')'),
DECODE ('&&hiredate', null,
'WHERE department_id = ' || '&&deptno',
'WHERE department_id = ' || '&&deptno' ||
' AND hire_date = TO_DATE('''||'&&hiredate'',''DD-MON-YYYY'')'))
AS my_col FROM dual;
SELECT last_name FROM employees &dyn_where_clause;
Gerando um Predicado Dinmico
O exemplo do slide gera uma instruo SELECT que recupera dados de todos os
funcionrios de um departamento que foram contratados em determinado dia. O script gera
a clusula WHERE dinamicamente.
Observao: Depois que a varivel de usurio estiver no lugar, use o comando UNDEFINE
para delet-la.
A primeira instruo SELECT solicita a informao do nmero de departamento. Se voc
no informar nenhum nmero, a function DECODE tratar o nmero de departamento como
nulo, e o usurio dever informar a data de admisso. Caso voc no informe nenhuma data,
a function DECODE tratar a data de admisso como nula, e a clusula WHERE dinmica
gerada tambm ser nula, o que far com que a segunda instruo SELECT recupere todas
as linhas da tabela EMPLOYEES.
Observao: A varivel NEW_V[ALUE] especifica uma varivel para conter um valor de
coluna. Voc pode fazer referncia varivel nos comandos TTITLE. Use NEW_VALUE
para exibir os valores de coluna ou a data no ttulo superior. Voc deve incluir a coluna em
um comando BREAK com a ao SKIP PAGE. O nome da varivel no pode conter um
smbolo de cerquilha (#). A varivel NEW_VALUE til para relatrios detalhados/mestres
nos quais h um novo registro mestre para cada pgina.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II C-10
Gerando um Predicado Dinmico (continuao)
Observao: Aqui, a data de admisso deve ser especificada no formato
DD-MON-YYYY.
A instruo SELECT do slide anterior pode ser interpretada da seguinte maneira:
IF (<<deptno>> is not entered) THEN
IF (<<hiredate>> is not entered) THEN
return empty string
ELSE
return the string WHERE hire_date =
TO_DATE('<<hiredate>>', 'DD-MON-YYYY')
ELSE
IF (<<hiredate>> is not entered) THEN
return the string WHERE department_id =
<<deptno>> entered'
ELSE
return the string WHERE department_id =
<<deptno>> entered
AND hire_date =
TO_DATE(' <<hiredate>>', 'DD-MON-YYYY')
END IF
A string retornada passa a ser o valor da varivel DYN_WHERE_CLAUSE, que ser usada na
segunda instruo SELECT.
Quando o primeiro exemplo do slide for executado, ser solicitado que o usurio informe os
valores de DEPTNO e HIREDATE:
Ser gerado o seguinte valor de MY_COL:
Quando o segundo exemplo do slide for executado, ser gerada a seguinte sada:
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II C-11
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Neste apndice, voc dever ter aprendido que:
possvel criar um script SQL para gerar outro
script SQL.
Os arquivos de script geralmente usam o dicionrio
de dados.
possvel capturar a sada em um arquivo.
Sumrio
O SQL pode ser usado para gerar scripts SQL. Esses scripts podem ser usados para evitar
codificao repetitiva, eliminar ou recriar objetos, obter ajuda do dicionrio de dados e
gerar predicados dinmicos que contenham parmetros de runtime.
Os comandos do iSQL*Plus podem ser usados para capturar os relatrios gerados pelas
instrues SQL e limpar a sada gerada, como a supresso de cabealhos, mensagens de
feedback etc.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Copyright 2004, Oracle. Todos os direitos reservados.
Componentes da Arquitetura Oracle
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-2
Copyright 2004, Oracle. Todos os direitos reservados.
Objetivos
Aps concluir este apndice, voc ser capaz de:
Descrever a arquitetura do servidor Oracle e seus
principais componentes
Listar as estruturas envolvidas na conexo de um
usurio com uma instncia Oracle
Listar os estgios do processamento:
Consultas
Instrues DML
Commits
Objetivos
Este apndice apresenta a arquitetura do servidor Oracle, pois descreve as estruturas dos
arquivos, processos e memria envolvidas no estabelecimento de uma conexo com o banco
de dados e na execuo de um comando SQL.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-3
Copyright 2004, Oracle. Todos os direitos reservados.
Arquitetura do Banco de Dados Oracle:
Viso Geral
O banco de dados Oracle consiste em dois
componentes principais:
O banco de dados ou as estruturas fsicas
A instncia ou as estruturas da memria
Arquitetura do Banco de Dados Oracle: Viso Geral
O banco de dados Oracle consiste em dois componentes principais: a instncia e o banco de
dados propriamente dito.
O banco de dados consiste em arquivos fsicos como:
O arquivo de controle no qual est armazenada a configurao do banco de dados
Os arquivos de redo log que contm informaes necessrias para a recuperao
do banco de dados
Os arquivos de dados onde esto armazenados todos os dados
O arquivo de parmetros que contm os parmetros que controlam o tamanho e
as propriedades de uma instncia
O arquivo de senha que contm a senha de superusurio ou SYSDBA
A instncia consiste na SGA (System Global Area) e nos processos do servidor que
executam tarefas no banco de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-4
Copyright 2004, Oracle. Todos os direitos reservados.
Arquitetura Fsica do Banco de Dados
Arquivos
de dados
Arquivos de
redo log on-line
Arquivo
de senha
Arquivo de
parmetros
Arquivos
de controle
Arquivos de log
de arquivamento
Arquitetura Fsica do Banco de Dados
Os arquivos que compem um banco de dados Oracle encontram-se organizados da
seguinte maneira:
Arquivos de controle: Esses arquivos contm dados sobre o banco de dados
propriamente dito, denominados metadados. Eles so fundamentais para o banco de
dados. Sem eles, no possvel abrir arquivos para acessar os dados do banco de
dados.
Arquivos de dados: Esses arquivos contm os dados do banco de dados.
Arquivos de redo log on-line: Esses arquivos permitem a recuperao da instncia do
banco de dados. Se o banco de dados falhar, mas no perder nenhum arquivo de dados,
a instncia poder recuperar o banco de dados com as informaes desses arquivos.
H outros arquivos que oficialmente no fazem parte do banco de dados, mas que so
importantes para seu bom funcionamento. So eles:
Arquivo de parmetros: O arquivo de parmetros usado para definir como a
instncia ser configurada ao ser inicializada.
Arquivo de senha: Este arquivo permite que os usurios se conectem remotamente ao
banco de dados e executem tarefas administrativas.
Arquivos de log de arquivamento: Estes arquivos contm um histrico contnuo do
redo gerado pela instncia. Eles possibilitam a recuperao do banco de dados. Usando
esses arquivos e um backup do banco de dados, possvel recuperar um arquivo de
dados perdido.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-5
Copyright 2004, Oracle. Todos os direitos reservados.
Arquivos de Controle
Contm informaes da estrutura fsica do banco
de dados
Multiplexados para evitar perdas
Leitura no estgio de montagem
Arquivos
de controle
Arquivos de Controle
Quando voc inicia a instncia e monta o banco de dados, o arquivo de controle lido. As
entradas do arquivo de controle especificam os arquivos fsicos que constituem o banco de
dados.
Quando voc adiciona outros arquivos ao banco de dados, o arquivo de controle
automaticamente atualizado.
A localizao dos arquivos de controle especificada em um parmetro de inicializao.
Para proteger-se de falha do banco de dados devido perda do arquivo de controle, voc
deve multiplexar o arquivo de controle em, pelo menos, trs dispositivos fsicos diferentes.
Ao especificar vrios arquivos usando o parmetro de inicializao, voc permite que o
servidor do banco de dados Oracle mantenha vrias cpias do arquivo de controle.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-6
Copyright 2004, Oracle. Todos os direitos reservados.
Arquivos de Redo Log
Alteraes nos registros do banco de dados
Multiplexados para evitar perdas
Buffer de
redo log
LGWR
(Log
Writer)
Grupo 1 Grupo 2 Grupo 3
Arquivos de Redo Log
Os arquivos de redo log so usados para registrar alteraes feitas no banco de dados como
resultado de transaes e de aes internas do servidor do banco de dados Oracle. Eles
protegem o banco de dados da perda de integridade decorrente de falhas no sistema
causadas por interrupes de energia, falhas de disco etc. Os arquivos de redo log devem ser
multiplexados para garantir que as informaes neles armazenadas no sejam perdidas em
caso de falha de disco.
O redo log consiste em grupos de arquivos de redo log. Um grupo consiste em um arquivo
de redo log e suas respectivas cpias multiplexadas. Cada cpia idntica considerada
como um membro desse grupo, e cada grupo identificado por um nmero. O processo
LGWR (Log Writer) grava registros de redo do buffer de redo log para um grupo de redo
logs at que o arquivo esteja preenchido, ou que seja solicitada uma operao de alternncia
de log. Em seguida, ele alterna e grava nos arquivos do prximo grupo. Os grupos de redo
logs so usados de forma circular.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-7
Copyright 2004, Oracle. Todos os direitos reservados.
Tablespaces e Arquivos de Dados
Os tablespaces consistem em um ou mais arquivos
de dados.
Os arquivos de dados pertencem a apenas um
tablespace.
Tablespace USERS
Arquivo
de dados 1
Arquivo
de dados 2
Tablespaces e Arquivos de Dados
Um banco de dados se divide em unidades de armazenamento lgicas denominadas
tablespaces, que podem ser usadas para agrupar estruturas lgicas relacionadas. Cada banco
de dados est logicamente dividido em um ou mais tablespaces. So explicitamente criados
um ou mais arquivos de dados para cada tablespace, a fim de armazenar fisicamente os
dados de todas as estruturas lgicas em um tablespace.
Observao: Tambm possvel criar tablespaces para arquivos grandes, que so os
tablespaces com um arquivo de dados nico, mas muito grande (at 4 blocos G). Os
tablespaces para arquivos pequenos tradicionais (que so o default) podem conter
vrios arquivos de dados, mas os arquivos no podem ser to grandes. Para obter mais
informaes sobre tablespaces para arquivos grandes, consulte o Database
Administrators Guide.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-8
Copyright 2004, Oracle. Todos os direitos reservados.
Segmentos, Extenses e Blocos
Os segmentos ficam dentro de um tablespace.
Os segmentos consistem em um conjunto de
extenses.
As extenses so um conjunto de blocos de dados.
Os blocos de dados so mapeados para os blocos
do sistema operacional.
Segmento Extenses Blocos
de dados
Blocos
do sistema
operacional
Segmentos, Extenses e Blocos
Objetos do banco de dados, como tabelas e ndices, so armazenados em tablespaces como
segmentos. Cada segmento contm uma ou mais extenses. Uma extenso consiste em
blocos de dados contguos, o que significa que cada extenso pode existir em apenas um
arquivo de dados. Os blocos de dados so a menor unidade de entrada/sada do banco de
dados.
Quando o banco de dados solicita ao sistema operacional um conjunto de blocos de dados, o
sistema operacional mapeia essa solicitao para o bloco do sistema operacional no
dispositivo de armazenamento. Sendo assim, no necessrio se preocupar com o endereo
fsico dos dados do banco de dados. Isso significa que um arquivo de dados pode ser
distribudo e/ou espelhado em vrios discos.
O tamanho do bloco de dados pode ser definido durante a criao do banco de dados. O
tamanho default de 8 K adequado para a maioria dos bancos de dados. Caso o banco de
dados suporte uma aplicao de data warehouse com ndices e tabelas grandes, um bloco
maior poder ser vantajoso. Se o banco de dados suportar uma aplicao transacional onde
leituras e gravaes so muito raras, poder ser vantajoso bloco menor. O tamanho mximo
do bloco depende do sistema operacional. O tamanho mnimo de bloco 2 K e deve ser
usado, se for usado, raramente.
possvel ter tablespaces com tamanhos de bloco diferentes. Geralmente, deve ser usado
apenas para suportar tablespaces transportveis. Para obter detalhes, consulte o Database
Administrators Guide.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-9
Copyright 2004, Oracle. Todos os direitos reservados.
Gerenciamento de Instncias Oracle
SMON
(System
Monitor)
DBW0
(Database
Writer)
LGWR
(Log
Writer)
PMON
(Process
Monitor)
ARC0
(Archiver)
SGA
Java pool
Shared pool Large pool Streams pool
Cache de buffer
do banco de dados
Buffer de
redo log
CKPT
(Checkpoint)
Streams pool
Cache de buffer
do banco de dados
Gerenciamento de Instncias Oracle
Um servidor do banco de dados Oracle consiste em um banco de dados Oracle e uma
instncia Oracle. Uma instncia Oracle consiste em buffers de memria conhecidos como
SGA (System Global Area) e em processos de background.
A instncia est inativa (inexistente) at ser inicializada. Quando a instncia inicializada,
lido um arquivo de parmetros de inicializao, e a instncia configurada de forma
adequada.
Aps a inicializao da instncia e a abertura do banco de dados, os usurios podem acessar
o banco de dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-10
Copyright 2004, Oracle. Todos os direitos reservados.
Estruturas de Memria Oracle
Java pool
Cache de buffer
do banco de dados
Buffer de
redo log
Shared pool. Large pool
SGA
Streams pool
Processo
do servidor
1
PGA
Processo
do servidor
2
PGA
Processo
de
background
PGA
Estruturas de Memria Oracle
As estruturas de memria bsicas associadas a uma instncia Oracle incluem:
SGA (System Global Area): Compartilhada por todos os processos do servidor e de
background
PGA (Program Global Area): Exclusivo a cada servidor e processo de background.
H um PGA para cada processo
A SGA (System Global Area) uma rea de memria compartilhada que contm dados e
informaes de controle para a instncia.
A SGA consiste nas seguintes estruturas de dados:
Cache de buffer do banco de dados: Armazena no cache blocos de dados
recuperados do banco de dados
Buffer de redo log: Armazena no cache informaes sobre redo (usadas na
recuperao de instncia) at que elas possam ser gravadas nos arquivos fsicos de redo
log armazenados em disco
Shared pool: Armazena no cache vrios constructs que podem ser compartilhados
pelos usurios
Large pool: rea opcional usada para armazenar grandes solicitaes de
entrada/sada
Java pool: Usado para todos os cdigos e dados Java especficos sesso dentro da
JVM (Java virtual machine)
Streams pool: Usado pelo Oracle Streams
Quando voc iniciar a instncia usando o Enterprise Manager ou o SQL*Plus, ser exibida a
memria alocada para a SGA.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-11
Estruturas da Memria Oracle (continuao)
Com a infra-estrutura dinmica da SGA, o tamanho do cache de buffer do banco de dados,
do shared pool, do large pool, do Java pool e do Streams pool pode ser alterado sem
necessidade de fazer o shutdown da instncia.
O banco de dados pr-configurado foi ajustado previamente com as definies adequadas
para os parmetros de memria. No entanto, como a utilizao do banco de dados
expansvel, talvez seja necessrio alterar as definies dos parmetros de memria.
O Oracle fornece alertas e advisors para identificar problemas de dimensionamento de
memria, com o objetivo de ajud-lo a determinar os valores apropriados para os
parmetros de memria.
PGA (Program Global Area) uma regio da memria que contm dados e informaes de
controle para cada processo do servidor. Um processo do servidor atende s solicitaes de
um cliente. Cada processo do servidor tem a sua prpria rea PGA privada, criada quando o
processo do servidor iniciado. O acesso a ela exclusivo a esse processo do servidor, e
apenas cdigos do Oracle que estiverem executando operaes envolvendo a SGA podero
ler e gravar dados nessa rea.
O volume de memria PGA usado e o seu contedo dependem de a instncia ter sido
configurada no modo de servidor compartilhado. Geralmente, a PGA contm o seguinte:
rea SQL privada: Contm dados, como as informaes de bind e as estruturas de
memria de runtime. Cada sesso que executa uma instruo SQL tem uma rea SQL
privada.
Memria de sesso: Memria alocada para reter as variveis de uma sesso e outras
informaes relativas a essa sesso
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-12
Copyright 2004, Oracle. Todos os direitos reservados.
Processos Oracle
SMON
(System
monitor)
DBW0
(Database
writer)
CKPT
(Check-
point)
LGWR
(Log
writer)
PMON
(Process
monitor)
ARC0
(Archiver)
Processo
do servidor
Processo
do servidor
Processo
do servidor
Processo
do servidor
SGA
(System Global Area)
Processos de background
Processos Oracle
Quando voc chama um programa de aplicao ou uma ferramenta Oracle como o
Enterprise Manager, o servidor Oracle cria um processo do servidor para executar
comandos da aplicao.
O Oracle tambm cria um conjunto de processos de background para uma instncia, os
quais interagem entre si e com o sistema operacional para gerenciar as estruturas de
memria e executar entradas/sadas assincronamente para gravar dados em disco, alm de
fazer manuteno em geral.
Os processos de background que estaro presentes dependem dos recursos usados no banco
de dados. Estes so os processos de background mais comuns:
SMON (System monitor): Executa a recuperao de falha quando a instncia
iniciada aps uma falha
PMON (Process monitor): Executa a limpeza do processo quando um processo do
usurio falha
DBWn (Database writer): Grava blocos modificados do cache de buffer do banco de
dados para os arquivos em disco
CKPT (Checkpoint): Sinaliza para o DBWn nos checkpoints e atualiza todos os
arquivos de dados e de controle do banco de dados para indicar o checkpoint mais
recente
LGWR (Log Writer): Grava as entradas do redo log em disco
ARCn (Archiver): Copia os arquivos de redo log para armazenamento de
arquivamento quando os arquivos de log esto cheios ou quando ocorre uma
alternncia de log
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-13
Copyright 2004, Oracle. Todos os direitos reservados.
Outras Estruturas Fsicas Importantes
Arquivos de
log arquivados
Arquivo de
parmetros
Arquivo
de senha
Banco de dados
Outros Arquivos Importantes
O servidor Oracle tambm usa outros arquivos que no fazem parte do banco de dados:
O arquivo de parmetros define as caractersticas de uma instncia Oracle. Por
exemplo, ele contm os parmetros que dimensionam algumas das estruturas da
memria na SGA.
O arquivo de senha autentica os usurios com privilgios para inicializar e fazer
shutdown de uma instncia Oracle.
Os arquivos de redo log arquivados so cpias off-line dos arquivos de redo log que
podem ser necessrios para a recuperao aps falhas de mdia.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-14
Copyright 2004, Oracle. Todos os direitos reservados.
Processando uma Instruo SQL
Conecte-se a uma instncia usando um:
Processo do usurio
Processo do servidor
Os componentes do servidor Oracle usados
dependem do tipo de instruo SQL:
As consultas retornam linhas
As instrues DML registram alteraes
O commit garante a recuperao da transao
Alguns componentes do servidor Oracle no
participam do processamento da instruo SQL.
Componentes Usados para Processar SQL
Nem todos os componentes de uma instncia Oracle so usados para processar instrues
SQL. Os processos do usurio e do servidor so usados para conectar um usurio a uma
instncia Oracle. Esses processos no fazem parte da instncia Oracle, mas so necessrios
para processar uma instruo SQL.
Alguns processos de background, estruturas da SGA e arquivos do banco de dados so
usados para processar instrues SQL. Dependendo do tipo de instruo SQL, so usados
componentes diferentes:
As consultas exigem processamento adicional para retornar linhas ao usurio.
As instrues DML (data manipulation language) exigem processamento adicional
para registrar as alteraes feitas nos dados.
O processamento de commit garante que os dados modificados em uma transao
podero ser recuperados.
Alguns processos de background necessrios no participam diretamente do processamento
de uma instruo SQL, mas so usados para melhorar o desempenho e recuperar o banco de
dados.
O processo de background opcional, ARC0, usado para garantir que um banco de dados
de produo possa ser recuperado.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-15
Copyright 2004, Oracle. Todos os direitos reservados.
Estabelecendo Conexo com uma Instncia
Usurio Servidor
Servidor
Usurio
Cliente
Usurio
Servidor
Servidor Oracle
Servidor Servidor de aplicao
Browser
Processos Usados para Conexo com uma Instncia
Antes de submeterem instrues SQL a um servidor Oracle, os usurios devem se conectar
a uma instncia.
O usurio inicia uma ferramenta, como o iSQL*Plus, ou executa uma aplicao
desenvolvida por meio de uma ferramenta, como o Oracle Forms. Essa ferramenta ou essa
aplicao executada em um processo do usurio.
Na maioria das configuraes bsicas, quando um usurio efetua logon no servidor Oracle,
criado um processo no computador que executa esse servidor. Esse processo chamado de
processo do servidor. O processo do servidor se comunica com a instncia Oracle em nome
do processo do usurio executado no cliente. O processo do servidor executa instrues
SQL em nome do usurio.
Conexo
Uma conexo um caminho de comunicao entre um processo do usurio e um servidor
Oracle. Um usurio do banco de dados pode se conectar a um servidor Oracle de trs
maneiras:
O usurio efetua logon no sistema operacional que est executando a instncia Oracle e
inicia uma aplicao ou uma ferramenta que acesse o banco de dados nesse sistema. O
caminho de comunicao estabelecido por meio dos mecanismos de comunicao
entre os processos disponveis no sistema operacional host.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-16
Processos Usados para Conexo com uma Instncia (continuao)
Conexo (continuao)
O usurio inicia a aplicao ou a ferramenta em um computador local e se conecta por
uma rede ao computador que est executando a instncia Oracle. Nessa configurao,
denominada cliente/servidor, o software de rede usado para a comunicao entre o
usurio e o servidor Oracle.
Em uma conexo de trs camadas, o computador do usurio se comunica pela rede
com uma aplicao ou um servidor de rede, que, por sua vez, conecta-se por uma rede
mquina que est executando a instncia Oracle. Por exemplo, o usurio executa um
browser em um computador da rede para usar uma aplicao residente em um servidor
NT que recupera os dados de um banco de dados Oracle em execuo em um host
UNIX.
Sesses
Uma sesso uma conexo especfica de um usurio com um servidor Oracle. A sesso
comea quando o usurio validado pelo servidor Oracle, e termina quando ele efetua
logout ou quando ocorre um encerramento anormal. Pode haver vrias sesses concorrentes
para um usurio se ele efetuar logon a partir de vrias ferramentas, aplicaes ou terminais
simultaneamente. Com exceo de algumas ferramentas especializadas de administrao de
banco de dados, o incio de uma sesso de banco de dados exige que o servidor Oracle
esteja disponvel para uso.
Observao: O tipo de conexo explicada aqui, na qual existe uma correspondncia exata
entre um processo do usurio e um processo do servidor, denomina-se conexo de servidor
dedicado.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-17
Copyright 2004, Oracle. Todos os direitos reservados.
Processando uma Consulta
Parse:
Pesquisa uma instruo idntica
Verifica a sintaxe, os nomes dos objetos e os
privilgios
Bloqueia os objetos usados durante o parse
Cria e armazena planos de execuo
Execute: Identifica as linhas selecionadas
Fetch: Retorna linhas para o processo do usurio
Etapas do Processamento de Consultas
As consultas diferem de outros tipos de instrues SQL porque, se forem bem-sucedidas,
retornaro dados. Enquanto outras instrues apenas retornam sucesso ou falha, uma
consulta pode retornar uma linha ou milhares de linhas.
H trs estgios principais no processamento de uma consulta:
Parse
Execute
Fetch
Durante o estgio de parse, a instruo SQL passa do processo do usurio para o processo
do servidor, e uma representao da instruo SQL analisada por parse carregada em uma
rea SQL compartilhada.
Durante o parse, o processo do servidor executa as seguintes funes:
Procura uma cpia da instruo SQL no shared pool
Valida a instruo SQL verificando a sintaxe
Faz consultas ao dicionrio de dados para validar as definies das tabelas e das
colunas
O comando execute fetch executa a instruo usando a melhor abordagem do otimizador, e
o comando fetch recupera as linhas para o usurio.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-18
Copyright 2004, Oracle. Todos os direitos reservados.
O Shared Pool
O cache de biblioteca contm o texto da instruo
SQL, o cdigo analisado por parse e o plano de
execuo.
O cache do dicionrio de dados contm definies e
privilgios de tabelas, colunas e outros objetos.
O tamanho do shared pool definido por
SHARED_POOL_SIZE.
Cache de
dicionrio
de dados
Cache de
biblioteca
Shared pool
Componentes do Shared Pool
Durante o estgio de parse, o processo do servidor usa a rea da SGA conhecida como
shared pool para compilar a instruo SQL. O shared pool possui dois componentes
principais:
Cache de biblioteca
Cache de dicionrio de dados
Cache de Biblioteca
O cache de biblioteca armazena informaes sobre as instrues SQL usadas mais
recentemente em uma estrutura de memria denominada rea SQL compartilhada. A rea
SQL compartilhada contm:
O texto da instruo SQL
A rvore de parse: Uma verso compilada da instruo
O plano de execuo: As etapas a serem seguidas ao executar a instruo
Otimizador a function do servidor Oracle que determina o plano de execuo ideal.
Se uma instruo SQL for executada novamente, e uma rea SQL compartilhada j contiver
o plano de execuo da instruo, o processo do servidor no precisar efetuar o parse da
instruo. O cache de biblioteca melhora o desempenho das aplicaes que reutilizam
instrues SQL, reduzindo o tempo de anlise e os requisitos de memria. Se no for
reutilizada, a instruo SQL ser eliminada do cache de biblioteca.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-19
Componentes do Shared Pool (continuao)
Cache de Dicionrio de Dados
O cache de dicionrio de dados, tambm conhecido como cache de dicionrio ou cache de
linhas, um conjunto das definies mais usadas recentemente no banco de dados. Inclui
informaes sobre arquivos do banco de dados, tabelas, ndices, colunas, usurios,
privilgios e outros objetos do banco de dados.
Durante a fase de parse, o processo do servidor procura as informaes no cache de
dicionrio para resolver (converter) os nomes de objetos especificados na instruo SQL e
validar os privilgios de acesso. Se necessrio, o processo do servidor iniciar a carga
dessas informaes a partir dos arquivos de dados.
Dimensionando o Shared Pool
O tamanho do shared pool especificado pelo parmetro de inicializao
SHARED_POOL_SIZE.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-20
Copyright 2004, Oracle. Todos os direitos reservados.
Cache de Buffer do Banco de Dados.
Armazena os blocos mais usados recentemente
Tamanho de um buffer baseado em DB_BLOCK_SIZE
Nmero de buffers definido por DB_BLOCK_BUFFERS
Cache de buffer
do banco
de dados
Function do Cache de Buffer do Banco de Dados
Quando uma consulta processada, o processo do servidor consulta os blocos necessrios
no cache de buffer do banco de dados. Se o bloco no encontrado nesse cache, o processo
do servidor l o bloco no arquivo de dados e coloca uma cpia no cache de buffer. Como as
solicitaes subseqentes do mesmo bloco podem encontr-lo na memria, talvez elas no
precisem de leituras fsicas. O servidor Oracle usa um algoritmo LRU para defasar os
buffers no acessados recentemente, de modo a criar espao para novos blocos no cache de
buffer.
Dimensionando o Cache de Buffer do Banco de Dados
O tamanho de cada buffer do cache de buffer igual ao tamanho de um bloco Oracle e
especificado pelo parmetro DB_BLOCK_SIZE. O nmero de buffers igual ao valor do
parmetro DB_BLOCK_BUFFERS.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-21
Copyright 2004, Oracle. Todos os direitos reservados.
PGA (Program Global Area)
No compartilhada
Gravvel apenas pelo processo do servidor
Contm:
rea de classificao
Informaes da sesso
Estado do cursor
Espao da pilha
Processo do
servidor
PGA
Componentes da PGA
Uma PGA (Program Global Area) uma regio da memria que contm informaes sobre
controle e dados para um processo do servidor. Trata-se de uma memria no-
compartilhada criada pelo Oracle quando um processo do servidor iniciado. O acesso a
essa memria exclusividade desse processo do servidor, alm de ser lido e gravado apenas
pelo cdigo do servidor Oracle que est atuando em seu nome. A memria PGA alocada por
cada processo do servidor associado a uma instncia Oracle chamada de memria PGA
agregada alocada pela instncia.
Em uma configurao de servidor dedicado, a PGA do servidor inclui os seguintes
componentes:
rea de classificao: Usada para vrias classificaes que podem ser necessrias
para processar a instruo SQL
Informaes de sesso: Incluem os privilgios de usurio e as estatsticas de
desempenho para a sesso
Estado do cursor: Indica o estgio de processamento das instrues SQL que a sesso
est usando no momento
Espao da pilha: Contm outras variveis da sesso
A PGA alocada quando um processo criado e desalocada quando o processo encerrado.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-22
Copyright 2004, Oracle. Todos os direitos reservados.
Processando uma Instruo DML
UPDATE
employees ...
SGA
Buffer de
redo log
Cache
de buffer
do banco
de dados
Shared pool
Processo
do usurio
Processo
do servidor
Banco de dados
Arquivos
de dados
Arquivos
de controle
Arquivos
de redo log
1
1 2 3 4
Etapas de Processamento de Instrues DML
Uma instruo DML (data manipulation language) necessita de apenas duas fases de
processamento:
A fase de parse igual usada para processar uma consulta.
O comando de execuo requer processamento adicional para alterar os dados.
Fase de Execuo das Instrues DML
Para executar uma instruo DML:
Se os blocos de rollback e dados ainda no estiverem no cache de buffer, o processo do
servidor ler esses blocos nos arquivos de dados contidos no cache de buffer.
O processo do servidor impe bloqueios nas linhas a serem modificadas.
No buffer de redo log, o processo do servidor registra as alteraes a serem feitas no
rollback e nos dados.
As alteraes do bloco de rollback registram os valores dos dados antes da
modificao. O bloco de rollback usado para armazenar a imagem original dos
dados, de modo que seja possvel efetuar rollback das instrues DML, se necessrio.
As alteraes dos blocos de dados registram os novos valores dos dados.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-23
Etapas de Processamento de Instrues DML (continuao)
Fase de Execuo das Instrues DML (continuao)
O processo do servidor registra a imagem original no bloco de rollback e atualiza o bloco de
dados. Essas duas alteraes so feitas no cache de buffer do banco de dados. Os blocos
alterados no cache de buffer so marcados como buffers sujos, ou seja, buffers diferentes
dos blocos correspondentes no disco.
O processamento de um comando DELETE ou INSERT usa etapas semelhantes. A imagem
original de um comando DELETE contm os valores das colunas da linha deletada, e a
imagem original de um comando INSERT contm as informaes de localizao da linha.
Como as alteraes feitas nos blocos so registradas apenas nas estruturas de memria e no
so gravadas imediatamente no disco, uma falha no computador que cause a perda da SGA
tambm poder ocasionar a perda dessas alteraes.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-24
Copyright 2004, Oracle. Todos os direitos reservados.
Buffer de Redo Log
Tem seu tamanho definido por LOG_BUFFER
Alteraes nos registros feitas por meio da instncia
usado seqencialmente
um buffer circular
Cache de
buffer do banco
de dados
Caractersticas do Buffer de Redo Log
O processo do servidor registra a maioria das alteraes feitas nos blocos de arquivos de
dados no buffer de redo log, que uma parte da SGA. O buffer de redo log tem as seguintes
caractersticas:
O tamanho em bytes definido pelo parmetro LOG_BUFFER.
Ele registra o bloco que foi alterado, o local da alterao e o novo valor de uma entrada
de redo. Para uma entrada de redo, no faz diferena o tipo de bloco alterado. Ela
apenas registra os bytes que foram alterados no bloco.
O buffer de redo log usado seqencialmente, e as alteraes feitas por uma transao
podem ser intercaladas com as alteraes feitas por outras transaes.
Trata-se de um buffer circular que reutilizado aps o preenchimento, mas somente
depois de todas as entradas antigas de redo terem sido registradas nos arquivos de redo
log.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-25
Copyright 2004, Oracle. Todos os direitos reservados.
Segmento de Rollback
Instruo DML
Imagem original
Nova imagem
Segmento
de rollback
Tabela
Segmento de Rollback
Antes de fazer uma alterao, o processo do servidor salva o valor de dados antigo em um
segmento de rollback. Essa imagem original usada para:
Desfazer as alteraes, se a transao for submetida a um rollback
Manter a consistncia de leitura, garantindo que outras transaes no vejam as
alteraes no submetidas a commit feitas pela instruo DML
Recuperar o banco de dados at um estado consistente em caso de falhas
Os segmentos de rollback, como tabelas e ndices, existem em arquivos de dados, e os
blocos de rollback so trazidos para o cache de buffer do banco de dados, conforme
necessrio. Os segmentos de rollback so criados pelo DBA.
As alteraes feitas nos segmentos de rollback so registradas no buffer de redo log.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-26
Copyright 2004, Oracle. Todos os direitos reservados.
2
Banco de dados
Arquivos
de dados
Arquivos
de controle
Arquivos
de redo log
Processamento de COMMIT
1
3
4
Instncia
SGA
Buffer de
redo log
Cache
de buffer
do banco
de dados
Shared pool
LGWR
Processo
do usurio
Processo
do servidor
COMMIT rpido
O servidor Oracle usa um mecanismo de commit rpido que garante que as alteraes
submetidas a commit podero ser recuperadas em caso de falha na instncia.
SCN (System Change Number)
Sempre que uma transao submetida a commit, o servidor Oracle atribui um SCN
(system change number) transao. O SCN aumenta de maneira uniforme e exclusivo no
banco de dados. Ele usado pelo servidor Oracle como um timestamp interno para
sincronizar dados e para garantir consistncia de leitura quando os dados forem recuperados
dos arquivos de dados. O uso do SCN permite que o servidor Oracle execute verificaes de
consistncia independentemente da data e a hora do sistema operacional.
Etapas no Processamento de COMMITs
Quando um COMMIT executado, ocorrem as seguintes etapas:
O processo do servidor coloca um registro de commit no buffer de redo log,
juntamente com o SCN.
O processo LGWR executa uma gravao contgua de todas as entradas do buffer de
redo log at o registro de commit dos arquivos de redo log. Depois deste ponto, o
servidor Oracle pode garantir que as alteraes no sero perdidas, mesmo que ocorra
uma falha na instncia.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-27
COMMIT rpido (continuao)
Etapas no Processamento de COMMITs (continuao)
O usurio informado de que o COMMIT est concludo.
O processo do servidor registra informaes para indicar que a transao foi concluda
e que os bloqueios de recursos podem ser liberados.
A descarga dos buffers sujos no arquivo de dados executada de forma independente por
DBW0, e pode ocorrer antes ou depois do commit.
Vantagens do COMMIT Rpido
O mecanismo de commit rpido garante a recuperao dos dados ao gravar as alteraes no
buffer de redo log, em vez de faz-lo nos arquivos de dados. Ele apresenta as seguintes
vantagens:
As gravaes seqenciais nos arquivos de log so mais rpidas do que a gravao em
blocos diferentes no arquivo de dados.
So gravadas nos arquivos de log apenas as informaes mnimas necessrias para
registrar as alteraes, enquanto nos arquivos de dados, seria necessria a gravao de
blocos de dados inteiros.
Se diversas transaes solicitarem commit ao mesmo tempo, a instncia incluir os
registros de redo log por meio de piggyback em uma nica gravao.
A menos que o buffer de redo log esteja extremamente cheio, ser necessria apenas
uma gravao sncrona por transao. Se ocorrer o piggyback, poder haver menos de
uma gravao sncrona por transao.
Como o buffer de redo log pode ser descarregado antes do COMMIT, o tamanho da
transao no afeta o tempo necessrio para uma operao COMMIT real.
Observao: O rollback de uma transao no faz com que o LGWR seja acionado para
gravar no disco. O servidor Oracle sempre faz rollback nas alteraes no submetidas a
commit, nas recuperaes de falhas. Se ocorrer uma falha aps um rollback, antes do
registro das entradas de rollback no disco, a ausncia de um registro de commit ser
suficiente para garantir que as alteraes feitas pela transao sofrero rollback.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-28
Copyright 2004, Oracle. Todos os direitos reservados.
Sumrio
Neste apndice, voc aprendeu a:
Identificar arquivos do banco de dados: arquivos
de dados, arquivos de controle e redo logs on-line
Descrever as estruturas da memria SGA: cache de
buffer do banco de dados, pool SQL compartilhado
e buffer de redo log
Explicar os principais processos de background:
DBW0, LGWR, CKPT, PMON, SMON e ARC0
Listar as etapas de processamento de instrues
SQL: parse, execute, fetch
Sumrio
Arquivos do Banco de Dados Oracle
O banco de dados Oracle inclui os seguintes arquivos:
Arquivos de controle: Contm informaes necessrias para verificar a integridade do
banco de dados, inclusive os nomes dos outros arquivos do banco de dados. (Os
arquivos de controle geralmente so espelhados.)
Arquivos de dados: Contm os dados do banco de dados, inclusive tabelas, ndices,
segmentos de rollback e segmentos temporrios
Redo logs on-line: Contm as alteraes feitas nos arquivos de dados. (Os redo logs
on-line so usados para recuperao e geralmente so espelhados.)
Outros arquivos geralmente usados com o banco de dados incluem:
Arquivo de parmetros: Define as caractersticas de uma instncia Oracle
Arquivo de senha: Autentica os usurios privilegiados do banco de dados
Redo logs arquivados: So backups dos redo logs on-line
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II D-29
Sumrio (continuao)
Estruturas da Memria SGA
A SGA (System Global Area) tem trs estruturas principais:
Shared pool: Armazena as instrues SQL mais executadas recentemente e os dados
do dicionrio de dados mais usados recentemente
Cache de buffer do banco de dados: Armazena os dados mais usados recentemente
Buffer de redo log: Registra as alteraes feitas no banco de dados usando a instncia
Processos de Background
Uma instncia Oracle de produo inclui os seguintes processos:
DBW0 (Database writer): Grava os dados alterados nos arquivos de dados
LGWR (Log Writer): Registra as alteraes dos arquivos de dados nos arquivos
de redo log on-line
SMON (System monitor): Verifica a consistncia e inicia a recuperao do banco
de dados quando ele aberto
PMON (Process monitor): Limpa os recursos em caso de falha de um dos processos
CKPT (Checkpoint process): Atualiza as informaes de status do banco de dados
aps um checkpoint
ARC0 (Archiver): Faz backup do redo log on-line para garantir a recuperao aps
uma falha de mdia. (Este processo opcional, mas geralmente includo em uma
instncia de produo.)
Dependendo da configurao, a instncia tambm pode incluir outros processos.
Etapas de Processamento de Instrues SQL
As etapas usadas para processar uma instruo SQL incluem:
Parse: Compila a instruo SQL
Execute: Identifica linhas selecionadas ou aplica alteraes de DML aos dados
Fetch: Retorna as linhas consultadas por uma instruo SELECT
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
_________
ndice
_________


O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II ndice-2
A
Adiando Constraints 02-13
Adicionando uma coluna 02-05
Agrupamento Concatenado 04-21,04-22,04-23
ALL INSERT 03-02,03-16,03-21,03-35
ALTER 01-12
ALTER SESSION 05-04,, 05-09,05-13,05-17
ALTER TABLE 02-03,,02-19, 06-16, 08-13
ALTER USER 01-11, 01-19
Arquitetura do Banco de Dados D-1...D-30
Ativando Constraints 02-15, 02-16

C
Classificando Linhas 07-10
Clusula WITH 06-22, 06-23, 06-24
Coluna Composta 04-17,04-19,04-23
Comparaes Emparelhadas 06-04, 06-25
Comparaes No Emparelhadas 06-04
CONNECT BY 06-07,07-0507-14
CONNECT BY PRIOR 07-05 07-14
Constraint 01-17,02-07, 02-1002-20, 06-07, 08-1, C-03
Constraints de Verificao 08-13
Constraints em Cascata 02-18, 02-19
Consulta de Verses 03-32
Consulta Externa 03-07, 06-08, 06-10, 06-12, 06-13,06-14
Consulta Interna 06-08, 06-10, 06-10, 06-12, 06-14, 06-15
Consultas Hierrquicas 03-05
Controlando Alteraes 02-31
Correlao 06-13
Criar Banco de Dados 05-09, C-03
Criar ndice 02-20,02-21,02-23,02-38,02-39
CUBE 04-06,,04-24
CURRENT_DATE 05-05, 05-06, 05-06, 05-15, 05-34,05-35
CURRENT_TIMESTAMP 05-05, 05-07, 05-08, 05-17, 05-34, 05-35

D
Data/Horrio 05-0505-35
DBTIMEZONE 05-04, 05-09, 05-26, 05-34
DEFAULT DIRECTORY 02-33,02-35
Desativando Constraints 02-15
DROP TABLE 02-26,02-28, C-02,C-06
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II ndice-3
E
Eliminando uma coluna 02-07
EXIST 06-14,,06-16,06-20, 06-21,06-24,06-26,06-27
Expurgar 02-26,02-28
EXTRACT 05-25
F
FIRST INSERT 03-16,03-22,03-23
Flashback de Consulta de Verso 02-32
FLASHBACK TABLE 02-26, 02-27, 02-28
FROM_TZ 05-28
Funes de converso 05-28...05-31
Funes de Data/Horrio 05-34,05-35
Fuso Horrio 05-01... 05-34

G
Greenwich Mean Time 05-03,05-06,05-14
GROUP BY 03-07, 03-23, 04-03 ,, 04-23, 06-07, 06-20, 06-24, 06-25
GROUP BY ROLLUP 04-12, 04-17, 04-19
GROUPING 04-03,,04-23
GROUPING SET 04-13, 04-15, 04-17, 04-21, 04-23

H
HAVING 03-05, 04-03, 04-05, 04-07, 04-09, 06-20, C-04
Horrio de Vero 05-03,05-28,05-32,

I
ndices baseados em Funo 02-23, 02-24
INSERT 01-12, 01-15, 01-18, 02-06, 02-31,03-03,, 03-06, 03-11,, 03-30
INSERT ALL Incondicional 02-19
INSERT Condicional 02-20 ...02-23
Instruo UPDATE Correlacionada 06-17,06-18
INTERVAL 05-18-05-24
INTERVAL DAY TO SECOND 05-22, -05-24
INTERVAL YEAR TO MONTH 05-21...05-22

L
LEVEL 07-05, 07-10, 07-11, 07-14,
Limite de Rejeio 02-33,02-35
Linhas de Tabelas de Referncia Cruzada 04-06
Linhas Superagregadas 04-06,04-08,04-09
LOCALTIMESTAMP 05-05, 05-08, 05-08, 05-34, 05-35
LPAD 07-11
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II ndice-4
M
MERGE 03-27...03-30
Metacaracteres 08-04...08-06
Modificando uma coluna 02-06

N
NLS_Date_Language 05-29
N Filho 07-10
N-Raiz 07-10
NOT EXIST 01-16, 06-14,06-16
NOT IN 03-11,06-05, 06-06, 06-16

O
ON DELETE CASCADE 02-12
ORACLE_LOADER 02-35
ORDER BY 02-23, 04-03, 04-04, 04-05, 04-07, 04-09, 06-08,
ORGANIZATION EXTERNAL 02-33,02-35

P
Parmetro de Acesso 02-33,02-35
Percorrendo a rvore 07-07...07-09
PIVOTING 03-16, 03-24, 03-25
Pseudocoluna 07-05, 07-10, 07-14,07-15

R
Reduzir a rvore 07-13, 07-14
REGEXP_INSTR 8-7
REGEXP_LIKE 8-7
REGEXP_REPLACE 8-7
REGEXP_SUBSTR 8-7
Relacionamento Pai/Filho 07-04
Relatrio Estruturado em rvore 07-02
Relatrios de Tabelas de Referncia Cruzada 04-09
ROLLUP 04-06 ... 04-23

S
SESSIONTIMEZONE 05-06 ,,05-09, 05-26
SET TIME_ZONE 05-04, 05-06 ,, 05-09,05-17
SET UNUSED 02-08
START WITH 07-05, 07-06, 07-11,07-14,08-10
Subconsulta 03-04... 03-11, 03-14,03-17,06-03 06_26, 07-06, 07-07
Subconsulta Correlacionada 06-10 06-13
Subconsulta Correlacionada para Atualizar Linha 06-17,06-18
Subconsulta Correlacionada para Deletar 06-20,06-21
Subconsulta Escalar 06-07...06-09
Subconsultas de Vrias Colunas 06-03, 06-07
Substituindo Padres 08-12
Suporte a Expresses Comuns 8-1 ,, 8-13
O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.
Banco de Dados Oracle 10g: Fundamentos de SQL II ndice-5
T
Tabela Externa 02-29,02-31,02-35,02-37
TIMESTAMP 05-10...05-17
TIMESTAMP WITH LOCAL TIMEZONE 05-16, 05-17
TIMESTAMP WITH TIME ZONE 05-15
TO_DSINTERVAL 05-30
TO_YMINTERVAL 05-31
TZ_OFFSET 05-26, 05-34

U
UNION 04-07,04-10, 04-13, 04-17, 04-23
UNION ALL 04-07, 04-10,04-13, 04-13,04-17,04-23

V
V$TIMEZONE_NAME 05-28
Valores de Tabelas de Referncia Cruzada 04-09,04-23
VERSIONS BETWEEN 03-34
Verses de Linhas 03-36

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.

O
r
a
c
l
e

U
n
i
v
e
r
s
i
t
y

a
n
d

I
m
p
a
c
t
a

T
e
c
n
o
l
o
g
i
a

u
s
e

o
n
l
y

Development Program (WDP) eKit materials are provided for WDP in-class use only. Copying eKit materials is strictly prohibited and is in
violation of Oracle copyright. All WDP students must receive an eKit watermarked with their name and email. Contact
OracleWDP_ww@oracle.com if you have not received your personalized eKit.