Escolar Documentos
Profissional Documentos
Cultura Documentos
Introducao Ao Oracle SQL e PL SQL em Portugues Vol 1 PDF
Introducao Ao Oracle SQL e PL SQL em Portugues Vol 1 PDF
e PL/SQL
Guia do Estudante Volume 1
41010BP13
Produo 1.3
Fevereiro de 2000
M08944-BP
Autores
Neena Kochhar
Ellen Gravina
Priya Nathan
Colaboradores Tcnicos
e Revisores
Claire Bennet
Christa Miethaner
Tony Hickman
Sherin Nassa
Nancy Greenberg
Hazel Russell
Kenneth Goetz
Piet van Zon
Ulrike Dietrich
Helen Robertson
Thomas Nguyen
Lisa Jansson
Kuljit Jassar
Editor
Jerry Brosnan
Sumrio
Prefcio
Mapa de Curso
Introduo
Objetivos I-2
Ciclo de Vida de Desenvolvimento do Sistema I-3
Armazenamento de Dados em Diferentes Mdias I-5
Conceito de Banco de Dados Relacional I-6
Definio de Banco de Dados Relacional I-7
Modelos de Dados I-8
Modelo de Relacionamento de Entidades I-9
Convenes de Modelo para Relacionamento de Entidades I-11
Terminologia de Banco de Dados Relacional I-13
Relacionando Vrias Tabelas I-15
Propriedades de Banco de Dados Relacional I-17
Comunicando-se com um RDBMS Usando o SQL I-18
Sistema de Gerenciamento de Banco de Dados Relacional I-19
Oracle8: Sistema de Gerenciamento de Banco de Dados Relacional
de Objeto I-20
Oracle8i: Banco de Dados de Plataforma Internet para Recursos de
Computao na Internet I-21
Plataforma Internet da Oracle I-23
Instrues SQL I-24
Sobre PL/SQL I-25
Ambiente PL/SQL I-26
Tabelas Usadas no Curso I-27
Sumrio I-28
1
iii
4-11
Subconsultas
Objetivos 6-2
Usando uma Subconsulta para Resolver um Problema 6-3
Subconsultas 6-4
Usando uma Subconsulta 6-5
Diretrizes para o Uso de Subconsultas 6-6
Tipos de Subconsultas 6-7
Subconsultas de uma nica Linha 6-8
Executando Subconsultas de uma nica Linha 6-9
Usando Funes de Grupo em uma Subconsulta 6-10
Clusula HAVING com Subconsultas 6-11
O Que H de Errado com esta Instruo? 6-12
Esta Instruo Ir Funcionar? 6-13
Subconsultas de Vrias Linhas 6-14
Usando o Operador ANY em Subconsultas de Vrias Linhas 6-15
Usando o Operador ALL em Subconsultas de Vrias Linhas 6-16
Sumrio 6-17
Viso Geral do Exerccio 6-18
Manipulao de Dados
Objetivos 9-2
DML (Data Manipulation Language) 9-3
Adicionando uma Nova Linha em uma Tabela 9-4
A Instruo INSERT 9-5
Inserindo Novas Linhas 9-6
Inserindo Linhas com Valores Nulos 9-7
Inserindo Valores Especiais 9-8
Inserindo Valores Espec'ificos de Data 9-9
Inserindo Valores Usando Variveis de Substituio 9-10
Criando um Script com Prompts Personalizados 9-11
Copiando Linhas a partir de Outra Tabela 9-12
Alterando os Dados em uma Tabela 9-13
A Instruo UPDATE 9-14
Atualizando Linhas em uma Tabela 9-15
Atualizando com Subconsulta de Vrias Colunas 9-16
Atualizando Linhas Baseadas em Outra Tabela 9-17
Atualizando Linhas: Erro de Restrio de Integridade 9-18
Removendo uma Linha de uma Tabela 9-19
A Instruo DELETE 9-20
viii
11 Incluindo Restries
Objetivos 11-2
O Que So Restries? 11-3
Diretrizes sobre Restries 11-4
Definindo Restries 11-5
A Restrio NOT NULL 11-7
A Restrio UNIQUE KEY 11-9
A Restrio PRIMARY KEY 11-11
A Restrio FOREIGN KEY 11-13
Palavras-chave da Restrio FOREIGN KEY 11-15
A Restrio CHECK 11-16
Adicionando uma Restrio 11-17
Eliminando uma Restrio 11-19
Desativando Restries 11-20
Ativando Restries 11-21
Restries em Cascata 11-22
Verificando Restries 11-24
Verificando Colunas Associadas com Restries 11-25
Sumrio 11-26
Viso Geral do Exerccio 11-27
12 Criando Views
Objetivos 12-2
Objetos de Banco de Dados 12-4
O Que uma View? 12-5
Por Que Usar Views? 12-6
Views Simples e Views Complexas 12-7
Criando uma View 12-8
Recuperando Dados de uma View 12-11
Consultando uma View 12-12
Modificando uma View 12-13
Criando uma View Complexa 12-14
Regras para Executar Operaes DML em uma View 12-15
Usando a Clusula WITH CHECK OPTION 12-17
Negando Operaes DML 12-18
Removendo uma View 12-19
Views Em Linha 12-20
Anlise "Top-N 12-21
Executando a Anlise Top-N 12-22
Exemplo de Anlise Top-N 12-23
Sumrio 12-24
Viso Geral do Exerccio 12-26
x
xi
xiii
xv
xvi
Prefcio
Prefcio - 2
Perfil
Antes de Iniciar Este Curso
Antes de iniciar este curso, voc deve ser capaz de usar uma GUI (Graphical User Interface,
interface grfica com o usurio). O pr-requisito necessrio estar familiarizado com
conceitos e tcnicas de processamento de dados.
Como Este Curso Est Organizado
Introduo ao Oracle: SQL and PL/SQL um curso orientado por instrutor contendo
palestras e exerccios prticos. Sesses de demonstrao on-line e de exerccio escrito
reforam os conceitos e tcnicas apresentadas.
Prefcio - 3
Publicaes Relacionadas
Publicaes da Oracle
Ttulo
Nmero do Componente
A68826-01
A67781-01
A67779-01
A68003-01
A66736-01
A66735-01
A67842-01
Publicaes Adicionais
arquivos README
Oracle Magazine
Prefcio - 4
Convenes Tipogrficas
A seguir esto duas listas de convenes tipogrficas usadas especificamente dentro de texto ou
de cdigo.
Convenes Tipogrficas Dentro de Texto
Conveno
Objeto ou Condio
Exemplo
Letras maisculas
Comandos,
funes,
nomes de coluna,
nomes de tabelas,
objetos PL/SQL,
esquemas
Letras minsculas,
itlico
Nomes de arquivo,
variveis de sintaxe,
nomes de usurio,
senhas
onde:
Inicial maiscula
Nomes de gatilho
nomes de boto
Escolha Cancelar.
Itlico
Livros, nomes de
cursos e
manuais e
palavras ou frases
enfatizadas
Aspas
Ttulos de mdulo
de lio a que feito
referncia dentro de
um curso
Prefcio - 5
Objeto ou Termo
Exemplo
Letras maisculas
Comandos,
funes
Letras minsculas,
itlico
Variveis de sintaxe
Inicial maiscula
Gatilhos de forms
Letra minscula
Nomes de colunas,
nomes de tabelas,
nomes de arquivos,
objetos do PL/SQL
. . .
OG_ACTIVATE_LAYER
(OG_GET_LAYER ('prod_pie_layer'))
. . .
SQL> SELECT last_name
2 FROM emp;
Negrito
SQLDBA>
2>
Prefcio - 6
Mapa de
Curso
ou
Introduo ao Oracle
para Usurios Experientes em SQL
Oracle SQL
PL/SQL
Specifics
Fundamentals
Linha
do DBA
Desenvolvimento de
Unidades de Programa
em PL/SQL
Linha do
Application
Developer
Mapa de Curso - 2
PL/SQL Fundamentals
Basics
Develop PL/SQL
Program Units
Procedures, Functions,
and Packages
Database Programming
Advanced PL/SQL
ILT
CBT
Seminar
Mapa de Curso - 3
Mapa de Curso - 4
I
Introduo
Objetivos
Depois de completar esta lio, voc poder fazer
o seguinte:
Discutir os aspectos tericos e fsicos de um
banco de dados relacional
Descrever a implementao Oracle do RDBMS e
ORDBMS
Descrever os novos recursos do Oracle8i
Descrever como o SQL e o PL/SQL so usados
no conjunto de produtos Oracle
Descrever o uso e os benefcios do PL/SQL
I-2
Objetivo da Lio
Nesta lio, voc entender o RDBMS (relational database management system) e o ORDBMS
(object relational database management system). Voc tambm ser apresentado aos seguintes
tpicos:
SQL*Plus, usado para executar o SQL e para fins de formatao e elaborao de relatrios
Ciclo de Vida de
Desenvolvimento do Sistema
Estratgia
e Anlise
Design
Elaborao e
Documentao
Transio
Produo
I-3
Elabore modelos do sistema. Transfira a narrativa comercial para uma representao grfica das
regras e necessidades de informaes comerciais. Confirme e refine o modelo com os analistas
e especialistas.
Design
Projete o banco de dados de acordo com o modelo desenvolvido na fase de estratgia e anlise.
Elaborao e Documentao
Elabore o sistema prottipo. Crie e execute os comandos para elaborar tabelas e objetos de
suporte para o banco de dados.
Desenvolva uma documentao para o usurio, textos de ajuda e manuais de operao para
suporte ao uso e operao do sistema.
Introduo ao Oracle: SQL e PL/SQL I-3
Ciclo de Vida de
Desenvolvimento do Sistema
Estratgia
e Anlise
Design
Elaborao e
Documentao
Transio
Produo
I-4
Armazenamento de Dados
em Diferentes Mdias
SALGRADE
GRADE
LOSAL
HISAL
--------- --------- --------DEPT
1
700
1200
DEPTNO DNAME
LOC
2
1201
1400
--------- -------------- ---------3
1401
2000
10 ACCOUNTING
NEW YORK
4
2001
3000
20 RESEARCH
DALLAS
5
3001
9999
30 SALES
CHICAGO
40 OPERATIONS
BOSTON
Arquivo
fsico
Planilha
eletrnica
I-5
Banco de
Dados
Armazenando Informaes
Toda organizao necessita de informaes. Uma biblioteca mantm uma lista de membros, livros,
datas de entrega e multas. Uma empresa precisa gravar informaes sobre funcionrios,
departamentos e salrios. Essas informaes so chamadas de dados.
As organizaes podem armazenar dados em vrias mdias e em formatos diferentes, por exemplo,
um documento impresso em um arquivo fsico ou dados em planilhas eletrnicas ou bancos de dados.
Um banco de dados um conjunto organizado de informaes.
Para gerenciar bancos de dados, voc precisa de DBMSs (database management systems). Um
DBMS um programa que armazena, recupera e modifica dados do banco de dados a pedido. H
quatro tipos principais de bancos de dados: hierrquico, de rede, relacional e relacional de objeto,
o mais recente.
Observao: O Oracle7 um RDBMS (relational database management system) e o Oracle8 um
ORDBMS (object relational database management system).
I-6
Modelo Relacional
Os princpios do modelo relacional foram definidos primeiramente pelo Dr. E.F. Codd em junho de
1970 em um estudo chamado "A Relational Model of Data for Large Shared Data Banks". Nesse
estudo, o Dr. Codd props o modelo relacional de sistemas de bancos de dados.
Os modelos mais populares usados naquele tempo eram hierrquicos, de rede ou mesmo estruturas de
dados de arquivos simples. Os RDBMSs (relational database management systems) em breve se
tornaram muito populares, especialmente pela facilidade de uso e flexibilidade na estrutura. Alm
disso, vrios fornecedores inovadores, como a Oracle, ofereciam o RDBMS com um conjunto
eficiente de desenvolvimento de aplicaes e produtos para usurios, formando uma soluo
completa.
Componentes do Modelo Relacional
Conjunto de operadores que podem agir sobre as relaes para produzir outras relaes
Para obter mais informaes, consulte E.F. Codd, The Relational Model for Database Management
Version 2 (Reading, Mass.: Addison-Wesley, 1990).
ENAME
KING
JOB
PRESIDENT
7698
7782
7566
BLAKE
CLARK
JONES
MANAGER
MANAGER
MANAGER
I-7
DEPTNO
10
DEPTNO
10
DNAME
ACCOUNTING
LOC
NEW YORK
30
10
20
20
30
40
RESEARCH
SALES
OPERATIONS
DALLAS
CHICAGO
BOSTON
Modelos de Dados
Modelo de
sistema
imaginado
pelo cliente
Modelo de
entidade do
modelo
do cliente
Modelo de
tabela do modelo
de entidade
Servidor
Tabelas em
discos
I-8
Modelos de Dados
Os modelos so a base do design. Os engenheiros criam um modelo de carro para estudar os detalhes
antes de coloc-lo em produo. Da mesma forma, projetistas de sistemas desenvolvem modelos para
explorar idias e compreender melhor o design de um banco de dados.
Objetivo dos Modelos
Os modelos ajudam a comunicar conceitos imaginados pelas pessoas. possvel us-los com os
seguintes objetivos:
Comunicar
Categorizar
Descrever
Especificar
Investigar
Desenvolver
Analisar
Imitar
O objetivo produzir um modelo que se adapte a vrios usos, possa ser compreendido por um
usurio final e contenha detalhes suficientes para que um desenvolvedor crie um sistema de banco de
dados.
Introduo ao Oracle: SQL e PL/SQL I-8
Modelo de Relacionamento
de Entidades
Crie um diagrama de relacionamento de entidades a
partir de narrativas ou especificaes comerciais
EMPLOYEE
#*
nmero
*
nome
o
cargo
atribudo a
composto de
DEPARTMENT
#*
nmero
*
nome
o
localizao
Cenrio
"...Atribua um ou mais funcionrios a um
departamento..."
"...Alguns departamentos ainda no tm
funcionrios atribudos a eles..."
I-9
Componentes-chave
Atributo: Um item que descreve ou qualifica uma entidade. Por exemplo, para a entidade de
funcionrios, os atributos so o nmero, o nome e o cargo do funcionrio, alm do nmero do
departamento e assim por diante. Cada um desses atributos necessrio ou opcional. Esse
estado chamado opcionalidade.
EMPLOYEE
#*
nmero
*
nome
o
cargo
Atributo
Nome individual
Letra minscula
Obrigatrio marcado com "*"
Opcional marcado com "o"
atribudo a
composto de
DEPARTMENT
#*
nmero
*
nome
o
localizao
Entidades
Para representar uma entidade em um modelo, use as seguintes convenes:
Atributos
Para representar um atributo em um modelo, use as seguintes convenes:
Marque os atributos obrigatrios ou os valores que devem ser conhecidos com um asterisco: *
Marque os atributos opcionais ou valores que podem ser conhecidos com a letra o
Relacionamentos
Smbolo
Descrio
Linha tracejada
Linha contnua
P-de-galinha
Linha simples
Entidade
Soft box
Nome exclusivo, individual
Letra maiscula
Sinnimo entre parnteses
EMPLOYEE
#*
nmero
*
nome
o
cargo
atribudo a
composto de
DEPARTMENT
#*
nmero
*
nome
o
localizao
Relacionamentos
Cada direo do relacionamento contm:
Uma opcionalidade, que indica algo que deve ser ou pode ser
Marque cada atributo que faz parte do UID com uma tralha: #
EMPNO ENAME
JOB
MGR
HIREDATE
SAL
COMM DEPTNO
1
I-13
7839 KING
PRESIDENT
7698 BLAKE
MANAGER
7839
-----------
17-NOV-81
5000
10
01-MAY-81
2850
30
7782 CLARK
MANAGER
7839
09-JUN-81
2450
10
7566 JONES
MANAGER
7839
02-APR-81
2975
20
7654 MARTIN
SALESMAN
7698
28-SEP-81
1250
1400
30
7499 ALLEN
SALESMAN
7698
20-FEB-81
1600
300
30
7698
08-SEP-81
1500
30
7900 JAMES
CLERK
7698
03-DEC-81
950
7521 WARD
SALESMAN
7698
22-FEB-81
1250
7902 FORD
ANALYST
7566
03-DEC-81
3000
20
7369
SMITH
CLERK
7902
17-DEC-80
800
20
7788
SCOTT
ANALYST
7566
09-DEC-82
3000
20
7876
ADAMS
CLERK
7788
12-JAN-83
1100
20
7934
MILLER
CLERK
7782
23-JAN-82
1300
10
30
500
30
ENAME
KING
JOB
PRESIDENT
7698
7782
7566
BLAKE
CLARK
JONES
MANAGER
MANAGER
MANAGER
Chave primria
I-15
DEPTNO
10
DNAME
ACCOUNTING
LOC
NEW YORK
30
10
20
20
30
40
RESEARCH
SALES
OPERATIONS
DALLAS
CHICAGO
BOSTON
Chave estrangeira
Chave primria
I-17
A instruo enviada
para o banco de dados
Banco de
Dados
Os dados so
exibidos
LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
I-18
Eficincia
Funcionalidade completa (O SQL permite definir, recuperar e manipular dados das tabelas.)
Sistema de Gerenciamento de
Banco de Dados Relacional
Servidor
Tabelas de
usurios
I-19
Dicionrio
de dados
Oracle8: Sistema de
Gerenciamento de Banco de
Dados Relacional de Objeto
Objetos e tipos de dados definidos pelo
usurio
Compatibilidade total com o banco de
dados relacional
Suporte de objetos grandes e multimdia
Recursos de servidor de banco de dados
de alta qualidade
I-20
Sobre o Oracle8
O Oracle8 o primeiro banco de dados com recurso de objeto desenvolvido pela Oracle. Ele estende
os recursos de modelo de dados do Oracle7 para suportar um novo modelo de banco de dados
relacional de objeto. O Oracle8 fornece um novo mecanismo que oferece programao orientada a
objeto, tipos de dados complexos, objetos comerciais complexos e compatibilidade total com o
universo relacional.
O Oracle8 estende o Oracle7 de vrias formas. Ele inclui vrios recursos para desempenho e
funcionalidade aperfeioados de aplicaes OLTP (Online Transaction Processing), como um
melhor compartilhamento de estruturas de dados no tempo de execuo, caches de buffer maiores e
restries diferenciveis. As aplicaes de armazenamento de dados se beneficiaro de
aperfeioamentos como a execuo paralela de operaes para inserir, atualizar e deletar, a diviso e
a otimizao de consultas paralelas. Operando na estrutura NCA (Network Computing Architecture),
o Oracle8 suporta aplicaes cliente-servidor e baseadas da Web distribudas e com vrias camadas.
O Oracle8 pode escalonar dezenas de milhares de usurios simultneos, suportar 512 petabytes e
tratar qualquer tipo de dados, incluindo dados espaciais, de textos, imagens, som, vdeo e sries de
tempos, alm de dados estruturados tradicionais.
Para obter mais informaes, consulte o Oracle Server Concepts Manual, Release 8.
Sobre o Oracle8i
O Oracle8i, o banco de dados de computao na Internet, fornece ferramentas avanadas para
gerenciar todos os tipos de dados em sites da Web.
Ele muito mais que um simples armazenamento de dados relacionais. O iFS (Internet File System)
combina a potncia do Oracle8i com a facilidade de uso de um sistema de arquivos. Ele permite que
os usurios movam todos os dados para o banco de dados do Oracle8i, no qual eles podem ser
armazenados e gerenciados com mais eficincia. Os usurios finais podem acessar facilmente arquivos
e pastas no Oracle iFS atravs de vrios protocolos, como HTML, FTP e IMAP4, que fornecem
acesso universal aos dados.
O Oracle8i interMedia permite que os usurios tornem seus dados multimdia acessveis Web,
incluindo dados de imagens, textos, udio e vdeo. O Oracle8i inclui um Java Virtual Machine
robusto, integrado e escalonvel no servidor (Jserver), que suporta Java em todas as camadas de
aplicaes. Esse recurso elimina a necessidade de recompilar ou modificar um cdigo Java quando for
preciso depur-lo em uma camada diferente.
Como o gerenciamento de recursos recentemente introduzido, o DBA pode escolher o melhor mtodo
para adequar ao perfil e carga de trabalho de uma aplicao. Os recursos estendidos de servidor
paralelo e rede melhoram a facilidade de administrao do sistema. A funcionalidade estendida da
duplicao avanada resulta em um melhor desempenho e segurana aperfeioada. Foram adicionados
recursos novos e importantes a linguagens.
I-23
Qualquer
cliente
de correio
Qualquer
cliente FTP
Lgica comercial
e dados
Bancos
de dados
Apresentao e
lgica comercial
Servidores de
aplicaes
Ferramentas de
desenvolvimento
Gerenciamento de sistema
Qualquer
navegador
SQL
PL/SQL
Java
Servios de rede
Copyright Oracle Corporation, 1999. Todos os direitos reservados.
Bancos de dados para executar a lgica comercial com uso intensivo do banco de dados e dos
dados do servidor
A Oracle oferece vrias ferramentas de desenvolvimento orientadas a GUI (Graphical User Interface)
mais avanadas para criar aplicaes comerciais, alm de um grande conjunto de aplicaes de
software para vrias reas de comrcio e indstria. possvel criar procedimentos de armazenamento,
funes e pacotes usando SQL, PL/SQL ou Java.
Instrues SQL
I-24
SELECT
Recuperao de dados
INSERT
UPDATE
DELETE
CREATE
ALTER
DROP
RENAME
TRUNCATE
COMMIT
ROLLBACK
SAVEPOINT
Controle de transao
GRANT
REVOKE
Instrues SQL
O Oracle SQL compatvel com os padres aceitos pela indstria. A Oracle Corporation garante a
compatibilidade futura com padres em desenvolvimento envolvendo ativamente uma equipe-chave
nos comits de padres SQL. Os comits aceitos pela indstria so o ANSI (American National
Standards Institute) e o ISO (International Standards Organization). O ANSI e o ISO aceitaram o
SQL como a linguagem padro para os bancos de dados relacionais.
Instruo
Descrio
SELECT
INSERT
UPDATE
DELETE
CREATE
ALTER
DROP
RENAME
TRUNCATE
COMMIT
ROLLBACK
SAVEPOINT
GRANT
REVOKE
Sobre PL/SQL
O PL/SQL uma extenso do SQL com
recursos de design de linguagens de
programao.
As instrues de consulta e a manipulao
de dados do SQL esto includas nas
unidades procedurais de cdigo.
I-25
Sobre PL/SQL
O PL/SQL (Procedural Language/SQL) uma extenso de linguagem procedural da Oracle
Corporation para SQL, a linguagem de acesso a dados padro para bancos de dados relacionais. O
PL/SQL oferece recursos de engenharia de software modernos, como, por exemplo, a encapsulao
de dados, o tratamento de excees, a ocultao de informaes, a orientao de objeto e assim por
diante, trazendo os recursos de programao mais modernos para o Oracle Server e o Toolset.
O PL/SQL incorpora muitos recursos avanados feitos em linguagens de programao projetadas
durante as dcadas de 70 e 80. Alm de aceitar a manipulao de dados, ele tambm permite que
instrues de consulta do SQL sejam includas em unidades procedurais de cdigo e estruturadas
em blocos, tornando o PL/SQL uma linguagem de processamento de transaes poderosa. Com o
PL/SQL, voc pode usar as instrues SQL para refinar os dados da Oracle e as instrues de
controle do PL/SQL para processar os dados.
Ambiente PL/SQL
Mecanismo PL/SQL
bloco
PL/SQL
bloco
PL/SQL
PL/SQL
SQL
Executor da
Instruo
Procedural
I-26
ENAME
---------KING
BLAKE
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
--------- --------- --------- --------- --------- --------PRESIDENT
17-NOV-81
5000
10
MANAGER
7839 01-MAY-81
2850
30
CLARK
JONES
MARTIN
ALLEN
TURNER
JAMES
MANAGER
MANAGER
SALESMAN
SALESMAN
SALESMAN
CLERK
7839
7839
7698
7698
7698
7698
09-JUN-81
02-APR-81
28-SEP-81
20-FEB-81
08-SEP-81
03-DEC-81
SALESMAN
LOC
ANALYST
---------CLERK
NEW
YORK
ANALYST
DALLAS
CLERK
CHICAGO
CLERK
BOSTON
7698
7566
7902
7566
7788
7782
22-FEB-81
03-DEC-81
17-DEC-80
09-DEC-82
12-JAN-83
23-JAN-82
7521
DNAMEWARD
7902
FORD
-------------7369
SMITH
ACCOUNTING
7788
SCOTT
20 RESEARCH
7876
30 SALESADAMS
MILLER
40 7934
OPERATIONS
DEPTNO
--------10
2450
2975
1250
1600
1500
950
1400
300
0
1250
500
30
3000
20
800
20
GRADE
LOSAL
HISAL
3000
20
--------- --------- --------1100 1
20
700
1200
1300 2
10
1201
1400
3
1401
2000
4
5
DEPT
2001
3001
SALGRADE
I-27
10
20
30
30
30
30
3000
9999
Sumrio
Os bancos de dados relacionais so compostos
por relaes, gerenciados por operaes
relacionais e regidos por restries de integridade
de dados.
O Oracle Server permite armazenar e gerenciar
informaes usando a linguagem SQL e o
mecanismo PL/SQL.
O Oracle8 baseado no ORDBMS (object relational
database management system).
O Oracle8i Server o banco de dados de
computao na Internet.
O PL/SQL uma extenso do SQL com recursos
de design de linguagens de programao.
I-28
Sumrio
Os RDBMSs (relational database management systems) so compostos por objetos ou relaes. Eles
so gerenciados por operaes e regidos por restries de integridade de dados.
A Oracle Corporation cria produtos e servios para atender suas necessidades de RDBMS. O produto
principal o Oracle Server, que permite armazenar e gerenciar informaes usando o SQL e o
mecanismo PL/SQL para construes procedurais.
SQL
O Oracle Server suporta o SQL do padro ANSI e contm extenses. O SQL uma linguagem usada
para comunicar-se com o servidor e acessar, manipular e controlar dados.
PL/SQL
A linguagem PL/SQL estende a linguagem SQL oferecendo construes procedurais estruturados em
blocos combinados com recursos no procedurais do SQL.
1
Criando Instrues
SQL Bsicas
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Listar os recursos das instrues SELECT
SQL
Executar uma instruo SELECT bsica
Diferenciar instrues SQL e comandos
SQL*Plus
1-2
Objetivo da Lio
Para extrair dados do banco de dados, preciso usar a instruo SELECT SQL (Structured Query
Language). Talvez voc necessite restringir as colunas exibidas. Esta lio descreve todas as
instrues SQL necessrias para executar essas aes.
Talvez voc deseje criar instrues SELECT que possam ser usadas continuamente. Esta lio
tambm aborda o uso dos comandos SQL*Plus para executar instrues SQL.
Projeo
Tabela 1
Tabela 1
Juno
Tabela 1
1-3
Tabela 2
Seleo: Voc pode usar o recurso de seleo no cdigo SQL para escolher as linhas de uma
tabela que deseja ver retornadas por uma consulta. Pode usar vrios critrios para restringir
seletivamente as linhas que voc v.
Projeo: Voc pode usar o recurso de projeo no cdigo SQL para escolher as colunas de
uma tabela que deseja ver retornadas por uma consulta. possvel escolher mais ou menos
colunas da tabela conforme sua necessidade.
Juno: Voc pode usar o recurso de juno no cdigo SQL para reunir dados armazenados em
tabelas diferentes, criando um vnculo entre eles. Voc aprender mais sobre junes em uma
lio posterior.
SELECT
FROM
1-4
Uma clusula FROM, que especifica a tabela que contm as colunas listadas na clusula SELECT
Na sintaxe:
SELECT
DISTINCT
coluna
apelido
FROM tabela
As instrues SQL no fazem distino entre maisculas de minsculas, a menos que indicado.
As guias e endentaes podem ser usadas para tornar o cdigo mais legvel.
Dentro do SQL*Plus, uma instruo SQL digitada no prompt SQL e as linhas subseqentes
so numeradas. Isso chama-se buffer de SQL. Somente uma instruo pode ser a atual a
qualquer momento dentro do buffer.
1-6
DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
Selecionando
Colunas Especficas
SQL> SELECT deptno, loc
2 FROM
dept;
DEPTNO
--------10
20
30
40
1-7
LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
Justificativa default
Esquerda: Dados de caractere e data
Direita: Dados numricos
1-8
Os cabealhos da coluna de caracteres e datas podem ser truncados, mas os cabealhos de nmeros,
no. Os cabealhos de coluna aparecem por default em letra minscula. Voc pode sobrepor a
exibio do cabealho de coluna com um apelido. Os apelidos de coluna so abordados
posteriormente nesta lio.
Introduo ao Oracle: SQL e PL/SQL 1-8
Expresses Aritmticas
Criar expresses com dados NUMBER e DATE
usando operadores aritmticos.
Operador
1-9
Descrio
Adicionar
Subtrair
Multiplicar
Dividir
Expresses Aritmticas
Talvez voc necessite modificar a forma de exibio dos dados, efetuar clculos ou consultar cenrios
what-if. Isso possvel usando expresses aritmticas. Uma expresso aritmtica possui nomes de
coluna, valores numricos constantes e operadores aritmticos.
Operadores Aritmticos
O slide lista os operadores aritmticos disponveis no cdigo SQL. Voc pode usar operadores
aritmticos em qualquer clusula de uma instruo SQL exceto na clusula FROM.
1-10
Precedncia do Operador
1-11
Precedncia do Operador
Se uma expresso aritmtica tiver mais de um operador, a multiplicao e a diviso sero avaliadas
primeiro. Se os operadores dentro uma expresso tiverem a mesma prioridade, ento a avaliao ser
realizada da esquerda para a direita.
Voc pode usar os parnteses a fim de forar a avaliao da expresso entre parnteses primeiro.
Precedncia do Operador
SQL> SELECT ename, sal, 12*sal+100
2 FROM
emp;
ENAME
SAL 12*SAL+100
---------- --------- ---------KING
5000
60100
BLAKE
2850
34300
CLARK
2450
29500
JONES
2975
35800
MARTIN
1250
15100
ALLEN
1600
19300
...
14 rows selected.
1-12
Usando Parnteses
SQL> SELECT ename, sal, 12*(sal+100)
2 FROM
emp;
ENAME
SAL 12*(SAL+100)
---------- --------- ----------KING
5000
61200
BLAKE
2850
35400
CLARK
2450
30600
JONES
2975
36900
MARTIN
1250
16200
...
14 rows selected.
1-13
Usando Parnteses
Voc pode sobrepor as normas de precedncia usando parnteses para especificar a ordem de
execuo dos operadores.
O exemplo no slide exibe o nome, o salrio e a remunerao anual dos funcionrios. Ele calcula a
remunerao anual como o salrio mensal mais um bnus mensal de US$100, multiplicado por 12.
Por causa dos parmetros, a adio tem prioridade sobre a multiplicao.
Valores Nulos
Se faltar o valor de dados em uma linha de uma determinada coluna, diz-se que esse valor nulo ou
contm nulo.
Um valor nulo no est disponvel, no atribudo, desconhecido ou no aplicvel. Um valor nulo
no o mesmo que um zero ou um espao. O zero um nmero e o espao um caractere.
As colunas de qualquer tipo de dados podem conter valores nulos, a menos que tenham sido definidas
como NOT NULL ou como PRIMARY KEY ao serem criadas.
Na coluna COMM da tabela EMP, note que somente o SALESMAN pode ganhar comisso. Outros
funcionrios no esto autorizados a ganhar comisso. Um valor nulo representa esse fato. Turner,
que um vendedor, no ganha nenhuma comisso. Observe que sua comisso zero e no nula.
1-15
1-16
Apelidos de Coluna
Ao exibir o resultado de uma consulta, o SQL*Plus normalmente usa o nome da coluna selecionada
como o cabealho da mesma. Em muitos casos, esse cabealho pode no ser descritivo e, desse modo,
de difcil compreenso. possvel alterar um cabealho de coluna usando um apelido da coluna.
Especifique o apelido aps a coluna na lista SELECT usando um espao como um separador. Por
default, os cabealhos de apelidos aparecem em letras maisculas. Se o apelido possuir espaos,
caracteres especiais (tais como # ou $) ou fizer distino entre maisculas e minsculas, coloque o
apelido entre aspas duplas (" ").
Operador de Concatenao
Concatena colunas ou strings de caractere
a outras colunas
representado por duas barras
verticais (||)
Cria uma coluna resultante que uma
expresso de caracteres
1-18
Operador de Concatenao
Voc pode vincular colunas outras colunas, expresses aritmticas ou valores constantes usando o
operador de concatenao (||). As colunas em cada lado do operador so combinadas para formar uma
coluna de sada nica.
Usando um Operador de
Concatenao
SQL> SELECT
2 FROM
ename||job AS "Employees"
emp;
Employees
------------------KINGPRESIDENT
BLAKEMANAGER
CLARKMANAGER
JONESMANAGER
MARTINSALESMAN
ALLENSALESMAN
...
14 rows selected.
1-19
1-20
1-21
Linhas Duplicadas
A exibio default das consultas de todas
as linhas, incluindo linhas duplicadas.
SQL> SELECT deptno
2 FROM
emp;
DEPTNO
--------10
30
10
20
...
14 rows selected.
1-22
Linhas Duplicadas
Exceto se indicado o contrrio, o SQL*Plus exibe os resultados de uma consulta sem eliminar as
linhas duplicadas. O exemplo do slide exibe todos os nmeros de departamento a partir da tabela
EMP. Note que os nmeros de departamento esto repetidos.
DEPTNO
--------10
20
30
1-23
JOB
--------CLERK
MANAGER
PRESIDENT
ANALYST
selected.
Buffer
Instrues SQL
Servidor
SQL*Plus
Comandos do
SQL*Plus
Resultados da Consulta
Relatrio Formatado
1-24
SQL e SQL*Plus
SQL uma linguagem de comando para comunicao com o Oracle Server a partir de qualquer
ferramenta ou aplicao. O Oracle SQL possui muitas extenses. Quando voc informa uma
instruo SQL, ela armazenada em uma parte da memria chamada buffer de SQL e permanece l
at que voc informe uma nova instruo.
O SQL*Plus uma ferramenta Oracle que reconhece e submete instrues SQL ao Oracle Server
para execuo e contm sua prpria linguagem de comando.
Recursos do Cdigo SQL
Podem ser utilizados por uma grande faixa de usurios, incluindo aqueles com pouca ou
nenhuma experincia em programao
uma linguagem no procedural
Reduz o perodo de tempo necessrio para a criao e manuteno de sistemas
uma linguagem similar ao ingls
Recursos do SQL*Plus
Aceita entrada ad hoc das instrues
Aceita entrada SQL a partir dos arquivos
Oferece um editor de linha para modificar instrues SQL
Controla as configuraes ambientais
Formata os resultados da consulta em um relatrio bsico
Acessa bancos de dados remotos e locais
Introduo ao Oracle: SQL e PL/SQL 1-24
SQL*Plus
Um ambiente
Patenteado pela Oracle
As palavras-chave podem
ser abreviadas
Os comandos no
permitem a manipulao
dos valores no banco
de dados
Instrues
SQL
Comandos
SQL*Plus
1-25
Buffer de
SQL
Buffer de
SQL*Plus
SQL*Plus
possvel abreviar.
No possvel abreviar.
SQL*Plus
SQL*Plus um ambiente no qual voc pode realizar o seguinte:
Executar instrues SQL para recuperar, modificar, adicionar e remover dados do banco de
dados.
Criar arquivos de script para armazenar instrues SQL para uso repetitivo no futuro.
Objetivo
Ambiente
Formato
Manipulao de arquivo
Execuo
Editar
Interao
Diversos
Na linha de comando:
sqlplus [nome do usurio[/senha
[@banco de dados]]]
1-27
senha
a sua senha do banco de dados (se digitar sua senha aqui, ela estar visvel)
1-28
1-29
Type
-----------NUMBER(2)
VARCHAR2(14)
VARCHAR2(13)
indica se uma coluna deve conter dados; NOT NULL indica que uma
coluna deve conter dados
Type
Descrio
NUMBER(p,s)
VARCHAR2(s)
DATE
Valor de data e hora entre 1 de janeiro, 4712 A.C. e 31 de dezembro, 9999 D.C.
CHAR(s)
Comandos de Edio do
SQL*Plus
A[PPEND] texto
C[HANGE] / antigo / novo
C[HANGE] / texto /
CL[EAR] BUFF[ER]
DEL
DEL n
DEL m n
1-30
Descrio
A[PPEND] texto
C[HANGE] / texto /
CL[EAR] BUFF[ER]
DEL
Diretrizes
n
n texto
0 texto
1-31
Descrio
I[NPUT]
I[NPUT] texto
L[IST]
L[IST] n
L[IST] m n
R[UN]
n texto
0 texto
Voc pode digitar somente um comando SQL*Plus por prompt SQL. Os comandos SQL*Plus no
ficam armazenados no buffer. Para continuar um comando SQL*Plus na prxima linha, finalize a
linha atual com um hfen (-).
Comandos de Arquivo do
SQL*Plus
SAVE nome de arquivo
GET nome de arquivo
START nome de arquivo
@ nome de arquivo
EDIT nome de arquivo
SPOOL nome de arquivo
EXIT
1-32
Descrio
@ nome de arquivo
ED[IT]
EXIT
Sumrio
SELECT
FROM
1-33
Instruo SELECT
Nesta lio, voc aprendeu sobre a recuperao de dados de uma tabela de banco de dados com a
instruo SELECT.
[DISTINCT] {*,coluna [apelido],...}
tabela;
SELECT
FROM
onde:
SELECT
DISTINCT
suprime as duplicatas.
coluna
apelido
FROM tabela
SQL*Plus
SQL*Plus um ambiente de execuo que pode ser usado para enviar instrues SQL ao servidor do
banco de dados, editar e salvar as instrues SQL. As instrues podem ser executadas a partir do
prompt SQL ou de um arquivo de script.
1-34
Exerccio 1
1. Inicie uma sesso SQL*Plus usando um ID e uma senha de usurio fornecidos pelo instrutor.
2. Os comandos SQL*Plus acessam o banco de dados.
Verdadeiro/Falso
3. A instruo SELECT ser executada corretamente?
Verdadeiro/Falso
SQL> SELECT
2 FROM
*
salgrade;
empno, ename
salary x 12 ANNUAL SALARY
emp;
Null?
Type
----------- --------
------------
DEPTNO
DNAME
LOC
NUMBER(2)
VARCHAR2(14)
VARCHAR2(13)
DEPTNO
-----10
20
30
40
NOT NULL
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
Exerccio 1 (continuao)
7. Mostre a estrutura da tabela EMP. Crie uma consulta para exibir o nome, o cargo, a data de
admisso
e o nmero do funcionrio para cada funcionrio, com o nmero do funcionrio aparecendo
primeiro. Salve a instruo SQL em um arquivo nomeado plq7.sql.
Name
Null?
--------- -------EMPNO
NOT NULL
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO
NOT NULL
Type
------------NUMBER(4)
VARCHAR2(10)
VARCHAR2(9)
NUMBER(4)
DATE
NUMBER(7,2)
NUMBER(7,2)
NUMBER(2)
17-NOV-81
01-MAY-81
09-JUN-81
02-APR-81
28-SEP-81
20-FEB-81
08-SEP-81
03-DEC-81
22-FEB-81
03-DEC-81
17-DEC-80
09-DEC-82
12-JAN-83
23-JAN-82
Exerccio 1 (continuao)
9. Crie uma consulta para exibir os cargos exclusivos a partir da tabela EMP.
JOB
----------ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN
Job
Hire Date
--------------17-NOV-81
01-MAY-81
09-JUN-81
02-APR-81
28-SEP-81
20-FEB-81
08-SEP-81
03-DEC-81
22-FEB-81
03-DEC-81
17-DEC-80
09-DEC-82
12-JAN-83
23-JAN-82
Exerccio 1 (continuao)
11. Exiba o nome concatenado com o cargo (job), separado por uma vrgula e espao, e nomeie a
coluna Employee and Title.
Employee and Title
------------------KING, PRESIDENT
BLAKE, MANAGER
CLARK, MANAGER
JONES, MANAGER
MARTIN, SALESMAN
ALLEN, SALESMAN
TURNER, SALESMAN
JAMES, CLERK
WARD, SALESMAN
FORD, ANALYST
SMITH, CLERK
SCOTT, ANALYST
ADAMS, CLERK
MILLER, CLERK
14 rows selected.
2
Restringindo e
Classificando Dados
Objetivos
2-2
Objetivo da Lio
Ao recuperar dados do banco de dados, pode ser preciso restringir as linhas de dados exibidas ou
especificar a ordem de exibio das mesmas. Essa lio explica as instrues SQL que voc utiliza
para executar essas aes.
KING
BLAKE
CLARK
JONES
JOB
...
DEPTNO
PRESIDENT
MANAGER
MANAGER
MANAGER
10
30
10
20
"recuperar
todos os
funcionrios do
departamento 10"
EMP
EMPNO ENAME
JOB
7839 KING
PRESIDENT
7782 CLARK MANAGER
7934 MILLER CLERK
2-3
...
DEPTNO
10
10
10
2-4
condio
A clusula WHERE pode comparar valores em colunas, valores literais, expresses aritmticas ou
funes. A clusula WHERE formada por trs elementos:
Nome de coluna
Operadores de comparao
2-5
JOB
DEPTNO
--------- --------CLERK
30
CLERK
20
CLERK
20
CLERK
10
2-6
Operadores de Comparao
Operador
=
Igual a
>
Maior do que
>=
<
2-7
Significado
<=
Menor ou igual a
<>
Diferente de
Operadores de Comparao
Usa-se os operadores de comparao em condies que comparam uma expresso a outra. Eles so
usados na clusula WHERE no seguinte formato:
Sintaxe
WHERE expr valor operador
Exemplos
WHERE hiredate='01-JAN-95'
WHERE sal>=1500
WHERE ename='SMITH'
Usando Operadores
de Comparao
SQL> SELECT ename, sal, comm
2 FROM
emp
3 WHERE sal<=comm;
ENAME
SAL
COMM
---------- --------- --------MARTIN
1250
1400
2-8
Outros Operadores de
Comparao
2-9
Operador
Significado
BETWEEN
...AND...
IN(list)
LIKE
IS NULL
um valor nulo
ename, sal
emp
sal BETWEEN 1000 AND 1500;
ENAME
SAL
---------- --------MARTIN
1250
TURNER
1500
WARD
1250
ADAMS
1100
MILLER
1300
2-10
Limite
inferior
Limite
superior
O Operador BETWEEN
Voc pode exibir linhas baseadas em uma faixa de valores usando o operador BETWEEN. A faixa
que voc especificar possuir uma faixa inferior e uma superior.
A instruo SELECT no slide retorna as linhas da tabela EMP para qualquer funcionrio cujo salrio
esteja entre US$1.000 e US$1.500.
Valores especificados com o operador BETWEEN so inclusivos. Voc deve especificar primeiro o
limite inferior.
Usando o Operador IN
Use o operador IN para testar os valores de
uma lista.
SQL> SELECT
2 FROM
3 WHERE
EMPNO
--------7902
7369
7788
7876
2-11
ENAME
SAL
MGR
---------- --------- --------FORD
3000
7566
SMITH
800
7902
SCOTT
3000
7566
ADAMS
1100
7788
O Operador IN
Para testar os valores em uma determinada lista, use o operador IN.
O exemplo do slide exibe o nmero do funcionrio, o nome, o salrio e o nmero de funcionrio do
gerente de todos os funcionrios cujo nmero de funcionrio do gerente for 7902, 7566 ou 7788.
O operador IN pode ser usado com qualquer tipo de dados. O exemplo seguinte retorna uma linha da
tabela EMP para qualquer funcionrio cujo nome estiver includo na lista de nomes na clusula
WHERE:
SQL> SELECT
2 FROM
3 WHERE
Se forem utilizados caracteres ou datas na lista, eles devem estar entre aspas simples ('').
2-12
ename
emp
ename LIKE 'S%';
O Operador LIKE
Talvez nem sempre voc saiba o valor exato pelo qual procurar. possvel selecionar linhas que
vinculem um padro de caractere usando o operador LIKE. A operao de vinculao de um padro
de caractere refere-se a uma pesquisa de curinga. Dois smbolos podem ser utilizados para construir a
string de pesquisa.
Smbolo
Descrio
A instruo SELECT acima retorna o nome do funcionrio da tabela EMP para qualquer funcionrio
cujo nome comea com "S". Note o "S". maisculo. Os nomes iniciados com "s" no retornaro.
O operador LIKE pode ser usado como um atalho para algumas comparaes BETWEEN. O
exemplo a seguir exibe os nomes as datas de admisso de todos os funcionrios admitidos entre
janeiro e dezembro de 1981:
SQL>
2
3
SELECT
FROM
WHERE
ename, hiredate
emp
hiredate LIKE '%1981';
ename
emp
ename LIKE '_A%';
ENAME
---------MARTIN
JAMES
WARD
A opo ESCAPE identifica a barra invertida (\) como o caractere de escape. No padro, o caractere
de escape vem antes do sublinhado (_). Isso faz com que o Oracle Server interprete o sublinhado
literalmente.
ename, mgr
emp
mgr IS NULL;
ENAME
MGR
---------- --------KING
2-14
O Operador IS NULL
O operador IS NULL testa valores que so nulos. Um valor nulo significa que o valor no est
disponvel, no-atribudo, desconhecido ou no-aplicvel. Assim, no possvel testar com (=)
porque um valor nulo no pode ser igual ou desigual a qualquer valor. O exemplo do slide recupera o
nome e o gerente de todos os funcionrios que no possuem um gerente.
Por exemplo, para exibir o nome, o cargo e a comisso de todos os funcionrios que no esto
nomeados para obter uma comisso, use a seguinte instruo SQL:
SQL> SELECT
2 FROM
3 WHERE
ENAME
-------KING
BLAKE
CLARK
...
JOB
COMM
----------- -----PRESIDENT
MANAGER
MANAGER
Operadores Lgicos
2-15
Operador
Significado
AND
OR
NOT
Operadores Lgicos
Um operador lgico combina o resultado de duas condies de componente para produzir um nico
resultado com base neles ou inverter o resultado para uma condio nica. Trs operadores lgicos
esto disponveis no SQL:
AND
OR
NOT
Todos os exemplos at aqui especificaram somente uma condio na clusula WHERE. Voc pode
usar vrias condies em uma clusula WHERE usando operadores AND e OR.
SELECT
FROM
WHERE
AND
EMPNO
--------7876
7934
2-16
ENAME
---------ADAMS
MILLER
JOB
SAL
--------- --------CLERK
1100
CLERK
1300
O Operador AND
No exemplo, as duas condies devem ser verdadeiras para cada registro a ser selecionado. Assim,
um funcionrio que possua o cargo CLERK e receba mais de US$1.100 ser selecionado.
Todas as pesquisas de caractere fazem distino entre maisculas de minsculas. Nenhuma linha
retornar se CLERK no estiver em letra maiscula. As strings de caractere devem estar entre aspas.
Tabela de Verdade AND
A tabela a seguir mostra os resultados da combinao de duas expresses com AND:
AND
TRUE
TRUE
TRUE
FALSE
FALSE
NULL
NULL
FALSE
NULL
FALSE
NULL
FALSE
FALSE
FALSE
NULL
Usando o Operador OR
OR exige que cada condio seja TRUE.
SQL>
2
3
4
SELECT
FROM
WHERE
OR
EMPNO ENAME
--------- ---------7839 KING
7698 BLAKE
7782 CLARK
7566 JONES
7654 MARTIN
...
7900 JAMES
...
14 rows selected.
2-17
JOB
SAL
--------- --------PRESIDENT
5000
MANAGER
2850
MANAGER
2450
MANAGER
2975
SALESMAN
1250
CLERK
950
O Operador OR
No exemplo, cada condio pode ser verdadeira para qualquer registro a ser selecionado. Assim, um
funcionrio que possua o cargo CLERK ou que receba mais de US$1.100 ser selecionado.
A Tabela de Verdade OR
A tabela a seguir mostra os resultados da combinao de duas expresses com OR:
OR
TRUE
TRUE
TRUE
FALSE
TRUE
NULL
TRUE
FALSE
NULL
TRUE
TRUE
FALSE
NULL
NULL
NULL
ENAME
---------KING
MARTIN
ALLEN
TURNER
WARD
2-18
JOB
--------PRESIDENT
SALESMAN
SALESMAN
SALESMAN
SALESMAN
O Operador NOT
O exemplo do slide exibe o nome e o cargo de todos os funcionrios que no possuem os cargos
CLERK, MANAGER ou ANALYST.
A Tabela de Verdade NOT
A tabela a seguir mostra o resultado da aplicao do operador NOT para uma condio:
NOT
TRUE
TRUE
FALSE
FALSE
TRUE
NULL
NULL
Observao: O operador NOT pode ser utilizado tambm com outros operadores SQL, como
BETWEEN, LIKE e NULL.
...
...
...
...
WHERE
WHERE
WHERE
WHERE
job
sal
ename
comm
NOT
NOT
NOT
IS
IN ('CLERK', 'ANALYST')
BETWEEN 1000 AND 1500
LIKE '%A%'
NOT NULL
Regras de Precedncia
Ordem de Avaliao
1
Operador
Todos os operadores
de comparao
NOT
3
4
AND
OR
2-19
Regras de Precedncia
SQL>
2
3
4
5
SELECT
FROM
WHERE
OR
AND
ENAME
---------KING
MARTIN
ALLEN
TURNER
WARD
2-20
A primeira condio que o cargo seja PRESIDENT e o salrio maior que 1500.
Regras de Precedncia
Use parnteses para forar a prioridade.
SQL>
2
3
4
5
SELECT
FROM
WHERE
OR
AND
ENAME
---------KING
ALLEN
2-21
JOB
SAL
--------- --------PRESIDENT
5000
SALESMAN
1600
Usando Parnteses
No exemplo, h duas condies:
Clusula ORDER BY
Classificar as linhas com a clusula ORDER BY
ASC: ordem crescente, default
DESC: ordem decrescente
A clusula ORDER BY vem depois na instruo
SELECT.
SQL> SELECT
ename, job, deptno, hiredate
2 FROM
emp
3 ORDER BY hiredate;
ENAME
JOB
DEPTNO HIREDATE
---------- --------- --------- --------SMITH
CLERK
20 17-DEC-80
ALLEN
SALESMAN
30 20-FEB-81
...
14 rows selected.
Copyright Oracle Corporation, 1999. Todos os direitos reservados.
2-22
A Clusula ORDER BY
A ordem das linhas retornadas em um resultado de consulta indefinida. A clusula ORDER BY
pode ser utilizada para classificar as linhas. Se voc usar a clusula ORDER BY, deve coloc-la por
ltimo. possvel especificar uma expresso ou um apelido para classificao.
Sintaxe
SELECT
expr
FROM
tabela
[WHERE
condio(es)]
[ORDER BY
onde:
ORDER BY
ASC
DESC
Se a clusula ORDER BY no for usada, a ordem de classificao ser indefinida e o Oracle Server
talvez no extraia as linhas na mesma ordem ao realizar a mesma consulta duas vezes. Use a clusula
ORDER BY para exibir as linhas em uma ordem especfica.
Classificando em
Ordem Decrescente
SQL> SELECT
ename, job, deptno, hiredate
2 FROM
emp
3 ORDER BY hiredate DESC;
ENAME
JOB
DEPTNO HIREDATE
---------- --------- --------- --------ADAMS
CLERK
20 12-JAN-83
SCOTT
ANALYST
20 09-DEC-82
MILLER
CLERK
10 23-JAN-82
JAMES
CLERK
30 03-DEC-81
FORD
ANALYST
20 03-DEC-81
KING
PRESIDENT
10 17-NOV-81
MARTIN
SALESMAN
30 28-SEP-81
...
14 rows selected.
2-23
Valores numricos so exibidos primeiro com os valores mais baixos por exemplo, 1999.
Valores de datas so exibidos primeiro com os valores mais recentes por exemplo,
01-JAN-92 antes de 01-JAN-95.
2-24
ename, sal
emp
deptno, sal DESC;
Sumrio
SELECT
FROM
[WHERE
[ORDER BY
2-26
Sumrio
Nesta lio, voc aprendeu sobre a restrio e classificao de colunas retornadas pela instruo
SELECT. Tambm aprendeu como implementar vrios operadores.
2-27
Exerccio 2
1. Crie uma consulta para exibir o nome e o salrio dos funcionrios que recebem mais de
US$2.850. Salve a instruo SQL em um arquivo p2q1.sql. Execute a consulta.
ENAME
-------KING
JONES
FORD
SCOTT
SAL
---5000
2975
3000
3000
2. Crie uma consulta para exibir o nome do funcionrio e o nmero do departamento para o
nmero do funcionrio 7566.
ENAME DEPTNO
------ -----JONES
20
3. Modifique o arquivo p2q1.sql para exibir o nome e o salrio de todos os funcionrios cujos
salrios no estejam na faixa entre US$1.500 e US$2.850. Salve novamente a instruo SQL
em um arquivo nomeado p2q3.sql. Execute novamente a consulta.
ENAME
SAL
------- ----KING
5000
JONES
2975
MARTIN
1250
JAMES
950
WARD
1250
FORD
3000
SMITH
800
SCOTT
3000
ADAMS
1100
MILLER
1300
10 rows selected.
Exerccio 2 (continuao)
4. Exiba o nome do funcionrio, o cargo e a data de admisso dos funcionrios admitidos entre
20 de fevereiro de 1981 e 1 de maio de 1981. Ordene a consulta de modo crescente pela data
inicial.
ENAME
------ALLEN
WARD
JONES
BLAKE
JOB
--------SALESMAN
SALESMAN
MANAGER
MANAGER
HIREDATE
---------------20-FEB-81
22-FEB-81
02-APR-81
01-MAY-81
6. Modifique o p2q3.sql para listar o nome e o salrio dos funcionrios que recebem mais de
US$1.500 e que esto nos departamentos 10 ou 30. Nomeie as colunas Employee e Monthly
Salary, respectivamente. Salve novamente a instruo SQL em um arquivo p2q6.sql.
Execute novamente a consulta..
Employee
-------KING
BLAKE
CLARK
ALLEN
Monthly Salary
-------------5000
2850
2450
1600
Exerccio 2 (continuao)
7. Exiba o nome e a data de admisso de cada funcionrio admitido em 1982.
ENAME
-----SCOTT
MILLER
HIREDATE
--------09-DEC-82
23-JAN-82
SAL
---1600
1500
1250
1250
COMM
---300
0
1400
500
11. Exiba todos os funcionrios que possuem duas letras L em seus nomes e esto no
departamento 30 ou seu gerente seja o 7782.
ENAME
---------ALLEN
MILLER
Exerccio 2 (continuao)
Se voc quiser mais desafios, complete os exerccios abaixo:
12. Exiba o nome, o cargo e o salrio de todos os funcionrios cujos cargos seja Clerk ou Analyst
e que seus salrios no sejam iguais a US$1.000, US$3.000 ou US$5.000.
ENAME
-----JAMES
SMITH
ADAMS
MILLER
JOB
SAL
------- ----CLERK
950
CLERK
800
CLERK
1100
CLERK
1300
13. Modifique o p2q6.sql para exibir o nome, o salrio e a comisso de todos os funcionrios
cuja quantia de comisso seja maior que seus salrios com 10% de aumento. Execute
novamente a consulta. Salve novamente a consulta como p2q13.sql.
Employee
Monthly Salary COMM
---------- --------------- ----MARTIN
1250 1400
3
Funes de Uma nica Linha
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Descrever vrios tipos de funes
disponveis no SQL
Usar funes de data, nmero e caractere
nas instrues SELECT
Descrever o uso das funes de converso
3-2
Objetivo da Lio
As funes formam o bloco de consulta bsico mais avanado e so usadas para manipular valores de
dados. Esta a primeira de duas lies a explorar funes. Sero abordadas as funes de caractere de
uma nica linha, de nmero e de datas, bem como aquelas funes que convertem dados de um tipo
para outro por exemplo, dados de caractere para numrico.
Funes SQL
Entrada
Sada
Funo
arg 1
A funo executa
a ao
arg 2
Resultado
valor
arg n
3-3
Funes SQL
As funes so um recurso avanado do SQL e podem ser usadas para realizar o seguinte:
Funes
Funes de
Uma nica Linha
3-4
Funes de
Vrias Linhas
Caractere
Nmero
Data
Converso
3-5
Nome da coluna
Expresso
Podem ser usados em clusulas SELECT, WHERE e ORDER BY; podem ser aninhados
Na sintaxe:
function_name
coluna
o nome da funo
qualquer coluna de banco de dados nomeada
expresso
arg1, arg2
Geral
Nmero
Funes de
Uma nica Linha
Converso
3-6
Data
Funes de data: Operam sobre valores de tipo de dados da data (Todas as funes de data
retornam data um valor de tipo de dados de data exceto a funo MONTHS_BETWEEN, que
retorna um nmero.)
Funes gerais:
Funo NVL
Funo DECODE
Funes de Caractere
Funes de
caractere
Funes de Converso de
Maisculas e Minsculas
Funes de manipulao
de caractere
LOWER
UPPER
CONCAT
SUBSTR
INITCAP
LENGTH
INSTR
LPAD
TRIM
3-7
Funes de Caractere
As funes de caractere de uma nica linha aceitam dados de caractere como entrada e podem
retornar valores de nmero e de caractere. As funes de caractere podem ser dividas nas
seguintes:
Funo
Objetivo
LOWER(coluna|expresso)
UPPER(coluna|expresso)
INITCAP(coluna|expresso)
CONCAT(coluna1|expresso1,
coluna2|expresso2)
SUBSTR(coluna|expresso,m[,n])
Funes de Caractere
Funes de
caractere
Funes de Converso de
Maisculas e Minsculas
Funes de manipulao
de caractere
LOWER
UPPER
CONCAT
SUBSTR
INITCAP
LENGTH
INSTR
LPAD
TRIM
3-8
Objetivo
LENGTH(coluna|expresso)
INSTR(coluna|expresso,m)
LPAD(coluna|expresso, n,
'string')
TRIM(anterior|posterior|ambos,
trim_character FROM trim_source)
Funes de Converso de
Maisculas e Minsculas
Converter maisculas em minsculas para
strings de caractere
3-9
Funo
Resultado
LOWER('SQL Course')
sql course
UPPER('SQL Course')
SQL COURSE
INITCAP('SQL Course')
Sql Course
INITCAP: Converte a primeira letra de cada palavra para maiscula e mantm as outras letras
em minscula
EMPNO ENAME
DEPTNO
--------- ---------- --------7698 BLAKE
30
3-10
ename = 'BLAKE'
O nome na entrada aparece como se estivesse armazenado no banco de dados. Para exibir o nome com a
primeira letra maiscula, use a funo INITCAP na instruo SELECT.
SQL> SELECT
2 FROM
3 WHERE
Funes de Manipulao
de Caractere
Manipular strings de caractere
Funo
Resultado
CONCAT('Good', 'String')
GoodString
SUBSTR('String',1,3)
Str
LENGTH('String')
INSTR('String', 'r')
LPAD(sal,10,'*')
******5000
MITH
3-11
CONCAT: Une valores de juno (Voc est limitado a usar dois parmetros com CONCAT.)
Usando as Funes de
Manipulao de Caractere
SQL> SELECT ename, CONCAT (ename, job), LENGTH(ename),
2
INSTR(ename, 'A')
3 FROM
emp
4 WHERE SUBSTR(job,1,5) = 'SALES';
ENAME
---------MARTIN
ALLEN
TURNER
WARD
3-12
CONCAT(ENAME,JOB)
LENGTH(ENAME) INSTR(ENAME,'A')
------------------- ------------- ---------------MARTINSALESMAN
6
2
ALLENSALESMAN
5
1
TURNERSALESMAN
6
0
WARDSALESMAN
4
2
CONCAT(ENAME,JOB)
LENGTH(ENAME) INSTR(ENAME,'A')
------------------- ------------- ---------------MARTINSALESMAN
6
2
ALLENSALESMAN
5
1
Funes Numricas
ROUND: Arredonda valor para determinado
decimal
ROUND(45.926, 2)
45.93
45.92
3-13
100
Funes Numricas
As funes numricas aceitam entrada numrica e retornam valores numricos. Esta seo descreve
algumas das funes numricas.
Funo
Objetivo
ROUND(coluna|expresso,n)
TRUNC(coluna|expresso,n)
MOD(m,n)
3-14
Funo ROUND
A funo ROUND arredonda a coluna, expresso ou valor para n casas decimais. Se o segundo
argumento for 0 ou estiver ausente, o valor ser arredondado para nenhuma casa decimal. Se o
segundo argumento for 2, o valor ser arredondado para duas casas decimais. Da mesma forma,
se o segundo argumento for -2, o valor ser arredondado para duas casas decimais para a esquerda.
A funo ROUND pode tambm ser utilizada com funes de data. Voc ver exemplos mais
adiante nesta seo.
A tabela DUAL fictcia. Mais informaes sero fornecidas mais tarde.
3-15
Funo TRUNC
A funo TRUNC trunca a coluna, expresso ou valor para n casas decimais.
A funo TRUNC trabalha com argumentos similares aos da funo ROUND. Se o segundo
argumento for 0 ou estiver ausente, o valor ser truncado para nenhuma casa decimal. Se o segundo
argumento for 2, o valor ser truncado para duas casas decimais. Da mesma forma, se o segundo
argumento for -2, o valor ser truncado para duas casas decimais para esquerda.
Semelhante funo ROUND, a funo TRUNC pode ser usada com funes de data.
ENAME
SAL
COMM MOD(SAL,COMM)
---------- --------- --------- ------------MARTIN
1250
1400
1250
ALLEN
1600
300
100
TURNER
1500
0
1500
WARD
1250
500
250
3-16
Funo MOD
A funo MOD localiza o restante do valor 1 dividido pelo valor 2. O exemplo do slide calcula o
restante da proporo de salrio para comisso de todos os funcionrios cujo cargo salesman.
3-17
3-18
Resultado
Descrio
data + nmero
Data
data - nmero
Data
data - data
Nmero de dias
data + nmero/24
Data
ENAME
---------KING
CLARK
MILLER
3-19
WEEKS
--------830.93709
853.93709
821.36566
Funes de Data
Funo
Descrio
MONTHS_BETWEEN
Nmero de meses
entre duas datas
ADD_MONTHS
NEXT_DAY
LAST_DAY
ltimo dia do ms
ROUND
Data de arredondamento
TRUNC
3-20
Funes de Data
Funes de data operam em datas Oracle. Todas as funes de data retornam um valor de tipo de dados
DATE exceto MONTHS_BETWEEN, que retorna um valor numrico.
TRUNC(data[, 'fmt']): Retorna a data com a parte da hora do dia truncada para a unidade
especificada pelo modelo de formato fmt. Se o modelo de formato fmt for omitido, a data ser
truncada para o dia mais prximo.
Esta lista um subconjunto de funes de data disponveis. Os modelos de formato so abordados mais
tarde nesta lio. Exemplos de modelos de formato so ms e ano.
Introduo ao Oracle: SQL e PL/SQL 3-20
ADD_MONTHS ('11-JAN-94',6)
'11-JUL-94'
NEXT_DAY ('01-SEP-95','FRIDAY')
'08-SEP-95'
LAST_DAY('01-SEP-95')
'30-SEP-95'
3-21
empno, hiredate,
MONTHS_BETWEEN(SYSDATE, hiredate) TENURE,
ADD_MONTHS(hiredate, 6) REVIEW,
NEXT_DAY(hiredate, 'FRIDAY'), LAST_DAY(hiredate)
emp
MONTHS_BETWEEN (SYSDATE, hiredate)<200;
EMPNO HIREDATE
TENURE REVIEW
NEXT_DAY( LAST_DAY(
- --------- --------- --------- --------- --------7839 17-NOV-81 192.24794 17-MAY-82 20-NOV-81 30-NOV-81
7698 01-MAY-81 198.76407 01-NOV-81 08-MAY-81 31-MAY-81
...
11 rows selected.
-----
01-AUG-95
ROUND('25-JUL-95','YEAR')
01-JAN-96
TRUNC('25-JUL-95','MONTH')
01-JUL-95
TRUNC('25-JUL-95','YEAR')
01-JAN-95
3-22
empno, hiredate,
ROUND(hiredate, 'MONTH'), TRUNC(hiredate, 'MONTH')
emp
hiredate like '%1982';
HIREDATE
--------09-DEC-82
23-JAN-82
ROUND(HIR
--------01-DEC-82
01-FEB-82
TRUNC(HIR
--------01-DEC-82
01-JAN-82
Funes de Converso
Converso de
tipo de dados
Converso implcita
de tipo de dados
3-23
Converso explcita
de tipo de dados
Funes de Converso
Alm dos tipos de dados Oracle, as colunas de tabela em um banco de dados Oracle8 podem ser
definidas usando os tipos de dados ANSI, DB2 e SQL/DS. No entanto, o Oracle Server converte
internamente tais tipos de dados para tipos de dados Oracle8.
Em alguns casos, o Oracle Server aceita dados de um tipo de dados em que espera dados de um tipo
de dados diferente. Isso permitido quando o Oracle Server pode converter dados automaticamente
para o tipo de dados esperado. Essa converso de tipo de dados pode ser realizada de forma implcita
pelo Oracle Server ou explcita pelo usurio.
As converses implcitas de tipo de dados funcionam de acordo com as regras explicadas nos
prximos dois slides.
As converses explcitas de tipo de dados podem ser realizadas usando-se as funes de converso.
As funes de converso convertem um valor de um tipo de dados para outro. Geralmente, o formato
dos nomes de funo seguem a conveno tipo de dados TO tipo de dados. O primeiro tipo de dados
um tipo de dados de entrada; o ltimo tipo de dados de sada.
Observao: Embora a converso implcita de tipos de dados esteja disponvel, recomendvel
que voc realize a converso explcita de tipo de dados a fim de garantir a confiabilidade das
instrues SQL.
Converso Implcita
de Tipo de Dados
Para atribuies, o Oracle Server pode
converter automaticamente o seguinte:
De
Para
VARCHAR2 ou CHAR
NUMBER
VARCHAR2 ou CHAR
DATE
NUMBER
VARCHAR2
DATE
VARCHAR2
3-24
Converso Implcita
de Tipo de Dados
Para avaliao da expresso, o Oracle Server
pode converter automaticamente o seguinte:
De
Para
VARCHAR2 ou CHAR
NUMBER
VARCHAR2 ou CHAR
DATE
3-25
Converso Explcita
de Tipo de Dados
TO_NUMBER
NUMBER
TO_DATE
CHARACTER
TO_CHAR
3-26
DATE
TO_CHAR
Objetivo
TO_CHAR(nmero|data,[ fmt],
[nlsparams])
Caractere decimal
Separador de grupo
Converso Explcita
de Tipo de Dados
TO_NUMBER
NUMBER
CHARACTER
TO_CHAR
3-27
TO_DATE
DATE
TO_CHAR
Objetivo
TO_CHAR(nmero|data,[ fmt],
[nlsparams])
Converso de data:
TO_NUMBER(carac,[fmt], [nlsparams])
TO_DATE(carac,[fmt],[nlsparams])
Converso Explcita
de Tipo de Dados
TO_NUMBER
NUMBER
CHARACTER
TO_CHAR
3-28
TO_DATE
DATE
TO_CHAR
O modelo de formato:
Deve estar entre aspas simples e fazer
distino entre maisculas e minsculas
Pode incluir qualquer elemento de formato
de data vlido
Tem um elemento fm para remover espaos
preenchidos ou suprimir zeros esquerda
separado do valor de data por uma vrgula
3-29
O modelo de formato deve estar entre aspas simples e fazer distino entre maisculas e
minsculas.
O modelo de formato pode incluir qualquer elemento de formato de data vlido. Certifique-se
de separar o valor da data do modelo de formato por uma vrgula.
SQL> SELECT
2 FROM
3 WHERE
Elementos de Modelo
de Formato de Data
YYYY
YEAR
MM
MONTH
DY
DAY
3-30
Descrio
SCC ou CC
YYY ou YY ou Y
Y,YYY
SYEAR ou YEAR
BC ou AD
Indicador AC/DC
B.C. ou A.D.
Trimestre do ano
MM
MONTH
MON
RM
Ms em nmeros romanos
WW ou W
Semana do ano ou ms
DDD ou DD ou D
DAY
DY
Elementos de Modelo
de Formato de Data
15:45:32 PM
12 of OCTOBER
3-31
fourteenth
Formatos de Hora
Use os formatos listados tabelas a seguir para exibir informaes de hora e literais e alterar numerais
para nmeros escritos.
Elemento
Descrio
AM ou PM
Indicador meridiano
A.M. ou P.M.
HH ou HH12 ou HH24
MI
Minuto (0 a 59)
SS
Segundo (0 a 59)
SSSSS
Outros Formatos
Elemento
Descrio
/ . ,
"of the"
Descrio
TH
SP
SPTH ou THSP
ENAME
HIREDATE
---------- ----------------KING
17 November 1981
BLAKE
1 May 1981
CLARK
9 June 1981
JONES
2 April 1981
MARTIN
28 September 1981
ALLEN
20 February 1981
...
14 rows selected.
3-32
ename,
TO_CHAR(hiredate, 'fmDdspth "of" Month YYYY fmHH:MI:SS AM')
HIREDATE
emp;
ENAME
HIREDATE
---------- -----------------------------------------------KING
Seventeenth of November 1981 12:00:00 AM
BLAKE
First of May 1981 12:00:00 AM
...
14 rows selected.
Note que o ms segue o formato do modelo de formato especificado, ou seja, a primeira letra em
maiscula e o restante em minscula.
Introduo ao Oracle: SQL e PL/SQL 3-32
3-33
Representa um nmero
Descrio
Exemplo
Resultado
999999
1234
099999
001234
$999999
$1234
L999999
FF1234
999999.99
1234.00
999,999
1,234
MI
999999MI
1234-
PR
999999PR
<1234>
EEEE
99.999EEEE
1.234E+03
9999V99
123400
B9999.99
1234.00
TO_CHAR(sal,'$99,999') SALARY
emp
ename = 'SCOTT';
SALARY
-------$3,000
3-34
Diretrizes
O Oracle Server exibe uma string com sinais numricos (#) no lugar de um nmero inteiro cujos
dgitos excedam o nmero de dgitos fornecidos no modelo de formato.
Funes TO_NUMBER
e TO_DATE
Converter uma string de caractere para um
formato de nmero usando a funo
TO_NUMBER
TO_NUMBER(carac[, 'fmt'])
3-35
ENAME
HIREDATE
---------- -------WARD
22-FEB-81
YYYY');
Formato de Data RR
Ano Atual
1995
1995
2001
2001
Data Especificada
27-OCT-95
27-OCT-17
27-OCT-17
27-OCT-95
Formato RR
1995
2017
2017
1995
Formato YY
1995
1917
2017
2095
Se dois
dgitos do
ano atual
forem:
049
5099
3-36
049
5099
A data de devoluo
est no sculo atual
A data de devoluo
est no sculo
seguinte
A data de devoluo
est no sculo
anterior
A data de devoluo
est no sculo atual
Data Fornecida
Interpretada (RR)
Interpretada (YY)
1994
27-OCT-95
1995
1995
1994
27-OCT-17
2017
1917
2001
27-OCT-17
2017
2017
Funo NVL
Converte nulo para um valor real
Os tipos de dados que podem ser usados
so data, caractere e nmero.
Os tipos de dados devem corresponder com
NVL(comm,0)
NVL(hiredate,'01-JAN-97')
NVL(job,'No Job Yet')
3-37
A Funo NVL
Para converter um valor nulo para um valor real, use a funo NVL.
Syntax
NVL (expr1, expr2)
onde:
expr1
expr2
Voc pode usar a funo NVL para converter qualquer tipo de dados, porm o valor de devoluo
sempre o mesmo do tipo de dados da expr1.
Converses NVL para Vrios Tipos de Dados
Tipo de dados
Exemplo de Converso
NUMBER
NVL(number_column,9)
DATE
NVL(date_column, '01-JAN-95')
CHAR ou VARCHAR2
NVL(character_column, 'Unavailable')
3-38
Funo NVL
Para calcular a remunerao anual de todos os funcionrios, voc precisa multiplicar o salrio mensal
por 12 e, em seguida, adicionar a comisso.
SQL> SELECT ename, sal, comm, (sal*12)+comm
2 FROM
emp;
ENAME
SAL
COMM (SAL*12)+COMM
---------- --------- --------- ------------KING
5000
BLAKE
2850
CLARK
2450
JONES
2975
MARTIN
1250
1400
16400
...
14 rows selected.
Note que a remunerao anual calculada somente para aqueles funcionrios que recebem uma
comisso. Se qualquer valor de coluna na expresso for nulo, o resultado ser nulo. Para calcular
valores para todos os funcionrios, voc deve converter o valor nulo para um nmero antes de aplicar
o operador aritmtico. No exemplo do slide, a funo para NVL usada para converter valores nulos
para zero.
Funo DECODE
Facilita pesquisas condicionais realizando
o trabalho de uma instruo CASE ou IFTHEN-ELSE
DECODE(col/express, pesquisa1, resultado1
[, pesquisa2, resultado2,...,]
[, default])
3-39
A Funo DECODE
A funo DECODE decodifica uma expresso de um modo similar lgica IF-THEN-ELSE usada
em diversas linguagens. A funo DECODE decodifica a expresso aps compar-la a cada valor de
pesquisa. Se a expresso for a mesma da pesquisa, o resultado retornado.
Se o valor default for omitido, ser retornado um valor nulo onde um valor de pesquisa no
corresponde a quaisquer valores de resultado.
SAL*1.1,
SAL*1.15,
SAL*1.20,
SAL)
JOB
SAL REVISED_SALARY
--------- --------- -------------PRESIDENT
5000
5000
MANAGER
2850
3420
MANAGER
2450
2940
...
14 rows selected.
3-40
'ANALYST'
'CLERK'
'MANAGER'
= sal
THEN
THEN
THEN
sal = sal*1.1
sal = sal*1.15
sal = sal*1.20
3-41
Exemplo
O slide mostra outro exemplo usando a funo DECODE. Neste exemplo, determinamos a taxa de
imposto para cada funcionrio do departamento 30 com base no salrio mensal. As taxas de imposto
so mencionadas por valores na tabela a seguir.
Faixa Salarial Mensal
Taxa
US$0,00 - 999,99
0%
US$1.000,00 - 1.999,99
9%
US$2.000,00 - 2.999,99
20%
US$3.000,00 - 3.999,99
30%
US$4.000,00 - 4.999,99
US$5.000,00 - 2.999,99
40%
42%
US$6.000,00 - 6.999,99
44%
US$7.000,00 ou superior
45%
ENAME
SAL TAX_RATE
---------- --------- --------BLAKE
2850
.2
MARTIN
1250
.09
ALLEN
1600
.09
TURNER
1500
.09
...
6 rows selected.
Introduo ao Oracle: SQL e PL/SQL 3-41
Aninhando Funes
As funes de uma nica linha podem ser
aninhadas em qualquer nvel.
Funes aninhadas so avaliadas a partir do
nvel mais interno para o nvel mais externo.
F3(F2(F1(col,arg1),arg2),arg3)
Etapa 1 = Resultado 1
Etapa 2 = Resultado 2
Etapa 3 = Resultado 3
3-42
Aninhando Funes
As funes de uma nica linha podem ser aninhadas em qualquer nvel. As funes aninhadas so
avaliadas desde o nvel mais interno at o mais externo. Alguns exemplos a seguir mostram a
flexibilidade dessas funes.
Aninhando Funes
SQL> SELECT
2
3 FROM
4 WHERE
ename,
NVL(TO_CHAR(mgr),'No Manager')
emp
mgr IS NULL;
ENAME
NVL(TO_CHAR(MGR),'NOMANAGER')
---------- ----------------------------KING
No Manager
3-43
Sumrio
Use as funes para realizar o seguinte:
Executar clculos usando dados
Modificar itens de dados individuais
Manipular sada para grupos de linhas
Alterar formatos de data para exibio
Converter tipos de dados de coluna
3-44
SYSDATE e DUAL
SYSDATE uma funo de data que retorna a data e a hora atual. Costuma-se selecionar SYSDATE
em uma tabela fictcia chamada DUAL.
Exerccio 3
1. Crie uma consulta para exibir a data atual. Coloque um label na coluna Date.
Date
--------28-OCT-97
2. Exiba o nmero do funcionrio, o nome, o salrio e o aumento salarial de 15% expresso como
nmero inteiro. Coloque um label na coluna New Salary. Salve a instruo SQL em um arquivo
nomeado p3q2.sql.
3. Execute a consulta no arquivo p3q2.sql.
EMPNO ENAME
SAL New Salary
----- ------- ----- ---------7839 KING
5000
5750
7698 BLAKE
2850
3278
7782 CLARK
2450
2818
7566 JONES
2975
3421
7654 MARTIN
1250
1438
7499 ALLEN
1600
1840
7844 TURNER
1500
1725
7900 JAMES
950
1093
7521 WARD
1250
1438
7902 FORD
3000
3450
7369 SMITH
800
920
7788 SCOTT
3000
3450
7876 ADAMS
1100
1265
7934 MILLER
1300
1495
14 rows selected.
4. Modifique a consulta p3q2.sql para adicionar uma coluna que subtrair o salrio antigo do
novo salrio. Coloque um label na coluna Increase. Execute novamente a consulta.
EMPNO ENAME
SAL New Salary Increase
----- ------ ----- ---------- -------7839 KING
5000
5750
750
7698 BLAKE
2850
3278
428
7782 CLARK
2450
2818
368
7566 JONES
2975
3421
446
7654 MARTIN 1250
1438
188
7499 ALLEN
1600
1840
240
7844 TURNER 1500
1725
225
7900 JAMES
950
1093
143
. . .
14 rows selected.
Exerccio 3 (continuao)
5. Exibe o nome do funcionrio, a data de admisso, que a primeira segunda-feira aps seis
meses de servio. Coloque um label na coluna REVIEW. Formate as datas que aparecem em
formato semelhante a "Sunday, the Seventh of September, 1981".
ENAME
----KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER
JAMES
WARD
FORD
SMITH
SCOTT
ADAMS
MILLER
HIREDATE
-------17-NOV-81
01-MAY-81
09-JUN-81
02-APR-81
28-SEP-81
20-FEB-81
08-SEP-81
03-DEC-81
22-FEB-81
03-DEC-81
17-DEC-80
09-DEC-82
12-JAN-83
23-JAN-82
REVIEW
-------------------------------------Monday, the Twenty-Fourth of May, 1982
Monday, the Second of November, 1981
Monday, the Fourteenth of December, 1981
Monday, the Fifth of October, 1981
Monday, the Twenty-Ninth of March, 1982
Monday, the Twenty-Fourth of August, 1981
Monday, the Fifteenth of March, 1982
Monday, the Seventh of June, 1982
Monday, the Twenty-Fourth of August, 1981
Monday, the Seventh of June, 1982
Monday, the Twenty-Second of June, 1981
Monday, the Thirteenth of June, 1983
Monday, the Eighteenth of July, 1983
Monday, the Twenty-Sixth of July, 1982
14 rows selected.
6. Para cada funcionrio exiba o nome do mesmo e calcule o nmero de meses entre hoje e a sua
data de admisso. Coloque um label na coluna MONTHS_WORKED. Ordene os resultados
por nmero de meses empregado. Arredonde para cima o nmero de meses para o nmero
inteiro mais prximo.
ENAME
------ADAMS
SCOTT
MILLER
JAMES
FORD
KING
MARTIN
TURNER
CLARK
BLAKE
JONES
WARD
ALLEN
SMITH
MONTHS_WORKED
------------177
178
188
190
190
191
192
193
196
197
198
199
199
202
14 rows selected
Exerccio 3 (continuao)
7. Crie uma consulta que produza as seguintes informaes para cada funcionrio: <nome do
funcionrio> recebe <salrio> mensalmente mas deseja <salrio multiplicado por 3>. Coloque
um label na coluna.
Dream Salaries
---------------------------------------------------KING earns $5,000.00 monthly but wants $15,000.00.
BLAKE earns $2,850.00 monthly but wants $8,550.00.
CLARK earns $2,450.00 monthly but wants $7,350.00.
JONES earns $2,975.00 monthly but wants $8,925.00.
MARTIN earns $1,250.00 monthly but wants $3,750.00.
ALLEN earns $1,600.00 monthly but wants $4,800.00
TURNER earns $1,500.00 monthly but wants $4,500.00.
JAMES earns $950.00 monthly but wants $2,850.00.
WARD earns $1,250.00 monthly but wants $3,750.00.
FORD earns $3,000.00 monthly but wants $9,000.00.
SMITH earns $800.00 monthly but wants $2,400.00.
SCOTT earns $3,000.00 monthly but wants $9,000.00.
ADAMS earns $1,100.00 monthly but wants $3,300.00
MILLER earns $1,300.00 monthly but wants $3,900.00.
14 rows selected.
Exerccio 3 (continuao)
9. Crie uma consulta que exibir o nome do funcionrio com a primeira letra maiscula e todas as
outras minsculas, bem como o tamanho de seus nomes, para todos os funcionrios cujo nome
comea com J, A ou M. Fornea a cada coluna um label apropriado.
Name
Length
------- -----Jones
5
Martin
6
Allen
5
James
5
Adams
5
Miller
6
6 rows selected.
10. Exiba o nome, a data de admisso e o dia da semana em que o funcionrio comeou a
trabalhar. Coloque um label na coluna DAY. Ordene os resultados por dia da semana,
iniciando por Segunda.
ENAME
HIREDATE
------ --------MARTIN 28-SEP-81
CLARK 09-JUN-81
KING
17-NOV-81
TURNER 08-SEP-81
SMITH 17-DEC-80
ADAMS 12-JAN-83
JONES 02-APR-81
FORD
03-DEC-81
SCOTT 09-DEC-82
JAMES 03-DEC-81
ALLEN 20-FEB-81
BLAKE 01-MAY-81
MILLER 23-JAN-82
WARD
22-FEB-81
14 rows selected.
DAY
----------MONDAY
TUESDAY
TUESDAY
TUESDAY
WEDNESDAY
WEDNESDAY
THURSDAY
THURSDAY
THURSDAY
THURSDAY
FRIDAY
FRIDAY
SATURDAY
SUNDAY
Exerccio 3 (continuao)
Se voc quiser mais desafios, complete os exerccios abaixo:
11. Crie uma consulta que exibir o nome do funcionrio e o valor da comisso. Se o funcionrio
no receber comisso, coloque "No Commission". Coloque um label na coluna COMM.
ENAME
-----SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER
COMM
----------No Commission
300
500
No Commission
1400
No Commission
No Commission
No Commission
No Commission
0
No Commission
No Commission
No Commission
No Commission
14 rows selected.
12. Crie uma consulta que exiba os nomes dos funcionrios e indique as quantias de seus salrios
atravs de asteriscos. Cada asterisco representa cem dlares. Classifique os dados em ordem
decrescente de salrio. Coloque um label na coluna EMPLOYEE_AND_THEIR_SALARIES.
EMPLOYEE_AND_THEIR_SALARIES
----------------------------------------------------------KING
**************************************************
FORD
******************************
SCOTT
******************************
JONES
*****************************
BLAKE
****************************
CLARK
************************
ALLEN
****************
TURNER
***************
MILLER
*************
MARTIN
************
WARD
************
ADAMS
***********
JAMES
*********
SMITH
********
14 rows selected.
Exerccio 3 (continuao)
Se voc quiser mais desafios, complete o exerccio a seguir:
13. Crie uma consulta que exiba o grau para todos os funcionrios com base no valor da coluna JOB,
conforme a tabela mostrada abaixo:
JOB
GRADE
PRESIDENT
MANAGER
ANALYST
SALESMAN
CLERK
JOB
GRADE
--------- ----CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT A
SALESMAN
CLERK
CLERK
ANALYST
CLERK
14 rows selected.
4
Exibindo Dados de
Vrias Tabelas
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Criar instrues SELECT para obter acesso
aos dados a partir de mais de uma tabela
usando as junes idnticas e noidnticas
Visualizar dados que, em geral, no
correspondem a uma condio de juno
usando junes externas
Unindo uma tabela a ela mesma
4-2
Objetivo da Lio
Esta lio aborda como obter dados a partir de uma ou mais tabelas, usando diferentes mtodos
disponveis.
DEPT
ENAME
----KING
BLAKE
... DEPTNO
... -----...
10
...
30
MILLER ...
10
DEPTNO
-----10
20
30
40
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
Para produzir o relatrio, voc precisa vincular as tabelas EMP e DEPT e ter acesso aos dados
das duas.
tabela1.coluna, tabela2.coluna
tabela1, tabela2
tabela1.coluna1 = tabela2.coluna2;
Definindo Junes
Quando so necessrios dados de uma ou mais tabelas no banco de dados, usa-se uma condio de
juno. As linhas de uma tabela podem ser unidas s linhas de outra tabela de acordo com os valores
comuns existentes nas colunas correspondentes, isto , em geral colunas de chave primria e
estrangeira.
Para exibir dados a partir de uma ou mais tabelas relacionadas, crie uma condio de juno simples
na clusula WHERE.
Na sintaxe:
tabela1.coluna
tabela1.coluna1 =
tabela2.coluna2
Diretrizes
Ao criar uma instruo SELECT que una tabelas, anteceda o nome da coluna com o nome da
tabela a fim de esclarecer e avanar o acesso ao banco de dados.
Caso aparea o mesmo nome da coluna em mais de uma tabela, o nome da coluna deve estar
prefixado com o nome da tabela.
Para juntar n tabelas, necessrio um mnimo de (n-1) condies de juno. Assim, para juntar
quatro tabelas, necessrio um mnimo de trs junes. Esta regra pode no se aplicar se sua
tabela possuir uma chave primria concatenada, no caso de mais de uma coluna ser necessria
para identificar exclusivamente cada linha.
Para obter mais informaes, consulte o Oracle Server SQL Reference Manual, Release 8, "SELECT".
Introduo ao Oracle: SQL e PL/SQL 4-4
Produto Cartesiano
Um produto cartesiano formado quando:
Uma condio de juno estiver omitida
Uma condio de juno estiver invlida
Todas as linhas na primeira tabela esto
4-5
Produto Cartesiano
Quando uma condio de juno for completamente invlida ou omitida, o resultado um produto
Cartesiano no qual sero exibidas todas as combinaes de linhas. Todas as linhas da primeira tabela
esto unidas a todas as linhas da segunda.
Um produto Cartesiano tende a gerar um grande nmero de linhas e seu resultado raramente til.
Voc deve sempre incluir uma condio de juno em uma clusula WHERE, a menos que tenha uma
necessidade especfica de combinar todas as linhas de todas as tabelas.
ENAME
----KING
BLAKE
... DEPTNO
... -----...
10
...
30
MILLER ...
"Produto
Cartesiano:
14*4=56 linhas"
4-6
DEPT (4 linhas)
10
DEPTNO
-----10
20
30
40
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
ENAME
DNAME
--------------KING
ACCOUNTING
BLAKE
ACCOUNTING
...
KING
RESEARCH
BLAKE
RESEARCH
...
56 rows selected.
ename, dname
emp, dept;
ENAME
DNAME
---------- -------------KING
ACCOUNTING
BLAKE
ACCOUNTING
...
KING
RESEARCH
BLAKE
RESEARCH
...
56 rows selected.
Tipos de Junes
Juno
idntica
4-7
Juno
no-idntica
Juno
externa
Autojuno
Tipos de Junes
H dois tipos principais de condies de juno:
Junes idnticas
Junes no-idnticas
Junes externas
Autojunes
Operadores de conjunto
DEPT
EMPNO ENAME
DEPTNO
------ ------- ------7839 KING
10
7698 BLAKE
30
7782 CLARK
10
7566 JONES
20
7654 MARTIN
30
7499 ALLEN
30
7844 TURNER
30
7900 JAMES
30
7521 WARD
30
7902 FORD
20
7369 SMITH
20
...
14 rows selected.
Chave estrangeira
4-8
DEPTNO
------10
30
10
20
30
30
30
30
30
20
20
...
14 rows
DNAME
---------ACCOUNTING
SALES
ACCOUNTING
RESEARCH
SALES
SALES
SALES
SALES
SALES
RESEARCH
RESEARCH
LOC
-------NEW YORK
CHICAGO
NEW YORK
DALLAS
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
DALLAS
DALLAS
selected.
Chave primria
Junes idnticas
Para determinar o nome do departamento de um funcionrio, compare o valor na coluna DEPTNO na
tabela EMP com os valores DEPTNO da tabela DEPT. O relacionamento entre as tabelas EMP e
DEPT uma juno idntica ou seja, os valores da coluna DEPTNO das duas tabelas devem ser
iguais. Com freqncia, essa juno envolve complementos de chave primria e estrangeira.
Observao: As junes idnticas tambm so chamadas de junes simples ou junes internas.
emp.empno,
emp.ename, emp.deptno,
dept.deptno, dept.loc
emp, dept
emp.deptno=dept.deptno;
4-9
A clusula FROM especifica as duas tabelas que o banco de dados deve acessar:
tabela EMP
tabela DEPT
Porque a coluna DEPTNO comum s duas tabelas, ela deve estar prefixada pelo nome
da tabela a fim de evitar ambigidade.
Qualificando Nomes de
Coluna Ambguos
Use os prefixos de tabela para qualificar
nomes de coluna que esto em vrias
tabelas.
Melhore o desempenho usando os prefixos
de tabela.
Diferencie colunas que possuem nomes
idnticos, mas que residam em tabelas
diferentes usando apelidos de coluna.
4-10
DEPT
EMPNO ENAME
DEPTNO
------ ------- ------7839 KING
10
7698 BLAKE
30
7782 CLARK
10
7566 JONES
20
7654 MARTIN
30
7499 ALLEN
30
7844 TURNER
30
7900 JAMES
30
7521 WARD
30
7902 FORD
20
7369 SMITH
20
...
14 rows selected.
DEPTNO DNAME
------ --------10 ACCOUNTING
30 SALES
10 ACCOUNTING
20 RESEARCH
30 SALES
30 SALES
30 SALES
30 SALES
30 SALES
20 RESEARCH
20 RESEARCH
...
14 rows selected.
4-11
LOC
-------NEW YORK
CHICAGO
NEW YORK
DALLAS
CHICAGO
CHICAGO
CHICAGO
CHICAGO
CHICAGO
DALLAS
DALLAS
SELECT
FROM
WHERE
AND
EMPNO ENAME
DEPTNO LOC
--------- ---------- --------- ------------7839 KING
10 NEW YORK
4-12
Apelidos de Tabela
Qualificar nomes de coluna com nomes de tabela pode consumir muito tempo, principalmente se os
nomes da tabela forem extensos. Voc pode usar apelidos de tabela no lugar de nomes de tabela. Da
mesma forma que um apelido de coluna fornece um outro nome coluna, um apelido de tabela fornece
um outro nome tabela. Os apelidos de tabela ajudam a manter o cdigo SQL menor, usando dessa
forma menos memria.
No exemplo, note como os apelidos de tabela so identificados na clusula FROM. O nome de tabela
especificado integralmente, seguido de um espao e, em seguida, do apelido da tabela.
A tabela EMP recebeu o apelido E, enquanto a tabela DEPT tem o apelido D.
Diretrizes
Se um apelido de tabela for usado para um determinado nome de tabela na clusula FROM, ento
aquele apelido de tabela deve ser substitudo para o nome da tabela em toda a instruo SELECT.
ORD
NAME
CUSTID
---------------JOCKSPORTS
100
TKB SPORT SHOP
101
VOLLYRITE
102
JUST TENNIS
103
K+T SPORTS
105
SHAPE UP
106
WOMENS SPORTS
107
...
...
9 rows selected.
4-13
CUSTID
ORDID
------- ------101
610
102
611
104
612
106
601
102
602
ITEM
106
604
ORDID ITEMID
106
605
------ ------...
610
3
21 rows selected.
611
1
612
1
601
1
602
1
...
64 rows selected.
SELECT
FROM
WHERE
AND
AND
NAME
ORDID
ITEMID
ITEMTOT
TOTAL
------------ --------- --------- --------- --------TKB SPORT SHOP
610
3
58
101.4
TKB SPORT SHOP
610
1
35
101.4
TKB SPORT SHOP
610
2
8.4
101.4
Junes No-idnticas
EMP
SALGRADE
EMPNO ENAME
SAL
------ ------- -----7839 KING
5000
7698 BLAKE
2850
7782 CLARK
2450
7566 JONES
2975
7654 MARTIN
1250
7499 ALLEN
1600
7844 TURNER
1500
7900 JAMES
950
...
14 rows selected.
4-14
Junes No-Idnticas
O relacionamento entre a tabela EMP e a tabela SALGRADE uma juno no-idntica, o que
significa que nenhuma coluna da tabela EMP corresponde diretamente a uma coluna da tabela
SALGRADE. O relacionamento entre as duas tabelas que a coluna SAL da tabela EMP est
entre a coluna LOSAL e HISAL da tabela SALGRADE. O relacionamento obtido usando um
outro operador que no o igual (=).
SELECT
FROM
WHERE
BETWEEN
ENAME
SAL
GRADE
---------- --------- --------JAMES
950
1
SMITH
800
1
ADAMS
1100
1
...
14 rows selected.
4-15
Junes Externas
DEPT
EMP
ENAME
----KING
BLAKE
CLARK
JONES
...
DEPTNO
-----10
30
10
20
DEPTNO
-----10
30
10
20
...
40
DNAME
---------ACCOUNTING
SALES
ACCOUNTING
RESEARCH
OPERATIONS
Nenhum funcionrio do
departamento OPERATIONS
4-16
DNAME
------------ACCOUNTING
SALES
ACCOUNTING
RESEARCH
SALES
SALES
SALES
Junes Externas
Use uma juno externa para consultar
tambm todas as linhas que em geral no
atendem condio de juno.
O operador de juno externo um sinal
de adio (+).
SELECT tabela1.coluna, tabela2.coluna
FROM
tabela1, tabela2
WHERE tabela1.coluna(+) = tabela2.coluna;
SELECT tabela1.coluna , tabela2.coluna
FROM
tabela1, tabela2
WHERE tabela1.coluna = tabela2.coluna(+);
4-17
SELECT
FROM
WHERE
ORDER BY
ENAME
DEPTNO DNAME
---------- --------- ------------KING
10 ACCOUNTING
CLARK
10 ACCOUNTING
...
40 OPERATIONS
15 rows selected.
4-18
O operador da juno externa pode aparecer somente de um lado da expresso o lado que
possui informaes ausentes. Ele retorna estas linhas de uma tabela que no possui
correspondncia direta em outra tabela.
Uma condio envolvendo uma juno externa no pode usar o operador IN ou estar vinculada
a outra condio pelo operador OR.
Autojunes
EMP (WORKER)
EMPNO
----7839
7698
7782
7566
7654
7499
ENAME
-----KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
EMP (MANAGER)
MGR
---7839
7839
7839
7698
7698
EMPNO ENAME
----- -------7839
7839
7839
7698
7698
KING
KING
KING
BLAKE
BLAKE
4-19
Localizar o nome do gerente como o EMPNO 7839 consultando a coluna ENAME. O nmero
do funcionrio King 7839, ento King gerente de Blake.
Neste processo, voc analisa a tabela duas vezes. Na primeira vez, voc consulta a tabela para
localizar Blake na coluna ENAME e o valor MGR de 7839. Na segunda vez, voc consulta a coluna
EMPNO para localizar 7839 e a coluna ENAME para localizar King.
WORKER.ENAME||'WORKSFOR'||MANAG
------------------------------BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
...
13 rows selected.
4-20
Sumrio
SELECT
FROM
WHERE
Juno
idntica
4-21
tabela1.coluna, tabela2.coluna
tabela1, tabela2
tabela1.coluna1 = tabela2.coluna2;
Juno
no-idntica
Juno
externa
Autojuno
Sumrio
H vrios modos para juntar tabelas. O elemento comum, no entanto, aquele que deseja vincular
atravs de uma condio na clusula WHERE. O mtodo que voc escolher ser baseado nas
estruturas de dados que estiver usando.
SELECT
FROM
WHERE
tabela1.coluna, tabela2.coluna
tabela1, tabela2
tabela1.coluna1 = tabela2.coluna2;
4-22
Exerccio 4
1. Crie uma consulta para exibir o nome, o nmero e o nome do departamento de todos os
funcionrios.
ENAME DEPTNO DNAME
------ ------ --------KING
10 ACCOUNTING
BLAKE
30 SALES
CLARK
10 ACCOUNTING
JONES
20 RESEARCH
MARTIN
30 SALES
ALLEN
30 SALES
TURNER
30 SALES
JAMES
30 SALES
WARD
30 SALES
FORD
20 RESEARCH
SMITH
20 RESEARCH
SCOTT
20 RESEARCH
ADAMS
20 RESEARCH
MILLER
10 ACCOUNTING
14 rows selected.
2. Crie uma lista nica de todos os cargos existentes no departamento 30. Inclua a localizao
do departamento 30 na sada.
JOB
--------CLERK
MANAGER
SALESMAN
LOC
------------CHICAGO
CHICAGO
CHICAGO
DNAME
-----SALES
SALES
SALES
SALES
LOC
------------CHICAGO
CHICAGO
CHICAGO
CHICAGO
Exerccio 4 (continuao)
4. Exiba o nome do funcionrio e o nome do departamento para todos os funcionrios que
possuem um A em seus nomes. Salve a instruo SQL no arquivo nomeado p4q4.sql.
ENAME
DNAME
------- -----------BLAKE
SALES
CLARK
ACCOUNTING
MARTIN
SALES
ALLEN
SALES
JAMES
SALES
WARD
SALES
ADAMS
RESEARCH
7 rows selected.
5. Crie uma consulta para exibir o nome, o cargo, o nmero e o nome do departamento para todos
os funcionrios que trabalham em DALLAS.
ENAME
------SMITH
ADAMS
FORD
SCOTT
JONES
JOB
DEPTNO
------- ------CLERK
20
CLERK
20
ANALYST
20
ANALYST
20
MANAGER
20
DNAME
---------RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
Exerccio 4 (continuao)
6. Exiba o nome e o nmero do funcionrio junto com o nome e o nmero do gerente. Coloque
um label nas colunas Employee, Emp#, Manager e Mgr#, respectivamente. Salve a instruo
SQL em um arquivo nomeado p4q6.sql.
Employee Emp#
Manager
-------- ------ ------SCOTT
7788 JONES
FORD
7902 JONES
ALLEN
7499 BLAKE
WARD
7521 BLAKE
JAMES
7900 BLAKE
TURNER
7844 BLAKE
MARTIN
7654 BLAKE
MILLER
7934 CLARK
ADAMS
7876 SCOTT
JONES
7566 KING
CLARK
7782 KING
BLAKE
7698 KING
SMITH
7369 FORD
13 rows selected.
Mgr#
---7566
7566
7698
7698
7698
7698
7698
7782
7788
7839
7839
7839
7902
7. Modifique o p4q6.sql para exibir todos os funcionrios incluindo King, que no possuem
um gerente. Salve-o novamente como p4q7.sql. Execute o p4q7.sql.
Employee Emp#
Manager Mgr#
-------- ------ ------- ----SCOTT
7788 JONES
7566
FORD
7902 JONES
7566
ALLEN
7499 BLAKE
7698
WARD
7521 BLAKE
7698
JAMES
7900 BLAKE
7698
TURNER
7844 BLAKE
7698
MARTIN
7654 BLAKE
7698
MILLER
7934 CLARK
7782
ADAMS
7876 SCOTT
7788
JONES
7566 KING
7839
CLARK
7782 KING
7839
BLAKE
7698 KING
7839
SMITH
7369 FORD
7902
KING
7839
14 rows selected.
Exerccio 4 (continuao)
Se voc tiver tempo, complete os exerccios abaixo:
8. Crie uma consulta que exibir o nome do funcionrios, o nmero do departamento e todos os
funcionrios que trabalham no mesmo departamento de um determinado funcionrio. Fornea a
cada coluna um label apropriado.
DEPARTMENT
---------10
10
10
10
10
10
20
20
20
20
20
20
20
EMPLOYEE
--------
COLLEAGUE
---------
CLARK
CLARK
KING
KING
MILLER
MILLER
ADAMS
ADAMS
ADAMS
ADAMS
FORD
FORD
FORD
KING
MILLER
CLARK
MILLER
CLARK
KING
FORD
JONES
SCOTT
SMITH
ADAMS
JONES
SCOTT
...
56 rows selected.
Exerccio 4 (continuao)
9. Mostre a estrutura da tabela SALGRADE. Crie uma consulta que exiba o nome, o cargo, o
nome do departamento, o salrio e a classificao de todos os funcionrios.
Name
Null?
----------- -------GRADE
LOSAL
HISAL
ENAME
-----MILLER
CLARK
KING
SMITH
SCOTT
FORD
ADAMS
JONES
JAMES
BLAKE
TURNER
ALLEN
WARD
MARTIN
14 rows
JOB
---------CLERK
MANAGER
PRESIDENT
CLERK
ANALYST
ANALYST
CLERK
MANAGER
CLERK
MANAGER
SALESMAN
SALESMAN
SALESMAN
SALESMAN
selected.
Type
------NUMBER
NUMBER
NUMBER
DNAME
SAL
---------- ----ACCOUNTING 1300
ACCOUNTING 2450
ACCOUNTING 5000
RESEARCH
800
RESEARCH
3000
RESEARCH
3000
RESEARCH
1100
RESEARCH
2975
SALES
950
SALES
2850
SALES
1500
SALES
1600
SALES
1250
SALES
1250
GRADE
----2
4
5
1
4
4
1
4
1
4
3
3
2
2
Exerccio 4 (continuao)
Se voc quiser mais desafios, complete os exerccios abaixo:
10. Crie uma consulta para exibir o nome e a data de admisso de qualquer funcionrio admitido
aps o funcionrio Blake.
ENAME
HIREDATE
------- --------KING
17-NOV-81
CLARK
09-JUN-81
MARTIN 28-SEP-81
TURNER 08-SEP-81
JAMES
03-DEC-81
FORD
03-DEC-81
SCOTT
09-DEC-82
ADAMS
12-JAN-83
MILLER 23-JAN-82
9 rows selected.
11. Exiba todos os nomes de funcionrios e as datas de admisso junto com o nome e a data de
admisso do gerente para todos os funcionrios admitidos antes de seus gerentes. Coloque
um label nas colunas Employee, Emp Hiredate, Manager e Mgr Hiredate, respectivamente.
Employee Emp Hiredate
-------- ------------ALLEN
20-FEB-81
WARD
22-FEB-81
JONES
02-APR-81
CLARK
09-JUN-81
BLAKE
01-MAY-81
SMITH
17-DEC-80
6 rows selected.
Manager
------BLAKE
BLAKE
KING
KING
KING
FORD
Mgr Hiredate
-----------01-MAY-81
01-MAY-81
17-NOV-81
17-NOV-81
17-NOV-81
03-DEC-81
5
Agregando Dados
Usando Funes de Grupo
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Identificar as funes de grupo disponveis
Descrever o uso de funes de grupo
Agrupar dados usando a clusula
GROUP BY
Incluir ou excluir linhas agrupadas usando
a clusula HAVING
5-2
Objetivo da Lio
Esta lio aborda funes. Visa obter informaes sumariadas, tais como mdias, para grupos de
linhas. Discute como agrupar linhas de uma tabela em conjuntos menores e como especificar critrios
de pesquisa para grupos de linhas.
"salrio
mximo na
tabela EMP"
MAX(SAL)
--------5000
Funes de Grupo
De modo diferente das funes de uma nica linha, as funes de grupo operam em conjuntos de
linhas para fornecer um resultado por grupo. Esses conjuntos podem ser a tabela inteira ou a tabela
dividida em grupos.
5-4
Descrio
AVG([DISTINCT|ALL]n)
COUNT({*|[DISTINCT|ALL]expr})
MAX([DISTINCT|ALL]expr)
MIN([DISTINCT|ALL]expr)
STDDEV([DISTINCT|ALL]x)
SUM([DISTINCT|ALL]n)
VARIANCE([DISTINCT|ALL]x)
SELECT
FROM
[WHERE
[GROUP BY
[ORDER BY
5-5
[coluna,] group_function(coluna)
tabela
condio]
coluna]
coluna];
DISTINCT faz com que a funo considere somente valores no-duplicados; ALL faz com que
ela considere cada valor, inclusive duplicados. O default ALL e, portanto, no precisa ser
especificado.
Os tipos de dados para os argumentos podem ser CHAR, VARCHAR2, NUMBER ou DATE,
onde expr est listado.
Todas as funes de grupo, exceto COUNT(*), ignoram valores nulos. Para substituir um valor
por valores nulos, use a funo NVL.
AVG(sal), MAX(sal),
MIN(sal), SUM(sal)
emp
job LIKE 'SALES%';
5-6
Funes de Grupo
Voc pode usar as funes AVG, SUM, MIN e MAX com colunas que possam armazenar dados
numricos. O exemplo no slide exibe os salrios maior, mdio, menor e a soma dos salrios mensais
de todos os vendedores.
MIN(hiredate), MAX(hiredate)
emp;
MIN(HIRED MAX(HIRED
--------- --------17-DEC-80 12-JAN-83
5-7
MIN(ename), MAX(ename)
emp;
MIN(ENAME) MAX(ENAME)
---------- ---------ADAMS
WARD
Observao: As funes AVG, SUM, VARIANCE e STDDEV s podem ser usadas com tipos de
dados numricos.
COUNT(*)
emp
deptno = 30;
COUNT(*)
--------6
5-8
A Funo COUNT
A Funo COUNT tem dois formatos:
COUNT(*)
COUNT(expr)
COUNT(*) retorna o nmero de linhas em uma tabela, inclusive linhas duplicadas e linhas contendo
valores nulos em qualquer uma das colunas. Se uma clusula WHERE estiver includa na instruo
SELECT, COUNT(*) retornar o nmero de linhas que satisfizer a condio na clusula WHERE.
Entretanto, COUNT(expr) retorna o nmero de linhas no nulas na coluna identificada por expr.
O exemplo no slide exibe o nmero de funcionrios no departamento 30.
COUNT(comm)
emp
deptno = 30;
COUNT(COMM)
----------4
5-9
COUNT(deptno)
emp;
COUNT(DEPTNO)
------------14
COUNT(DISTINCT (deptno))
emp;
COUNT(DISTINCT(DEPTNO))
----------------------3
AVG(COMM)
--------550
5-10
5-11
5-12
2916.6667
DEPTNO AVG(SAL)
"salrio
mdio
------- --------na tabela
2175
10 2916.6667
EMP
para cada
20
2175
departamento"
30 1566.6667
1566.6667
Grupos de Dados
At este momento, todas as funes de grupo trataram a tabela como um grande grupo de
informaes. s vezes, necessrio dividir a tabela de informaes em grupos menores. Isso pode
ser feito usando a clusula GROUP BY.
SELECT
FROM
[WHERE
[GROUP BY
[ORDER BY
5-13
A Clusula GROUP BY
Voc pode usar a clusula GROUP BY para dividir as linhas de uma tabela em grupos. Em seguida,
pode usar as funes de grupo para retornar informaes sumrias para cada grupo.
Na sintaxe:
group_by_expression
Diretrizes
Se voc incluir uma funo de grupo em uma clusula SELECT, no poder selecionar
resultados individuais, a menos que a coluna individual aparea na clusula GROUP BY. Se
voc no conseguir incluir a lista de colunas, uma mensagem de erro ser exibida.
Ao usar uma clusula WHERE, voc pode excluir linhas com antecedncia antes de dividi-las
em grupos.
Por default, as linhas so classificadas por ordem crescente das colunas includas na lista
GROUP BY. Isso pode ser sobreposto usando a clusula ORDER BY.
5-14
A clusula GROUP BY especifica como as linhas devem ser agrupadas. As linhas so agrupadas
pelo nmero do departamento, de forma que a funo AVG que esteja sendo aplicada coluna
de salrios calcule o salrio mdio para cada departamento.
AVG(SAL)
--------2916.6667
2175
1566.6667
5-15
SELECT
FROM
GROUP BY
ORDER BY
deptno, AVG(sal)
emp
deptno
AVG(sal);
DEPTNO
AVG(SAL)
---------- -----------30
1566.6667
20
2175
10
2916.6667
EMP
DEPTNO JOB
SAL
--------- --------- --------10 MANAGER
2450
5-16
10
10
20
20
20
20
PRESIDENT
CLERK
CLERK
CLERK
ANALYST
ANALYST
5000
1300
800
1100
3000
3000
20
30
30
30
30
30
30
MANAGER
SALESMAN
MANAGER
SALESMAN
CLERK
SALESMAN
SALESMAN
2975
1600
2850
1250
950
1500
1250
"soma de
salrios na
tabela EMP
para cada
cargo,
agrupados por
departamento"
SUM(SAL)
DEPTNO JOB
-------- --------- --------1300
10 CLERK
2450
10 MANAGER
PRESIDENT
ANALYST
CLERK
MANAGER
30 CLERK
30 MANAGER
30 SALESMAN
10
20
20
20
5000
6000
1900
2975
950
2850
5600
5-17
A clusula FROM especifica as tabelas que o banco de dados deve acessar: a tabela EMP.
Dessa forma, a funo SUM aplicada coluna de salrios para todos os cargos dentro de cada
grupo de nmeros de departamentos.
Consultas Ilegais
Usando Funes de Grupo
Qualquer coluna ou expresso na lista SELECT
que no seja uma funo agregada deve estar
na clusula GROUP BY.
SQL> SELECT
2 FROM
olu
deptno, COUNT(ename)
emp;
OUP BY
R
G
a
l
u
s
te na clu
n
e
s
u
a
a
n
C deptno, COUNT(ename)
SELECT
*
ERROR at line 1:
ORA-00937: Nenhuma funo de grupo de grupo nico
(Not a single-group group function)
5-18
Consultas Ilegais
Usando Funes de Grupo
No possvel usar a clusula WHERE para
restringir grupos.
Use a clusula HAVING para restringir grupos.
la
su s
u
cl upo
a
r
r
sa gir g
u
el trin
v
N Egrupo
R
ORA-00934: A funo de
no permitida aqui
H
W allowed here)
(Group function is not
SQL>
2
3
4
5-19
SELECT
FROM
WHERE
GROUP BY
deptno, AVG(sal)
emp
AVG(sal) > 2000
deptno;
SELECT
FROM
GROUP BY
HAVING
deptno, AVG(sal)
emp
deptno
AVG(sal) > 2000;
DEPTNO
AVG(SAL)
---------- -------------10
2916.6667
20
2175
5-20
10
10
10
20
20
2450
5000
1300
800
1100
20
20
3000
3000
20
30
30
30
30
30
30
2975
1600
2850
1250
950
1500
1250
5000
3000
"salrio
mximo por
departamento
maior do que
US$ 2.900"
DEPTNO MAX(SAL)
--------- --------10
5000
20
3000
2850
Localize o salrio mdio para cada departamento ao agrupar por nmero do departamento.
Restrinja os grupos aos departamentos com um salrio mximo maior do que US$ 2.900.
coluna, group_function
tabela
condio]
group_by_expression]
group_condition]
coluna];
A Clusula HAVING
Use a clusula HAVING para especificar quais grupos sero exibidos. Portanto, restrinja ainda mais
os grupos com base nas informaes agregadas.
Na sintaxe:
group_condition
O Oracle Server executa as seguintes etapas quando voc usa a clusula HAVING:
As linhas so agrupadas.
A clusula HAVING pode preceder a clusula GROUP BY, mas recomenda-se que voc coloque a
clusula GROUP BY primeiro, por ser mais lgico. Os grupos so formados e as funes de grupo
so calculadas antes de a clusula HAVING ser aplicada aos grupos na lista SELECT.
SELECT
FROM
GROUP BY
HAVING
deptno, max(sal)
emp
deptno
max(sal)>2900;
DEPTNO MAX(SAL)
--------- --------10
5000
20
3000
5-22
SELECT
FROM
GROUP BY
HAVING
deptno, AVG(sal)
emp
deptno
MAX(sal) > 2900;
DEPTNO AVG(SAL)
--------- --------10 2916.6667
20
2175
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
JOB
PAYROLL
--------- --------ANALYST
6000
MANAGER
8275
5-23
5-24
Sumrio
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY
coluna, group_function(coluna)
tabela
condio]
group_by_expression]
group_condition]
coluna];
5-25
Sumrio
Sete funes de grupo esto disponveis no SQL:
AVG
COUNT
MAX
MIN
SUM
STDDEV
VARIANCE
Voc pode criar subgrupos usando a clusula GROUP BY. Os grupos podem ser excludos usando a
clusula HAVING.
Coloque as clusulas HAVING e GROUP BY aps a clusula WHERE em uma instruo. Coloque a
clusula ORDER BY por ltimo.
O Oracle Server avalia as clusulas na seguinte ordem:
A clusula HAVING restringe ainda mais os grupos de resultado que no atendam aos critrios
do grupo na clusula HAVING.
Introduo ao Oracle: SQL e PL/SQL 5-25
5-26
Exerccio 5
Determine a validade das afirmaes a seguir. Marque Verdadeiro ou Falso.
1. As funes de grupo operam em muitas linhas para produzir um resultado por grupo.
Verdadeiro/Falso
2. As funes de grupo incluem nulos nos clculos.
Verdadeiro/Falso
3. A clusula WHERE restringe as linhas antes da incluso em um clculo de grupo.
Verdadeiro/Falso
4. Exiba os salrios maior, mdio, menor e a soma de todos os salrios de todos os funcionrios.
Coloque um label nas colunas Maximum, Minimum, Sum e Average, respectivamente. Arredonde
os resultados para o nmero inteiro mais prximo. Salve a instruo SQL em um arquivo
chamado p5q4.sql.
Maximum
-------
Minimum
-------
5000
800
Sum Average
----- ------29025
2073
5. Modifique o p5q4.sql para exibir o salrio maior, mdio, menor e a soma de todos os salrios
para cada tipo de cargo. Salve novamente o arquivo com o nome p5q5.sql. Execute novamente
a consulta.
JOB
Maximum Minimum
Sum Average
---------- -------- -------- ----- -------ANALYST
3000
3000
6000
3000
CLERK
1300
800
4150
1038
MANAGER
2975
2450
8275
2758
PRESIDENT
5000
5000
5000
5000
SALESMAN
1600
1250
5600
1400
6. Crie uma consulta para exibir o nmero de pessoas com o mesmo cargo.
JOB
COUNT(*)
---------- -------ANALYST
2
CLERK
4
MANAGER
3
PRESIDENT
1
SALESMAN
4
Exerccio 5 (continuao)
7. Determine o nmero de gerentes sem list-los. Coloque um label na coluna Number of
Managers.
Number of Managers
-----------------6
8. Crie uma consulta para exibir a diferena entre os maiores e menores salrios. Coloque um
label na coluna DIFFERENCE.
DIFFERENCE
---------4200
MIN(SAL)
-------3000
2450
1300
1100
10. Crie uma consulta para exibir o nome do departamento, o nome do local, o nmero de
funcionrios e o salrio mdio de todos os funcionrios nesse departamento. Coloque
um label nas colunas dname, loc, Number of People e Salary, respectivamente.
Arredonde o salrio mdio para duas casas decimais
DNAME
-----------ACCOUNTING
RESEARCH
SALES
LOC
Number of People
--------- ---------------NEW YORK
3
DALLAS
5
CHICAGO
6
Salary
-------2916.67
2175
1566.67
Exerccio 5 (continuao)
Se voc quiser mais desafios, complete os exerccios abaixo:
11.
Crie uma consulta que exiba o nmero total de funcionrios e, desse total, o nmero total de
funcionrios contratados em 1980, 1981, 1982 e 1983. Coloque os cabealhos apropriados
nas colunas.
TOTAL 1980
----- ----14
1
12.
1981
----10
1982 1983
----- ----2
1
Crie uma consulta matriz para exibir o cargo, o salrio desse cargo baseado no nmero do
departamento e o salrio total desse cargo para todos os departamentos, colocando em cada
coluna um cabealho apropriado.
Job
Dept 10
--------- ------ANALYST
CLERK
1300
MANAGER
2450
PRESIDENT
5000
SALESMAN
Dept 20 Dept 30
Total
-------- -------- ------6000
6000
1900
950
4150
2975
2850
8275
5000
5600
5600
6
Subconsultas
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Descrever os tipos de problemas que as
subconsultas podem resolver
Definir as subconsultas
Listar os tipos de subconsultas
Criar subconsultas de uma nica linha e de
vrias linhas
6-2
Objetivo da Lio
Nesta lio, voc aprender sobre os recursos mais avanados da instruo SELECT. Voc pode criar
subconsultas na clusula WHERE de outra instruo SQL para obter valores baseados em um valor
condicional desconhecido. Esta lio abrange as subconsultas de uma nica linha e de vrias linhas.
6-3
Subconsultas
SELECT
FROM
WHERE
select_list
tabela
operador expr
(SELECT
FROM
select_list
tabela);
6-4
Subconsultas
Uma subconsulta uma instruo SELECT que incorporada em uma clusula de outra instruo
SELECT. Voc pode desenvolver instrues sofisticadas a partir de instrues simples usando
subconsultas. Elas podem ser muito teis quando voc precisar selecionar linhas de uma tabela com
uma condio que dependa dos dados na prpria tabela.
possvel colocar a subconsulta em vrias clusulas SQL:
clusula WHERE
clusula HAVING
clusula FROM
Na sintaxe:
operador
ENAME
---------KING
FORD
SCOTT
6-5
Diretrizes para o
Uso de Subconsultas
Coloque as subconsultas entre parnteses.
Coloque as subconsultas no lado direito
do operador de comparao.
No adicione uma clusula ORDER BY a
uma subconsulta.
Use operadores de uma nica linha com
subconsultas de uma nica linha.
Use operadores de vrias linhas com
subconsultas de vrias linhas.
6-6
As subconsultas no podem conter uma clusula ORDER BY. S possvel haver uma clusula
ORDER BY para uma instruo SELECT e, se estiver especificado, ela deve ser a ltima
clusula na instruo SELECT principal.
Tipos de Subconsultas
Subconsulta de uma nica linha
Consulta principal
retorna
Subconsulta
CLERK
CLERK
MANAGER
retorna
CLERK
7900
MANAGER 7698
Tipos de Subconsultas
Subconsultas de uma nica linha: consultas que retornam somente uma linha da instruo
SELECT interna
Subconsultas de vrias linhas: consultas que retornam mais de uma linha da instruo
SELECT interna
Subconsultas de vrias colunas: consultas que retornam mais de uma coluna da instruo
SELECT interna
6-8
Significado
Igual a
>
Maior do que
>=
<
Menor do que
<=
Menor ou igual a
<>
Diferente de
ENAME
---------JAMES
SMITH
ADAMS
MILLER
ename, job
emp
job =
(SELECT
FROM
WHERE
job
emp
empno = 7369);
JOB
--------CLERK
CLERK
CLERK
CLERK
Executando Subconsultas de
uma nica Linha
SQL>
2
3
4
5
6
7
8
9
10
SELECT
FROM
WHERE
AND
ename, job
emp
job =
(SELECT
FROM
WHERE
sal >
(SELECT
FROM
WHERE
CLERK
job
emp
empno = 7369)
1100
sal
emp
empno = 7876);
ENAME
JOB
---------- --------MILLER
CLERK
6-9
800
MIN(sal)
emp);
ENAME
JOB
SAL
---------- --------- --------SMITH
CLERK
800
6-10
6-11
SELECT
FROM
GROUP BY
HAVING
deptno, MIN(sal)
emp
deptno
MIN(sal) >
(SELECT
FROM
WHERE
800
MIN(sal)
emp
deptno = 20);
Exemplo
Localize o cargo com o menor salrio mdio.
SQL>
2
3
4
5
6
SELECT
FROM
GROUP BY
HAVING
job, AVG(sal)
emp
job
AVG(sal) = (SELECT
FROM
GROUP BY
MIN(AVG(sal))
EMP
job);
O que H de Errado
com esta Instruo?
SQL> SELECT empno, ename
2 FROM
emp
com
a
h
3 WHERE sal =
in
ica l(SELECT
4
MIN(sal)
n
has
a
n
i
m
l
u
5
FROM
emp
s
ia
de
r
r
o
v
d
GROUP BY deptno);
de
r6a
Ope onsulta
subc
ERROR:
ORA-01427: A subconsulta de uma nica linha retorna
mais de uma linha (Single-row subquery returns
more than one row)
no rows selected
6-12
Erros em Subconsultas
Um erro comum em subconsultas o retorno de mais de uma linha para uma subconsulta de uma
nica linha.
Na instruo SQL do slide, a subconsulta contm uma clusula GROUP BY (deptno), o que indica
que a subconsulta retornar vrias linhas, uma para cada grupo que localizar. Nesse caso, o
resultado da subconsulta ser 800, 1300 e 950.
A consulta externa obtm os resultados da subconsulta (800, 950, 1300) e os utiliza na sua clusula
WHERE. A clusula WHERE contm um operador igual (=), um operador de comparao de uma
nica linha que espera somente um valor. O operador = no pode aceitar mais de um valor da
subconsulta e, portanto, gera o erro.
Para corrigir esse erro, altere o operador = para IN.
job
(SELECT job
FROM
emp
WHERE
ename='SMYTHE');
no rows selected
ulta
s
n
o
ubc
s
A
6-13
nhu
e
n
rna
o
t
e
o r
alo
v
m
6-14
Operador
Significado
IN
ANY
ALL
Exemplo
Localize os funcionrios que recebam o mesmo salrio que o salrio mnimo dos departamentos.
A consulta interna executada primeiro, produzindo um resultado de consulta que contenha trs
linhas: 800, 950, 1300. O bloco da consulta principal processado em seguida e usa os valores
retornados pela consulta interna para completar sua condio de pesquisa. Na verdade, a consulta
principal pareceria da seguinte forma para o Oracle Server:
SQL> SELECT
2 FROM
3 WHERE
SELECT
FROM
WHERE
AND
EMPNO
--------7654
7521
6-15
ENAME
---------MARTIN
WARD
JOB
--------SALESMAN
SALESMAN
6-16
ENAME
---------KING
JONES
FORD
SCOTT
JOB
--------PRESIDENT
MANAGER
ANALYST
ANALYST
Sumrio
As subconsultas so teis quando uma
consulta baseia-se em valores desconhecidos.
SELECT
FROM
WHERE
6-17
select_list
tabela
operador expr
(SELECT select_list
FROM
tabela);
Sumrio
Uma subconsulta uma instruo SELECT que incorporada em uma clusula de outra instruo
SQL. As subconsultas so teis quando uma consulta baseia-se em critrios de seleo com valores
intermedirios desconhecidos.
As subconsultas tm as seguintes caractersticas:
Podem passar uma linha de dados para uma instruo principal que contenha um operador de
uma nica linha, tal como =, <>, >, >=, < ou <=
Podem passar vrias linhas de dados para uma instruo principal que contenha um operador de
vrias linhas, tal como IN
6-18
Exerccio 6
1. Crie uma consulta para exibir o nome e a data de admisso de todos os funcionrios no mesmo
departamento que Blake. Exclua Blake.
ENAME
HIREDATE
---------- --------ALLEN
20-FEB-81
WARD
22-FEB-81
MARTIN
28-SEP-81
TURNER
08-SEP-81
JAMES
03-DEC-81
5 rows selected.
2. Crie uma consulta para exibir o nmero e o nome de todos os funcionrios que recebam mais que
o salrio mdio. Classifique os resultados, por salrio, em ordem decrescente.
EMPNO ENAME
----- ----------7839 KING
7902 FORD
7788 SCOTT
7566 JONES
7698 BLAKE
7782 CLARK
6 rows selected.
3. Crie uma consulta que exiba o nmero e o nome de todos os funcionrios que trabalhem em um
departamento com qualquer funcionrio cujo nome contenha um T. Salve sua instruo SQL
em um arquivo chamado p6q3.sql.
EMPNO ENAME
------ -------7566 JONES
7788 SCOTT
7876 ADAMS
7369 SMITH
7902 FORD
7698 BLAKE
7654 MARTIN
7499 ALLEN
7844 TURNER
7900 JAMES
7521 WARD
11 rows selected.
Exerccio 6 (continuao)
4. Exiba o nome do funcionrio, o nmero do departamento e o cargo de todos os funcionrios
cuja localizao do departamento seja Dallas.
ENAME DEPTNO JOB
------ ------ --------JONES
20 MANAGER
FORD
20 ANALYST
SMITH
20 CLERK
SCOTT
20 ANALYST
ADAMS
20 CLERK
SAL
---2850
2450
2975
ENAME
JOB
-------- --------BLAKE
MANAGER
MARTIN
SALESMAN
ALLEN
SALESMAN
TURNER
SALESMAN
JAMES
CLERK
WARD
SALESMAN
selected.
ENAME
-----JONES
SCOTT
FORD
BLAKE
SAL
---2975
3000
3000
2850
7
Subconsultas de
Vrias Colunas
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Criar uma subconsulta de vrias colunas
Descrever e explicar o comportamento de
subconsultas quando valores nulos forem
recuperados
Criar uma subconsulta em uma clusula
FROM
7-2
Objetivo da Lio
Nesta lio, voc aprender a criar subconsultas de vrias colunas e subconsultas na clusula FROM
de uma instruo SELECT.
Subconsulta
SALESMAN
MANAGER
CLERK
A consulta
principal compara
MANAGER 10
7-3
30
10
20
30
10
20
Usando Subconsultas de
Vrias Colunas
Exiba a ID da ordem, a ID do produto e a
quantidade de itens na tabela de itens que
corresponde ID do produto e quantidade
de um item na ordem 605.
SQL>
2
3
4
5
6
7
7-4
SELECT
FROM
WHERE
AND
Usando Subconsultas de
Vrias Colunas
Exiba o nmero da ordem, o nmero do
produto e a quantidade de qualquer item em
que o nmero do produto e a quantidade
correspondam ao nmero do produto e
quantidade de um item na ordem 605.
SQL>
2
3
4
5
6
7
7-5
SELECT
FROM
WHERE
AND
PRODID
QTY
100861
100
617
100870
500
616
102130
10
A sada mostra que h trs itens em outras ordens que contm o mesmo nmero do produto e a
mesma quantidade que um item na ordem 605. Por exemplo, a ordem 617 solicitou uma quantidade
500 do produto 100870. A ordem 605 tambm solicitou uma quantidade 500 do produto 100870.
Portanto, essas linhas do candidato so parte da sada.
Comparaes de Coluna
Aos pares
PRODID
101863
100861
102130
100890
100870
101860
7-6
PRODID
101863
100861
102130
100890
100870
101860
QTY
100
100
10
5
500
50
Subconsulta de Comparao
que No Seja aos Pares
Exiba o nmero da ordem, o nmero do produto e
a quantidade de qualquer item em que o nmero
do produto e a quantidade correspondam a
qualquer nmero do produto e quantidade de um
item na ordem 605.
SQL>
2
3
4
5
6
7
8
9
7-7
SELECT
FROM
WHERE
AND
AND
prodid
item
ordid = 605)
qty
item
ordid = 605)
7-9
employee.ename
emp employee
employee.empno IN (SELECT manager.mgr
FROM emp manager);
ENAME
---------KING
...
6 rows selected.
Introduo ao Oracle: SQL e PL/SQL 7-9
SELECT
FROM
WHERE
AND
ENAME
SAL
DEPTNO
SALAVG
---------- --------- --------- ---------KING
5000
10 2916.6667
JONES
2975
20
2175
SCOTT
3000
20
2175
...
6 rows selected.
7-10
Sumrio
Uma subconsulta de vrias colunas retorna
mais de uma coluna.
As comparaes de coluna em
comparaes de vrias colunas podem ser
aos pares ou no.
Uma subconsulta de vrias colunas
tambm pode ser usada na clusula FROM
de uma instruo SELECT.
7-11
Sumrio
As subconsultas de vrias colunas permitem que voc combine condies WHERE duplicadas em
uma nica clusula WHERE. As comparaes de coluna em consultas de vrias colunas podem ser
comparaes aos pares ou no. Voc pode usar uma subconsulta para definir uma tabela que seja
operada por uma consulta contida. Para isso, coloque a subconsulta na clusula FROM da consulta
contida, como se fosse um nome de tabela.
7-12
Exerccio 7
1. Crie uma consulta para exibir o nome, o nmero do departamento e o salrio de qualquer
funcionrio cujo nmero do departamento e salrio correspondam ao nmero do
departamento e salrio de qualquer funcionrio que receba comisso.
ENAME
DEPTNO
SAL
-------- ------ -----MARTIN
30
1250
WARD
30
1250
TURNER
30
1500
ALLEN
30
1600
DNAME
SAL
--------- -----RESEARCH
800
RESEARCH
1100
RESEARCH
2975
RESEARCH
3000
RESEARCH
3000
3. Crie uma consulta para exibir o nome, a data de admisso e o salrio de todos os funcionrios
que tenham o mesmo salrio e a mesma comisso que Scott.
Observao: No exiba SCOTT no conjunto de resultados.
ENAME
HIREDATE
SAL
------- --------- -----FORD
03-DEC-81
3000
4. Crie uma consulta para exibir os funcionrios que recebem um salrio maior que o de todos
os escriturrios. Classifique os resultados sobre salrios do maior para o menor.
ENAME
JOB
SAL
---------- --------- --------KING
PRESIDENT
5000
FORD
ANALYST
3000
SCOTT
ANALYST
3000
JONES
MANAGER
2975
BLAKE
MANAGER
2850
CLARK
MANAGER
2450
ALLEN
SALESMAN
1600
TURNER
SALESMAN
1500
8 rows selected.
8
Produzindo uma Sada
Legvel com o SQL*Plus
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Produzir consultas que requeiram uma
varivel de entrada
Personalizar o ambiente SQL*Plus
Produzir sadas mais legveis
Criar e executar arquivos de script
Salvar personalizaes
8-2
Objetivo da Lio
Nesta lio, voc aprender a incluir comandos do SQL*Plus para produzir sadas SQL mais legveis.
Voc pode criar um arquivo de comando contendo uma clusula WHERE para restringir as linhas
exibidas. Para alterar a condio sempre que o arquivo de comando for executado, use variveis de
substituio. As variveis de substituio podem substituir valores na clusula WHERE, uma string
de texto e at uma coluna ou um nome de tabela.
Relatrios Interativos
...sal = ?
deptno = ?
.. ename = ? ...
Usurio
8-3
Relatrios Interativos
Os exemplos at aqui no tm sido interativos. Em uma aplicao concluda, o usurio acionaria o
relatrio, que, por sua vez, seria executado sem nenhum pedido posterior. A faixa de dados seria
predeterminada pela clusula WHERE fixada no arquivo de script do SQL*Plus.
Ao usar o SQL*Plus, voc pode criar relatrios que solicitem ao usurio o fornecimento de seus
prprios valores para restringir a faixa de dados retornada. Para criar relatrios interativos, voc pode
incorporar variveis de substituio em um arquivo de comando ou em uma nica instruo SQL.
Uma varivel pode ser comparada a um container em que os valores so armazenados
temporariamente.
Variveis de Substituio
Use as variveis de substituio do SQL*Plus
para armazenar valores temporariamente.
"E" comercial nico (&)
"E" comercial duplo (&&)
Comandos DEFINE e ACCEPT
8-4
Variveis de Substituio
No SQL*Plus, voc pode usar variveis de substituio de "e" comercial nico (&) para armazenar valores
temporariamente.
possvel predefinir variveis no SQL*Plus usando os comandos ACCEPT ou DEFINE. ACCEPT l uma
linha de entrada do usurio e a armazena em uma varivel. DEFINE cria e atribui um valor a uma varivel.
Exemplos de Faixas de Dados Restritas
Relatar cifras somente para o trimestre atual ou para faixas de datas especificadas
O SQL*Plus no suporta checagens de validao (exceto para tipos de dados) na entrada do usurio.
Certifique-se de criar prompts simples e sem ambigidade para o usurio.
8-5
Descrio
&user_variable
O exemplo no slide cria uma instruo SQL para pedir que o usurio fornea um nmero de
funcionrio em tempo de execuo e exibe o nmero do funcionrio, o nome, o salrio e o nmero do
departamento desse funcionrio.
Com o "e" comercial nico, o usurio ser solicitado sempre que o comando for executado, se a
varivel no existir.
SET VERIFY ON
SELECT empno, ename, sal, deptno
FROM
emp
WHERE
empno = &employee_num;
8-6
8-7
empno, &column_name
emp
&condition;
JOB
--------PRESIDENT
MANAGER
CLERK
Se nenhum valor for informado para a varivel de substituio, ocorrer um erro quando voc executar
a instruo anterior.
Introduo ao Oracle: SQL e PL/SQL 8-8
SELECT
FROM
WHERE
ORDER BY
ENAME
---------FORD
KING
SCOTT
JOB
SAL
--------- --------ANALYST
3000
PRESIDENT
5000
ANALYST
3000
Descrio
DEFINE varivel
DEFINE
O Comando ACCEPT
Cria um prompt personalizado durante a
aceitao da entrada do usurio
Define explicitamente uma varivel de tipo
de dados NUMBER ou DATE
Oculta a entrada do usurio por motivos de
segurana
ACCEPT varivel [tipo de dados] [FORMAT formato]
[PROMPT texto] [HIDE]
8-12
O Comando ACCEPT
Na sintaxe:
varivel
FOR[MAT] formato
PROMPT texto
HIDE
tipo de dados
8-13
Se no existir uma varivel, os comandos ACCEPT e DEFINE a criaro; se ela existir, esses
comandos a redefiniro automaticamente.
Ao usar o comando DEFINE, utilize aspas simples ('') para envolver uma string que
contenha um espao incorporado.
Use o comando ACCEPT para:
ou
Sair do SQL*Plus
Sair do SQL*Plus
Quando voc no define variveis, possvel verificar suas alteraes com o comando DEFINE.
Quando voc sai do SQL*Plus, as variveis definidas durante essa sesso so perdidas. Para definir
essas variveis para cada sesso, modifique o arquivo login.sql de forma que essas variveis
sejam criadas na inicializao.
= "sales" (CHAR)
8-15
LOC
------------CHICAGO
Personalizando o Ambiente
SQL*Plus
Use os comandos SET para controlar a
sesso atual.
SET system_variable value
8-16
value
Voc pode verificar o que definiu usando o comando SHOW. O comando SHOW no slide checa se
ECHO estava ativado ou desativado.
Para ver todos os valores da varivel SET, use o comando SHOW ALL.
Para obter mais informaes, consulte o SQL*Plus Users Guide and Reference, Release 8,
"Command Reference".
FEEDBACK
Descrio
ARRAY[SIZE] {20| n}
COLSEP {_|text}
FEED[BACK] {6|n|OFF|ON}
HEA[DING] {OFF|ON}
LIN[ESIZE] {80|n}
LONG {80|n}
PAGES[IZE] {24|n}
PAU[SE] {OFF|ON|text}
TERM[OUT] {OFF|ON}
Salvando as Personalizaes
no Arquivo login.sql
O arquivo login.sql contm o comando
SET standard e outros comandos do
SQL*Plus que so implementados no login.
Voc pode modificar o login.sql para
conter comandos SET adicionais.
8-18
Comandos de Formato
do SQL*Plus
8-19
Descrio
TTI[TLE] [texto|OFF|ON]
BTI[TLE] [texto|OFF|ON]
Diretrizes
Lembre-se de redefinir suas configuraes do SQL*Plus para os valores default aps cada
relatrio.
No h nenhum comando para definir uma varivel do SQL*Plus para seu valor default; voc
deve saber o valor especfico ou efetuar logoff e login novamente.
Se voc der um apelido sua coluna, dever fazer referncia ao nome do apelido, no ao nome
da coluna.
Introduo ao Oracle: SQL e PL/SQL 8-19
O Comando COLUMN
Controla a exibio de uma coluna
COL[UMN] [{coluna|apelido} [opo]]
Descrio
CLE[AR]
FOR[MAT] formato
HEA[DING] texto
JUS[TIFY] {alinhamento}
NOPRI[NT]
Oculta a coluna
NUL[L] texto
PRI[NT]
Mostra a coluna
TRU[NCATED]
WRA[PPED]
8-21
Comando
Descrio
COL[UMN] coluna
COL[UMN]
CLE[AR] COL[UMN]
No caso de um comando longo, voc poder continu-lo na prxima linha ao encerrar a linha atual
com um hfen (-).
Exemplo
Resultado
An
N/A
N/A
Dgito de supresso de um
nico zero
999999
1234
099999
01234
Cifro flutuante
$9999
$1234
Moeda local
L9999
L1234
9999.99
1234.00
Separador de milhar
9,999
1,234
8-22
8-23
O Comando BREAK
Use o comando BREAK para secionar linhas e suprimir valores duplicados. Para assegurar que o
comando BREAK funcione efetivamente, use a clusula ORDER BY para ordenar as colunas que
voc estiver quebrando.
Sintaxe
BREAK on column[|alias|row] [skip n|dup|page] on .. [on report]
onde:
pgina
ignora n
duplicar
Usando os Comandos
TTITLE e BTITLE
Exiba cabealhos e rodaps.
TTI[TLE] [texto|OFF|ON]
8-24
O exemplo com TTITLE no slide define o cabealho do relatrio para exibir Salary centralizado em
uma linha e Report centralizado abaixo dele. O exemplo com BTITLE define o rodap do relatrio para
exibir Confidential. TTITLE coloca a data e o nmero da pgina automaticamente no relatrio.
Observao: O slide fornece uma sintaxe abreviada para TTITLE e BTITLE. Vrias opes para
TTITLE e BTITLE so abordadas em outro curso SQL.
8-26
Exemplo de Relatrio
Fri Oct 24
page
Employee
Report
Job
Category
Employee
Salary
----------------------- ----------------------- ----------------CLERK
ADAMS
$1,100.00
JAMES
$950.00
MILLER
$1,300.00
SMITH
$800.00
MANAGER
BLAKE
$2,850.00
CLARK
$2,450.00
JONES
$2,975.00
SALESMAN
ALLEN
$1,600.00
MARTIN
$1,250.00
TURNER
$1,500.00
WARD
$1,250.00
Confidential
8-27
Exemplo
Crie um arquivo de script para elaborar um relatrio que exiba o cargo, o nome e o salrio de todo
funcionrio cujo salrio seja menor que US$ 3.000. Adicione um cabealho centralizado de luas
linhas em que se leia Employee Report e um rodap centralizado em que se leia Confidential.
Renomeie a coluna do cargo como Job Category dividida em duas linhas. Renomeie a coluna do
nome do funcionrio como Employee. Renomeie a coluna do salrio como Salary e formate-a como
US$ 2.500,00.
SET PAGESIZE 37
SET LINESIZE 60
SET FEEDBACK OFF
TTITLE 'Employee|Report'
BTITLE 'Confidential'
BREAK ON job
COLUMN job
HEADING 'Job|Category' FORMAT A15
COLUMN ename HEADING 'Employee' FORMAT A15
COLUMN sal
HEADING 'Salary' FORMAT $99,999.99
REM ** Insert SELECT statement
SELECT
job, ename, sal
FROM
emp
WHERE
sal < 3000
ORDER BY
job, ename
/
SET FEEDBACK ON
REM clear all formatting commands ...
Introduo ao Oracle: SQL e PL/SQL 8-27
Sumrio
Use as variveis de substituio do
SQL*Plus para armazenar valores
temporariamente.
Use os comandos SET para controlar o
ambiente SQL*Plus atual.
Use o comando COLUMN para controlar a
exibio de uma coluna.
Use o comando BREAK para suprimir
duplicaes e secionar linhas.
Use TTITLE e BTITLE para exibir
cabealhos e rodaps.
8-28
Sumrio
As variveis de substituio so teis para executar relatrios. Elas permitem flexibilidade para
substituir valores em uma clusula WHERE, nomes de coluna e expresses. Voc pode personalizar
relatrios criando arquivos de script com:
O comando ACCEPT
O comando DEFINE
O comando UNDEFINE
COLUMN
TTITLE
BTITLE
BREAK
8-29
Exerccio 8
Determine se as afirmaes a seguir so verdadeiras ou falsas:
1. Uma varivel de substituio de "e" comercial nico pedida no mximo uma vez.
Verdadeiro/Falso
2. O comando ACCEPT um comando SQL.
Verdadeiro/Falso
3. Crie um arquivo de script para exibir o nome do funcionrio, o cargo e a data de admisso de
todos os funcionrios que tenham iniciado entre determinada faixa. Concatene o nome e o
cargo juntos, separados por um espao e uma vrgula, e coloque um label na coluna
Employees. Pea que o usurio fornea as duas faixas usando o comando ACCEPT. Use o
formato MM/DD/AAAA. Salve o arquivo de script como p8q3.sql.
Please enter the low date range ('MM/DD/YYYY'): 01/01/1981
Please enter the high date range ('MM/DD/YYYY'): 01/01/1982
EMPLOYEES
HIREDATE
17-NOV-81
01-MAY-81
09-JUN-81
02-APR-81
28-SEP-81
20-FEB-81
08-SEP-81
03-DEC-81
22-FEB-81
03-DEC-81
4. Crie um script para exibir o nome do funcionrio, o cargo e o nome do departamento para uma
determinada localizao. A condio de pesquisa deve aceitar pesquisas sem distino entre
maisculas e minsculas para a localizao do departamento. Salve o arquivo de script como
p8q4.sql.
Please enter the location name: Dallas
EMPLOYEE NAME
------------JONES
FORD
SMITH
SCOTT
ADAMS
JOB
-----------MANAGER
ANALYST
CLERK
ANALYST
CLERK
DEPARTMENT NAME
--------------RESEARCH
RESEARCH
RESEARCH
RESEARCH
RESEARCH
Exerccio 8 (continuao)
5. Modifique p8q4.sql para criar um relatrio que contenha o nome do departamento, o nome
do funcionrio, a data de admisso, o salrio e o salrio anual de cada funcionrio para todos
os funcionrios em uma determinada localizao. Pea a localizao ao usurio. Coloque um
label nas colunas DEPARTMENT NAME, EMPLOYEE NAME, START DATE, SALARY e
ANNUAL SALARY, colocando os labels em vrias linhas. Salve novamente o script como
p8q5.sql.
Please enter the location name: Chicago
DEPARTMENT
NAME
---------SALES
EMPLOYEE
NAME
----------BLAKE
MARTIN
ALLEN
TURNER
JAMES
WARD
START
DATE
--------01-MAY-81
28-SEP-81
20-FEB-81
08-SEP-81
03-DEC-81
22-FEB-81
SALARY
--------$2,850.00
$1,250.00
$1,600.00
$1,500.00
$950.00
$1,250.00
ANNUAL
SALARY
---------$34,200.00
$15,000.00
$19,200.00
$18,000.00
$11,400.00
$15,000.00
9
Manipulao de Dados
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Descrever cada instruo DML
Inserir linhas em uma tabela
Atualizar linhas em uma tabela
Deletar linhas de uma tabela
Controlar transaes
9-2
Objetivo da Lio
Nesta lio, voc aprender como inserir linhas, atualizar e deletar linhas existentes em uma tabela.
Voc tambm aprender como controlar transaes com as instrues COMMIT, SAVEPOINT e
ROLLBACK.
tabela
Remove linhas existentes de uma tabela
9-3
DEPT
DEPTNO
-----10
20
30
40
DNAME
LOC
---------- -------ACCOUNTING NEW YORK
RESEARCH
DALLAS
SALES
CHICAGO
OPERATIONS BOSTON
DEPT
DEPTNO
-----10
20
30
40
DNAME
LOC
---------- -------ACCOUNTING NEW YORK
RESEARCH
DALLAS
SALES
CHICAGO
OPERATIONS BOSTON
50 DEVELOPMENT DETROIT
9-4
A Instruo INSERT
Adicione novas linhas em uma tabela
usando a instruo INSERT.
INSERT INTO
VALUES
9-5
coluna
valor
Observao: Esta instruo com a clusula VALUES adiciona somente uma linha por vez a uma
tabela.
dept
Name
Null?
------------------------------- -------DEPTNO
NOT NULL
DNAME
LOC
Type
-----------NUMBER(2)
VARCHAR2(14)
VARCHAR2(13)
9-7
dept
(70, 'FINANCE', NULL);
Descrio
Implcito
Explcito
Certifique-se de que a coluna de destino permita valores nulos verificando o status Null? a partir do
comando DESCRIBE do SQL*Plus.
O Oracle Server impe automaticamente todas as restries de integridade de dados, tipos de dados e
faixas de dados. Qualquer coluna que no esteja listada explicitamente obtm um valor nulo na nova
linha.
9-8
ENAME
JOB
HIREDATE
COMM
Inserindo Valores
Especficos de Data
Adicionar um novo funcionrio.
SQL> INSERT INTO
2 VALUES
3
4
1 row created.
emp
(2296,'AROMANO','SALESMAN',7782,
TO_DATE('FEB 3, 1997', 'MON DD, YYYY'),
1300, NULL, 10);
9-9
9-10
Criando um Script
com Prompts Personalizados
ACCEPT armazena o valor em uma varivel.
PROMPT exibe o texto personalizado.
ACCEPT
ACCEPT
ACCEPT
INSERT INTO
VALUES
9-11
No preceda o parmetro de substituio do SQL*Plus com o "e" comercial (&) ao fazer referncia a ele
no comando ACCEPT. Use um trao (-) para continuar com um comando do SQL*Plus na prxima linha.
Copiando Linhas
a partir de Outra Tabela
Crie a instruo INSERT com uma
subconsulta.
SQL> INSERT INTO managers(id, name, salary, hiredate)
2
SELECT empno, ename, sal, hiredate
3
FROM
emp
4
WHERE job = 'MANAGER';
3 rows created.
onde:
tabela
o nome da tabela
coluna
subconsulta
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "SELECT". seo
Subqueries.
O nmero de colunas e seus tipos de dados na lista de colunas da clusula INSERT devem coincidir com
o nmero de valores e seus tipos de dados na subconsulta.
Alterando os Dados
em uma Tabela
EMP
EMPNO ENAME
7839
7698
7782
7566
...
KING
BLAKE
CLARK
JONES
JOB
...
DEPTNO
PRESIDENT
MANAGER
MANAGER
MANAGER
10
30
10
20
"atualize uma
linha em uma
tabela EMP"
EMP
EMPNO ENAME
7839
7698
7782
7566
...
9-13
KING
BLAKE
CLARK
JONES
JOB
...
PRESIDENT
MANAGER
MANAGER
MANAGER
DEPTNO
10
30
20
10
20
A instruo UPDATE
Modifique linhas existentes com a
instruo UPDATE.
UPDATE
SET
[WHERE
tabela
coluna = valor [, coluna = valor, ...]
condio];
9-14
Atualizando Linhas
Voc pode modificar linhas existentes usando a instruo UPDATE.
Na sintaxe acima:
tabela
o nome da tabela
coluna
valor
condio
ename, deptno
employee;
ENAME
DEPTNO
---------- --------KING
20
BLAKE
20
CLARK
20
JONES
20
MARTIN
20
ALLEN
20
TURNER
20
...
14 rows selected.
9-16
9-17
(SELECT
FROM
WHERE
(SELECT
FROM
WHERE
deptno
emp
empno = 7788)
job
emp
empno = 7788);
emp
deptno = 55
deptno = 10;
te
s
i
x
er
d
de
m
ta
r
pa
en
to
55
UPDATE emp
e
o
*
ERROR at line 1: N
ORA-02291: integrity constraint (USR.EMP_DEPTNO_FK)
violated - parent key not found
9-18
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
DEVELOPMENT DETROIT
MIS
9-19
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
MIS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
A Instruo DELETE
Voc pode remover linhas existentes de uma
tabela usando a instruo DELETE.
DELETE [FROM]
[WHERE
9-20
tabela
condio];
Deletando Linhas
Voc pode remover linhas existentes usando a instruo DELETE.
Na sintaxe:
tabela
condio
o nome da tabela
identifica as linhas a serem deletadas e composta de nomes de colunas,
expresses, constantes, subconsultas e operadores de comparao
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "DELETE".
department
dname = 'DEVELOPMENT';
9-21
department;
Exemplo
Remova todos os funcionrios que iniciaram aps 1 de janeiro de 1997.
SQL> DELETE FROM
2 WHERE
1 row deleted.
emp
hiredate > TO_DATE('01.01.1997', 'DD.MM.YYYY');
Se voc omitir a clusula WHERE, todas as linhas na tabela sero deletadas. O segundo exemplo no
slide deleta todas as linhas da tabela DEPARTMENT porque nenhuma clusula WHERE foi
especificada.
Observao: A tabela DEPARTMENT possui os mesmos dados que a tabela DEPT.
9-22
employee
deptno =
(SELECT
FROM
WHERE
deptno
dept
dname ='SALES');
a
linh a
a
dept
um imri
r
a
t
r
deptno = 10;
e
del have p geira
e
pod ma c stran
o
9-23
9-24
Descrio
Data manipulation
language (DML)
(commit automtico)
O usurio sai
O sistema cai
9-25
Depois que uma transao termina, a prxima instruo SQL executvel automaticamente inicia a
prxima transao.
Uma instruo DDL ou DCL automaticamente processada e, portanto, finaliza implicitamente uma
transao.
9-26
Controlando Transaes
Transao
INSERT
INSERT
COMMIT
UPDATE
UPDATE
INSERT
INSERT
Savepoint A
DELETE
DELETE
Savepoint B
ROLLBACK
9-27
Descrio
COMMIT
SAVEPOINT nome
ROLLBACK [TO
SAVEPOINT nome]
9-28
Circunstncias
Processamento
automtico
Rollback automtico
O usurio atual pode revisar os resultados das operaes de manipulao de dados consultando as
tabelas.
Os outros usurios no podero exibir os resultados das operaes de manipulao de dados feitas
pelo usurio atual. O Oracle Server institui a consistncia na leitura para garantir que cada usurio
veja os dados como eram no ltimo commit.
As linhas afetadas so bloqueadas, os outros usurios no podero alterar os dados nas linhas
afetadas.
9-30
As linhas afetadas so desbloqueadas, as linhas esto agora disponveis para outros usurios
executarem as novas alteraes nos dados.
9-31
9-32
employee;
Exemplo
Ao tentar remover um registro da tabela TEST, voc pode acidentalmente esvaziar a tabela. Voc
pode corrigir o erro, emitir novamente a instruo apropriada e tornar permanentes as alteraes dos
dados.
SQL> DELETE FROM test;
25,000 rows deleted.
SQL> ROLLBACK;
Rollback complete.
SQL> DELETE FROM test
2 WHERE
id = 100;
1 row deleted.
SQL> SELECT
*
2 FROM
test
3 WHERE
id = 100;
No rows selected.
SQL> COMMIT;
Commit complete.
Introduo ao Oracle: SQL e PL/SQL 9-32
9-33
Consistncia na Leitura
A consistncia na leitura garante sempre
uma exibio consistente dos dados.
As alteraes feitas por um usurio no
entram em conflito com as alteraes
feitas por outro usurio.
A consistncia na leitura garante que nos
mesmos dados:
Os leitores no esperem pelos autores
Os autores no esperem pelos leitores
9-35
Consistncia na Leitura
Os usurios de bancos de dados fazem dois tipos de acesso ao banco de dados:
O leitor e autor do banco de dados tenham garantia de uma exibio consistente dos
dados.
O objetivo da consistncia na leitura garantir que cada usurio veja os dados como eles
eram no ltimo commit, antes da operao DML iniciar.
Implementao da Consistncia
na Leitura
Blocos
de dados
UPDATE emp
SET
sal = 2000
WHERE ename =
'SCOTT';
Segmentos
de rollback
Usurio A
SELECT *
FROM
emp;
Imagem da
consistncia
na leitura
Usurio B
9-36
dados
alterados
e dados
intactos
antes de
alterar dados
"antigos"
A verso original, mais antiga, dos dados no segmento de rollback gravada de volta na tabela.
Todos os usurios vem o banco de dados como ele era antes da transao iniciar.
Bloqueando
Bloqueios do Oracle:
Impedem a interao destrutiva entre
transaes simultneas
No requerem ao do usurio
Usam automaticamente o nvel mais baixo de
restrio
So mantidos durante a durao da transao
H dois modos bsicos:
Exclusivo
Compartilhado
9-37
O Que So Bloqueios?
Bloqueios so mecanismos que impedem a interao destrutiva entre transaes que acessem o
mesmo recurso: um objeto de usurio (como tabelas ou linhas) ou objetos do sistema no visveis aos
usurios (como estruturas de dados compartilhados e linhas de dicionrios de dados).
Como o Oracle Bloqueia os Dados
O bloqueio em um banco de dados do Oracle totalmente automtico e no requer ao do usurio.
O bloqueio implcito ocorre para todas as instrues SQL exceto SELECT. O mecanismo de bloqueio
default do Oracle automaticamente usa o nvel mais inferior da restrio aplicvel, fornecendo assim
o maior grau de simultaneidade e mxima integridade de dados. O Oracle tambm permite que o
usurio bloqueie os dados manualmente.
Modos de Bloqueio
O Oracle usa dois modos de bloqueio em um banco de dados de vrios usurios:
Modo de Bloqueio
Descrio
exclusivo
bloqueio
compartilhado
Sumrio
Instruo
Descrio
INSERT
UPDATE
DELETE
COMMIT
SAVEPOINT
ROLLBACK
9-38
Sumrio
Manipule dados no banco de dados do Oracle usando as instrues INSERT, UPDATE e DELETE.
Controle as alteraes nos dados usando as instrues COMMIT, SAVEPOINT e ROLLBACK.
O Oracle Server garante uma exibio consistente dos dados sempre.
O bloqueio pode ser implcito ou explcito.
9-39
Exerccio 9
Insira os dados na tabela MY_EMPLOYEE.
1. Execute o script lab9_1.sql para criar a tabela MY_EMPLOYEE que ser usada para o lab.
2. Descreva a estrutura da tabela MY_EMPLOYEE para identificar os nomes de coluna.
Name
Null?
Type
NOT NULL
NUMBER(4)
LAST_NAME
VARCHAR2(25)
FIRST_NAME
VARCHAR2(25)
USERID
VARCHAR2(8)
SALARY
NUMBER(9,2)
3. Adicione a primeira linha de dados tabela MY_EMPLOYEE a partir dos dados do exemplo a
seguir. No liste as colunas na clusula INSERT.
ID
LAST_NAME
FIRST_NAME
USERID
SALARY
Patel
Ralph
rpatel
795
Dancs
Betty
bdancs
860
Biri
Ben
bbiri
1100
Newman
Chad
cnewman
750
Ropeburn
Audry
aropebur
1550
4. Preencha a tabela MY_EMPLOYEE com uma segunda linha de dados de exemplo da lista
anterior. Desta vez, liste as colunas explicitamente na clusula INSERT.
5. Confirme a adio tabela.
ID
--1
2
LAST_NAME
----------Patel
Dancs
FIRST_NAME
---------Ralph
Betty
USERID
-----rpatel
bdancs
SALARY
-----795
860
Exerccio 9 (continuao)
6. Crie um script chamado loademp.sql para carregar linhas na tabela MY_EMPLOYEE de
modo interativo. Solicite ao usurio a identificao, o nome, o sobrenome e o salrio do
funcionrio. Concatene a primeira letra do primeiro nome e os sete primeiros caracteres do
ltimo nome para produzir a identificao do usurio.
7. Preencha a tabela com as duas linhas de dados de exemplo a seguir, executando o script que
voc criou.
8. Confirme as adies tabela.
ID
LAST_NAME
FIRST_NAME USERID
SALARY
------
1
2
3
4
Patel
Dancs
Biri
Newman
Ralph
Betty
Ben
Chad
rpatel
bdancs
bbiri
cnewman
795
860
1100
750
LAST_NAME
---------Patel
Drexler
Newman
FIRST_NAME
---------Ralph
Ben
Chad
USERID SALARY
------ -----rpatel
1000
bbiri
1100
cnewman 1000
Exerccio 9 (continuao)
15. Faa um commit de todas as alteraes pendentes.
Controle as transaes de dados na tabela MY_EMPLOYEE.
16. Preencha a tabela com a ltima linha de dados de exemplo, executando o script que voc criou na
etapa 6.
17. Confirme a adio tabela.
ID
--1
3
4
5
LAST_NAME
--------Patel
Drexler
Newman
Ropeburn
FIRST_NAME
----------Ralph
Ben
Chad
Audry
USERID
SALARY
-------- -----rpatel
1000
bbiri
1100
cnewman
1000
aropebur
1550
LAST_NAME
--------Patel
Drexler
Newman
Ropeburn
FIRST_NAME USERID
SALARY
---------- --------------Ralph
rpatel
1000
Ben
bbiri
1100
Chad
cnewman
1000
Audry
aropebur
1550
10
Criando e Gerenciando
Tabelas
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Descrever os principais objetos do banco
de dados
Criar tabelas
Descrever os tipos de dados que podem
ser usados ao especificar a definio da
coluna
Alterar definies de tabela
Eliminar, renomear e truncar tabelas
10-2
Objetivo da Lio
Nesta lio, voc aprender sobre os principais objetos do banco de dados e o relacionamento entre
eles. Voc tambm aprender como criar, alterar e eliminar tabelas.
10-3
Objeto
Descrio
Tabela
View
Seqncia
ndice
Sinnimo
As tabelas podem ser criadas a qualquer momento, at mesmo quando os usurios estiverem
usando o banco de dados.
Observao: H mais objetos de banco de dados disponveis que no so abordados neste curso.
10-4
Nomes de tabela e de colunas devem comear com uma letra e podem ter de 1 a 30 caracteres.
Os nomes devem conter somente os caracteres A-Z, az, 09, _ (sublinhado), $ e # (caracteres
legais, mas evite us-los).
Nomeie a mesma entidade de modo consistente em diferentes tabelas. Por exemplo, a coluna do
nmero do departamento chamada DEPTNO nas tabelas EMP e DEPT.
Observao: Os nomes no fazem distino entre maisculas de minsculas. Por exemplo, EMP
tratada com o mesmo nome que eMP ou eMp.
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "Object Names and
Qualifiers".
Especifique:
Nome da tabela
Nome da coluna, tipo de dados da
esquema
tabela
o nome da tabela
DEFAULT expr
coluna
o nome da coluna
tipo de dados
Fazendo Referncia a
Tabelas de Outro Usurio
10-6
A Opo DEFAULT
Especifique um valor default para uma coluna
durante uma insero.
hiredate DATE DEFAULT SYSDATE,
A Opo DEFAULT
Um valor default pode ser dado uma coluna usando-se a opo DEFAULT. Essa opo impede que
valores nulos entrem nas colunas se uma linha for inserida sem um valor para a coluna. O valor
default pode ser um literal, uma expresso ou uma funo SQL, como SYSDATE e USER, mas o
valor no pode ser o nome de outra coluna ou pseudocoluna como NEXTVAL ou CURRVAL. A
expresso default deve corresponder ao tipo de dados da coluna.
Criando Tabelas
Crie a tabela.
SQL> CREATE TABLE dept
2
(deptno NUMBER(2),
3
dname
VARCHAR2(14),
4
loc
VARCHAR2(13));
Table created.
Type
--------NUMBER(2)
VARCHAR2(14)
VARCHAR2(13)
Criando Tabelas
O exemplo no slide cria a tabela DEPT, com trs colunas chamadas, DEPTNO, DNAME e LOC.
Ele tambm confirma a criao da tabela emitindo o comando DESCRIBE.
Como criar uma tabela uma instruo DDL, um commit automtico ocorre quando essa instruo
executada.
pelo usurio
Contm informaes sobre o usurio
Dicionrio de dados
Conjunto de tabelas criadas e mantidas
dados
10-9
Descrio
USER_
ALL_
Estas views contm informaes sobre todas as tabelas (de objeto e relacionais)
acessveis ao usurio.
DBA_
Estas views so restritas. Estas views somente podem ser acessadas por pessoas que
tenham sido atribudas o DBA total.
V$_
*
user_tables;
DISTINCT object_type
user_objects;
10-10
*
user_catalog;
USER_TABLES
USER_OBJECTS
USER_CATALOG
Observao: USER_CATALOG possui um sinnimo chamado CAT. Voc pode usar esse sinnimo
no lugar de USER_CATALOG nas instrues SQL.
SQL> SELECT *
2
FROM
CAT;
Tipos de Dados
Tipo de Dados
Descrio
VARCHAR2(tamanho)
CHAR(tamanho)
NUMBER(p,s)
DATE
LONG
CLOB
BLOB
BFILE
10-11
Tipos de Dados
Tipo de Dados
Descrio
VARCHAR2(tamanho)
CHAR(tamanho)
NUMBER(p,s)
DATE
LONG
CLOB
Tipos de Dados
Tipo de Dados
Descrio
VARCHAR2(tamanho)
CHAR(tamanho)
NUMBER(p,s)
DATE
LONG
CLOB
BLOB
BFILE
10-12
Descrio
RAW(tamanho)
LONG RAW
BLOB
BFILE
o nome da tabela.
coluna
subconsulta
Diretrizes
A tabela ser criada com os nomes de coluna especificados e as linhas recuperadas pela
instruo SELECT sero inseridas na tabela.
Se forem dadas especificaes para a coluna, o nmero de colunas deve ser igual ao nmero de
colunas na lista SELECT da subconsulta.
Type
----NUMBER(4)
VARCHAR2(10)
NUMBER
DATE
10-15
o nome da tabela
coluna
tipo de dados
DEFAULT expr
Voc pode modificar colunas existentes em uma tabela usando a instruo ALTER TABLE com a
clusula MODIFY.
Observao: O slide fornece a sintaxe abreviada para ALTER TABLE. ALTER TABLE ser
abordada com mais detalhes em uma lio mais adiante.
Nova coluna
ENAME
ANNSAL
---------- -------BLAKE
34200
MARTIN
15000
ALLEN
19200
TURNER
18000
HIREDATE
JOB
01-MAY-81
28-SEP-81
20-FEB-81
08-SEP-81
"adicione
uma nova
coluna na
tabela
DEPT30"
DEPT30
EMPNO
-----7698
7654
7499
7844
...
10-16
ENAME
ANNSAL
---------- -------BLAKE
34200
MARTIN
15000
ALLEN
19200
TURNER
18000
HIREDATE
JOB
01-MAY-81
28-SEP-81
20-FEB-81
08-SEP-81
10-17
Voc pode adicionar ou modificar colunas, mas no pode remov-las de uma tabela.
Voc no pode especificar onde a coluna deve aparecer. A coluna nova torna-se a ltima
coluna.
O exemplo no slide adiciona uma coluna chamada JOB tabela DEPT30. A coluna JOB torna-se a
ltima coluna na tabela.
Observao: Se uma tabela j contiver linhas quando uma coluna for adicionada, ento a nova
coluna ser inicialmente nula para todas as linhas.
dept30
(ename VARCHAR2(15));
10-18
Diminua a largura de uma coluna se ela contiver somente valores nulos e se a tabela no tiver
linhas.
Converta uma coluna CHAR para o tipo de dados VARCHAR2 ou converta uma coluna
VARCHAR2 para o tipo de dados CHAR se a coluna contiver valores nulos ou se voc no
alterar o tamanho.
Uma alterao no valor default de uma coluna afeta somente as inseres subseqentes tabela.
10-19
dept30
job ;
A tabela deve permanecer com pelo menos uma coluna aps ser alterada.
OR
ALTER
TABLE tabela
SET UNUSED COLUMN coluna;
ALTER TABLE tabela
DROP UNUSED COLUMNS;
10-20
SET
dept30
UNUSED (ename);
Table altered.
SQL> ALTER TABLE
2
DROP
dept30
UNUSED COLUMNS;
Table altered.
10-22
onde:
tabela
o nome da tabela
Diretrizes
Somente o criador da tabela ou um usurio com o privilgio DROP ANY TABLE poder
remover uma tabela.
A instruo DROP TABLE, uma vez executada, irreversvel. O Oracle Server no questiona a ao
quando voc emite a instruo DROP TABLE. Se voc possuir tal tabela ou tiver um privilgio de
nvel superior, ento a tabela ser imediatamente removida. Todas as instrues DDL emitem um
commit, tornando assim a transao permanente.
10-23
onde:
old_name
TO
new_name;
old_name
new_name
10-24
onde:
TABLE
tabela
tabela;
o nome da tabela
Voc deve ser o proprietrio da tabela ou ter privilgios de sistema DELETE TABLE para truncar
a tabela.
A instruo DELETE tambm pode remover todas as linhas de uma tabela, mas no libera o espao
de armazenamento.
ALL_COL_COMMENTS
USER_COL_COMMENTS
ALL_TAB_COMMENTS
USER_TAB_COMMENTS
Sintaxe
COMMENT ON TABLE tabela | COLUMN tabela.coluna
IS 'text';
onde:
tabela
coluna
texto
o nome da tabela
o nome da coluna em uma tabela
o texto do comentrio
Voc pode eliminar um comentrio do banco de dados definindo-o como uma string vazia ('').
SQL> COMMENT ON TABLE
Sumrio
Instruo
Descrio
CREATE TABLE
ALTER TABLE
DROP TABLE
RENAME
TRUNCATE
COMMENT
10-26
CREATE TABLE
ALTER TABLE
DROP TABLE
RENAME
TRUNCATE
Remove todas as linhas de uma tabela e libera o espao de armazenamento usado pela tabela.
COMMENT
10-27
Exerccio 10
1. Crie a tabela DEPARTMENT de acordo com tabela de exemplo a seguir. Informe a sintaxe em um
script chamado p10q1.sql e execute o script para criar a tabela. Confirme se a tabela foi criada.
Id
Name
Datatype
Number
Varchar2
Length
25
Column Name
Key Type
Nulls/Unique
FK Table
FK Column
Name
Null?
Type
---------- -------- ----------ID
NAME
NUMBER(7)
VARCHAR2(25)
2. Preencha a tabela DEPARTMENT com os dados a partir da tabela DEPT. Inclua somente colunas
que voc precisar.
3. Create Crie a tabela EMPLOYEE de acordo com a tabela de exemplo a seguir. Informe a sintaxe
em um script chamado p10q3.sql e execute o script para criar a tabela. Confirme se a tabela
foi criada.
ID
LAST_NAME
FIRST_NAME
DEPT_ID
Datatype
Number
Varchar2
Varchar2
Number
Length
25
25
Column Name
Key Type
Nulls/Unique
FK Table
FK Column
Name
Null?
Type
NUMBER(7)
VARCHAR2(25)
VARCHAR2(25)
NUMBER(7)
Exerccio 10 (continuao)
4. Modifique a tabela EMPLOYEE para aceitar os sobrenomes longos dos funcionrios.
Confirme suas modificaes.
Name
Null?
Type
NUMBER(7)
VARCHAR2(50)
VARCHAR2(25)
NUMBER(7)
6. Crie a tabela EMPLOYEE2 de acordo com a estrutura da tabela EMP. Inclua apenas as
colunas EMPNO, ENAME e DEPTNO. Nomeie as colunas como ID, LAST_NAME e
DEPT_ID na nova tabela, respectivamente.
7. Elimine a tabela EMPLOYEE.
8. Renomeie a tabela EMPLOYEE2 para EMPLOYEE.
9. Adicione um comentrio s definies das tabelas DEPARTMENT e EMPLOYEE,
descrevendo as tabelas. Confirme as adies ao dicionrio de dados.
10. Elimine a coluna LAST_NAME da tabela EMPLOYEE. Confirme a modificao verificando
a descrio da tabela.
11. Crie a tabela EMPLOYEE2 de acordo com a estrutura da tabela EMP. Inclua apenas as
colunas EMPNO, ENAME e DEPTNO. Nomeie as colunas como ID, LAST_NAME e
DEPT_ID na nova tabela, respectivamente. Marque a coluna DEPT_ID na tabela
EMPLOYEE2 como UNUSED. Confirme a modificao, verificando a descrio da tabela.
12. Elimine todas as colunas UNUSED a partir da tabela EMPLOYEE2. Confirme a modificao,
verificando a descrio da tabela.
11
Incluindo Restries
Objetivos
11-2
Objetivo da Lio
Nesta lio, voc aprender como implementar regras comerciais incluindo restries de integridade.
O Que So Restries?
As restries impem regras no nvel da
tabela.
As restries evitam que uma tabela seja
deletada se houver dependncias.
Os seguintes tipos de restrio so vlidos
no Oracle:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
11-3
Restries
O Oracle Server usa restries para impedir que dados invlidos sejam digitados nas tabelas.
Use restries para fazer o seguinte:
Impor regras no nvel da tabela sempre que uma linha for inserida, atualizada ou deletada da
tabela. A restrio deve ser satisfeita para a operao ser bem-sucedida.
Impedir que uma tabela seja deletada se houver dependncias de outras tabelas.
Descrio
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "CONSTRAINT
Clause".
Introduo ao Oracle: SQL e PL/SQL 11-3
11-4
Definindo Restries
CREATE TABLE [esquema.]tabela
(tipo de dados da coluna [DEFAULT expr]
[column_constraint],
...
[table_constraint][,...]);
11-5
Definindo Restries
O slide fornece a sintaxe para definir restries ao criar uma tabela.
Na sintaxe:
esquema
tabela
o nome da tabela
DEFAULT expr
coluna
o nome da coluna
tipo de dados
column_constraint
table_constraint
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "CREATE
TABLE".
Definindo Restries
Nvel de restrio da coluna
coluna [CONSTRAINT constraint_name] constraint_type,
11-6
Descrio
Column
Table
Na sintaxe:
constraint_name
o nome da restrio
constraint_type
o tipo da restrio
EMPNO ENAME
7839
7698
7782
7566
...
KING
BLAKE
CLARK
JONES
JOB
COMM
PRESIDENT
MANAGER
MANAGER
MANAGER
11-7
...
DEPTNO
10
30
10
20
Ausncia da restrio
Restrio NOT NULL
NOT NULL
(qualquer linha pode
conter um valor nulo para
esta coluna)
11-8
emp(
NUMBER(4),
VARCHAR2(10) NOT NULL,
VARCHAR2(9),
NUMBER(4),
DATE,
NUMBER(7,2),
NUMBER(7,2),
NUMBER(7,2) NOT NULL);
Observao: Todos os exemplos de restrio descritos nesta lio podem no estar presentes nas
tabelas de exemplo fornecidas com o curso. Se desejar, essas restries podem ser adicionadas
s tabelas.
DEPTNO
-----10
20
30
40
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
Inserir em
11-9
50 SALES
DETROIT
No permitido
(DNAME-SALES j existe)
60
BOSTON
Permitido
11-10
dept(
NUMBER(2),
VARCHAR2(14),
VARCHAR2(13),
dept_dname_uk UNIQUE(dname));
DEPTNO
-----10
20
30
40
DNAME
---------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
-------NEW YORK
DALLAS
CHICAGO
BOSTON
Inserir em
20 MARKETING
FINANCE
11-11
DALLAS
NEW YORK
No permitido
(DEPTNO 20 j existe)
No permitido
(DEPTNO nulo)
11-12
dept(
NUMBER(2),
VARCHAR2(14),
VARCHAR2(13),
dept_dname_uk UNIQUE (dname),
dept_deptno_pk PRIMARY KEY(deptno));
DEPTNO
-----10
20
...
DNAME
---------ACCOUNTING
RESEARCH
LOC
-------NEW YORK
DALLAS
EMP
EMPNO ENAME
7839 KING
7698 BLAKE
...
JOB
...
COMM
PRESIDENT
MANAGER
DEPTNO
10
30
Inserir em
7571 FORD
7571 FORD
11-13
MANAGER
MANAGER
FOREIGN
KEY
...
...
200
200
9
20
No
permitido
(DEPTNO 9
no existe na
tabela DEPT)
Permitido
11-14
Palavras-chave da
Restrio FOREIGN KEY
FOREIGN KEY: Define a coluna na tabela
filha no nvel de restrio da tabela
REFERENCES: Identifica a tabela e a
coluna na tabela me
ON DELETE CASCADE: Permite excluso
na tabela me e das linhas dependentes na
tabela filha
11-15
FOREIGN KEY usada para definir a coluna na tabela filha no nvel de restrio da tabela.
Sem a opo ON DELETE CASCADE, a linha na tabela me no pode ser deletada se for feita
referncia a ela na tabela filha.
A Restrio CHECK
Define uma condio que cada linha deve
satisfazer
Expresses que no so permitidas:
Referncias s pseudocolunas CURRVAL,
NEXTVAL, LEVEL, e ROWNUM
Chamadas para as funes SYSDATE, UID,
USER e USERENV
Consultas que se referem a outros valores
em outras linhas
..., deptno NUMBER(2),
CONSTRAINT emp_deptno_ck
CHECK (DEPTNO BETWEEN 10 AND 99),...
11-16
A Restrio CHECK
A restrio CHECK define uma condio que cada linha deve satisfazer. A condio pode usar as
mesmas construes que as condies de consulta, com as seguintes excees:
Uma nica coluna pode ter vrias restries CHECK que fazem referncia coluna na sua definio.
No h limite no nmero de restries CHECK que voc pode definir em uma coluna.
As restries CHECK podem ser definidas no nvel da coluna ou da tabela.
11-17
o nome da tabela
restrio
o nome da restrio
tipo
o tipo da restrio
coluna
A sintaxe do nome da restrio opcional, embora recomendada. Se voc no nomear suas restries,
o sistema criar nomes de restrio.
Diretrizes
Voc pode adicionar, eliminar, ativar ou desativar uma restrio, mas no pode modificar sua
estrutura.
Voc pode adicionar uma restrio NOT NULL a uma coluna existente usando a clusula
MODIFY da instruo ALTER TABLE.
Observao: Voc pode definir uma coluna NOT NULL somente se a tabela no contiver linhas,
porque os dados no podem ser especificados para linhas existentes ao mesmo tempo em que a
coluna adicionada.
11-18
emp
emp_mgr_fk;
11-19
onde:
tabela
o nome da tabela
coluna
restrio
o nome da restrio
Quando voc elimina uma restrio de integridade, essa restrio no mais imposta pelo Oracle
Server e no fica mais disponvel no dicionrio de dados.
Desativando Restries
Execute a clusula DISABLE da instruo
ALTER TABLE para desativar uma
restrio de integridade.
Aplique a opo CASCADE para desativar
restries de integridade dependentes.
SQL> ALTER TABLE
2 DISABLE CONSTRAINT
Table altered.
emp
emp_empno_pk CASCADE;
11-20
onde:
tabela
o nome da tabela
restrio
o nome da restrio
Diretrizes
Voc pode usar a clusula DISABLE nas instrues CREATE TABLE e ALTER TABLE.
Ativando Restries
Ative uma restrio de integridade
atualmente desativada na definio da
tabela usando a clusula ENABLE.
SQL> ALTER TABLE
2 ENABLE CONSTRAINT
Table altered.
emp
emp_empno_pk;
11-21
onde:
TABLE
tabela
CONSTRAINT restrio;
tabela
o nome da tabela
restrio
o nome da restrio
Diretrizes
Se voc ativar uma restrio, essa restrio ser aplicada a todos os dados na tabela. Todos os
dados na tabela devem ajustar-se restrio.
Se voc ativar uma restrio UNIQUE KEY ou PRIMARY KEY, um ndice UNIQUE ou
PRIMARY KEY automaticamente criado.
Voc pode usar a clusula ENABLE nas instrues CREATE TABLE e ALTER TABLE.
Restries em Cascata
A clusula CASCADE CONSTRAINTS
usada junto com a clusula DROP
COLUMN.
A clusula CASCADE CONSTRAINTS
elimina todas as restries de integridade
referenciais que se referem s chaves
exclusiva e primria definidas nas colunas
eliminadas.
11-22
CONSTRAINTS em cascata
Esta instruo ilustra o uso da clusula CASCADE CONSTRAINTS. Suponha que a tabela test1 seja
criada da seguinte forma:
SQL> CREATE TABLE test1 (
2
fk NUMBER,
col1 NUMBER,
col2 NUMBER,
Restries em Cascata
11-23
Se todas as colunas referenciadas pelas restries definidas nas colunas eliminadas tambm forem
eliminadas, ento CASCADE CONSTRAINTS no requerida. Por exemplo, pressupondo que
nenhuma outra restrio referencial de outras tabelas refere-se coluna PK, ento vlido submeter a
seguinte instruo sem a clusula CASCADE CONSTRAINTS:
SQL> ALTER TABLE test1 DROP (pk, fk, col1);
Verificando Restries
Consulte a tabela USER_CONSTRAINTS para
ver todos os nomes e definies de restrio.
SQL>
2
3
4
CONSTRAINT_NAME
-----------------------SYS_C00674
SYS_C00675
EMP_EMPNO_PK
...
11-24
C
C
C
P
SEARCH_CONDITION
------------------------EMPNO IS NOT NULL
DEPTNO IS NOT NULL
Verificando Restries
Aps criar uma tabela, voc pode confirmar sua existncia emitindo um comando DESCRIBE. A
nica restrio que voc pode verificar a restrio NOT NULL. Para ver todas as restries em sua
tabela, consulte a tabela USER_CONSTRAINTS.
O exemplo no slide exibe todas as restries da tabela EMP.
Observao: As restries que no forem nomeadas pelo proprietrio da tabela recebem o nome de
restrio atribudo pelo sistema. No tipo de restrio, C significa CHECK, P significa PRIMARY
KEY, R significa integridade referencial e U significa chave UNIQUE. Observe que a restrio NOT
NULL , na verdade, uma restrio CHECK.
constraint_name, column_name
user_cons_columns
table_name = 'EMP';
CONSTRAINT_NAME
------------------------EMP_DEPTNO_FK
EMP_EMPNO_PK
EMP_MGR_FK
SYS_C00674
SYS_C00675
11-25
COLUMN_NAME
---------------------DEPTNO
EMPNO
MGR
EMPNO
DEPTNO
Sumrio
Crie os seguintes tipos de restries:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
11-26
Sumrio
O Oracle Server usa restries para impedir que dados invlidos sejam digitados nas tabelas.
Os seguintes tipos de restries so vlidos:
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
Voc pode consultar a tabela USER_CONSTRAINTS para ver todos os nomes e definies de
restrio.
11-27
Exerccio 11
1. Adicione uma restrio no nvel de tabela PRIMARY KEY tabela EMPLOYEE, usando a
coluna ID. A restrio deve ser nomeada quando for criada.
Dica: A restrio ativada assim que o comando ALTER TABLE executado corretamente.
2. Crie uma restrio PRIMARY KEY na tabela DEPARTMENT usando a coluna ID. A
restrio deve ser nomeada quando for criada.
Dica: A restrio ativada assim que o comando ALTER TABLE executado corretamente.
3. Adicione uma referncia de chave estrangeira na tabela EMPLOYEE que ir assegurar que
o funcionrio no seja atribudo a um departamento no existente.
4. Confirme se as restries foram adicionadas, consultando USER_CONSTRAINTS. Observe
os tipos e nomes das restries. Salve o texto da instruo em um arquivo chamado
p11q4.sql.
CONSTRAINT_NAME
C
----------------------- -DEPARTMENT_ID_PK
P
EMPLOYEE_ID_PK
P
EMPLOYEE_DEPT_ID_FK
R
OBJECT_TYPE
----------TABLE
INDEX
TABLE
INDEX
12
Criando Views
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Descrever uma view
Criar uma view
Recuperar dados atravs de uma view
Alterar a definio de uma view
Inserir, atualizar e deletar dados atravs de
uma view
Eliminar uma view
12-2
Objetivo da Lio
Nesta lio, voc aprender a criar e usar views. Voc tambm aprender a consultar o objeto
relevante do dicionrio de dados para recuperar informaes sobre views.
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Descrever uma view em linha
Executar a Anlise "Top-N"
12-3
Objetivo da Lio
Nesta lio, voc tambm aprender a criar e usar views em linha e executar a anlise Top-N usando
views em linha.
12-4
Objeto
Descrio
Tabela
View
Seqncia
ndice
Sinnimo
JOB
JOB
MGR HIREDATE
SAL
SAL COMM
COMM DEPTNO
DEPTNO
PRESIDENT
PRESIDENT
17-NOV-81
5000
5000
7782
7698 CLARK
BLAKE
MANAGER
MANAGER
7839 09-JUN-81
01-MAY-81
2850
1500
7934
7782 MILLER
CLARK
MANAGER
CLERK
7839 23-JAN-82
7782
09-JUN-81
2450
1300
10
10
7566
7566 JONES
MANAGER
MANAGER
7839 02-APR-81
2975
2975
20
20
SALESMAN
ANALYST
7698 09-DEC-82
7566
28-SEP-81
1250
3000 1400
30
20
SALESMAN
CLERK
7698 12-JAN-83
7788
20-FEB-81
1600
1100
300
30
20
1500
800
30
20
View EMPVU10
7788
7654 SCOTT
MARTIN
7876
7499 ADAMS
ALLEN
EMPNO 7844
ENAME
JOB 7902
TURNER SALESMAN
SMITH
CLERK
7698 17-DEC-80
08-SEP-81
------ 7369
-----------------7902
7900 FORD
JAMES
CLERK
ANALYST
7698 03-DEC-81
7566
7839 7698
KING
PRESIDENT
7521 BLAKE
WARD
SALESMAN
MANAGER
7698 01-MAY-81
7839
22-FEB-81
7782 7654
CLARK
MANAGER
7902
FORD
MARTIN
ANALYST
SALESMAN
7566 28-SEP-81
7698
03-DEC-81
7499
7369 ALLEN
SMITH
CLERK
SALESMAN 7698
7902 20-FEB-81
7934 MILLER
CLERK 17-DEC-80
12-5
10
10
300
950
3000
30
10
30
20
1250
2850
500
30
30
3000
1250
1400
20
30
800
1600
300
20
30
20
30
7844
7788 TURNER
SCOTT
ANALYST
SALESMAN
7566 08-SEP-81
7698
09-DEC-82
3000
1500
7900
7876 JAMES
ADAMS
CLERK
CLERK
7788 03-DEC-81
7698
12-JAN-83
1100
950
7521
7934 WARD
MILLER
CLERK
SALESMAN
7782 22-FEB-81
7698
23-JAN-82
1300
1250
20
30
500
10
30
12-6
As views restringem o acesso a dados porque uma view pode exibir colunas seletivas a
partir da tabela.
As views permitem que usurios faam consultas simples para recuperar resultados de
consultas complexas. Por exemplo, as views permitem que usurios consultem informaes de
vrias tabelas sem saber como criar uma instruo de juno.
As views fornecem acesso aos dados a grupos de usurios de acordo com seus critrios em
particular.
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "CREATE
VIEW".
Views Simples e
Views Complexas
Recurso
Nmero de tabelas
Uma
Uma ou mais
Contm funes
No
Sim
No
Sim
Sim
Nem sempre
12-7
FORCE
NOFORCE
view
o nome da view
apelido
subconsulta
WITH CHECK OPTION especifica que somente linhas acessveis view podem ser inseridas
ou atualizadas
restrio
CREATE VIEW
AS SELECT
FROM
WHERE
created.
empvu10
empno, ename, job
emp
deptno = 10;
12-9
Type
-----------NUMBER(4)
VARCHAR2(10)
VARCHAR2(9)
A subconsulta que define uma view pode conter sintaxe SELECT complexa, incluindo junes,
grupos e subconsultas.
A subconsulta que define a view no pode conter uma clusula ORDER BY. A clusula
ORDER BY especificada quando voc recupera dados da view.
Se voc no especificar um nome de restrio para uma view criada com CHECK OPTION, o
sistema ir atribuir um nome default no formato SYS_Cn.
Voc pode usar a opo OR REPLACE para alterar a definio da view sem elimin-la e
recri-la ou reconceder-lhe os privilgios de objeto anteriormente concedidos.
CREATE VIEW
AS SELECT
FROM
WHERE
created.
salvu30
empno EMPLOYEE_NUMBER, ename NAME,
sal SALARY
emp
deptno = 30;
12-10
SELECT *
FROM
salvu30;
EMPLOYEE_NUMBER
--------------7698
7654
7499
7844
7900
7521
NAME
SALARY
---------- --------BLAKE
2850
MARTIN
1250
ALLEN
1600
TURNER
1500
JAMES
950
WARD
1250
6 rows selected.
12-11
SQL*Plus
SELECT *
FROM
empvu10;
7839
7782
7934
12-12
USER_VIEWS
EMPVU10
SELECT
FROM
WHERE
KING
PRESIDENT
CLARK MANAGER
MILLER CLERK
EMP
12-14
CREATE VIEW
AS SELECT
FROM
WHERE
GROUP BY
created.
dept_sum_vu
(name, minsal, maxsal, avgsal)
d.dname, MIN(e.sal), MAX(e.sal),
AVG(e.sal)
emp e, dept d
e.deptno = d.deptno
d.dname;
FROM
NAME
*
dept_sum_vu;
MINSAL
MAXSAL
AVGSAL
1300
5000 2916.6667
RESEARCH
800
3000
2175
SALES
950
2850 1566.6667
12-15
Funes de grupo
Usando a Clusula
WITH CHECK OPTION
Voc poder garantir que a DML na view
continue no domnio da view usando a
clusula WITH CHECK OPTION.
SQL>
2
3
4
5
View
Observao: Nenhuma linha atualizada porque se o nmero do departamento fosse alterado para
10, a view no seria mais capaz de enxergar o funcionrio. Por isso, com a clusula WITH CHECK
OPTION, a view poder ver apenas funcionrios do departamento 20 e no permitir que o nmero
de departamento para esses funcionrios seja alterado na view.
Introduo ao Oracle: SQL e PL/SQL 12-17
Quaisquer tentativas de inserir uma linha ou modific-la usando a view resultar em erro no Oracle
Server -01733: no permitida coluna virtual aqui (virtual column not
allowed here).
12-19
o nome da view
Views Em Linha
Uma view em linha uma subconsulta
subjacente com um apelido (nome de
correlao) que pode ser usado em uma
instruo SQL.
Uma view em linha similar ao uso de uma
subconsulta nomeada na clusula FROM
da consulta principal.
Uma view em linha no um objeto de
esquema.
12-20
Views Em Linha
Uma view em linha na clusula FROM de uma instruo SELECT define uma fonte de dados para a
instruo SELECT. No exemplo abaixo, a view em linha b retorna os detalhes de todos os nmeros do
departamento e o salrio mximo para cada departamento da tabela EMP. A clusula WHERE a.deptno
= b.deptno AND a.sal < b.maxsal de consulta principal exibe os nomes dos funcionrios, salrio,
nmeros do departamento e os salrios mximos de todos os funcionrios que ganham menos que o
salrio mximo em seus departamentos.
SQL> SELECT
2
FROM
FROM
emp
GROUP BY deptno) b
WHERE
a.deptno = b.deptno
AND
ENAME
SAL
DEPTNO
MAXSAL
---------- --------- --------- --------CLARK
2450
10
5000
MILLER
1300
10
5000
...
TURNER
1500
30
2850
JAMES
950
30
2850
10 rows selected.
Introduo ao Oracle: SQL e PL/SQL 12-20
Anlise "Top-N"
As consultas Top-N pedem os maiores ou
menores valores n de uma coluna.
Quais so os dez produtos mais
vendidos?
Quais so os dez produtos menos
vendidos?
Tanto o conjunto dos maiores quanto dos
menores valores so considerados
consultas Top-N.
12-21
Anlise "Top-N"
As consultas Top-N so teis em cenrios onde existe a necessidade de exibir apenas os maiores ou
menores registros n de uma tabela baseada em uma condio. Esse conjunto de resultados podem ser
para anlise posterior. Por exemplo, ao usar as anlises Top-N voc poder executar os seguintes
tipos de consultas:
Os trs melhores produtos que mais venderam nos ltimos seis meses
12-22
Uma subconsulta ou uma view em linha para gerar a lista classificada de dados. A subconsulta
ou a view em linha inclui a clusula ORDER BY para assegurar que a classificao esteja na
ordem desejada. Para os resultados recuperando os maiores valores, necessrio um
parmetro DESC.
Uma consulta externa para limitar o nmero de linhas no conjunto final de resultados.
A consulta externa inclui os seguintes componentes:
A pseudocoluna ROWNUM, que atribui um valor seqencial iniciando com 1 para cada
uma das linhas retornadas da subconsulta.
ENAME
---------KING
SCOTT
FORD
SAL
--------5000
3000
3000
12-23
FROM
3
4
SENIOR ENAME
HIREDATE
17-DEC-80
2 ALLEN
20-FEB-81
3 WARD
22-FEB-81
4 JONES
02-APR-81
Introduo ao Oracle: SQL e PL/SQL 12-23
Sumrio
Uma view criada a partir de dados em
outras tabelas ou views.
Uma view fornece todas as vantagens a
seguir:
Restringe o acesso a bancos de dados
Simplifica as consultas
Permite a independncia de dados
Exibe vrias views dos mesmos dados
Pode ser eliminada sem remover os dados
subjacentes
12-24
Simplificam as consultas
Opes de Views
Pode ser uma view complexa baseada em mais de uma tabela ou pode conter grupos de funes
Sumrio
Uma view em linha uma subconsulta com
um nome apelido.
As anlises "Top-N" podem ser executadas
usando-se:
Subconsulta
Consulta externa
12-25
12-26
Exerccio 12
1. Crie uma view chamada EMP_VU baseada no nome e nmero do funcionrio e
nmero de departamento na tabela EMP. Altere o cabealho do nome do funcionrio para
EMPLOYEE.
2. Exiba o contedo da view EMP_VU.
EMPNO EMPLOYEE DEPTNO
----- -------- -----7839 KING
7698 BLAKE
7782 CLARK
7566 JONES
7654 MARTIN
7499 ALLEN
7844 TURNER
7900 JAMES
7521 WARD
7902 FORD
7369 SMITH
7788 SCOTT
7876 ADAMS
7934 MILLER
14 rows selected.
10
30
10
20
30
30
30
30
30
20
20
20
20
10
4. Usando sua view EMP_VU, insira uma consulta para exibir todos os nomes dos funcionrios e os
nmeros de departamento.
EMPLOYEE
DEPTNO
---------- --------KING
10
BLAKE
30
CLARK
10
JONES
20
MARTIN
30
...
14 rows selected.
Exerccio 12 (continuao)
5. Crie uma view nomeada DEPT20 que contenha o nmero e o nome do funcionrio e
o nmero de departamento de todos os funcionrios no departamento 20. Coloque um label na
coluna da view de EMPLOYEE_ID, EMPLOYEE, and DEPARTMENT_ID. No permita que
um funcionrio seja reatribudo a um outro departamento na view.
6. Exiba a estrutura e o contedo da view DEPT20.
Name
--------------EMPLOYEE_ID
EMPLOYEE
DEPARTMENT_ID
EMPLOYEE_ID
----------7566
7902
7369
7788
7876
Null?
Type
-------- -----NOT NULL NUMBER(4)
VARCHAR2(10)
NOT NULL NUMBER(2)
EMPLOYEE DEPARTMENT_ID
-------- ------------JONES
20
FORD
20
SMITH
20
SCOTT
20
ADAMS
20
13
Outros Objetos do
Banco de Dados
Objetivos
Depois de completar esta lio, voc poder
fazer o seguinte:
Descrever alguns objetos do banco de
dados e seus usos
Criar, manter e usar seqncias
Criar e manter ndices
Criar sinnimos particulares e pblicos
13-2
Objetivo da Lio
Nesta lio, voc aprender a criar e manter alguns dos outros objetos do banco de dados que so
normalmente utilizados. Esses objetos incluem seqncias, ndices e sinnimo.
13-3
Objeto
Descrio
Tabela
View
Seqncia
ndice
Sinnimo
13-4
13-5
INCREMENT BY n
START WITH n
MAXVALUE n
NOMAXVALUE
MINVALUE n
NOMINVALUE
CACHE n | NOCACHE
13-7
Confirmando Seqncias
Verifique seus valores de seqncia na
tabela do dicionrio de dados
USER_SEQUENCES.
SQL> SELECT
2
3 FROM
13-8
Confirmando Seqncias
Aps voc criar sua seqncia, ela documentada no dicionrio de dados. J que uma
seqncia um objeto do banco de dados, voc pode identific-la na tabela do dicionrio
de dados USER_OBJECTS.
Tambm possvel confirmar as configuraes da seqncia selecionando a partir da tabela do
dicionrio de dados USER_SEQUENCES.
SEQUENCE_NAME
1 1.000E+27
109
DEPT_DEPTNO
100
91
ORDID
1 1.000E+27
622
PRODID
1 1.000E+27
200381
Pseudocolunas
NEXTVAL e CURRVAL
NEXTVAL retorna o prximo valor de
seqncia disponvel.
Retorna um valor exclusivo sempre que
feita referncia a ele, at mesmo por
usurios diferentes.
CURRVAL obtm o valor de seqncia atual.
NEXTVAL deve ser emitido para essa
seqncia antes que CURRVAL contenha
um valor.
13-9
Pseudocolunas
NEXTVAL e CURRVAL
NEXTVAL retorna o prximo valor de
seqncia disponvel.
Retorna um valor exclusivo sempre que
feita referncia a ele, at mesmo por
usurios diferentes.
CURRVAL obtm o valor de seqncia atual.
NEXTVAL deve ser emitido para essa
seqncia antes que CURRVAL contenha
um valor.
13-10
Na lista SELECT de uma instruo SELECT que no seja parte de uma subconsulta
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, seo
"Pseudocolumns" e "CREATE SEQUENCE".
13-11
dept_deptno.CURRVAL
dual;
FROM
dept_deptno.CURRVAL
dual;
CURRVAL
------91
Suponha agora que voc deseje admitir funcionrios para o novo departamento. A instruo INSERT
que pode ser executada repetidamente para todos os novos funcionrios pode incluir o seguinte
cdigo:
SQL> INSERT INTO emp ...
2
Observao: O exemplo acima pressupe que uma seqncia EMP_EMPNO j tenha sido criada
para gerar um novo nmero de funcionrio.
Introduo ao Oracle: SQL e PL/SQL 13-11
13-13
onde:
SEQUENCE seqncia
[INCREMENT BY n]
[{MAXVALUE n | NOMAXVALUE}]
[{MINVALUE n | NOMINVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];
seqncia
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "ALTER
SEQUENCE".
13-14
Diretrizes
Voc deve ser o proprietrio ou possuir o privilgio ALTER para a seqncia a fim de
modific-la.
A opo START WITH no pode ser alterada usando ALTER SEQUENCE. A seqncia deve
ser eliminada e recriada para reiniciar a seqncia em um nmero difere.
13-15
onde:
SEQUENCE seqncia;
seqncia
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "DROP
SEQUENCE".
O Que um ndice?
um objeto de esquema
usado pelo Oracle Server para acelerar a
recuperao de linhas usando um ponteiro
Pode reduzir a E/S do disco usando um
mtodo rpido de acesso a caminhos para
localizar os dados rapidamente
independente da tabela que indexa
usado e mantido automaticamente pelo
Oracle Server
13-16
O Que um ndice?
Um ndice do Oracle Server um objeto de esquema que pode acelerar a recuperao de linhas
usando um ponteiro. Os ndices podem ser criados explcita ou automaticamente. Se no houver um
ndice na coluna, ocorrer uma anlise em toda a tabela.
Um ndice fornece acesso direto e rpido s linhas em uma tabela. Seu objetivo reduzir a
necessidade de E/S do disco usando um caminho indexado para localizar dados rapidamente. O
ndice usado e mantido automaticamente pelo Oracle Server. Aps a criao de um ndice, no
necessria nenhuma atividade direta do usurio.
Os ndices so lgica e fisicamente independentes da tabela que indexam. Isso significa que eles
podem ser criados e eliminados a qualquer momento e no tm nenhum efeito sobre as tabelas-base
ou outros ndices.
Observao: Quando voc elimina uma tabela, os ndices correspondentes tambm so eliminados.
Para obter mais informaes, consulte o Oracle Server Concepts Manual, Release 8, seo "Schema
Objects", tpico "Indexes".
13-17
Criando um ndice
Crie um ndice em uma ou mais colunas.
CREATE INDEX ndice
ON tabela (coluna[, coluna]...);
13-18
emp_ename_idx
emp(ename);
Criando um ndice
Crie um ndice em uma ou mais colunas emitindo uma instruo CREATE INDEX.
Na sintaxe:
ndice
o nome do ndice
tabela
o nome da tabela
coluna
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "CREATE
INDEX".
Quando duas ou mais colunas forem usadas juntas com freqncia em uma clusula
WHERE ou em uma condio de juno.
Quando a tabela for grande e se esperar que a maioria das consultas recupere menos
que 2 a 4% das linhas.
Lembre-se de que, para aplicar exclusividade, voc deve definir uma restrio exclusiva na definio
da tabela. Em seguida, um ndice exclusivo ser criado automaticamente.
13-20
Quando as colunas no forem utilizadas com freqncia como uma condio na consulta.
Quando se esperar que a maioria das consultas recupere mais que 2 a 4% das linhas.
Quando a tabela for atualizada com freqncia. Se voc tiver um ou mais ndices em uma
tabela, as instrues DML que acessarem a tabela sero mais lentas.
Confirmando ndices
A view do dicionrio de dados
USER_INDEXES contm o nome do ndice e
sua exclusividade.
A view USER_IND_COLUMNS contm os
nomes do ndice, da tabela e da coluna.
SQL>
2
3
4
5
SELECT
FROM
WHERE
AND
13-21
ic.index_name, ic.column_name,
ic.column_position col_pos,ix.uniqueness
user_indexes ix, user_ind_columns ic
ic.index_name = ix.index_name
ic.table_name = 'EMP';
Confirmando ndices
Confirme a existncia de ndices na view do dicionrio de dados USER_INDEXES. Tambm
possvel checar as colunas envolvidas em um ndice consultando a view USER_IND_COLUMNS.
O exemplo no slide exibe todos os ndices anteriormente criados, os nomes de coluna afetados e a
exclusividade na tabela EMP.
INDEX_NAME
COLUMN_NAME
COL_POS UNIQUENESS
-----------------
EMP_EMPNO_PK
EMPNO
1 UNIQUE
EMP_ENAME_IDX
ENAME
1 NONUNIQUE
13-22
Para garantir que o Oracle use o ndice em vez de desempenhar uma anlise em toda a tabela,
certifique-se de que o valor da funo no seja nulo em consultas subseqentes. Por exemplo, a
instruo abaixo certamente usar o ndice, mas sem a clusula WHERE o Oracle executar uma
anlise em toda a tabela.
SQL> SELECT * FROM emp
2
O Oracle trata os ndices com colunas marcadas como DESC como ndices baseados em funo. As
colunas marcadas como DESC so classificadas em ordem decrescente.
Removendo um ndice
Remova um ndice do dicionrio de dados.
SQL> DROP INDEX index;
Removendo um ndice
Voc no pode modificar ndices. Para alterar um ndice, voc deve elimin-lo e, em seguida,
recri-lo. Remova uma definio de ndice do dicionrio de dados emitindo a instruo DROP
INDEX. Para eliminar um ndice, voc precisa ser o proprietrio do ndice ou possuir o privilgio
DROP ANY INDEX.
Na sintaxe:
ndice
o nome do ndice
Sinnimos
Simplifique o acesso aos objetos criando um
sinnimo (outro nome para um objeto).
Consulte uma tabela de propriedade de
outro usurio.
Abrevie nomes de objeto longos.
CREATE [PUBLIC] SYNONYM sinnimo
FOR
objeto;
13-24
sinnimo
objeto
Diretrizes
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "CREATE
SYNONYM".
Elimine um sinnimo.
SQL> DROP SYNONYM d_sum;
Synonym dropped.
13-25
FOR
dept
alice.dept;
Synonym created.
Removendo um Sinnimo
Para eliminar um sinnimo, use a instruo DROP SYNONYM. Somente a DBA pode eliminar um
sinnimo pblico.
SQL> DROP SYNONYM
dept;
Synonym dropped.
Para obter mais informaes, consulte o Oracle Server SQL Reference, Release 8, "DROP SYNONYM".
Sumrio
Gere nmeros de seqncia automaticamente
usando um gerador de seqncia.
Visualize informaes sobre a seqncia na
tabela do dicionrio de dados
USER_SEQUENCES.
Crie ndices para aumentar a velocidade de
recuperao de consultas.
Visualize informaes sobre o ndice na
tabela do dicionrio USER_INDEXES.
Use sinnimos para fornecer nomes
alternativos para objetos.
13-26
Seqncias
O gerador de seqncia pode ser usado para gerar nmeros de seqncia automaticamente para linhas
em tabelas. Isso pode economizar tempo e reduzir a quantidade de cdigo de aplicao necessria.
Uma seqncia um objeto do banco de dados que pode ser compartilhado com outros usurios. As
informaes sobre a seqncia podem ser encontradas na tabela USER_SEQUENCES do dicionrio
de dados.
Para usar uma seqncia, faa referncia ela com as pseudocolunas NEXTVAL ou CURRVAL.
ndices
Os ndices so usados para a velocidade de recuperao de consultas.
Os usurios podem visualizar as definies dos ndices na view do dicionrio de dados
USER_INDEXES.
Um ndice pode ser eliminado pelo criador ou por um usurio que possua o privilgio DROP ANY
INDEX usando a instruo DROP INDEX.
Sinnimos
As DBAs podem criar sinnimos pblicos e os usurios podem criar sinnimos particulares por
questes de convenincia usando a instruo CREATE SYNONYM. Os sinnimos permitem nomes
abreviados ou nomes alternativos para objetos. Remova os sinnimos usando a instruo DROP
SYNONYM.
Introduo ao Oracle: SQL e PL/SQL 13-26
13-27
Exerccio 13
1. Crie uma seqncia para ser usada com a coluna de chave primria da tabela DEPARTMENT.
A seqncia deve comear em 60 e ter um valor mximo de 200. Incremente sua seqncia
em dez nmeros. Nomeie a seqncia DEPT_ID_SEQ.
2. Crie um script para exibir as seguintes informaes sobre as seqncias: nome da seqncia,
valor mximo, tamanho do incremento e ltimo nmero. Nomeie o script como p13q2.sql.
Execute o script.
SEQUENCE_NAME
------------CUSTID
DEPT_ID_SEQ
ORDID
PRODID
MAX_VALUE INCREMENT_BY
--------- -----------1.000E+27
1
200
10
1.000E+27
1
1.000E+27
1
LAST_NUMBER
----------109
60
622
200381
3. Crie um script interativo para inserir uma linha na tabela DEPARTMENT. Nomeie o script como
p13q3.sql. Certifique-se de usar a seqncia criada para a coluna ID. Crie um prompt
personalizado para informar o nome do departamento. Execute o script. Adicione dois
departamentos chamados Education e Administration. Confirme as adies.
4. Crie um ndice no-exclusivo na coluna de chave estrangeira (dept_id) na tabela EMPLOYEE.
5. Exiba os ndices e as exclusividades existentes no dicionrio de dados para a tabela EMPLOYEE.
Salve a instruo em um script chamado p13q5.sql.
INDEX_NAME
-------------------EMPLOYEE_DEPT_ID_IDX
EMPLOYEE_ID_PK
TABLE_NAME
-----------EMPLOYEE
EMPLOYEE
UNIQUENESS
--------NONUNIQUE
UNIQUE