Você está na página 1de 86

Oracle SQL

Gatec - Treinamento Oracle - 1

1. INTRODUO...........................................................................................6
1.1. BANCO DE DADOS........................................................................................................... 6
1.2. BANCO ORACLE............................................................................................................. 7

2. AMBIENTE ORACLE 9I.................................................................................8


3. AMBIENTE DO CURSO.................................................................................9
4. PROGRAMAS SQL*PLUS E ISQL*PLUS.............................................................10
4.1. APRESENTAO DAS FERRAMENTAS.........................................................................................10
4.2. DIFERENA ENTRE SQL*PLUS E ISQL*PLUS................................................................................10

5. COMANDO SELECT BSICO.........................................................................11


5.1.
5.2.
5.3.
5.4.

APRESENTAO DO COMANDO SELECT....................................................................................11


SELECT [CAMPO1], [CAMPO...N] FROM [TABELA].................................................................11
UTILIZAO DE EXPRESSES...............................................................................................13
ALIASES DE COLUNAS E LITERAIS...........................................................................................14

6. SELEO E ORDENAO............................................................................16
6.1. CLUSULAS WHERE E ORDER BY........................................................................................16
6.2. OPERADORES LGICOS E RELACIONAIS PARA FORMAO DE SELEO.......................................................18

7. FUNES..............................................................................................22
7.1. FUNES NAS CLUSULAS DE CONSULTA...................................................................................22
7.2. FUNES PARA TRATAMENTO DE STRINGS, NMEROS, DATAS E DIVERSOS..................................................23
7.2.1.
7.2.2.
7.2.3.
7.2.4.
7.2.5.
7.2.6.
7.2.7.
7.2.8.

Funes Numricas:.................................................................................................................................23
Funes de String:..................................................................................................................................24
Funes de Data e Hora............................................................................................................................25
Funes de Converso..............................................................................................................................26
Funes de Agrupamento..........................................................................................................................26
Outras Funes......................................................................................................................................26
Formatos Numricos................................................................................................................................27
Formatos de Datas e Horas .......................................................................................................................27

8. JOINS...................................................................................................28
8.1. DEFINIO E UTILIDADE DOS JOINS........................................................................................28
8.2. TIPOS DE JOINS........................................................................................................... 29
8.2.1. Equijoins..............................................................................................................................................29
8.2.2. SelfJoins..............................................................................................................................................29
8.2.3. InnerJoins............................................................................................................................................29
8.2.4. OuterJoins............................................................................................................................................29
8.3. ALIAS PARA TABELAS...................................................................................................... 30
8.4. PRODUTO CARTESIANO.................................................................................................... 31
8.5. JOINS NO PADRO SQL 1999............................................................................................. 31
8.5.1. Cross-Joins...........................................................................................................................................31
8.5.2. Natural Joins.........................................................................................................................................31
8.5.3. Outer Joins...........................................................................................................................................32

9. AGRUPAMENTO DE DADOS.........................................................................34
9.1. CLUSULA GROUP BY.................................................................................................... 34
9.2. FUNES DE GRUPO....................................................................................................... 35
9.3. CLUSULA HAVING....................................................................................................... 36

10. SUBQUERIES.......................................................................................38
10.1. TIPOS

DE SUBQUERIES.................................................................................................... 38
10.1.1. Inline Views.........................................................................................................................................38
10.1.2. Nested subqueries...............................................................................................................................38
10.1.3. Subqueries Co-Relacionadas.....................................................................................................................39

11. COMANDO INSERT..................................................................................40


Gatec - Treinamento Oracle - 2

11.1. LIMITAES.............................................................................................................. 40
11.2. UTILIZAO DO COMANDO SELECT......................................................................................40

12. COMANDO UPDATE.................................................................................42


12.1. ATUALIZAO DE MLTIPLAS COLUNAS...................................................................................42
12.2. UTILIZAO COM SUBQUERIES............................................................................................42

13. COMANDO DELETE.................................................................................44


13.1. UTILIZAO

COM SUBQUERIES............................................................................................44

14. COMANDO MERGE..................................................................................45


14.1.
14.2.
14.3.
14.4.

COMPARAES COM VERSES ANTERIORES DO ORACLE....................................................................45


CLUSULA INTO......................................................................................................... 45
CLUSULA USING....................................................................................................... 45
CLUSULA ON........................................................................................................... 46

15. CONTROLE DE TRANSAO.......................................................................47


15.1. COMANDOS COMMIT, ROLLBACK

E SAVEPOINT......................................................................47
15.1.1. COMMIT..............................................................................................................................................47
15.1.2. ROLLBACK...........................................................................................................................................47
15.1.3. SAVEPOINT..........................................................................................................................................47

16. CRIAO DE TABELAS.............................................................................49


16.1.
16.2.
16.3.
16.4.
16.5.

NOMENCLATURA DE TABELAS E COLUNAS.................................................................................49


TIPOS DE DADOS (DATATYPES)..........................................................................................50
RESTRIES ( CONSTRAINTS )............................................................................................51
UTILIZAO DE SUBQUERIES.............................................................................................. 52
COMANDO ALTER TABLE............................................................................................... 52

16.5.1. Clusula ADD.......................................................................................................................................53


16.5.2. Clusula MODIFY...................................................................................................................................53
16.5.3. Clusula DROP......................................................................................................................................54
16.6. COMANDO DROP TABLE................................................................................................ 54
16.7. COMANDO TRUNCATE TABLE..........................................................................................54
16.8. ATRIBUIO DE COMENTRIOS S TABELAS...............................................................................55

17. VIEWS.................................................................................................57
17.1. CRIAO

E UTILIZAO..................................................................................................57
17.1.1. Clusula OR REPLACE.............................................................................................................................58
17.1.2. Clusula WITH READ ONLY.......................................................................................................................58
17.1.3. Clusula WITH CHECK OPTION...................................................................................................................58
17.2. PROBLEMAS MAIS COMUNS................................................................................................58
17.3. COMANDO ALTER VIEW................................................................................................ 60
17.4. COMANDO DROP VIEW.................................................................................................60

18. SEQUENCES..........................................................................................61
18.1. CRIAO
18.1.1.
18.1.2.
18.1.3.
18.1.4.
18.1.5.

E UTILIZAO..................................................................................................61
Clusula INCREMENT BY..........................................................................................................................61
Clusula START WITH.............................................................................................................................61
Clusula MAXVALUE e MINVALUE...............................................................................................................61
Clusula NOMAXVALUE e NOMINVALUE........................................................................................................62
Clusula CYCLE e NOCYCLE......................................................................................................................62

19. NDICES...............................................................................................63
19.1. CRIAO

E UTILIZAO................................................................................................... 63
19.1.1. ndices UNIQUE e NONUNIQUE...................................................................................................................63
19.1.2. ndices COMPOSITE................................................................................................................................63
19.2. COMANDO DROP INDEX................................................................................................64
19.3. COMANDO ALTER INDEX............................................................................................... 64
19.3.1. Clusula DEALLOCATE UNUSED..................................................................................................................64

Gatec - Treinamento Oracle - 3

19.3.2. Clusula SHRINK....................................................................................................................................64


19.3.3. Clusula REBUILD.................................................................................................................................64
19.4. GERAO AUTOMTICA DE NDICES PARA CHAVES PRIMRIAS..............................................................65

20. SINNIMOS...........................................................................................66
20.1. CRIAO E UTILIZAO................................................................................................... 66
20.2. COMANDO DROP SYNONYM............................................................................................ 68
20.3. SINNIMOS PARA PROCEDURES...........................................................................................68

21. DATABASE LINKS...................................................................................69


21.1. CRIAO E UTILIZAO................................................................................................... 69
21.2. VISO GERAL SOBRE BANCO DE DADOS DISTRIBUDOS....................................................................70
21.2.1. Sistemas homogneos.............................................................................................................................71
21.2.2. Sistemas heterogneos...........................................................................................................................71

22. PRIVILGIOS.........................................................................................72
22.1. TIPOS

DE PRIVILGIOS.................................................................................................... 72
22.1.1. System privilege...................................................................................................................................72
22.1.2. Object privilege....................................................................................................................................72
22.1.3. Roles.................................................................................................................................................72
22.2. COMANDO GRANT....................................................................................................... 72
22.3. COMANDO REVOKE..................................................................................................... 73
22.4. OPES WITH GRANT E WITH ADMIN................................................................................74
22.5. OPO PUBLIC......................................................................................................... 74
22.6. PRIVILGIOS E SEGURANA...............................................................................................74
22.6.1. A importncia de uma poltica de segurana.................................................................................................74
22.6.2. Gerenciamento de usurios e recursos........................................................................................................74

23. OPERADORES DE CONJUNTO.....................................................................75


23.1. CONCATENANDO RESULTADOS DE QUERIES...............................................................................75
23.2. OPERADORES UNION, MINUS E INTERSECT...........................................................................75
23.2.1. UNION................................................................................................................................................75
23.2.2. MINUS................................................................................................................................................75
23.2.3. INTERSECT..........................................................................................................................................75
23.3. RESTRIES E REQUISITOS................................................................................................ 77

24. QUERIES HIERRQUICAS...........................................................................78


24.1. SOLUES PARA REPRESENTAO.........................................................................................78
24.2. PESQUISAS EM ESTRUTURXAS HIERRQUICAS..............................................................................78
24.2.1.
24.2.2.
24.2.3.
24.2.4.
24.2.5.
24.2.6.
24.2.7.

Clusula START WITH.............................................................................................................................78


Clusula CONNECT BY.............................................................................................................................78
Clusula PRIOR.....................................................................................................................................78
Clusula NOCYCLE.................................................................................................................................79
Clusula CONNECT_BY_ISCYCLE.................................................................................................................79
Clusula CONNECT_BY_ROOT....................................................................................................................79
Clusula LEVEL.....................................................................................................................................79

25. RESPOSTAS DOS EXERCCIOS.....................................................................82


25.1. RESPOSTA DO ITEM 5.2.................................................................................................. 82
25.2. RESPOSTA DO ITEM 5.3.................................................................................................. 82
25.3. RESPOSTA DO ITEM 5.4.................................................................................................. 82
25.4. RESPOSTA DO ITEM 6.2.................................................................................................. 82
25.5. RESPOSTA DO ITEM 7.2.1................................................................................................ 82
25.6. RESPOSTA DO ITEM 7.2.2................................................................................................ 82
25.7. RESPOSTA DO ITEM 7.2.3................................................................................................ 83
25.8. RESPOSTAS DO ITEM 9.2................................................................................................. 83
25.9. RESPOSTAS DO ITEM 9.3.................................................................................................83
25.10. RESPOSTAS DO ITEM 10................................................................................................ 83
25.11. RESPOSTAS DO ITEM 11................................................................................................ 83
25.12. RESPOSTAS DO ITEM 12................................................................................................ 84
Gatec - Treinamento Oracle - 4

25.13.
25.14.
25.15.
25.16.
25.17.
25.18.
25.19.
25.20.
25.21.
25.22.
25.23.
25.24.
25.25.
25.26.
25.27.
25.28.

RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS
RESPOSTAS

DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO
DO

ITEM
ITEM
ITEM
ITEM
ITEM
ITEM
ITEM
ITEM
ITEM
ITEM
ITEM
ITEM
ITEM
ITEM
ITEM
ITEM

13................................................................................................ 84
16.2.............................................................................................. 84
16.3.............................................................................................. 84
16.5.1............................................................................................84
16.5.2 ........................................................................................84
16.5.3............................................................................................84
16.6.............................................................................................. 84
17.1.............................................................................................. 85
17.3.............................................................................................. 85
18................................................................................................ 85
19.1.............................................................................................. 85
19.2.............................................................................................. 85
20.1.............................................................................................. 85
20.2.............................................................................................. 85
22.2.............................................................................................. 85
22.3.............................................................................................. 86

Gatec - Treinamento Oracle - 5

1. Introduo
Em meados de 1970, o Dr. Edgar Frank Codd publicou um artigo sobre o modelo relacional de
banco de dados, no qual aceito at hoje como um modelo definitivo para SGBDs (Sistema
Gerenciador de Banco de Dados).
A linguagem SQL, (Structured Query Language) desenvolvida pela IBM, foi criada para utilizar o
modelo de Codd, sendo aceita tambm hoje com a linguagem padro para recuperao de
dados em SGBDs.
O Oracle um SGBD relacional e orientado a objetos. Um dos objetivos principais armazenar
e recuperar as informaes relacionadas. Ele pode gerenciar uma quantidade muito grande de
informaes que podem ser acessadas por milhares de usurios simultaneamente, tudo isso
com uma performance extremamente eficiente. Solues eficientes para recuperao de
falhas e controle de acesso tambm fazem parte da sua arquitetura. Tendo o SQL como
linguagem padro, o Oracle segue as determinaes dos rgos norte-americanos de padres
internacionais como ANSI1 e ISO2.

1.1.

Banco de Dados

Um banco de dados consiste em um conjunto de informaes organizadas de alguma maneira,


seja por meio manual atravs de pastas em uma gaveta, por exemplo, ou por meio magntico,
atravs do computador, utilizado-se de sistemas especficos chamados SGBDs.

SGBD

Banco
de
Dados

O modelo de banco de dados relacional consiste basicamente de tabelas que por sua vez so
compostas de colunas, linhas e campos.

Objet
o
(Tabe
la)

CODIGO
1
2
3

NOME
NOME1
NOME2
NOME3

Col
un
asCa
mp
os
Lin
has

Alm desta estrutura, um SGBD composto por vrios objetos que interagem entre si para
produzir diversos tipos de aes de gerenciamento de informaes, como operaes de
atualizao dos dados (insero, excluso, alterao), definio de regras de negcios,
aspectos de segurana como direitos e restries, e ferramentas que auxiliam no
desenvolvimento, documentao e manuteno banco de dados.

1
2

American National Standards Institute


International Standards Organization
Gatec - Treinamento Oracle - 6

1.2.

Banco Oracle

O Oracle possui um conjunto muito extenso de ferramentas de gerenciamento dos dados. Sua
estrutura principal composta pelo SGBD propriamente dito, que controla o armazenamento,
a definio, as restries e as regras de negcios que so aplicadas aos dados.
Em seguida esto presentes as ferramentas de apoio a desenvolvimento de aplicaes e
extrao de informaes, como o SQL* Plus . Estas ferramentas, bem como os objetos que
compem o Oracle sero estudados no decorrer deste curso.

Gatec - Treinamento Oracle - 7

2. Ambiente Oracle 9i
O Oracle 9i possui 3 tipos de edies diferentes:

Standard Edition: Fcil para usar, capacidade, melhor custo/benefcio para grupos,
nveis departamentais, aplicaes para internet e intranet. Fornece ferramentas
integradas para gerenciamento do banco de dados podendo ser utilizado em
ambientes com servidor simples em ambientes menores ou at em ambientes
distribudos. Inclui as facilidades necessrias para construir aplicaes de misses
crticas. A verso standard pode ser somente licenciada em servidores com at 4
processadores.
Enterprise Edition: Inclui as caractersticas da Edio Standard alm de permitir
replicao, grandes volumes de acesso, atravs de consultas por processamento de
transas on line (OLTP), utilizada em data warehouse e que requerem aplicaes
baseadas na internet.
Personal Edition: Criada para um computador pessoal, utilizado por um usurio, com
total compatibilidade com as edies standard e enterprise. Combina a facilidade e
poder das verses anteriores em um computador pessoal.

Caractersticas principais comuns s 3 edies:


Capacidade SQL Objeto-relacional;
Programao atravs de PL/SQL;
Interface atravs de programao JAVA ;
Aplicaes rodam nas 3 edies igualmente (a verso enterprise tem a performance,
disponibilizao e funes de segurana melhor, de forma transparente para o
desenvolvedor );
As verses so compatveis nas mais diversas plataformas sem necessidade de
reengenharia;
Facilidade para migrar de uma edio para outra ( Standard Edition para Enterprise
Edition, por exemplo ) .
Opes Avanadas (disponibilizadas de acordo com as edies) :
Oracle Real Application Clusters;
Oracle Partitioning;
Oracle Advanced Security;
Oracle Label Security;
Oracle OLAP;
Oracle Data Mining;
Oracle Spatial;
Oracle Enterprise Manager Packs.
Algumas Ferramentas disponibilizadas aps a instalao do produto:
SQL Plus;
SQL Plus WorkSheet;
Configurao e Assistente da rede para acesso ao Oracle;
Assistente para nvel de performance;

Oracle Http Server;


Configurao e Assistente de Banco de Dados;
ODBC Administrator;
Enterprise manager;
Universal Installer;

Gatec - Treinamento Oracle - 8

