Documente Academic
Documente Profesional
Documente Cultură
1. INTRODUO...........................................................................................6
1.1. BANCO DE DADOS........................................................................................................... 6
1.2. BANCO ORACLE............................................................................................................. 7
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.1. LIMITAES.............................................................................................................. 40
11.2. UTILIZAO DO COMANDO SELECT......................................................................................40
COM SUBQUERIES............................................................................................44
E SAVEPOINT......................................................................47
15.1.1. COMMIT..............................................................................................................................................47
15.1.2. ROLLBACK...........................................................................................................................................47
15.1.3. SAVEPOINT..........................................................................................................................................47
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
20. SINNIMOS...........................................................................................66
20.1. CRIAO E UTILIZAO................................................................................................... 66
20.2. COMANDO DROP SYNONYM............................................................................................ 68
20.3. SINNIMOS PARA PROCEDURES...........................................................................................68
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
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
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
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
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.
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.
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.
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.
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.
Fig. 2
Podemos utilizar tambm o caracter (*) conforme especificado acima (fig 3)
SELECT * FROM EMP
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
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
Fig. 5
Utilizando uma funo para manipulao de texto : (fig 6)
SELECT N_EMP, NOME_EMP, INITCAP(NOME_EMP) FROM EMP
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.
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.
6. Seleo e Ordenao
6.1.
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.:
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.:
Fig. 9
DESC:
Ordena
o
decresce
nte
Fig. 10
6.2.
=
<>
<
>
>=
<=
ANY
SOME
ALL
BETWEE
N
IS NULL
IN
NOT IN
LIKE
EXISTS
Comparao
Igual
Exemplo
SELECT * FROM EMP WHERE N_EMP = 110
Diferente
Menor
Maior
Maior ou igual
Menor ou igual
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)
Tab. 1
Lgicos
Negao
Fig. 11
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
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.
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
7.2.
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.
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
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.
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.
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.
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
8. Joins
8.1.
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 :
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)...
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
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
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
002
8.3.
002
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.
Coluna presente
somente na Tabela1,
no necessita de Alias
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.
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
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:
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:
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 :
Conjunto de
resultados do
primeiro Outer Join
Apontando para o
conjunto de
resultados do
primeiro Outer Join
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)
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.
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
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
10.
SubQueries
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.:
SubQuery
Inline View
Alias para
a Subquery
Nested subqueries
10.1.3.
Subqueries Co-Relacionadas
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.
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
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
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.
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);
15.1.1.
COMMIT
15.1.2.
ROLLBACK
15.1.3.
SAVEPOINT
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
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 :
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;
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))
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:
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
16.5.2.
Clusula MODIFY
16.5.3.
Clusula DROP
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
PEDIDOCOMPRA
PEDIDOCOMPRA
PEDIDOCOMPRA
6 rows selected
TOTAL
COD_FORNECEDOR
COD_FUNCIONARIO
CHAVE ESTRANGEIRA
CHAVE ESTRANGEIRA
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
A sintaxe bsica :
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.
17.1.3.
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.
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.
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.
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.
18.1.3.
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.
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.
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.
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).
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.:
ndices COMPOSITE
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.
Clusula SHRINK
Clusula REBUILD
Exemplo:
ALTER INDEX IND_PRD REBUILD
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:
-
Sinnimo TABELA1
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
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
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
A sintaxe bsica :
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.
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.
System privilege
22.1.2.
Object privilege
22.1.3.
Roles
Uma coleo de privilgios e outras regras que juntas facilitam a atribuio de vrios
privilgios e regras para os usurios.
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.
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.
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.
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
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
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
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
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
DESCRICAO
PRECO
---------------------------------------- ---------ARTEFATO DE METAL
8,50
OBJETO DE PLASTICO
3,55
CINZEIRO
2,55
FOLHAS A4
2,89
DESCRICAO
PRECO
---------------------------------------- ---------CANETA ESFEROGRAFICA
3,99
ARTEFATO DE MADEIRA
2,89
CARTUCHO HP
120,00
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.2.
Clusula CONNECT BY
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.
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
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
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 .........
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
25.10.
Respostas do Item 10
25.11.
Respostas do Item 11
25.12.
Respostas do Item 12
25.13.
Respostas do Item 13
25.14.
25.15.
25.16.
25.17.
25.18.
25.19.
25.20.
25.21.
25.22.
Respostas do Item 18
25.23.
25.24.
25.25.
25.26.
25.27.
25.28.