3. Ambiente do curso
O nvel 1 deste curso, Oracle SQL estar abordando os comandos, instrues e todas as
funcionalidades do Oracle em relao a utilizao da linguagem SQL para a manipulao do
banco de dados.
Os exemplos sero efetuados na ferramenta SQL PLUS do Oracle de maneira que o aluno
possa estar verificando todos os passos necessrios para conseguir os resultados esperados
assim como facilitar a compreenso e resoluo de erros que possam surgir na execuo das
instrues.

Gatec - Treinamento Oracle - 9

4. Programas SQL*Plus e ISQL*Plus


4.1.

Apresentao das ferramentas

O SQL*Plus uma ferramenta interativa instalada por padro no ambiente Oracle. (Fig 1)
Sua interface baseada em linha de comando, onde o usurio pode executar diversos tipos de
comandos SQL que permitem recuperar os dados, formatar, armazenar, realizar clculos, gerar
relatrios, imprimir, salvar para arquivo texto ou HTML. Permite tambm examinar tabelas e
definies, bem como rodar scripts e administrar o banco de dados.

Fig. 1

4.2.

Diferena entre SQL*Plus e iSQL*Plus

Trata-se da mesma ferramenta, diferenciando-se unicamente pelo modo de acesso.


O SQL*Plus iniciado atravs de um programa especfico criado durante a instalao.
O iSQL*Plus iniciado atravs de um browser, iniciando-se a partir de um endereo de Internet
em um servidor (URL)

Gatec - Treinamento Oracle - 10

5. Comando SELECT bsico


5.1.

Apresentao do comando SELECT

O comando SELECT faz parte da DML (Data Manipulation Language), e serve para recuperar
informaes de objetos do banco de dados, tais como tabelas, views, etc. (views sero
discutidas posteriormente).
Nele devemos informar quais os atributos (campos, por exemplo), a origem destes atributos
(clusula FROM), e finalmente o objeto (tabela, por exemplo) para recuperarmos os dados.
Podemos utilizar tambm o caracter (*), para retornar todos os campos da tabela. O SQL*Plus
retornar um erro de sintaxe caso alguns destes requisitos no forem devidamente
informados. O conjunto de instrues do select compe uma clusula de consulta (query).
A sintaxe bsica apresentada a seguir, sendo que uma query pode se estender a complexas
estruturas conforme a necessidade da obteno de informaes. Sintaxes mais avanadas
sero estudadas no decorrer deste curso.

5.2.

SELECT [CAMPO1], [CAMPO...N] FROM [TABELA]


Ex.: Vamos selecionar 2 campos da tabela EMP : (fig 2)
SELECT N_EMP, NOME_EMP FROM EMP

Fig. 2
Podemos utilizar tambm o caracter (*) conforme especificado acima (fig 3)
SELECT * FROM EMP

Gatec - Treinamento Oracle - 11

Fig. 3
Um exemplo de sintaxe invlida :
SELECT N_EMP, NOME_EMP EMP

(fig 4)

Fig. 4
4)

Como a clusula FROM no foi informada, o SQL*Plus retorna o respectivo erro (fig

Gatec - Treinamento Oracle - 12

Exerccios:
1) Selecionar os campos cdigo e descrio da tabela PRODUTO.
SELECT COD_PROD, DESCRICAO FROM PRODUTO
2) Selecionar todos os campos da tabela DEPARTAMENTO.
3) Selecionar os campos nome e endereo da tabela FORNECEDOR.

5.3.

Utilizao de expresses

As expresses utilizadas no Oracle consistem na combinao de um ou mais valores, campos e


valores de uma tabela, operadores aritmticos (+, -, /, *) e funes SQL que retornam valores.
Podemos utilizar as expresses para clculos ou informao retornada por uma query, bem
como manipular / atualizar informaes no banco de dados.
Ex. : Retornando valores atravs de expresses
Adicionando 10 dias no campo DATA_EMP da tabela EMP :
SELECT N_EMP, NOME_EMP, DATA_EMP, DATA_EMP + 10 FROM EMP (fig 5)

Fig. 5
Utilizando uma funo para manipulao de texto : (fig 6)
SELECT N_EMP, NOME_EMP, INITCAP(NOME_EMP) FROM EMP

Gatec - Treinamento Oracle - 13

Fig. 6

Exerccios:
1) Selecione os campos nome e data de admisso da tabela FUNCIONARIO, subtraindo 20
dias da data de admisso.
SELECT NOME, DT_ADIMISSAO, DT_ADMISSAO - 10 FROM FUNCIONARIO
2) Selecionar o campo municpio da tabela CIDADE, utilizando a funo de manipulao de
texto INITCAP.
3) Selecione os campos cdigo, descrio e preo da tabela PRODUTO, multiplicando por dois
o preo dos produtos.

5.4.

Aliases de Colunas e Literais

Os Alias so utilizados para nomear colunas ou expresses em uma query, simplificando a


identificao de um determinado clculo ou campo de uma tabela. Devem ser colocados logo
aps a coluna ou expresso especificada na query.
Uma query permite que sejam informados quaisquer caracteres, valores ou expresses que
no sejam oriundos de colunas ou alias, so os chamados Literais. So teis para o auxlio em
clculos e exibio de informaes e so mostrados para cada linha retornada. Datas e
caracteres string3 devem ser colocados entre apstrofes.
Ex.: Definindo alias para colunas e utilizao de literais. (Fig 7)
SELECT NOME_EMP FUNCIONRIO, SAL SALRIO, '10 %' PERC,
SAL+(SAL*0.10) REAJUSTE FROM EMP
3

Termo tcnico para definir valores alfanumricos, que contm qualquer valor entre nmeros e letras ou
smbolos.
Gatec - Treinamento Oracle - 14

Alias
Fig. 7

Litera
l

Expresso
(clculo)
e alias

Exerccios:
1) Selecionar os campos municpio e estado da tabela CIDADE, utilizando alias.
SELECT MUNICIPIO CIDADE, ESTADO UF FROM CIDADE
2) Selecionar o campo nmero do pedido e o resultado da diferena entre a data de entrega e
data do pedido da tabela PEDIDOCOMPRA, utilizando alias.
3) Selecionar, da tabela PEDIDOCOMPRA, os campos nmero do pedido, o resultado do clculo
do frete, que de 5% sobre o valor total do pedido, trazendo esta porcentagem como
campo literal e o resultado do valor total mais o frete. Utilize alias.

Gatec - Treinamento Oracle - 15

6. Seleo e Ordenao
6.1.

Clusulas WHERE e ORDER BY

A clusula WHERE permite fazer restrio de informaes que satisfaam uma ou mais
condies. Funciona como um filtro de informaes, podendo ser utilizada nas instrues SQL
que utilizam expresses, funes, colunas, literais, etc. Ela tambm muito utilizada para
realizar juno de tabelas (JOINS), que sero estudadas no decorrer deste curso.
Para utilizar a clusula WHERE, devemos informar um ou mais nomes de coluna e, para cada
coluna informada, um operador de condio (tab. 1), um nome de coluna ou uma lista de
valores. Podemos utilizar mltiplas condies, utilizando os operadores AND e OR para uni-las,
filtrando ainda mais os resultados retornados.
Ex.:

SELECT * FROM EMP WHERE N_EMP = 110 AND CARGO = DIRETOR


SELECT * FROM EMP WHERE SAL > 1000 AND CARGO=DIRETOR OR
CARGO = PRESIDENTE

A clusula ORDER BY utilizada para ordenar os resultados de uma query. Podemos utilizar a
ordenao com qualquer coluna das tabelas utilizadas.
Para campos numricos e data, a clusula segue um default (padro inicial) com a ordenao
sequencial e para campos alfanumricos a ordenao alfabtica. Podemos alterar estes
padres utilizando o identificador DESC , que causa uma inverso na ordenao.
Para utilizar ORDER BY, devemos informar a clusula propriamente dita seguida do(s) nome(s)
da(s) coluna(s) desejadas. O identificador DESC dever vir logo aps a coluna que se deseja
inverter a ordenao.
A deve clusula ORDER BY dever ser sempre a ltima de todas as sentenas em um
query.

Ex.:

SELECT * FROM EMP ORDER BY N_EMP


(Fig 9, 10)
SELECT * FROM EMP ORDER BY NOME_EMP
SELECT * FROM EMP ORDER BY NOME_EMP DESC

Gatec - Treinamento Oracle - 16

Fig. 9

DESC:
Ordena
o
decresce
nte

Fig. 10

Gatec - Treinamento Oracle - 17

6.2.

Operadores Lgicos e Relacionais para Formao de Seleo


Operador

=
<>
<
>
>=
<=
ANY
SOME

ALL
BETWEE
N
IS NULL
IN
NOT IN
LIKE
EXISTS

Comparao
Igual

Exemplo
SELECT * FROM EMP WHERE N_EMP = 110

Diferente

SELECT * FROM EMP WHERE N_EMP <> 110

Menor

SELECT * FROM EMP WHERE N_EMP < 100

Maior

SELECT * FROM EMP WHERE N_EMP > 100

Maior ou igual

SELECT * FROM EMP WHERE N_EMP >= 200

Menor ou igual

SELECT * FROM EMP WHERE N_EMP <= 500

Ser avaliado como


TRUE se o resultado
de uma consulta
contiver pelo menos
uma
linha
que
satisfaa
a
comparao.
Compara um valor
com um conjunto de
valores
de
uma
nica coluna.
Retorna
valores
entre um intervalo
determinado
Retorna
valores
nulos
Retorna
valores
existentes em uma
lista de valores
Retornar
FALSE
para
qualquer
membro
se
o
conjunto for nulo.
Retorna valores de
acordo
com
um
conjunto de strings
informada
Retorna TRUE se a
subconsulta
retornar pelo menos
uma linha.

SELECT * FROM EMP WHERE SAL BETWEEN 1000


AND 2000
SELECT * FROM EMP WHERE N_EMP IS NULL
SELECT * FROM EMP WHERE N_EMP IN (110, 175,
201)
SELECT * FROM EMP WHERE N_EMP NOT IN
(10,20,30)
SELECT * FROM EMP WHERE NOME_EMP LIKE ANA

SELECT * FROM FUNCIONARIO WHERE EXISTS


(SELECT * FROM DEPARTAMENTO
WHERE FUNCIONARIO.COD_DEPARTAMENTO =
DEPARTAMENTO.COD_DEPARTAMENTO)

Gatec - Treinamento Oracle - 18

Operador

NOT
AND

OR

Lgico
Negao
Retorna Verdadeiro
se a condio for
Falsa ou vice-versa
Conjuno
Retorna Verdadeiro
se a ambas as
condies
forem
Verdadeiras.
Retorna Falso se
uma delas for falsa.
Disjuno
Retorna Verdadeiro
se qualquer uma
das
condies
forem Verdadeiras
Caracter
especial
que
retorna
qualquer ocorrncia
de uma string partir
de onde ele foi
posicionado,
esquerda ou direita

Exemplo
SELECT * FROM EMP WHERE NOT (N_EMP = 110)

SELECT * FROM EMP WHERE CARGO='DIRETOR'


AND N_EMP = 110

SELECT * FROM EMP WHERE N_EMP = 110 OR


CARGO = PRESIDENTE OR SAL > 25000000

SELECT * FROM EMP WHERE NOME_EMP LIKE A%


(Todos os reg. com os nomes que comeam com a
letra A)
SELECT * FROM EMP WHERE NOME_EMP LIKE %NA
%
(Todos os reg. Que tenham a ocorrncia NA no
nome)

Tab. 1

Lgicos

Negao

Fig. 11

Gatec - Treinamento Oracle - 19

Fig. 12

BETWEEN :
Faixa de
valores
Operador [%]
Qualquer
nome
que
tenha
a
ocorrncia A
NOT NULL :
Somente
valores
no
nulos
Fig. 13

Operador [AND]
para query com
mltiplas
condies

Operador [IN] :
Lista
de
valores

Exerccios:
1) Selecionar os campos cdigo e nome da tabela FUNCIONARIO, onde a data de admisso for
maior ou igual que 15/01/2004 e o cargo seja igual a Vendedor ou Gerente.
SELECT COD_FUNCIONARIO, NOME FROM FUNCIONARIO
WHERE DT_ADMISSAO >= TO_DATE(15/01/2004, DD/MM/YYYY) AND
CARGO = VENDEDOR OR CARGO = GERENTE
2) Selecionar todos os campos da tabela LOCALARMAZENAGEM, onde os cdigos dos locais
estejam presentes nesta lista de valores (1,3,7) e ordenar em ordem crescente o campo
endereo.
Gatec - Treinamento Oracle - 20

3) Selecionar os campos cdigo do produto, cdigo do local e estoque atual da tabela


ESTOQUE, onde o cdigo do local seja diferente de 100 e a data da ltima compra for maior
que 20/09/2003 e menor que 20/12/2003. Ordenar em ordem decrescente pelo cdigo do
produto.

Gatec - Treinamento Oracle - 21

7. Funes
As funes so similares aos operadores, que podem manipular valores e retornar resultados.
Diferem apenas pelo formato de seus argumentos, que podem ser colunas, expresses,
valores, etc.
Disponveis na estrutura nativa do Oracle, existem diversos tipos como funes numricas, de
caracteres, datas, converso, etc, que podem realizar clculos, modificar dados, converter
tipos de dados, alterar formato de dados, etc. As funes se dividem basicamente em 2 grupos
: Funes de uma nica linha, que retornam resultados para todas as linhas da query, e as
Funes agregadas, que retornam resultados baseados em grupos de linhas, conforme a
clusula GROUP BY que ser analisada posteriormente.

7.1.

Funes nas clusulas de consulta

Podemos utilizar as funes para manipular os resultados retornados por uma clusula de
consulta. , como o exemplo a seguir : fig 14.
SELECT INITCAP(NOME_EMP) FROM EMP
SELECT LENGTH(NOME_EMP) FROM EMP
SELECT REPLACE(NOME_EMP,A,B) FROM EMP

Fig. 14

Gatec - Treinamento Oracle - 22

7.2.

Funes para tratamento de Strings, Nmeros, Datas e Diversos.

7.2.1.

Funes Numricas:

Funo
ABS(VALOR)
ACOS(VALOR)
ASIN(VALOR)
ATAN(VALOR)
ATAN2(VALOR1, VALOR2)
BITAND (ARG1,ARG2)

Descrio
Retorna o valor absoluto de VALOR
Retorna o arco coseno de VALOR
Retorna o arco seno de VALOR
Retorna o arco tangente de VALOR
Retorna o arco tangente de VALOR1 e VALOR2
Retorna o resultado de uma operao boleana (AND)
entre dois argumentos ARG1 e ARG2. Geralmente
utilizada em conjunto com a funo DECODE
CEIL(VALOR)
Retorna o menor inteiro, maior ou igual a VALOR
COS(VALOR)
Retorna o coseno de VALOR
COSH(VALOR)
Retorna o coseno hiperblico de VALOR
EXP(VALOR)
Retorna e elevado potncia VALOR, onde e =
2.71828183
FLOOR(VALOR)
Arredonda p/ baixo sem casas decimais
LN(VALOR)
Retorna o logaritmo natural de VALOR, onde VALOR
maior que 0
LOG(VALOR2,VALOR1)
Retorna o logaritmo base VALOR2 de VALOR1. A base m
poder ser qualquer nmero positivo diferente de 0 ou 1
e VALOR pode ser qualquer nmero positivo
MOD(VALOR2,VALOR1)
Retorna o resultado da diviso de VALOR2 por VALOR1.
Retornar VALOR1 se VALOR1=0
POWER(VALOR2,VALOR1)
Retorna VALOR2 elevado potncia VALOR1
ROUVALORD(VALOR1[,VALOR Arredonda VALOR conforme as casas decimais definidas
2])
por VALOR2. Se o valor VALOR2 for omitido, seu
contedo ser 0
SIGN(VALOR)
A funo retorna 1, se VALOR<0; 0, se VALOR=0; e 1,
se VALOR>0
SIN(VALOR)
Retorna o seno de VALOR
SINH(VALOR)
Retorna o seno hiperblico de VALOR
SQRT(VALOR)
Retorna a raiz quadrada de VALOR. O valor de VALOR
no pode ser negativo
TAN(VALOR)
Retorna a tangente de VALOR
TANH(VALOR)
Retorna a tangente hiperblica de VALOR
TRUNC(VALOR1[,VALOR2])
Remove o nmero de casas direita do ponto decimal de
acordo com o parmetro VALOR2. Se omitido, remove as
casas decimais

Exerccios:
1) Selecionar os campos numero do pedido, data do pedido e total da tabela PEDIDOCOMPRA,
onde a data do pedido for maior ou igual que 01/03/2004 e arredondar as casas a direita do
ponto decimal do campo total, para duas casas decimais.
SELECT NUM_PEDIDO, DT_PEDIDO, ROUND( TOTAL,2) FROM PEDIDOCOMPRA
WHERE DT_PEDIDO >= TO_DATE(01/03/2004,DD/MM/YYYY)
2) Selecionar os campos cdigo, descrio e preo da tabela PRODUTO e arredondar o campo
preo para cima sem casas decimais.

Gatec - Treinamento Oracle - 23

3) Selecionar os campos nome, data de admisso, salrio e comisso da tabela FUNCIONRIO,


onde o salrio for maior que 2000 e remover as casas decimais do campo salrio.

7.2.2.

Funes de String:

Funo
ASCII(VALOR)

Descrio
Retorna a representao decimal do conjunto de
caracteres do banco de dados.
CHR(VALOR)
Retorna o caractere que tem o binrio equivalente a
VALOR
CONCAT(VALOR1,VALOR2)
Retorna o VALOR1 concatenado com o VALOR2.
INITCAP(VALOR)
Retorna a string contida em VALOR com a primeira letra
em maisculo
INSTR(VALOR1,VALOR2[,N[,M Procura a localizao de um conjunto de caracteres
]]
VALOR1 na string, iniciando a partir da posio N e na
ocorrncia de M.
INSTR2(VALOR1,VALOR2[,N[, Similar funo INSTR, exceto q a posio N retorna o
M]]
valor expresso em UCS2
INSTR4(VALOR1,VALOR2[,N[, Similar funo INSTR, exceto q a posio N retorna o
M]]
valor expresso em UCS4
INSTRB(VALOR1,VALOR2[,N[, Similar funo INSTR, exceto q a posio N retorna o
M]]
valor expresso em bytes
INSTRC(VALOR1,VALOR2[,N[, Similar funo INSTR, exceto q a posio N retorna o
M]]
valor expresso em UNICODE.
LENGTH(VALOR)
Retorna o nmero de caracteres contidos em VALOR
LENGTH2(VALOR)
Retorna o tamanho (em caracter USC2) de uma string ou
expresso.
LENGTH4(VALOR)
Retorna o tamanho (em caracter USC4) de uma string ou
expresso.
LENGTHB(VALOR)
Retorna o tamanho (em bytes) de uma string ou
expresso.
LENGTHC(VALOR)
Retorna o tamanho (em caracter UNICODE) de uma
string ou expresso.
LOWER(VALOR)
Retorna todos os caracteres em letras minsculas
LPAD(VALOR1,N, VALOR2)
Retorna uma string de N caracteres com o contedo de
VALOR1, e o restante em branco preenchido esquerda
com o contedo de VALOR2
LTRIM(VALOR1, VALOR2)
Remove da string contida esquerda em VALOR1, o
contedo de VALOR2. Se VALOR2 for omitido, remove
espaos em branco.
REPLACE(VALOR1,
Procura a ocorrncia contida em VALOR2 no contedo
VALOR2, VALOR3)
de VALOR1, substituindo pelo contedo de VALOR3.
RPAD(VALOR1,N,
Retorna uma string de N caracteres com o contedo de
VALOR2)
VALOR1, e o restante em branco preenchido direita
com o contedo de VALOR2
RTRIM(VALOR1,
Remove da string contida direita em VALOR1, o
VALOR2)
contedo de VALOR2. Se VALOR2 for omitido, remove
espaos em branco.
SUBSTR(VALOR,
POS. Retorna uma parte da string de N caracteres contida em
INICIAL, N)
VALOR, iniciando a string na posio POS.INICIAL,
TRANSLATE(TEXT, FROM, TO) Traduz todas as ocorrncias de cada caractere,
substituindo pelo caractere especificado pelo usurio.
UPPER(VALOR)
Retorna todos os caracteres em letras maisculas

Gatec - Treinamento Oracle - 24

Exerccios:
1) Selecionar os campos municpio e estado da tabela CIDADE, onde o estado for igual a MG,
retornando o nmero de caracteres contidos no campo municpio.
SELECT LENGTH(MUNICIPIO), ESTADO FROM CIDADE
WHERE ESTADO = MG
2) Selecionar os campos cdigo e descrio da tabela DEPARTAMENTO, removendo os
espaos em brancos do campo descrio.
3) Selecionar os campos cdigo, nome e endereo da tabela FORNECEDOR, retornando os
campos nome e endereo em letra maiscula.

7.2.3.

Funes de Data e Hora

Funo
ADD_MONTHS(VALOR, N)
CURRENT_DATE
CURRENT_TIMESTAMP
DBTIMEZONE
EXTRACT(datetime)
LAST_DAY(VALOR)
MONTHS_BETWEEN(
VALOR1,VALOR2
NEW_TIME(VALOR, Z1,
Z2)
NEXT_DAY(VALOR1,
VALOR2)
ROUND(VALOR[,FORMAT
O])
SESSIONTIMEZONE
SYSDATE
SYSTIMESTAMP
TRUNC(VALOR[,FORMAT
O])

Descrio
Retorna a data contida em VALOR acrescido de N meses
Retorna a data corrente em uma sesso.
Retorna a data e a hora corrente em uma sesso.
Retorna a zona de tempo do banco de dados.
Extrai a data e hora de um campo do tipo datetime
Retorna o ultimo dia do ms
Retorna o nmero de meses entre as datas contidas em
VALOR1 e VALOR2.
Retorna a data e a hora conforme as zonas Z1 e Z2. Zonas
so caracteres definidos pelos valores da zona de tempo.
Retorna a data do primeiro dia til, maior que a data VALOR1.
O primeiro dia til da semana expresso pelo VALOR 2.
Arredonda o valor de VALOR de acordo com a unidade
especificada pelo formato.
Retorna o valor corrente da regio de tempo(time zone).
Retorna a data e a hora correntes
Retorna a data e a hora, incluindo as fraes de segundo e as
zonas de tempo do banco de dados
Trunca o VALOR especificado pelo formato.

Exerccios:
1) Selecionar os campos cdigo do produto, cdigo do local e data da ltima compra da tabela
ESTOQUE, onde o cdigo do produto esteja dentro desta lista (100,200,300,400). Adicionar
2 meses na data da ltima compra e ordenar por cdigo do local.
SELECT COD_PROD, COD_LOCAL, ADD_MONTHS(DT_ULTCOMPRA,2) FROM ESTOQUE
WHERE COD_PROD IN(100,200,300,400)
ORDER BY COD_LOCAL
2) Selecionar o nmero do pedido, a data do pedido, a data de entrega e o total da tabela
PEDIDOCOMPRA, onde o cdigo do fornecedor for igual a 1. Adicionar 1 ms na data de
entrega e ordenar em ordem decrescente pela data do pedido.

Gatec - Treinamento Oracle - 25

3) Selecionar o cdigo do funcionrio, nome e data de admisso, formatando o campo data de


admisso e ordenar pelo nome

7.2.4.

Funes de Converso

Funo
TO_CHAR(STRING)
TO_DATE( STRING, FORMATO )
TO_NUMBER(STRING[,FORMAT
O])

7.2.5.

Funes de Agrupamento

Funo
AVG([DISTINCT|ALL]VALOR)
COUNT({*|[DISTINCT|
ALL]EXPR})

MAX([DISTINCT|ALL]EXPR)
MIN([DISTINCT|ALL]EXPR)
SUM([DISTINCT|ALL]VALOR)
VARIANCE([DISTINCT|
ALL]EXPR)

7.2.6.

Descrio
Retorna o valor mdio de VALOR
Retorna o nmero de linhas de uma consulta. Se o
parmetro EXPR for especificado, a funo retornar o
nmero de linhas onde a expresso no for nula. Se
especificado (*), a funo retornar todas as linhas,
incluindo duplicaes e valores nulos.
Retorna o valor mximo de EXPR.
Retorna o valor mnimo de EXPR.
Retorna a soma dos valores de VALOR.
Retorna a varincia de EXPR.

Outras Funes

Funo
DECODE(EXPR, SEARCH,
RESULT, DEFAULT)

NULLIF(EXPR1, EXPR2)

NVL(EXPR1,EXPR2)
NVL2(EXPR1,EXPR2,EXPR3)

USER

Descrio
Converte um tipo de dado NCHAR, NVARCHAR2, CLOB
OU NCLOB para um tipo de dado especificado no banco
de dados.
Converte um tipo de dado CHAR, VARCHAR2, NCHAR
OU NVARCHAR2 para um tipo de dado DATE.
Converte um tipo de dado CHAR, VARCHAR2, NCHAR
OU NVARCHAR2 para o tipo de dados NUMBER.

Descrio
Compara valores para cada expresso EXPR.Se a
expresso EXPR for igual ao valor pesquisado SEARCH,
o Oracle retorna o resultado correspondente result,
caso contrrio o Oracle retornar um valor
padro(default) ou um valor nulo.
Compara a expresso EXPR1 com a expresso EXPR2;
se elas forem iguais, a funo retornar o valor nulo; se
elas forem diferentes, retornar o valor da expresso
EXPR1.
Se EXPR1 for nula, retornar EXPR2; se EXPR1 no for
nula, devolver EXPR1
Se EXPR1 no for nula, retornar EXPR2; se EXPR1 for
nula, devolver EXPR3. Os argumentos EXPR1 e EXPR2
podem ter qualquer tipo de dado exceto tipo de dados
LONG.
Retorna o nome do usurio corrente no banco de
dados.

Gatec - Treinamento Oracle - 26

7.2.7.
Formato
9
0
$

7.2.8.
Formato
D
DAY
DD
HH OU HH12
HH24
MI
MM
MONTH
YYYY
Yy

Formatos Numricos
Exemplo
9999
0999
9990
$9999

Significado
Retorna o valor
Retorna o valor
Retorna o valor
Retorna o valor

com o nmero de dgitos.


precedido de zeros.
de zeros aps o resultado.
precedido do smbolo de dlar.

Formatos de Datas e Horas


Significado
Dias da semana (1-7).
Nome do dia da semana.
Dias da ms (1-31).
Hora diria (1-12), formato de 12 horas.
Hora diria (1-12), formato de 24 horas.
Minutos (0-59)
Meses do ano (01-12)
Nome do ms
Quatro dgitos para o ano.
ltimos dois dgitos do ano.

Gatec - Treinamento Oracle - 27

8. Joins
8.1.

Definio e utilidade dos Joins

A combinao de informaes de 2 ou mais tabelas em uma mesma query denomina-se Join.


Os Joins so extremamente teis pois atravs deles que podemos extrair o mais alto nvel de
detalhes e objetividade na recuperao de informaes.
As condies para construo de joins so especificadas na clusula WHERE de uma query.
Nela so definidas as colunas que possuem um valor em comum para todas as tabelas. Para
executar um Join, o Oracle faz a juno de 2 tabelas baseado nas colunas que contm as
condies de join na clusula WHERE, comparando suas colunas. Com este resultado, faz
novamente a juno com outra tabela baseado nas colunas que contm as condies de join
do resultado e da prxima tabela. O Oracle repete o processo at que todas as condies de
join sejam satisfeitas. Ex.:

[ [ [ Tabela1 <-> Tabela2 ] <-> Tabela3 ] <->.....TabelaN]


Resultad
1o Join com
as 2 tabelas

2o Join com o
resultado e a 3a
Tabela
Para construir joins devemos informar as colunas em comum pertencentes s tabelas que
estamos fazendo a unio, atravs do operador [ = ]. A sintaxe bsica :

COLUNA (da Tabela1) = COLUNA (da Tabela2)


Colunas em
comum
Se em qualquer uma destas tabelas existir um nome igual de coluna, deve-se especificar o
nome da tabela antes de se especificar o nome da coluna, seguindo a seguinte sintaxe :

TABELA1.COLUNA = TABELA2.COLUNA
O Oracle ento consegue distinguir as colunas evitando qualquer tipo de ambigidade.
Podemos utilizar tambm Alias para as tabelas, discutidos posteriormente neste tpico.
Podemos continuar a sentena unindo mais tabelas. Para isso utilizamos o operador de
conjuno [AND], quantas vezes for necessrio:

TABELA1.COLUNA1 = TABELA2.COLUNA 1
AND
TABELA1.COLUNA2 = TABELA3.COLUNA2
AND
TABELA2.COLUNA3 = TABELA4.COLUNA3
AND
TABELA(X).COLUNA(X) = TABELA (X1).COLUNA(X)...

Gatec - Treinamento Oracle - 28

Obs.: A clusula WHERE e o operador AND contm outras condies para restrio de
informaes, (filtros) descritos no item 4.1, e podem ser utilizadas juntamente com as
condies de join.

8.2.

Tipos de Joins

8.2.1.

Equijoins

So joins que contm um operador de igualdade ( = ) em sua condio. Um equijoin


combina linhas que tm valores iguais para as colunas especificadas.

8.2.2.

SelfJoins

So joins realizados na prpria tabela, que aparece 2 vezes na clusula FROM, respeitando
as condies de join especificadas no item 6.2

8.2.3.

InnerJoins

So joins que retornam somente as linhas que satisfazem a condio de join, ou seja, todas
as linhas referentes as colunas que contm as condies de join devero existir em todas
as tabelas que fazem parte do join. Ex.:

Tabela
1
001
001
002
002

Tabela
2
001
001
003
002

Tabela
3
001
003
002
002

8.2.4.

OuterJoins

Retorna somente a
linha 1 e 4, que
existe em todas as
tabelas

Diferente de InnerJoin, as linhas referentes as colunas que contm as condies de join


podem no existir em todas as tabelas, mas retorna-as mesmo assim dependendo de qual
tabela se deseja retornar todas as linhas. Em uma query com 2 tabelas por exemplo, para
retornar todas as linhas da Tabela1, independentemente se existem na Tabela2, devemos
utilizar o operador (+) na Tabela onde no existem todas as linhas, que neste caso a
Tabela2. A sintaxe bsica :

TABELA1.COLUNA1 = TABELA2.COLUNA1(+)
O operador (+) na
tabela onde no
existem todas as linhas

Tabela Tabela
1
2
001
001
001
003

Retorna as linhas 1 e 3
(null) tambm, mesmo
se no existirem na
tabela2

Gatec - Treinamento Oracle - 29

002
8.3.

002

Alias para Tabelas

Os alias (apelidos) possuem o mesmo conceito discutido no item 3.3, com a diferena de que
os utilizamos tambm para as tabelas. Os alias so teis para facilitar a construo de querys.
Uma vez definido um alias para tabelas, podemos utiliza-lo em qualquer posio da query,
sempre que for necessrio referenci-las. Se houver nomes iguais de colunas para mais de
uma tabela em uma query, obrigatria a utilizao do alias nestas colunas. No necessrio
utilizar o alias para colunas que no so comuns nas tabelas de uma query, porm
recomendvel sua utilizao para facilitar a leitura e entendimento de uma query, visto que
desta maneira possvel distinguir a origem de uma coluna.

Gatec - Treinamento Oracle - 30

SELECT A.COLUNA1, B.COLUNA1, COLUNA99


Colunas iguais nas
2 tabelas,
diferenciadas pelo
Alias

Coluna presente
somente na Tabela1,
no necessita de Alias

FROM TABELA1 A, TABELA2 B

Definindo Alias
para as Tabelas

WHERE A.COLUNA1=B.COLUNA1

Utilizando
Alias
execuo
Join

8.4.

o
para
de

Produto Cartesiano

Se uma condio de join no for vlida em uma query, o Oracle combina cada linha de uma
tabela com cada linha de outra, retornando um Produto Cartesiano, gerando vrias linhas e
raramente utilizado. Para 2 tabelas com 8 linhas cada uma, por exemplo, o Oracle retornar 64
linhas. Sempre que possvel deve-se utilizar joins a menos que seja necessrio utilizar um
produto cartesiano.

8.5.

Joins no padro SQL 1999

O Oracle 9i agora d suporte a sintaxe padro SQL 1999 para joins, cross-joins, natural joins e
uma sintaxe especial para OuterJoins.

8.5.1.

Cross-Joins

No so muito utilizados, produzem apenas um produto cartesiano:

SELECT COLUNA1, COLUNA2 FROM TABELA1 CROSS JOIN TABELA2


8.5.2.

Natural Joins

Realizam um join para todas as colunas que possuem nomes iguais em 2 tabelas. So
muito utilizados pois a clusula WHERE no utilizada para condies de join, somente
para condies de filtragem de linhas. A query a seguir:

Gatec - Treinamento Oracle - 31

SELECT A.COLUNA1, B.COLUNA1 FROM TABELA1 A, TABELA2 B


WHERE A.COLUNA1 = B.COLUNA1
o equivalente, com Natural Join a:

SELECT COLUNA1, COLUNA2 FROM TABELA1 NATURAL JOIN TABELA2


8.5.3.

Outer Joins

Utilizam o mesmo conceito visto no tpico 8.2.4, com uma sintaxe diferenciada,
subdividida em 2 subtipos, LEFT OUTER JOIN e RIGHT OUTER JOIN.
Utiliza-se LEFT(esquerda) e RIGHT(direita) como uma forma de apontar para a tabela onde
as linhas sero retornadas independentemente se existirem na outra tabela. Em uma query
com 2 tabelas, se desejarmos retornar todas as linhas da primeira tabela, utilizamos LEFT
OUTER JOIN:

SELECT A.COLUNA1, B.COLUNA1 FROM


TABELA1 A LEFT OUTER JOIN TABELA2 B

Apontando para a
Tabela da esquerda,
que dever retornar
todas as suas linhas,
existindo ou no na
Tabela da direita.

ON (A.COLUNA1 = B.COLUNA1)
O equivalente de Outer Join na sintaxe padro do Oracle :

SELECT A.COLUNA1, B.COLUNA1 FROM TABELA1 A, TABELA2 B


WHERE
A.COLUNA1 = B.COLUNA1(+)
Para mais de 2 tabelas, se desejarmos continuar a trazer todos os dados da primeira
tabela, pegamos o resultado da unio das 2 tabelas e aplicamos o OUTER JOIN com a
terceira tabela:

Gatec - Treinamento Oracle - 32

SELECT A.COLUNA1, B.COLUNA1, C.COLUNA1 FROM


(TABELA1 A LEFT OUTER JOIN TABELA2 B ON (A.COLUNA1 = B.COLUNA1))

Conjunto de
resultados do
primeiro Outer Join

LEFT OUTER JOIN TABELA3 C ON (A.COLUNA1=C.COLUNA1)

Apontando para o
conjunto de
resultados do
primeiro Outer Join

Gatec - Treinamento Oracle - 33

9. Agrupamento de Dados
9.1.

Clusula GROUP BY

Para agrupar linhas de uma tabela dentro de grupos especficos, utilizamos a clusula GROUP
BY. O Oracle calcula as linhas selecionadas baseadas no parmetro fornecido pelas funes
de grupo e retorna uma nica linha com o resumo das informaes para cada grupo. O
GROUP BY agrupa as linhas, mas no as ordena, sendo necessrio utilizar a clusula ORDER BY
para isso. Ex.: Na seguinte query, no h agrupamento de dados, e as informaes so
repetidas. (Fig.15)

Linhas
duplicadas

Fig. 15
Se utilizarmos a clausula GROUP BY na coluna CARGO, podemos utilizar uma funo de grupo
SUM() para somarmos todos os salrios. Obs.: Se omitirmos a clusula GROUP BY de uma
query que possui funes de grupo, um erro ser mostrado indicando que no podemos utilizar
funes de grupo sem agrupar as linhas. Ex.: (Fig 16)

Gatec - Treinamento Oracle - 34

Omitimos a
clusula
GROUP BY

Valores
agrupados
pela
clusula
GROUP BY.

Fig. 16

9.2.

Funes de Grupo

Funo
AVG(VALOR)
COUNT(VALOR)

SUM(VALOR)
MAX(VALOR)
MIN(VALOR)

Descrio
Retorna a mdia do parmetro VALOR.
Retorna o nmero linhas retornadas pela query. Se o parmetro
VALOR for uma coluna, retorna todas as linhas no nulas
referentes a esta coluna. Se for especificado um (*), retorna
todas as linhas, duplicadas e nulas.
Retorna a soma do parmetro VALOR.
Retorna o valor mximo do parmetro VALOR
Mesmo que MAX, retornando o valor mnimo.

Gatec - Treinamento Oracle - 35

Exerccios:
1) Selecionar da tabela ITEM, os campos cdigo do produto e a somatria da quantidade.
Agrupar e ordenar pelo cdigo do produto
SELECT COD_PROD, SUM(QUANTIDADE) FROM ITEM A
GROUP BY COD_PROD
ORDER BY COD_PROD
2) Selecionar da tabela PEDIDOCOMPRA, os campos nmero do pedido e data do pedido,
trazendo o total de pedidos, agrupar e ordenar em ordem decrescente pela data do
pedido.
3) Selecionar da tabela FORNECEDOR os campos cdigo do fornecedor e cdigo da cidade,
trazendo o nmero total de fornecedores por cidade e o campo municpio da tabela
CIDADE. Agrupar e ordenar pelo cdigo da cidade.

9.3.

Clusula HAVING

Utilizada com GROUP BY, a clusula HAVING usada para selecionar os grupos que sero
mostrados com base nas informaes das funes de grupos. No possvel utilizar a clusula
WHERE em sentenas de grupos. Ex.: (fig 17)

A clusula HAVING
sendo aplicada
uma condio na
funo de grupo

Erro ao utilizar a
clusula WHERE

Fig. 17

Gatec - Treinamento Oracle - 36

Exerccios:
1) Selecionar da tabela PEDIDOCOMPRA, os campos nmero do pedido e data do
pedido, trazendo o total de pedidos, dentro do perodo de 01/01/2004 a 01/03/2004.
Agrupar e ordenar pela data do pedido em ordem decrescente.
SELECT COUNT(NUM_PEDIDO) AS TOTAL, DT_PEDIDO FROM PEDIDOCOMPRA
HAVING DT_PEDIDO BETWEEN TO_DATE(01/02/2004, DD/MM/YYYY) AND
TO_DATE(01/03/2004, DD/MM/YYYY)
GROUP BY DT_PEDIDO
ORDER BY DT_PEDIDO DESC
2) Selecionar da Tabela Estoque, os campos cdigo do produto e data da ltima
compra, trazendo o total de produtos, dentro do perodo de 20/11/2003 at
20/01/2004. Agrupar e ordenar pela data da ltima compra.
3) Selecionar da Tabela PEDIDOCOMPRA os campos nmero do pedido, total e data do
pedido, trazendo a mdia do campo total e o nmero total de pedidos, dentro do
perodo de 25/01/2004 at 25/03/2004. Agrupar pela data do pedido

Gatec - Treinamento Oracle - 37

10.

SubQueries

So queries auxiliares utilizadas para retornar resultados intermedirios para completar a


condio da query principal ou um nvel acima. As regras de nomenclatura e Alias para as
subqueries se aplicam da mesma forma como foi discutido no item 5.3. Deve-se nomear as
subqueries utilizando alias para evitar ambigidade com outras tabelas e subqueries.

10.1. Tipos de Subqueries


10.1.1.

Inline Views

So as subqueries da clusula FROM, como tabelas temporrias paralelas, que unidas com
as tabelas da query principal retornam o resultado final. Ex.:

SELECT A.COLUNA1, B.COLUNA1, C.COLUNA10


FROM TABELA1 A, TABELA 2 B,
(SELECT COLUNA1, COLUNA10 FROM TABELA10) C ,

SubQuery
Inline View

Alias para
a Subquery

WHERE A.COLUNA1=B.COLUNA1 AND A.COLUNA1 = C.COLUNA1


10.1.2.

Nested subqueries

So as subqueries da clusula WHERE, ou subqueries encadeadas, que podem conter


outras subqueries. Ex.:

SELECT COLUNA FROM TABELA1 WHERE


COLUNA = (SELECT COLUNA FROM TABELA2 WHERE COLUNA =
(SELECT COLUNA FROM TABELA3 WHERE COLUNA =
(SELECT COLUNA FROM TABELA4 WHERE {condio})))
Obs.: O Oracle no impe limites para encadeamento de subqueries inline view, mas para
nested subqueries so permitidos at 255 nveis de encadeamento.

Gatec - Treinamento Oracle - 38

10.1.3.

Subqueries Co-Relacionadas

So subqueries relacionadas diretamente com a query principal, e so executadas para


cada linha processada por ela. O operador EXISTS muito utilizado neste tipo de subquery.
Ex.:

SELECT A.COLUNA1, A.COLUNA2 FROM TABELA1 A


WHERE NOT EXISTS (SELECT B.COLUNA1 FROM TABELA2 B
WHERE B.COLUNA1 = A.COLUNA1)

Co-relacionamento da
TABELA1 da query
principal com a
TABELA2 da subquery

Exerccios:
1) Selecionar usando tabela PEDIDOCOMPRA, os campos nmero do pedido, a
quantidade total de pedidos e as quantidades totais de pedidos em Maro/2003
e Junho/2003. Agrupar pelo numero do pedido.
SELECT NUM_PEDIDO, COUNT(NUM_PEDIDO) AS TOTAL,
(SELECT COUNT(NUM_PEDIDO) FROM PEDIDOCOMPRA
WHERE TO_CHAR(DT_PEDIDO, 'MM') = 03 AND
TO_CHAR(DT_PEDIDO, 'YYYY') = 2003) AS TOTAL_MARCO2000,
(SELECT COUNT(NUM_PEDIDO) FROM PEDIDOCOMPRA
WHERE TO_CHAR(DT_PEDIDO, 'MM') = 06 AND
TO_CHAR(DT_PEDIDO, 'YYYY') = 2003) AS TOTAL_JUNHO2000
FROM PEDIDOCOMPRA
GROUP BY NUM_PEDIDO
2) Selecionar os pedidos de compra somente dos que no possuem itens, usando
as tabelas PEDIDOCOMPRA e ITEM.
3) Selecionar somente os funcionrios que possuem departamentos relacionados,
usando as tabelas FUNCIONARIO e DEPARTAMENTO.

Gatec - Treinamento Oracle - 39

11. Comando INSERT


Insere informaes em uma tabela. A sintaxe bsica :

INSERT INTO TABELA(COLUNA1, COLUNA2, ...COLUNAn)


VALUES(VALOR1, VALOR2, ...VALORn)
11.1. Limitaes
necessrio possuir os privilgios necessrios definidos pelo Administrador do Banco de
Dados (DBA).;
Cada VALOR deve corresponder a uma COLUNA na tabela. O Oracle retorna um erro se
uma coluna for especificada sem o seu valor, ou um valor sem uma coluna.
Os valores nos parmetros VALOR1, VALOR2... podem ser expresses, clculos, literais,
desde respeitem os tipos de dados correspondentes as colunas;
Os tipos de dados String devero estar entre apstrofes ( );
Os tipos de dados Data devero tambm estar entre apstrofes, ou convertendo para tipo
Data atravs da funo to_date.
As restries (CONSTRAINTS Discutidas posteriormente) podem impedir a incluso de
informaes na tabela, dependendo do que foi definido pelo Administrador do Banco de
Dados. Um comando INSERT, por exemplo, no ser executado se :
Os dados j existirem na tabela;
No existirem informaes suficientes em alguma tabela relacionada com a tabela que se est
tentando inserir dados;
Inserir valores nulos em colunas que no permitem valores nulos.

11.2. Utilizao do comando SELECT


A sintaxe analisada anteriormente tinha como objetivo a insero de uma nica linha. Para
insero de vrias linhas em uma tabela, utilizamos uma lista de valores retornados por uma
subquery. Como regra principal, cada valor retornado deve se referenciar a uma coluna
especificada na clusula INSERT. A regra no se aplica se a subquery possuir exatamente as
mesmas colunas especificadas na clusula INSERT. Pode-se especificar valores default para
colunas. Se no for especificado nenhum valor, o Oracle insere valores null, caso no se
encaixe nas restries descritas no item 11.1.
Ex.: Assumindo-se que TABELA1 possui 5 colunas:

INSERT INTO TABELA1 (COLUNA1, COLUNA2, COLUNA3)


SELECT COL1, COL2 COL3 FROM TABELA2
A subquery possui
somente 3 colunas,
devendo portanto
especific-las na
clusula INSERT

Gatec - Treinamento Oracle - 40

INSERT INTO TABELA1


SELECT COL1, COL2, COL3, COL4 COL5 FROM TABELA2

A subquery possui
todas as colunas, no
sendo necessrio
especificar na clusula
INSERT

Exemplo:
CREATE TABLE FUNCIONARIO_COPIA AS SELECT * FROM FUNCIONARIO
UPDATE FUNCIONARIO_COPIA SET COD_FUNCIONARIO = ROWNUM + 50
INSERT INTO FUNCIONARIO SELECT * FROM FUNCIONARIO_COPIA
Exerccios:
1) Adicionar um fornecedor novo na tabela Fornecedor.
INSERT INTO
FORNECEDOR(COD_FORNECEDOR,NOME,ENDERECO,COD_CIDADE)
VALUES(9, 'GATEC - SOLUES EM TI', 'AV.LIMEIRA,222', 2)
2) Adicionar uma cidade nova na tabela Cidade
3) Adicionar um departamento novo na tabela Departamento

Gatec - Treinamento Oracle - 41

12. Comando UPDATE


Altera informaes em uma tabela. A sintaxe bsica :

UPDATE TABELA SET


COLUNA1=VALOR1, COLUNA2=VALOR2, ...COLUNAn=VALORn
WHERE {condio}
As regras do item 11.1 tambm se aplicam a esta clusula.
A clusula WHERE possui o mesmo critrio para filtragem de informaes. Se for omitida,
atualiza todas as linhas existentes na tabela.

12.1. Atualizao de Mltiplas Colunas


Podemos atualizar todas ou qualquer coluna de uma tabela, sendo necessrio apenas
especific-las na lista de colunas da clusula UPDATE. Colunas no especificadas
permanecero com seus valores inalterados.

12.2. Utilizao com subqueries


O Oracle permite utilizar uma sintaxe especial, onde especificamos primeiro todas as colunas,
e depois os valores para atualizao atravs de uma subquery. Os valores desta subquery
podem ser de qualquer origem, desde respeitem o tipo de dados de cada coluna da tabela e
que retornem apenas uma nica linha. Se for especificado mltiplas colunas, a subquery
dever retornar todos os valores correspondentes a estas colunas. Se a subquery no retornar
linhas, ser associado o valor null para as colunas, que podero ou no ser atualizadas,
dependendo das restries descritas no item 9.1.

UPDATE TABELA1 SET(COLUNA1, COLUNA2, ...COLUNAn) =


(SELECT VALOR1, VALOR2, ...VALORn FROM TABELA2 WHERE
{condio})
A subquery deve
retornar
somente uma
linha

Esta clusula
WHERE faz parte
da clusula
UPDATE

WHERE {condio}
Exerccios:
1) Alterar o endereo do fornecedor da tabela FORNECEDOR, onde o cdigo do
fornecedor for igual a 1.
UPDATE FORNECEDOR SET ENDERECO = 'RUA ARMANDO SALLES, 1525'
WHERE COD_FORNECEDOR = 1
Gatec - Treinamento Oracle - 42

2) Alterar o endereo do local de armazenagem da tabela


LOCALARMAZENAGEM, onde o cdigo do local for igual a 5.
3) Alterar a data da ltima compra da tabela ESTOQUE, onde o cdigo do local
for igual a 3.

Gatec - Treinamento Oracle - 43

13. Comando DELETE


Exclui informaes de uma tabela. A sintaxe bsica :

DELETE FROM TABELA WHERE {condio}


As regras do item 11.1 tambm se aplicam a esta clusula.
A clusula WHERE possui o mesmo critrio para filtragem de informaes. Se for omitida,
exclui todas as linhas existentes na tabela.

13.1. Utilizao com subqueries


Tambm podem ser utilizadas subqueries seguindo as regras normais de sintaxe discutidas
anteriormente:

DELETE FROM (SELECT * FROM TABELA WHERE {condio})


DELETE FROM TABELA WHERE COLUNA IN (SELECT COLUNA FROM
TABELA2)
Exerccios:
1) Excluir da tabela ESTOQUE as informaes referentes ao estoque, onde os
locais pertencerem cidade 5.
DELETE FROM ESTOQUE WHERE COD_LOCAL IN (SELECT COD_LOCAL FROM
LOCALARMAZENAGEM WHERE COD_CIDADE = 5)
2)

Excluir da tabela LOCALARMAZENAGEM as informaes referentes s


cidades do estado de Santa Catarina.

3) Excluir da tabela FUNCIONARIO as informaes referentes aos funcionrios


que pertencem ao departamento 10.

Gatec - Treinamento Oracle - 44

14. Comando MERGE


O comando MERGE utilizado para selecionar linhas de uma ou mais fontes de dados(tabelas,
subqueries, views) para incluso ou alterao tambm em uma ou mais tabelas. Pode-se
estabelecer condies para determinar operaes de incluso ou alterao nas tabelas de
destino. uma forma conveniente de combinar mltiplas operaes. MERGE uma sentena
determinstica, ou seja, no se pode atualizar uma tabela mltiplas vezes na mesma sentena.
As regras do item 11.1 tambm se aplicam a esta clusula.

14.1. Comparaes com verses anteriores do Oracle


Em um ambiente com um grande volume de informaes, onde as atualizaes so muito
freqentes, o Oracle deve gerenciar os dados de maneira precisa, determinando, por exemplo,
atualizaes para os dados que j existem e insero de novas informaes.
Nas verses anteriores do Oracle, estas operaes eram expressas como uma seqncia de
DMLs (Data Manipulation Language), ou nada mais do que INSERTs e UPDATEs
implementados em blocos de estrutura de comandos de deciso. A performance ento era
comprometida, pois exigia mltiplas anlises dos dados e operaes linha a linha. O Oracle 9i
implementa o novo comando MERGE, com o objetivo de solucionar estes problemas, alm de
ser mais simples e intuitivo.

14.2. Clusula INTO


Especifica a tabela de destino onde ser feita a atualizao

14.3. Clusula USING


Especifica a origem dos dados, que pode ser uma tabela, subquery ou view(discutido
posteriormente)

Gatec - Treinamento Oracle - 45

14.4. Clusula ON
Especifica as condies de atualizao para o comando MERGE. Para cada linha da fonte de
dados, o Oracle faz a atualizao na tabela de destino com as linhas correspondentes,
dependendo do que for especificado, um UPDATE ou DELETE. Se a linha no for encontrada,
faz a insero na tabela.

MERGE INTO TABELA1


USING {Fonte de dados}
ON ({condio})
WHEN MATCHED THEN UPDATE SET TABELA1.COLUNA1 = VALOR
Ou DELETE WHERE {condio}
Linhas
encontrada
s na fonte
de dados

WHEN NOT MATCHED THEN INSERT(TABELA1.COLUNA1


TABELA1.COLUNAn)
VALUES(VALOR) WHERE {condio}

Linhas noencontrada
s na fonte
de dados

Exemplo:
MERGE INTO bonuses D
USING (SELECT employee_id, salary, department_id FROM
employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus +
S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*0.1)
WHERE (S.salary <= 8000);

Gatec - Treinamento Oracle - 46

15. Controle de Transao


Os comandos INSERT, UPDATE, DELETE e MERGE at ento fazem parte de uma sesso, ou
seja, todas as aes executadas por estes comandos so vistas somente pelo usurio que
abriu a sesso.
O primeiro comando SQL executado pelo usurio em uma sesso inicia uma Transao. Esta s
termina quando as alteraes so confirmadas ou desfeitas pelo usurio.
Uma Transao garante a consistncia das informaes no Oracle, pois no executa nenhum
tipo de alterao at que os comandos de finalizao de transao sejam executados.

15.1. Comandos COMMIT, ROLLBACK e SAVEPOINT


So os comandos utilizados para finalizar uma transao. As alteraes feitas por comandos
SQL em uma transao podem ser confirmadas com o comando COMMIT. Aps executado,
todas as alteraes feitas tornam-se permanentes no banco de dados e visveis para outras
sesses de usurios.
Da mesma forma, todas as alteraes de uma transao podem ser desfeitas atravs do
comando ROLLBACK.
Para dividir as transaes em partes menores, utilizamos o comando SAVEPOINT.

15.1.1.

COMMIT

-Finaliza uma transao;


-Todas as alteraes feitas por comandos SQL tornam-se permanentes no banco de dados;
-Todas as alteraes feitas tornam-se visveis para outras sesses de usurios;
- executado automaticamente (implcito) se houver alterao nos objetos do banco de
dados, (DDL Data Definition Language) ou na desconexo (sem erros) do banco de dados.

15.1.2.

ROLLBACK

-Finaliza uma transao;


-Todas as alteraes so desfeitas e os dados permanecem intactos;
-Apaga todos os SAVEPOINTS da transao;
- executado automaticamente se o programa terminar com erros anormais.

15.1.3.

SAVEPOINT

-Divide uma transao em partes menores;


-Indentifica um ponto em uma transao para possibilitar utilizao com ROLLBACK;
-Utilizado com ROLLBACK, desfaz a transao at aquele ponto marcado. Apaga todos os
SAVEPOINT aps o que foi indicado. Os SAVEPOINT anteriores permanecem.
Ex.: ROLLBACK TO {savepoint}

Gatec - Treinamento Oracle - 47

Exemplo:
SQL> SELECT NOME FROM FUNCIONARIO WHERE COD_FUNCIONARIO = 1;
NOME
---------------------------------------JOSE MANOEL DA SILVA
SQL> UPDATE FUNCIONARIO SET NOME = 'TESTE' WHERE COD_FUNCIONARIO = 1;
1 row updated
SQL> SELECT NOME FROM FUNCIONARIO WHERE COD_FUNCIONARIO = 1;
NOME
---------------------------------------TESTE
SQL> SAVEPOINT A;
Savepoint created
SQL> UPDATE FUNCIONARIO SET NOME = 'JOANA' WHERE COD_FUNCIONARIO = 1;
1 row updated
SQL> SELECT NOME FROM FUNCIONARIO WHERE COD_FUNCIONARIO = 1;
NOME
---------------------------------------JOANA
SQL> ROLLBACK TO A;
Rollback complete
SQL> SELECT NOME FROM FUNCIONARIO WHERE COD_FUNCIONARIO = 1;
NOME
---------------------------------------TESTE
SQL> ROLLBACK;
Rollback complete
SQL> SELECT NOME FROM FUNCIONARIO WHERE COD_FUNCIONARIO = 1;
NOME
---------------------------------------JOSE MANOEL DA SILVA

Gatec - Treinamento Oracle - 48

16. Criao de Tabelas

Os comandos para definio dos dados so conhecidos no Oracle como comandos DDL (Data
Definition Language) enquanto os comandos DML so utilizados para a manipulao dos
dados propriamente ditos os comandos DDL criam, alteram as estruturas, manipula os direitos,
analisa as informaes dos objetos, estabelece opes para auditoria.
Utilizamos a clusula CREATE TABLE para criar tabelas no Oracle. As tabelas podem ser criadas
a qualquer momento, desde que se tenham privilgios (direitos) para isso. Privilgios sero
discutidos posteriormente.
Inicialmente so criadas sem nenhum valor, a menos que uma subquery seja especificada.
Aps criar a tabela, deve-se definir as colunas, tipos de dados e restries.
A sintaxe bsica :

CREATE TABLE {nome_tabela}


( {nome_coluna} [Tipo de dados] ( [Tamanho] ) [Restrio] , ..........)
Ex.:

CREATE TABLE TABELA1


(COLUNA1 NUMBER(2) NOT NULL, COLUNA2 VARCHAR2(20))

16.1. Nomenclatura de Tabelas e Colunas


No Oracle podemos representar nomes de objetos como identificadores sem aspas ou
identificadores com aspas. Objetos nomeados com aspas sempre devero estar neste
formato quando forem referenciados.
Ex.: Para um objeto com o nome de TABELA-TESTE

SELECT * FROM TABELA-TESTE


Retorna um erro,
informando que o
objeto invlido

SELECT * FROM TABELA-TESTE


O objeto est sendo
referenciado
corretamente, entre
aspas

Gatec - Treinamento Oracle - 49

Isto vale para a maioria dos objetos que compem a estrutura do Oracle, como tabelas,
colunas, views, etc.
As seguintes regras so aplicadas para nomenclatura de objetos no Oracle:
Os nomes podem ter at 30 caracteres;
Identificadores sem aspas no podem ter o mesmo nome de palavras
reservadas (lista de palavras utilizadas pela estrutura interna do Oracle).
Devem iniciar com cacteres alfabticos, entretanto, possvel utilizar cacteres
como o smbolo underscore (_), o dlar ($) e o sustenido(#), mas recomenda-se
no utiliza-los. So identificados pelo Oracle sempre como nomes em letra
maiscula.
Identificadores com aspas podem ter qualquer nome, inclusive palavras
reservadas, e iniciar com qualquer caracter, porm no recomendvel a
utilizao de caracteres incomuns para nomenclatura. So sensveis a
maisculas e minsculas, sendo que o Oracle os identifica de acordo como
foram criados. Ex. Tabela, TAbela, tabelA
Utilizar caracteres comuns para nomenclatura permite maior compatibilidade
entre plataformas e sistemas operacionais;
Objetos de tipos diferentes no podem ter o mesmo nome; Ex.: Uma Tabela no
pode ter o mesmo nome de uma View.
Colunas de uma mesma tabela no podem ter o mesmo nome, entretanto,
podem ter o mesmo nome em tabelas diferentes;

16.2. Tipos de Dados (DataTypes)


Todo valor manipulado pelo Oracle possui um tipo de dados. O tipo de dados de um valor
associa-se com um conjunto fixo de propriedades necessrias para diferencia-lo de outros
valores. Na criao de uma tabela, deve-se especificar o tipo de dados para cada coluna. So
os tipos de dados que determinam o tipo de valor que cada uma deve conter. Ex.: Em um tipo
de dados Data ou Numrico, a coluna no ir aceitar um caracter em seu contedo. A seguir
uma tabela com os tipos de dados mais comuns:
Tipo de Dados
VARCHAR2(N)
NUMBER(N,D)
LONG
DATE
CHAR(N)

Descrio
Tipo string de largura varivel, com o mximo de 4000
caracteres e mnimo de 1 caracter. Deve-se especificar um
tamanho para este tipo
Tipo numrico com uma faixa de 1 a 38 posies para casas
inteiras, e uma faixa de 84 a 127
Tipo string de largura varivel com at 2GB de largura
Tipo data e hora, com uma faixa de valores de 01/01/4712 a.c.
at 31/12/9999 d.c.
Tipo string de largura fixa, com o mximo de 2000 caracteres e
mnimo de 1 caracter. Deve-se especificar um tamanho para
este tipo

Exerccios:
1) Criar uma tabela CLIENTE, com os seguintes campos: Cdigo do Cliente,
Nome e Endereo.
CREATE TABLE CLIENTE (COD_CLIENTE NUMBER(2), NOME VARCHAR2(30),
ENDERECO VARCHAR2(40))

Gatec - Treinamento Oracle - 50

2) Criar uma tabela PEDIDOVENDA, com os seguintes campos: Nmero do


Pedido, Cdigo do Cliente, Data do Pedido e Total do Pedido.

16.3. Restries ( Constraints )


Constraints so regras utilizadas para restringir valores no banco de dados, garantir a
integridade das informaes e o relacionamento entre tabelas. O Oracle disponibiliza 6 tipos
de Constraints:
NOT NULL no permite que valores null sejam atualizados no banco de dados;
UNIQUE no permite que mltiplas linhas de uma mesma coluna ou combinao
de colunas tenham o mesmo valor, porm permite valores null;
PRIMARY KEY combina a constraint NOT NULL e UNIQUE em uma s declarao,
com a funcionalidade de todas ao mesmo tempo;
FOREIGN KEY no permite que valores sejam atualizados se no existirem em
uma tabela especificada;

CHECK no permite que valores sejam atualizados caso no satisfaam uma


condio especificada;

Exemplos:
Pode-se definir as constraints de duas maneiras:
-

Como parte da definio das colunas ou atributos, chamadas inline. A constraint NOT
NULL a nica que deve ser declarada somente inline:

CREATE TABLE TABELA(COLUNA1 NUMBER(2) CONSTRAINT


{nome} UNIQUE, COLUNA2 VARCHAR2(20))
-

Como parte da definio da tabela, ou out-of-line:

CREATE TABLE TABELA(COLUNA1 NUMBER(2), COLUNA2


VARCHAR2(20), CONSTRAINT {nome}
UNIQUE (COLUNA1))
Exerccios:
Obs.: Aps a excluso das tabelas CLIENTE e PEDIDOVENDA no item 16.6.
1) Criar uma tabela CLIENTE, com os seguintes campos: Cdigo do Cliente,
Nome e Endereo, sendo que o cdigo do cliente chave primria.
CREATE TABLE CLIENTE (COD_CLIENTE NUMBER(2) PRIMARY KEY, NOME
VARCHAR2(30), ENDERECO VARCHAR2(40))
2) Criar uma tabela PEDIDOVENDA, com os seguintes campos: Nmero do
Pedido, Cdigo do Cliente, Data do Pedido e Total do Pedido, sendo que o
nmero do pedido chave primria, o cdigo do cliente chave estrangeira e
o total do pedido no pode ser nulo

Gatec - Treinamento Oracle - 51

16.4. Utilizao de Subqueries


Pode-se criar tabelas com linhas retornadas de uma subquery. A Tabela criada herda os tipos
de dados e largura da subquery. Ex.:

CREATE TABLE TABELA1 AS


SELECT COLUNA1, COLUNA2, COLUNA3 FROM TABELA2 WHERE
{condio}
O Oracle segue algumas regras para utilizao deste recurso:
-

O Oracle define automaticamente qualquer constraint NOT NULL que foi


explicitamente criada na tabela da subquery correspondente. Se qualquer linha
violar a constraint, ele no cria a tabela e retorna um erro;
Constraints NOT NULL que foram criadas implicitamente pelo Oracle nas
colunas da tabela da subquery (por exemplo, PRIMARY KEY) no so
transportadas para a nova tabela;
Outros atributos de coluna, como primary key e foreign key no so
transportados para nova tabela;
Se todas as tabelas so colunas, pode-se omitir as colunas da definio (aps a
clusula CREATE TABLE). Neste caso, os nomes das colunas ficaro idnticos
aos da subquery;
As definies no podem conter tipos de dadossomente nomes de colunas,
valores default e constraints de integridade, no tipos de dados;

CREATE TABLE TABELA1(COLUNA1, COLUNA2) AS


Colunas de definio:
No podem conter
atributos nas colunas

SELECT COLUNA1, COLUNA2 FROM TABELA2


As colunas devem ser
especificadas na
subquery, se houver
colunas de definio

16.5. Comando ALTER TABLE

Gatec - Treinamento Oracle - 52

Utilizamos a clusula ALTER TABLE para alterar definies de tabelas no Oracle, sendo
necessrio possuir os privilgios necessrios para isso. Podemos criar ou alterar colunas,
seguindo algumas regras bsicas:
No se pode alterar uma coluna NULL que contm valores nulos para NOT NULL;
No se pode adicionar uma nova coluna NOT NULL. Deve-se criar como NULL
depois preencher completamente e ento alterar para NOT NULL;
Pode-se diminuir o tamanho de uma coluna, desde que esta esteja vazia, ou os
dados existentes no excedam o novo limite. Se isto acontecer, o Oracle retorna
um erro para os dados que excederam o limite.
No permitido alterar o tipo de dados, a menos que a coluna esteja vazia.
No permitido excluir colunas PRIMARY KEY ou UNIQUE KEY, se estas
possurem referncias para outras tabelas (FOREIGN KEY). Para isso, deve-se
incluir a clusula
CASCADE CONSTRAINTS, que remove todas as referncias existentes antes de
excluir a coluna.
No permitido excluir restries PRIMARY KEY ou UNIQUE KEY, se fizerem
parte de uma integridade referencial sem excluir as restries FOREIGN KEY.
Deve-se utilizar a clusula CASCADE para isso.

16.5.1.

Clusula ADD

Adiciona uma coluna ou restrio (constraint) para a tabela:

ALTER TABLE {nome_tabela}


ADD ({nome_coluna} [Tipo de dados] ([Tamanho]) [Restrio de
tabela])
ou

ADD CONSTRAINT {nome_restrio} [Restrio] ({nome_coluna})


Exerccios:
1) Adicionar na tabela CLIENTE os campos e-mail e data de nascimento.
ALTER TABLE CLIENTE ADD EMAIL VARCHAR2(60)
ADD DT_NASCTO DATE
2) Adicionar na tabela CLIENTE o cdigo da cidade, sendo uma chave
estrangeira da tabela CIDADE

16.5.2.

Clusula MODIFY

Altera definies em uma coluna:

ALTER TABLE {nome_tabela}


MODIFY ({nome_coluna} [Tipo de dados] ([Tamanho]))
Exerccios:
Gatec - Treinamento Oracle - 53

1) Modificar o tamanho do campo nome da tabela CLIENTE para 20.


ALTER TABLE CLIENTE MODIFY (NOME VARCHAR2(30))
2) Modificar o tamanho do campo total da tabela PEDIDOVENDA para 16 com
duas casas decimais.

16.5.3.

Clusula DROP

Remove colunas ou restries da tabela:

ALTER TABLE {nome_tabela}


DROP COLUMN {nome_coluna} {CASCADE CONSTRAINTS}
ou

DROP CONSTRAINT {nome_constraint} {CASCADE}


Exerccios:
1) Excluir a coluna email da tabela CLIENTE.
ALTER TABLE CLIENTE DROP COLUMN EMAIL
2) Excluir a coluna cdigo da cidade da tabela CLIENTE.

16.6. Comando DROP TABLE


Remove a tabela e todos os dados e ndices existentes nela. Deve-se possuir os privilgios
necessrios para isso.
Se a tabela possuir restries de PRIMARY KEY ou UNIQUE KEY, deve-se utilizar a clusula
CASCADE CONSTRAINTS para remover as referncias de integridade referencial, caso contrrio
o Oracle retorna um erro e no remove a tabela:

DROP TABLE {nome_tabela} {CASCADE CONSTRAINTS}


Exerccios:
1) Excluir a tabela CLIENTE.
DROP TABLE CLIENTE CASCADE CONSTRAINTS
2) Excluir a tabela PEDIDOVENDA.

16.7. Comando TRUNCATE TABLE


Remove todos os dados de uma tabela. Pode ser mais eficiente do que excluir e recriar uma
tabela, pois os objetos que dependem desta tabela, como ndices e restries tornam-se
invlidos, sendo necessrio recria-los. O comando no executado em tabelas que possuem
restries de integridade referencial. Para isso deve-se remover as restries antes de
executar o comando.

Gatec - Treinamento Oracle - 54

TRUNCATE TABLE {nome_tabela}


Exemplo:
TRUNCATE TABLE PRODUTO

16.8. Atribuio de Comentrios s Tabelas


O comando COMMENT permite adicionar comentrios a uma tabela e s colunas da tabela,
desde que se tenha tambm privilgio necessrio para isso. Os comentrios suportam at 255
caracteres para uma tabela ou coluna.
Para adicionar comentrio a uma tabela:

COMMENT ON TABLE {nome_tabela} IS {comentrio}


Para adicionar comentrio a uma coluna:

COMMENT ON COLUMN {nome_tabela}.{nome_coluna} IS


{comentrio}
Para visualizar o comentrio, selecione a coluna COMMENTS dos objetos ALL_COL_COMMENTS
ou USER_COL_COMMENTS.

SELECT COMMENTS FROM USER_COL_COMMENTS


WHERE TABLE_NAME = {nome_tabela}
Exemplo:
SQL> COMMENT ON COLUMN PEDIDOCOMPRA.NUM_PEDIDO IS 'CHAVE PRIMRIA';
Comment added
SQL> COMMENT ON COLUMN PEDIDOCOMPRA.COD_FORNECEDOR IS 'CHAVE ESTRANGEIRA';
Comment added
SQL> COMMENT ON COLUMN PEDIDOCOMPRA.COD_FUNCIONARIO IS 'CHAVE ESTRANGEIRA';
Comment added
SQL> SELECT COMMENTS
'PEDIDOCOMPRA';

FROM

USER_COL_COMMENTS

WHERE

TABLE_NAME

COMMENTS
-------------------------------------------------------------------------------CHAVE PRIMRIA
CHAVE ESTRANGEIRA
CHAVE ESTRANGEIRA
6 rows selected
SQL> SELECT * FROM USER_COL_COMMENTS WHERE TABLE_NAME = 'PEDIDOCOMPRA';
TABLE_NAME
COLUMN_NAME
COMMENTS
---------------------------------------------------------------------------------------------------PEDIDOCOMPRA
PEDIDOCOMPRA
NUM_PEDIDO
CHAVE PRIMRIA
PEDIDOCOMPRA
DT_ENTREGA

-----------------------------DT_PEDIDO

Gatec - Treinamento Oracle - 55

PEDIDOCOMPRA
PEDIDOCOMPRA
PEDIDOCOMPRA
6 rows selected

TOTAL
COD_FORNECEDOR
COD_FUNCIONARIO

CHAVE ESTRANGEIRA
CHAVE ESTRANGEIRA

Gatec - Treinamento Oracle - 56

17. Views
So representaes virtuais de uma ou mais tabelas ou mesmo outras Views. Uma View tem
todas as caractersticas de uma tabela, e pode ser vista como um tabela lgica baseada na
tabela original (fsica).
Pode ser utilizada como uma tabela normal na maioria dos casos, pois manipula os dados da
mesma forma.
Deve-se possuir privilgios necessrios para criao de Views.
As views podem ser simples, onde os dados so originados de uma nica tabela, ou
complexas, onde os dados so originados de vrias tabelas, funes, clculos e grupos de
dados.
TABELA:
COLUNA1 COLUNA2 COLUNA3 COLUNA4 COLUNA5 COLUNA6 COLUNA..
N
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
99
VIEW:
COLUNA3
99
99
99
99
99

COLUNA6
99
99
99
99
99

17.1. Criao e Utilizao


So muito teis, pois diversas representaes diferentes dos dados podem ser exibidas para
diferentes tipos de usurios. As views so muito utilizadas para:
-

Fornecer um nvel maior de segurana das tabelas, restringindo o acesso a


determinadas linhas e colunas;
Evitar consultas complexas, como por exemplo, uma consulta que utiliza vrias
tabelas com vrios tipos de joins. A view oculta tudo isso, permitindo recuperar
os dados de maneira convencional;
Apresentam os dados em diferentes perspectivas da que existe na tabela base.
Pode-se renomear colunas sem afetar a tabela original;
Executar queries que no poderiam ser executadas sem o seu uso;
Armazenar queries complexas.

A sintaxe bsica :

CREATE VIEW [OR REPLACE] {nome_view} AS


SELECT COLUNA1, COLUNA2 FROM TABELA
Gatec - Treinamento Oracle - 57

[WITH CHECK OPTION] [WITH READ ONLY]


17.1.1.

Clusula OR REPLACE

Utilizada para recriar uma View se ela j existir. Pode ser muito ltil por exemplo, se houver
mudanas na definio de uma view, utilizando OR REPLACE no ser necessrio excluir,
recriar e reconfigurar os privilgios para a view.

17.1.2.

Clusula WITH READ ONLY

Indica que a view no pode ser atualizada

17.1.3.

Clusula WITH CHECK OPTION

Se as linhas geradas no existirem na subquery , no permite alteraes na tabela. Ex.:

CREATE VIEW VIEW1 AS


SELECT COLUNA1, COLUNA2 FROM TABELA
WHERE COLUNA2 IN(10,20)
WITH CHECK OPTION
As seguintes queries retornam um erro:

INSERT INTO VIEW1(COLUNA1, COLUNA2) VALUES(1000, 30)


Valores da
COLUNA2 esto
fora da faixa
definida em
VIEW1

UPDATE VIEW1 SET COLUNA2 = 30


17.2. Problemas mais Comuns
Se uma tabela for removida ou tiver suas definies alteradas, e existir uma
View pertencente a ela, a View no ser removida, mas se tornar um objeto
invlido. A view poder ser utilizada novamente se a tabela for recriada, e
possuir os mesmos atributos sobre os quais a view foi criada;
A
subquery
no
pode
retornar
colunas
de
SEQUENCES(discutido
posteriormente);
Se a view for criada com uma subquery que retorna todas as colunas (*), e for
adicionada uma nova coluna para a tabela original mais tarde, a coluna no far
parte da view, at que esta seja recriada novamente atravs da clusula
CREATE OR REPLACE VIEW.

Exerccios:
1) Criar uma view que selecione os campos cdigo do local e endereo da
tabela LOCALARAMAZENAGEM, onde os cdigos da cidade sejam iguais a 1,
3 e 7.

Gatec - Treinamento Oracle - 58

CREATE VIEW LOCALVIEW AS SELECT COD_LOCAL, ENDERECO FROM


LOCALARMAZENAGEM WHERE COD_CIDADE IN (1,3,7) WITH CHECK OPTION

Gatec - Treinamento Oracle - 59

2) Criar uma view que selecione os nmeros, as datas e os totais dos pedidos
de compra, onde os cdigos do produto sejam iguais a 2, 4 e 6, usando as
tabelas PEDIDOCOMPRA e ITEM.

17.3. Comando ALTER VIEW


Como visto no item anterior, uma view se torna invlida se removermos ou alterarmos as
definies da tabela original. Este comando tem o objetivo de verificar a validade de uma view
e dos objetos que dependem dela, como outras views, por exemplo. Se a tabela for removida,
a view se torna invlida. Se a tabela tiver definies alteradas, o ALTER VIEW verifica possveis
erros, validando a view e os objetos depententes dela. As definies da view no so
alteradas. Definies s podem ser alteradas pelo comando CREATE OR REPLACE VIEW.
A sintaxe bsica :

ALTER VIEW {nome_view} COMPILE


Se o Oracle no retornar erros a View torna-se vlida, caso contrrio permanece invlida.

17.4. Comando DROP VIEW


Remove a view do banco de dados. Pode-se utilizar este comando para excluir uma view
invlida e depois recria-la com o CREATE VIEW. Se houver views dependentes da view que se
deseja excluir, elas no sero excludas, mas se tornaro invlidas.
A sintaxe bsica :

DROP VIEW {nome_view}


Exerccios:
1) Excluir a view LOCALVIEW, criada no exerccio 1 do item 17.1.
DROP VIEW LOCALVIEW
2) Excluir a view criada no exerccio 2 do item 17.1.

Gatec - Treinamento Oracle - 60

18. Sequences
O gerador de seqncias do Oracle utilizado para fornecer nmeros seqenciais. Muito
utilizado em ambientes multi-usurio para gerao de nmeros seqenciais nicos sem
sobrecarga de disco e bloqueio de transaes.
Os nmeros seqenciais definidos no Oracle so inteiros de at 38 dgitos. O Oracle armazena
as definies de todas as sequences em uma rea especial de sua estrutura, mas as definies
permanecem disponveis para todas as reas.

18.1. Criao e Utilizao


Deve-se possuir os privilgios necessrios para criao de sequences. Quanto uma sequence
gerada, ela incrementada, independente do tipo de transao. Um usurio nunca ir adquirir
um nmero de seqncia gerado por outro. Uma vez que um valor de sequence gerado por
um usurio, ele pode continuar acessando aquele nmero indepentente se a sequence
incrementada por um outro usurio.
Os nmeros seqenciais so gerados independentemente de tabelas, pois a mesma sequence
pode ser utilizada por uma ou mais tabelas.
Pode-se acessar valores de uma sequence atravs de sentenas SQL com a pseudo-coluna
CURRVAL, que retorna o valor atual da sequence, ou NEXTVAL, que incrementa a sequence e
retorna o novo valor.
A sintaxe bsica :

CREATE SEQUENCE {nome_sequence}


START WITH {valor}
INCREMENT BY {valor}
MAXVALUE 10000
MINVALUE 1
NOCYCLE
18.1.1.

Clusula INCREMENT BY

Determina o intervalo entre nmeros de seqncia. Pode ser inteiro positivo ou negativo,
mas no 0. Se a clusula no for informada, o valor de incremento default 1.

18.1.2.

Clusula START WITH

Determina o primeiro nmero de seqncia a ser gerado. Para sequences ascendentes, o


valor default o valor mnimo da seqncia. Para sequences descendentes, o valor default
o valor mximo.

18.1.3.

Clusula MAXVALUE e MINVALUE

Determina o valor mximo e mnimo respectivamente, que uma sequence pode gerar.
MAXVALUE deve ser maior ou igual a START WITH e MINVALUE.
MINVALUE deve ser menor ou igual a START WITH e MAXVALUE.
Gatec - Treinamento Oracle - 61

18.1.4.

Clusula NOMAXVALUE e NOMINVALUE

Default. Determina o valor mximo e mnimo para uma sequence suportado pelo Oracle.
Para NOMAXVALUE, o valor mximo de 10e27 para ascendente e 1 para descendente.
Para NOMINVALUE, o valor mnimo 1 para ascendente e 10e27 para descendente

18.1.5.

Clusula CYCLE e NOCYCLE

Determina se a sequence continua ou no a gerar valores depois de atingir o seu valor


mximo ou mnimo, respectivamente. Para CYCLE, inicia com valor mnimo quando atingir
o valor mximo, e com valor mximo quando atingir o valor mnimo. Para NOCYCLE, que
o Default, a sequence no pode gerar mais valores quando atingir o limite.
Obs.: Se uma sequence atingir o limite, a sentena SQL falha ao tentar retornar valores.

Exerccios:
1) Criar uma sequence para gerao dos nmeros de pedidos da tabela
PEDIDOCOMPRA.
CREATE SEQUENCE SEQ_PEDIDO
START WITH 1
INCREMENT BY 1
2) Criar uma sequence para gerao dos cdigos da cidade da tabela CIDADE.

Gatec - Treinamento Oracle - 62

19. ndices
So estruturas opcionais associadas com as tabelas, que aumentam a performance de acesso
a elas atravs de sentenas SQL. Os ndices no Oracle fornecem um caminho muito mais veloz
para o acesso aos dados de uma tabela. Nenhuma alterao em sentenas SQL necessria
pois afetam somente a velocidade de execuo. Quando utilizados corretamente so um dos
itens mais importantes para reduzir operaes de acesso fsico ao disco (I/O).

19.1. Criao e utilizao


Pode-se criar muitos ndices para uma tabela bem como uma combinao de diferentes
colunas para cada ndice. Pode-se criar mais do que um ndice utilizando a mesma coluna se
for especificado diferentes combinaes distintas das colunas.
Os ndices so independentes dos dados de uma tabela, ou seja, podem ser criados ou
removidos a qualquer momento sem afetar as tabelas ou outros ndices. Se um ndice for
removido, por exemplo, tudo continua funcionando normalmente, entretanto, o acesso aos
dados anteriormente indexados pode se tornar mais lento. Por serem independentes,
requerem espao para armazenamento.
O Oracle gerencia os ndices automaticamente, ou seja, em aes como insero, atualizao
e excluso de linhas permanecem transparentes para o usurio, no sendo necessria sua
interveno na manuteno dos ndices. A performance de recuperao de dados indexados
permanece quase constante, mesmo com operaes de insero de novas linhas.
Obs.: A performance de inseres, atualizaes e excluses podem ser comprometidas se
existirem muitos ndices em uma tabela.
A sintaxe bsica :

CREATE {opes} INDEX {nome_ndice} ON


{nome_tabela} ([COLUNA1], [COLUNA2],...[COLUNAn])
19.1.1.

ndices UNIQUE e NONUNIQUE

UNIQUE garantem que valores em uma coluna chave no sejam duplicados, nem nulos.
NONUNIQUE no impem restries para valores de colunas.
Recomenda-se que ndices UNIQUE sejam criados explicitamente, e no atravs de
constraints UNIQUE em uma tabela. Ex.:

CREATE UNIQUE INDEX ON TABELA (COLUNA1)


19.1.2.

ndices COMPOSITE

Tambm chamado de ndice concatenado, so ndices criados em vrias colunas em uma


tabela. As colunas neste tipo de ndice podem aparecer em qualquer ordem e no
necessrio estar adjacentes na tabela. ndices COMPOSITE podem aumentar a velocidade
de sentenas SELECT quando a clusula WHERE faz referncia a todas ou uma parte das
colunas do ndice concatenado. Entretanto, a ordem utilizada na definio importante,
pois geralmente as colunas mais comumente acessadas vm primeiro.

CREATE INDEX ON TABELA (COLUNA1, COLUNA2)

Gatec - Treinamento Oracle - 63

Exerccios:
1) Criar um ndice na tabela FUNCIONARIO para o campo cdigo do
departamento.
CREATE INDEX IND_FUNC ON FUNCIONARIO (COD_DEPARTAMENTO)
2) Criar um ndice concatenado na tabela PRODUTO para os campos descrio e
preo.
3) Criar um ndice concatenado na tabela PEDIDOCOMPRA para os campos data
e total do pedido.

19.2. Comando DROP INDEX


Remove ndices do banco de dados. O Oracle invalida todos os objetos dependentes da tabela
sobre a qual o ndice pertence. A sintaxe bsica :

DROP INDEX {nome_ndice}


Exerccios:
1) Excluir o ndice criado no exerccio 1 do item 19.1 na tabela FUNCIONARIO.
DROP INDEX IND_FUNC
2) Excluir o ndice criado no exerccio 3 do item 19.1 na tabela

19.3. Comando ALTER INDEX


Utilizado para modificar ou reconstruir um ndice existente. A sintaxe bsica :

ALTER INDEX {nome_ndice} {opes}


19.3.1.

Clusula DEALLOCATE UNUSED

Elimina espaos no utilizados no fim do ndice. Ex.:

ALTER INDEX INDICE1 DEALLOCATE UNUSED


19.3.2.

Clusula SHRINK

Compacta segmentos do ndice. Ex.:

ALTER INDEX INDICE1 SHRINK


19.3.3.

Clusula REBUILD

Recria um ndice existente. Ex:

ALTER INDEX INDICE1 REBUILD

Gatec - Treinamento Oracle - 64

Exemplo:
ALTER INDEX IND_PRD REBUILD

19.4. Gerao automtica de ndices para chaves primrias


Para as constraints de integridade UNIQUE KEY e PRIMARY KEY, o Oracle cria um ndice nico
na chave primria, assim que a constraint ativada. No necessrio, por exemplo, nenhum
tipo de sintaxe diferente para criao de ndices em sentenas CREATE TABLE ou ALTER
TABLE. Ex.:

CREATE TABLE TABELA1


(COLUNA1 NUMBER(2) PRIMARY KEY, COLUNA2 VARCHAR2(20))
O ndice criado
automaticamente
aqui

Gatec - Treinamento Oracle - 65

20. Sinnimos
So uma espcie de Alias (apelido) para tabelas e outros objetos.
Os sinnimos so muito utilizados principalmente por questes de segurana e convenincia:
-

Facilitam o acesso a uma tabela, eliminando a utilizao do proprietrio. (Ver


exemplo);
Simplificam sentenas SQL para usurios do banco de dados;
Ocultam a identidade de uma tabela;

20.1. Criao e utilizao


Sinnimos podem ser PUBLIC ou PRIVATE.
Sinnimos PUBLIC so criados somente pelo DBA, e podem ser acessados por todos os
usurios. No se pode criar outros objetos no banco de dados com o mesmo nome dos
sinnimos.
Sinnimos PRIVATE so criados por um usurio qualquer, que e ser vlido somente para este.
Uma das vantagens de um sinnimo que se, por exemplo, for necessrio renomear ou mover
uma tabela, somente o sinnimo precisar ser redefinido. Aplicaes baseadas em sinnimos
continuam a funcionar sem modificaes. A sintaxe bsica :

CREATE {opes} SYNONYM {nome_qualquer} FOR {usurio}.


{nome_tabela}
Ex.: Assumindo-se que TABELA_DE_DADOS pertence ao usurio USER1:

CREATE PUBLIC SYNONYM TABELA1 FOR USER1.TABELA_DE_DADOS


Tabela Original
Pertencente a USER
1
Agora podemos utilizar uma query mais simplificada para acessar os dados:

SELECT * FROM TABELA1

Sinnimo TABELA1

Gatec - Treinamento Oracle - 66

Exerccios:
1) Criar um sinnimo para a tabela FUNCIONARIO pertencente ao usurio
TREINAMENTO.
SQL>
CREATE
PUBLIC
TREINAMENTO.FUNCIONARIO;

SYNONYM

FUNCIONARIO

FOR

Synonym created
SQL> CONNECT TESTE/SENHA@BANCO
Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as TESTE
SQL> SELECT COD_FUNCIONARIO, NOME FROM FUNCIONARIO;
SELECT COD_FUNCIONARIO, NOME FROM FUNCIONARIO
ORA-00942: table or view does not exist
SQL> CONNECT TREINAMENTO/SENHA@BANCO
Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as TREINAMENTO
SQL> GRANT SELECT ON FUNCIONARIO TO TESTE;
Grant succeeded
SQL> CONNECT TESTE/SENHA@BANCO
Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as TESTE
SQL> SELECT COD_FUNCIONARIO, NOME FROM FUNCIONARIO;
COD_FUNCIONARIO
NOME
------------------------- ---------------------------------------1
JOSE MANOEL DA SILVA
3
PEDRO DA SILVA
4
MANOEL TAVARES
5
JOAO DOS SANTOS
6
BENEDITO CRISPIM
7
JOSE MARIA
2
JOAQUIM PASCOAL
8
JOAO PEDRO
9
PEDRO ANTONIO
10
ANTONIO MOURA
11
PASCOAL TAVARES
11 rows selected
2) Criar um sinnimo
TREINAMENTO

para

tabela

CIDADE

pertencente

ao

usurio

Gatec - Treinamento Oracle - 67

20.2. Comando DROP SYNONYM


Remove o sinnimo do banco de dados. Para remover sinnimos pblicos deve-se especificar a
opo PUBLIC. Deve-se possuir direitos necessrios para remover estes sinnimos.
A sintaxe bsica :

DROP {opes} SYNONYM {nome_sinnimo}


No se pode remover sinnimos com tabelas relacionadas a ele. Para isso, deve-se especificar
a clusula FORCE. Ex.: Assumindo-se que TABELA1 um sinnimo.

DROP PUBLIC SYNONYM TABELA1 FORCE


Exerccios:
1) Excluir o sinnimo criado para a tabela FUNCIONARIO no exerccio 1 do item
20.1.
DROP PUBLIC SYNONYM FUNCIONARIO FORCE
2) Excluir o sinnimo criado para a tabela FUNCIONARIO no exerccio 2 do item
20.1.

20.3. Sinnimos para Procedures


Se um sinnimo para procedures for criado em um banco de dados remoto, deve-se especificar
o usurio pertencente quele banco de dados na sentena CREATE. Pode-se tambm criar um
sinnimo pblico local no banco de dados remoto, entretanto, DATABASE LINK (discutido
posteriormente) deve ser includo em todas as chamadas procedure.

Gatec - Treinamento Oracle - 68

21. Database Links


So ponteiros que definem uma rota nica de comunicao de um servidor de banco de dados
Oracle com outros servidores de banco de dados, que podem ser inclusive de outros
fabricantes.
Por se tratar de rota nica, no possvel o acesso inverso, ou seja, do banco de dados remoto
para o banco de dados local, a menos que haja um DATABASE LINK para o servidor remoto,
permanecendo assim o mesmo conceito original de DATABASE LINKS, porm sob uma tica
inversa. Ex.:
DATABASE LINK:
Conexo
Unidirecional
Usurio

Usurio

Ban
co
de
dad
os
Loc
al

Ban
co
de
dad
os
Re
mot
o
No possvel uma
conexo inversa
utilizando o mesmo
DATABASE LINK

A seguir uma tabela com os tipos de link:


Tipo de Link
Usurio
Conectado
Usurio Fixo
Usurio Atual

Descrio
O usurio deve possuir uma conta no banco de dados remoto com o
mesmo nome e senha do banco de dados local
O usurio se conecta utilizando um usurio e senha fixos
referenciados pelo link
O usurio local se conecta como um usurio global no contexto de
uma procedure, por exemplo, sem armazenar a senha do usurio
global em uma definio de link

21.1. Criao e utilizao


Um DATABASE LINK permite que usurios locais acessem dados em banco de dados remotos.
Para acessa-lo, o usurio deve estar conectado ao banco de dados local que contm a
informao para o link.
DATABASE LINKS podem ser pblicos, onde todos os usurios possuem acesso, ou privados
onde somente o usurio que criou o link possui o acesso.
Gatec - Treinamento Oracle - 69

A sintaxe bsica :

CREATE {opes} DATABASE LINK {nome_link}


CONNECT TO {usuario}
IDENTIFIED BY {senha}
USING {banco_de_dados_remoto}
Ex.: Assumindo um banco de dados remoto de nome BANCO1 com uma tabela TABELA1:

CREATE PUBLIC DATABASE LINK BANCO_TESTE


CONNECT TO USER1
IDENTIFIED BY SENHA1
USING BANCO1
Para acessarmos uma tabela, com uma query, temos:

SELECT * FROM TABELA1@BANCO_TESTE


Exemplo:
Acessar os dados da tabela FUNCIONARIO em outro servidor ORACLE.
SQL> SELECT * FROM FUNCIONARIO;
SELECT * FROM FUNCIONARIO
ORA-00942: table or view does not exist
SQL> CREATE DATABASE LINK BANCOTREINAMENTO
2 CONNECT TO TREINAMENTO
3 IDENTIFIED BY TREINAMENTO
4 USING 'BANCO2';
Database link created
SQL>SELECT * FROM FUNCIONARIO@BANCOTREINAMENTO;
CODIGO NOME
CARGO
SALARIO
------ ---------------------------------------- -------------------- -----------1 Andre de Souza
Gerente
1000,00
1 Pedro Antunes
Aux. Escritrio
240,00

21.2. Viso Geral sobre Banco de Dados Distribudos


Sistemas de banco de dados distribudos permitem acessar dados de servidores locais e
remotos, utilizando uma arquitetura cliente/servidor para o processamento de informaes.
Estes sistemas podem ser de 2 tipos: homogneos e heterogneos.

Gatec - Treinamento Oracle - 70

21.2.1.

Sistemas homogneos

Sistemas de dois ou mais bancos de dados Oracle que residem em um ou mais servidores.
Uma aplicao pode acessar dados simultaneamente em vrios bancos de dados em um
nico ambiente distribudo, ou seja, informaes de uma tabela em um banco de dados
podem ser unidas com informaes de outro banco de dados em outro local produzindo um
resultado nico e coerente.

21.2.2.

Sistemas heterogneos

Pelo menos um dos bancos de dados no Oracle. Para a aplicao, estes sistemas so
vistos como um banco de dados Oracle local nico. O servidor de banco de dados Oracle
oculta a distribuio e heterogeneidade dos dados, e utiliza ferramentas especiais para
acesso a sistemas de bancos de dados diferentes.

Gatec - Treinamento Oracle - 71

22. Privilgios
So utilizados para controlar o acesso de usurios aos dados em sentenas SQL.
Os privilgios e regras so atribudos por usurios que foram atribudos por outros usurios e
assim sucessivamente. A atribuio de regras e privlgios inicia-se no nvel de Administrador.
Na criao do banco de dados, o usurio administrativo SYS criado e todos os privilgios e
regras predefinidos no Oracle so atribudos a ele. O usurio SYS pode ento atribuir
privilgios e regras para outros usurios, alm de atribuir direitos para usurios especficos
poderem atribuir privilgios e regras para os demais usurios.

22.1. Tipos de privilgios


22.1.1.

System privilege

Permitem que os usurios realizem operaes especficas de banco de dados. Geralmente


so atribudos somente por administradores.

22.1.2.

Object privilege

Controlam o acesso a um objeto especfico, como tabelas, views, etc.

22.1.3.

Roles

Uma coleo de privilgios e outras regras que juntas facilitam a atribuio de vrios
privilgios e regras para os usurios.

22.2. Comando GRANT


Utiliza-se o comando GRANT atribuir:
-

Privilgios de sistema para usurios e regras;


Regras para usurios e regras. Privilgios e regras podem ser do tipo local,
global ou externo;
Privilgios para manipulao de objetos particulares de usurios e operaes
que eles executam. Ex.: Privilgios para criar tabelas, e privilgios para inserir
dados em tabelas;

Para executar o comando GRANT tambm deve-se possuir privilgios necessrios.


A sintaxe bsica :
Para usurios ou regras:

GRANT {privilegio ou regra} TO {usurio ou regra} [PUBLIC]


Para objetos:

GRANT {privilegio} ON {objeto} TO {usurio} [PUBLIC]

Gatec - Treinamento Oracle - 72

Exerccios:
1) Criar um privilgio para o usurio TESTE, liberando o acesso de consulta a
tabela PRODUTO pertencente ao usurio TREINAMENTO.
SQL> CONNECT TREINAMENTOSENHA@BANCO
Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as TREINAMENTO
SQL> GRANT SELECT ON PRODUTO TO TESTE;
Grant succeeded
SQL> CONNECT TESTE/SENHA@BANCO
Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as TESTE
SQL> SELECT COD_PROD, DESCRICAO FROM TREINAMENTO.PRODUTO;
COD_PROD
--------------1
2
3
4
5
6
7

DESCRICAO
---------------------------------------CANETA ESFEROGRAFICA
ARTEFATO DE METAL
ARTEFATO DE MADEIRA
OBJETO DE PLASTICO
CINZEIRO
FOLHAS A4
CARTUCHO HP

7 rows selected
2) Criar um privilgio para o usurio TESTE, liberando o acesso de consulta a
tabela FORNECEDOR pertencente ao usurio TREINAMENTO.

22.3. Comando REVOKE


Utilizado para retirar os privilgios e regras atribudos. Deve-se possuir os privilgios
necessrios para utilizao do comando.
O comando s retira os privilgios e regras que foram previamente atribudos com o comando
REVOKE. Regras ou privilgios de objeto atribudos pelo sistema operacional, e privilgios ou
regras atribudos para retirar regras no podem ser utilizados com REVOKE.
Para usurios ou regras:

REVOKE {privilgio ou regra} FROM {usurio ou regra}


Para objetos:

REVOKE {privilgio ou regra} on {objeto} FROM {usurio ou regra}

Gatec - Treinamento Oracle - 73

Exerccios:
1) Retirar o privilgio do usurio TESTE de consulta da tabela PRODUTO
pertencente ao usurio TREINAMENTO.
SQL> REVOKE SELECT ON PRODUTO FROM TESTE;
Revoke succeeded
2) Retirar o privilgio do usurio TESTE de consulta da tabela FORNECEDOR
pertencente ao usurio TREINAMENTO.

22.4. Opes WITH GRANT e WITH ADMIN


Estas opes fazem parte do comando GRANT.
A clusula WITH ADMIN permite:
- Atribuir regras para outro usurio ou regra, a menos que a regra seja global;
- Retirar de um outro usurio ou regra;
- Alterar regras para mudar as configuraes de acesso;
- Remover as regras;
Se a opo WITH ADMIN for omitida na atribuio de um privilgio de sistema ou regra para
um usurio, mas for atribudo mais tarde, o usurio ter a ADMIN OPTION no privilgio ou
regra.
Para retirar esta opo, deve-se retirar completamente os privilgios ou regras e ento atribuir
o privilgio ou regra para o usurio sem esta opo.
A opo WITH GRANT permite que se atribua privilgios de objeto para outros usurios e
regras.

22.5. Opo PUBLIC


Permite atribuir privilgios para todos os usurios.

22.6. Privilgios e segurana


22.6.1.

A importncia de uma poltica de segurana

muito importante desenvolver polticas de segurana para todo banco de dados. Polticas
de segurana estabelecem mtodos para proteo de seu banco de dados contra
destruio de dados acidental ou maliciosa ou danos na infra-estrutura do banco de dados.
Cada banco de dados deve ter um administrador, que responsvel por implementar e dar
manuteno na poltica de segurana do banco de dados.

22.6.2.

Gerenciamento de usurios e recursos

Para se conectar a um banco de dados, cada usurio deve possuir uma conta com
informaes sobre o mesmo, como:
- Nome do usurio;
- Mtodos de autenticao;
- Espao em disco necessrio;
- Perfis de usurio;
Gatec - Treinamento Oracle - 74

23. Operadores de Conjunto


Combinam o resultado dos componentes de duas queries em um nico resultado. Queries que
contm operadores de conjunto so chamadas de queries compostas.

23.1. Concatenando Resultados de Queries


Pode-se combinas mltiplas queries utilizando os operadores de conjunto UNION, UNION ALL,
INTERSECT e MINUS. Se uma sentena SQL contm vrios operadores, o Oracle analisa-os da
esquerda para a direita a menos que outra ordem seja especificada atravs de parnteses.
O nmero de expresses correspondentes em uma query composta deve ser igual. Tambm
devem estar na mesma ordem e possuir o mesmo tipo de dados.

23.2. Operadores UNION, MINUS e INTERSECT


23.2.1.

UNION

Elimina linhas duplicadas. UNION ALL retorna todas as linhas, mesmo duplicadas. Ex.:
SELECT COLUNA1, COLUNA2 FROM TABELA1
UNION
SELECT OUTRA1, OUTRA2 FROM TABELA2

23.2.2.

MINUS

Retorna somente as linhas presentes na primeira query desde que no existam na


segunda.

23.2.3.

INTERSECT

Retorna somente as linhas comuns nas duas queries. Recomenda-se utilizar parnteses em
queries que utilizam outros tipos de operadores.

Exemplos:
1) Combinar os resultados das queries que selecionam os campos cdigo do
produto, descrio e preo das tabelas PRODUTO e PRODUTO_OFERTA,
eliminando as linhas duplicadas.
SQL> SELECT COD_PROD, DESCRICAO, PRECO FROM PRODUTO;
COD_PROD
-------------1
2
3
4
5
6
7

DESCRICAO
PRECO
---------------------------------------- -------------CANETA ESFEROGRAFICA
3,99
ARTEFATO DE METAL
8,50
ARTEFATO DE MADEIRA
2,89
OBJETO DE PLASTICO
3,55
CINZEIRO
2,55
FOLHAS A4
2,89
CARTUCHO HP
120,00

7 rows selected

Gatec - Treinamento Oracle - 75

SQL> SELECT COD_PROD, DESCRICAO, PRECO FROM PRODUTO_OFERTA;


COD_PROD
--------------1
3
7
8
9

DESCRICAO
PRECO
---------------------------------------- -------------CANETA ESFEROGRAFICA
3,99
ARTEFATO DE MADEIRA
2,89
CARTUCHO HP
120,00
SLFITE 500 FOLHAS
5,89
SULFITE 100 FOLHAS
2,29

SQL> SELECT COD_PROD, DESCRICAO, PRECO FROM PRODUTO


2 UNION
3 SELECT COD_PROD, DESCRICAO, PRECO FROM PRODUTO_OFERTA;
COD_PROD
-------------1
2
3
4
5
6
7
8
9

DESCRICAO
PRECO
---------------------------------------- ---------CANETA ESFEROGRAFICA
3,99
ARTEFATO DE METAL
8,50
ARTEFATO DE MADEIRA
2,89
OBJETO DE PLASTICO
3,55
CINZEIRO
2,55
FOLHAS A4
2,89
CARTUCHO HP
120,00
SULFITE 500 FOLHAS
5,89
SULFITE 100 FOLHAS
2,29

2) Combinar os resultados das queries que selecionam os campos cdigo do


produto, descrio e preo das tabelas PRODUTO e PRODUTO_OFERTA,
retornando apenas os produtos existentes na tabela PRODUTO e no
existentes na tabela PRODUTO_OFERTA.
SQL> SELECT COD_PROD, DESCRICAO, PRECO FROM PRODUTO
2 MINUS
3 SELECT COD_PROD, DESCRICAO, PRECO FROM PRODUTO_OFERTA;
COD_PROD
-------------2
4
5
6

DESCRICAO
PRECO
---------------------------------------- ---------ARTEFATO DE METAL
8,50
OBJETO DE PLASTICO
3,55
CINZEIRO
2,55
FOLHAS A4
2,89

3) Combinar os resultados das queries que selecionam os campos cdigo do


produto, descrio e preo das tabelas PRODUTO e PRODUTO_OFERTA,
retornando apenas os produtos existentes nas duas tabelas.
SQL> SELECT COD_PROD, DESCRICAO, PRECO FROM PRODUTO
2 INTERSECT
3 SELECT COD_PROD, DESCRICAO, PRECO FROM PRODUTO_OFERTA;
COD_PROD
-------------1
3
7

DESCRICAO
PRECO
---------------------------------------- ---------CANETA ESFEROGRAFICA
3,99
ARTEFATO DE MADEIRA
2,89
CARTUCHO HP
120,00

Gatec - Treinamento Oracle - 76

23.3. Restries e requisitos


Algumas regras devem ser seguidas para utilizao dos operadores de conjunto, que so:
-

O tipo de dados LONG no vlido para utilizao com estes operadores;


Se o primeiro SELECT contm expresses, deve-se informar um Alias de coluna,
caso se utilizar a clusula ORDER BY.
A clusula ORDER BY no pode ser utilizada nas queries componentes;

Gatec - Treinamento Oracle - 77

24. Queries Hierrquicas


Se uma tabela contm dados hierrquicos, pode-se selecionar dados em uma ordem
hierrquica.

24.1. Solues para representao


Em uma situao onde temos nveis de hierarquia em uma empresa, analisando as posies
dos cargos, temos um exemplo tpico:
Diretor
Presidente

Diretor
Financeiro

Gerente
Financeiro

Diretor
Industrial

Gerente
Contas

Em uma tabela que armazena informaes de funcionrios por exemplo, podemos representar
esta hierarquia atravs de uma query hierrquica, mesmo se os funcionrios faam parte da
mesma tabela, no sendo necessrio portanto utilizao de mais de uma tabela.
Generalizando o exemplo, em uma tabela pode ocorrer uma referncia a ela mesma.

24.2. Pesquisas em estruturxas hierrquicas


24.2.1.

Clusula START WITH

Define a linha raiz da hierarquia.

24.2.2.

Clusula CONNECT BY

Define o relacionamento entre as linhas pais e filhas da hierarquia.

24.2.3.

Clusula PRIOR

Operador utilizado para fazer referncia linha pai. Ele analisa as expresses da linha pai
para a linha atual, sendo mais utilizado como um recurso de comparao de valores. PRIOR
instrui o Oracle a utilizar o valor da linha pai na coluna.

Gatec - Treinamento Oracle - 78

24.2.4.

Clusula NOCYCLE

Instrui o Oracle a retornar as linhas de uma query mesmo se existir um loop CONNECT BY
nos dados. Loops ocorrem quando linhas pais podem ser filhas ao mesmo tempo. Deve ser
utilizado com a pseudo-coluna CONNECT_BY_ISCYCLE

24.2.5.

Clusula CONNECT_BY_ISCYCLE

Pseudo-coluna que retorna 1 se a linha atual possui uma linha filha, caso contrrio retorna
0.

24.2.6.

Clusula CONNECT_BY_ROOT

Extende a funcionalidade da condio CONNECT BY PRIOR retornando no somente as


linhas pais imediatas mas todas as linhas ancestrais na hierarquia.

24.2.7.

Clusula LEVEL

LEVEL uma pseudo-coluna onde para cada linha retornada por uma query hierrquica,
retorna 1 para a linha raiz, 2 para a linha filha da raiz, e assim sucessivamente.

Exemplo Geral:
Gatec - Treinamento Oracle - 79

SELECT COD_FUNCIONARIO, NOME, LEVEL as NIVEL, CARGO,


COD_GERENTE FROM FUNCIONARIO
START WITH COD_FUNCIONARIO=1
CONNECT BY PRIOR COD_FUNCIONARIO=COD_GERENTE

Funcionar
io
1
3
4
5
2
6
7
8
10
11
9

Nome
JOSE MANOEL
PEDRO DA SILVA
MANOEL TAVARES
JOAO DOS SANTOS
JOAQUIM PASCOAL
BENEDITO CRISPIM
JOSE MARIA
JOAO PEDRO
ANTONIO MOURA
PASCOAL TAVARES
PEDRO ANTONIO

Nive
l
1
2
3
4
4
3
3
2
3
3
2

Cargo

Gerent
e
DIRETOR
NULL
GERENTE
1
ALMOXAR.
3
AUX ALMOX 4
AUX ALMOX 4
AUX ADM
3
AUX ADM
3
GERENTE
1
AUX ADM
8
AUX ADM
8
GERENTE
1

1 JOSE MANOEL
3 PEDRO DA SILVA
4 MANOEL TAVARES
6
BENEDITO
CRISPIM
8 JOAO PEDRO .........

Gatec - Treinamento Oracle - 80

DIAGRAMA DE BASE DE DADOS

LocalArmazenagem
Cod_local
Endereco
cod_cidade (FK)

Estoque
Cod_Prod (FK)
Cod_local (FK)
est_maximo
est_minimo
dt_ultcompra
est_atual

Produto
Cod_Prod
Descricao
Preco
UnidadeCompra
UnidadeVenda

Cidade

Fornecedor

cod_cidade

Cod_Fornecedor

Municipio
CEP
Estado

Nome
Endereco
cod_cidade (FK)

PedidoCompra
Num_Pedido
dt_pedido
dt_entrega
Total
Cod_Fornecedor (FK)
cod_funcionario (FK)

Funcionario
cod_funcionario
Nome
dt_admissao
salario
cargo
cod_gerente
comissao
cod_departamento (FK)

Item
Num_Pedido (FK)
seq_item
quantidade
precocompra
UnidadeCompra
Cod_Prod (FK)

Departamento
cod_departamento
descricao

Gatec - Treinamento Oracle - 81

25. Respostas dos Exerccios


25.1. Resposta do Item 5.2
2) SELECT * FROM DEPARTAMENTO
3) SELECT NOME, ENDERECO FROM FORNECEDOR

25.2. Resposta do Item 5.3


2) SELECT MUNICIPIO, INITCAP(MUNICIPIO) FROM CIDADE
3) SELECT COD_PROD, DESCRICAO, PRECO, PRECO*2 FROM PRODUTO

25.3. Resposta do Item 5.4


2) SELECT NUM_PEDIDO PEDIDO, (DT_ENTREGA-DT_PEDIDO) PRAZO FROM PEDIDOCOMPRA
3) SELECT NUM_PEDIDO PEDIDO, 5% PERCENT, (TOTAL*0.05) FRETE, (TOTAL +
(TOTAL*0.05))
TOTAL FROM PEDIDOCOMPRA

25.4. Resposta do Item 6.2


2) SELECT * FROM LOCALARMAZENAGEM
WHERE COD_LOCAL IN (1,3,7) ORDER BY ENDERECO
3) SELECT COD_PROD, EST_ATUAL FROM ESTOQUE
WHERE NOT (COD_LOCAL = 100) AND DT_ULTCOMPRA BETWEEN
TO_DATE(20/09/2003, DD/MM/YYYY) AND TO_DATE(20/12/2003, DD/MM/YYYY)
ORDER BY COD_PROD DESC

25.5. Resposta do Item 7.2.1


2) SELECT COD_PROD, DESCRICAO, CEIL(PRECO) FROM PRODUTO
3) SELECT NOME, DT_ADMISSAO, TRUNC(SALARIO) , COMISSAO FROM FUNCIONARIO
WHERE SALARIO > 2000

25.6. Resposta do Item 7.2.2


2) SELECT COD_DEPARTAMENTO, RTRIM(DESCRICAO) FROM DEPARTAMENTO
3) SELECT COD_FORNECEDOR, UPPER(NOME), UPPER(ENDERECO) FROM FORNECEDOR

Gatec - Treinamento Oracle - 82

25.7. Resposta do Item 7.2.3


2) SELECT NUM_PEDIDO, DT_PEDIDO, ADD_MONTHS(DT_ENTREGA,1) , TOTAL
FROM PEDIDOCOMPRA WHERE COD_FORNECEDOR = 1
ORDER BY DT_PEDIDO DESC
3) SELECT COD_FUNCIONARIO, NOME, TO_DATE(DT_ADMISSAO,DD/MM/YYYY)
FROM FUNCIONARIO
ORDER BY NOME

25.8. Respostas do Item 9.2.


2) SELECT COUNT(NUM_PEDIDO) AS TOTAL, DT_PEDIDO FROM PEDIDOCOMPRA
GROUP BY DT_PEDIDO
ORDER BY DT_PEDIDO DESC
3) SELECT COUNT(COD_FORNECEDOR) AS TOTAL, COD_CIDADE
FROM FORNECEDOR
GROUP BY COD_CIDADE
ORDER BY COD_CIDADE

25.9. Respostas do Item 9.3


2) SELECT COUNT(COD_PROD) AS TOTAL, DT_ULTCOMPRA
FROM ESTOQUE
HAVING DT_ULTCOMPRA BETWEEN TO_DATE('25/01/2004', 'DD/MM/YYYY') AND
TO_DATE('25/03/2004', 'DD/MM/YYYY')
GROUP BY DT_ULTCOMPRA
ORDER BY DT_ULTCOMPRA DESC
3) SELECT COUNT(NUM_PEDIDO) AS TOTALPEDIDO, AVG(TOTAL) AS TOTAL, DT_PEDIDO
FROM PEDIDOCOMPRA
HAVING DT_PEDIDO BETWEEN TO_DATE('25/01/2004', 'DD/MM/YYYY') AND
TO_DATE('10/03/2004', 'DD/MM/YYYY')
GROUP BY DT_PEDIDO

25.10.

Respostas do Item 10

2) SELECT * FROM PEDIDOCOMPRA WHERE NOT EXISTS(SELECT * FROM ITEM WHERE


PEDIDOCOMPRA.NUM_PEDIDO = ITEM.NUM_PEDIDO)
3) SELECT * FROM FUNCIONARIO WHERE EXISTS (SELECT * FROM DEPARTAMENTO
WHERE FUNCIONARIO.COD_DEPARTAMENTO = DEPARTAMENTO.COD_DEPARTAMENTO)

25.11.

Respostas do Item 11

2) INSERT INTO CIDADE(COD_CIDADE,MUNICIPIO,CEP,ESTADO)


VALUES(8,'FLORIANOPOLIS',43300000,'SC')

Gatec - Treinamento Oracle - 83

3) INSERT INTO DEPARTAMENTO(COD_DEPARTAMENTO,DESCRICAO)


VALUES(6,'INFORMTICA')

25.12.

Respostas do Item 12

2) UPDATE LOCALARMAZENAGEM SET ENDERECO = 'RUA SO JOS, 152' WHERE


COD_LOCAL = 5
3) UPDATE ESTOQUE SET DT_ULTCOMPRA = TO_DATE('25/03/2004','DD/MM/YYYY') WHERE
COD_LOCAL = 1

25.13.

Respostas do Item 13

2) DELETE FROM LOCALARMAZENAGEM WHERE COD_CIDADE IN (SELECT COD_CIDADE


FROM CIDADE
WHERE ESTADO = 'SC')
3) DELETE FROM FUNCIONARIO WHERE COD_DEPARTAMENTO = 10

25.14.

Respostas do Item 16.2

2) CREATE TABLE PEDIDOVENDA(NUM_PEDIDO NUMBER(6), COD_CLIENTE NUMBER(2),


DT_PEDIDO DATE, TOTAL NUMBER(12,2))

25.15.

Respostas do Item 16.3

2) CREATE TABLE PEDIDOVENDA(NUM_PEDIDO NUMBER(6) PRIMARY KEY,


COD_CLIENTE NUMBER(2), DT_PEDIDO DATE, TOTAL NUMBER(12,2) NOT NULL,
CONSTRAINT FK_CLIENTE FOREIGN KEY (COD_CLIENTE) references CLIENTE
(COD_CLIENTE))

25.16.

Respostas do Item 16.5.1

2) ALTER TABLE CLIENTE ADD COD_CIDADE NUMBER(6)


ADD CONSTRAINT FK_CIDADE FOREIGN KEY(COD_CIDADE) REFERENCES
CIDADE(COD_CIDADE)

25.17.

Respostas do Item 16.5.2

2) ALTER TABLE PEDIDOVENDA MODIFY (TOTAL NUMERIC(16,2))

25.18.

Respostas do Item 16.5.3

2) ALTER TABLE CLIENTE DROP COLUMN COD_CIDADE CASCADE CONSTRAINTS

25.19.

Respostas do Item 16.6


Gatec - Treinamento Oracle - 84

2) DROP TABLE PEDIDOVENDA

25.20.

Respostas do Item 17.1

2) CREATE VIEW COMPRAVIEW AS SELECT A.NUM_PEDIDO, A.DT_PEDIDO, A.TOTAL


FROM PEDIDOCOMPRA A, ITEM B WHERE A.NUM_PEDIDO = B.NUM_PEDIDO AND
B.COD_PROD IN (2,4,6) WITH CHECK OPTION

25.21.

Respostas do Item 17.3

2) DROP VIEW PEDIDOVIEW

25.22.

Respostas do Item 18

2) CREATE SEQUENCE SEQ_CIDADE


START WITH 1
INCREMENT BY 1
MAXVALUE 10000

25.23.

Respostas do Item 19.1

2) CREATE INDEX IND_PRD ON PRODUTO (DESCRICAO, PRECO)


3) CREATE INDEX IND_PED ON PEDIDOCOMPRA (DT_PEDIDO, TOTAL)

25.24.

Respostas do Item 19.2

2) DROP INDEX IND_PED

25.25.

Respostas do Item 20.1

2) CREATE PUBLIC SYNONYM CIDADE FOR TREINAMENTO.CIDADE

25.26.

Respostas do Item 20.2

2) DROP PUBLIC SYNONYM CIDADE FORCE

25.27.

Respostas do Item 22.2

2) SQL> CONNECT TREINAMENTO/SENHA@BANCO


Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as TREINAMENTO
SQL> GRANT SELECT ON FORNECEDOR TO TESTE;
Grant succeeded

Gatec - Treinamento Oracle - 85

SQL> CONNECT TESTE/SENHA@BANCO


Connected to Oracle9i Enterprise Edition Release 9.2.0.1.0
Connected as TESTE
SQL> SELECT COD_FORNECEDOR, NOME FROM TREINAMENTO.FORNECEDOR ORDER BY
COD_FORNECEDOR;
COD_FORNECEDOR NOME
------------------------ ---------------------------------------1
SP COMERCIO E INDUSTRIA LTDA
2
KALUNGA COM INDUSTRIA
3
GATEC STI
4
NORTESUL PRODUTOS
5
ELEKTRO COMP ENERG
6
NAISCEU IND E COMERCIO
7
IBM DO BRASIL
8
PAO DE ACUCAR IND E ASSOCIADOS
9
GATEC - SOLUES EM TI
9 rows selected

25.28.

Respostas do Item 22.3

2) SQL> REVOKE SELECT ON FORNECEDOR FROM TESTE;


Revoke succeeded

Gatec - Treinamento Oracle - 86

Você também pode gostar