Professional Documents
Culture Documents
Contedo 3
I Introduo
- 4
1.1 Objetivos do curso
- 5
1.2 O que SQL*Plus- 6
II Comandos SQL e SQL*Plus
- 7
II-Contedo 8
11.1 Ativao do SQL*Plus - 9
11.2 Criao de tabelas - 10
11.3 Manipulao de tabelas - 12
11.4 Formatao de relatrios
- 16
11.5 Edio de comandos - 17
11.6 Outros comandos - 22
II Exerccios
- 23
III Consultas bsicas
- 24
111-Contedo 25
111.1 Seleo de colunas - 26
111.2- Uso de expresses 27
111.3 Seleo de linhas - 29
111.4 Ordenao de resultados - 31
111.5 Agrupamento - 33
111.6 Operaes de conjunto - 35
111.7 Juno de tabelas - 39
III Exerccios - 44
IV- Criao e uso de tabelas 45
1V-Contedo 46
1V.1 -CREATETABLE 47
IV.2 Tipos de colunas - 51
IV.3 Alterao de uma tabela- 52
lV.4 O comando INSERT - 54
lV.5 O comando DELETE - 56
IV.6 O comando UPDATE - 57
IV.7 Controle de transaes - 59
lV.8 Manipulao de vises - 67
IV.9 Criao de seqncias - 72
IV Exerccios - 73
V -Gerao de Relatrios 75
V Contedo - 76
V.1 - Formatao de colunas 77
V.2 - Formatao de ttulos 80
V.3 - BREAK e COMPUTE 84
V.4 - Parmetros de controle 89
V.5 - Utilizao de variveis 93
V.6 - Relatrios avanados 98
1
V Exerccios
- 107
VI Expresses e funes
- 110
VI- Contedo 111
VI.1 Operadores - 112
Vl.2 Funes numricas
- 114
VI.3 Funes de caracteres
- 116
VI.4 Funes de grupo
- 119
VI.5 Converso entre tipos
- 120
VI.6 Funes de datas
- 123
Vl.7 Outras funes - 124
VI Exerccios
125
VII Consultas avanadas
- 126
VII-Contedo 127
VII.1 Pseudo-colunas - 128
VII.2 Juno externa - 129
VII.3 Auto-Juno - 132
VII.4 Consultas encaixadas - 133
VII.5 Consultas hierrquicas- 138
VII Exerccios - 141
VIII Tpicos avanados
- 142
VIII Contedo - 143
VIII.1 Manuteno de usurios - 144
VllI.2 Privilgios de acesso - 146
VIII.3 Acesso concorrente - 149
VIII.4 lndices - 153
VIII.5 Clusters - 157
VIII.6 Dicionrio de dados - 162
VIII Exerccios - 168
Ap. A- Tabelas utilizadas 169
Ap. B- Sumrio dos Comandos 174
Ap. C- Resposta dos exerccios 178
2
Contedo
I Introduo
V Gerao de relatrios
VI Expresso e Funes
3
I Introduo
4
I.1 Objetivos do Curso
I Introduo
5
I.2 O que SQL*Plus
O SQL +
comando
SQL*PLUS
Parmetros de
SQL
BD
do controle Controle de
ORACLE
formatao
Caractersticas principais:
I Introduo
6
II Comandos SQL e SQL*Plus
7
II - Contedo
1. Ativao do SQL*Plus
2. Criao de tabelas
3. Manipulao de tabelas
4. Formatao de relatrios
5. Edio de comandos
6. Outros comandos
8
II.1 Ativao do SQL*Plus
$ sqlplus <ENTER>
SQL*Plus: Version 3.0.6.5.1 Production on Wed Apr 3 08:56...
Copyright (c) ORACLE Corporation 1979, 1989. All...
Enter user-name: ora1
a senha no exibida
Enter password: ____
Connected to: ORACLE RDBMS V6.0.27.9.2, with transaction...
PL/SQL V1.0.29.1.0 Beta
SQL>
a senha exibida
ou
9
II.2 Criao de tabelas
O que uma tabela?
Coluna
Nome da coluna Linha (ou registro)
Campos
10
Para criar a tabela de empregados
11
II.3 Manipulao de tabelas
12
Para recuperar as informaes da tabela EMP:
Nome da coluna
NOME_EMP
Maisculas e minsculas somente
SAMANTA fazem diferena
RENATO entre ``(aspas simples)
13
Para remover o empregado de nmero 110:
14
Para atualizar o salrio do funcionrio 110:
15
II.4 Formatao de relatrios
16
II.5 Edio de comandos
17
Para inserir linha aps a linha corrente:
18
Para substituir caracteres da linha corrente:
19
O SQL*Plus permite a utilizao de outros buffers alm do
buffer de comandos SQL
20
para salvar o buffer corrente num arquivo do Sistema
Operacional:
SQL > save arquivo
21
II.6 Outros comandos
nome do comando
22
II - Exerccios
23
III Consultas bsicas
24
III - Contedo
1. Seleo de colunas
2. Uso de expresses
3. Seleo de linhas
4. Ordenao de resultados
5. Agrupamento
6. Operao de conjunto
7. Juno de tabelas
25
III.1 Seleo de colunas
N_EMP NOME_EMP
103 SAMANTA
110 UBIRATAN
175 PAULO
189 RITA
NOME_EMP N_EMP
SAMANTA 103
UBIRATAN 110
PAULO 175
RITA 189
26
III.2 Uso de expresses
NOME_EMP 12*SAL
SAMANTA 1800000
UBIRATAN 3600000
PAULO 6000000
RITA 3960000
EVERALDO 2400000
SILVIO 1800000
ANA 1440000
RENATO 1200000
27
Para saber o n total de caracteres nas colunas NOME_EMP E
CARGO
Comprimento Total
15
15
15
11
16
14
13
14
28
III.3 Seleo de linhas
NOME_EMP
SAMANTA
UBIRATAN
RENATO
29
Para saber o tempo de servio dos funcionrios cuja comisso
maior que 5% do salrio:
NOME_EMP MESES
SILVIO 48.689726
30
III.4 Ordenao de resultados
31
Para listar os empregados em ordem decrescente de salrio, por
cargo:
SQL > select nome_emp, cargo, sal
2 from emp
3 where cargo in ( `ANALISTA`, VENDEDOR`,
4 `DIRETOR`, SECRETARIA` )
5 order by cargo, sal desc;
Indica a 3 expresso do
SELECT, que
length(cargo)
32
III.5 - Agrupamento
Para saber quantos funcionrios trabalham em cada
departamento:
critrio de agrupamento
N_DEP COUNT(*)
10 2
20 3
30 3
33
Para saber a soma dos salrios para os cargos onde a mdia de
salrios maio que 150000:
34
III.6 Operaes de conjunto
Uma tabela pode ser encerada como um conjunto
Col. 1 Col. 2
A 1 (A, 1)
elementos
B 1 (B, 1) do
D 2 (D, 2) conjunto
Tabela Conjunto
- unio (UNION)
- interseco (INTERSECT)
- diferena (MINUS)
35
Unio:
TABELAS CONJUNTOS
Col. 1 Col. 2
A 1 (A, 1)
A 2 (A, 2)
B 1 (B, 1)
D 2 (D, 2)
E 2 (E, 2)
36
Interseco:
TABELAS CONJUNTOS
Col. 1 Col. 2
B 1 (B, 1)
D 2 (D, 2)
37
Diferena:
TABELAS CONJUNTOS
Col. 1 Col. 2
A 1
(A, 1)
38
III.7 Juno de tabelas
A,
B, C X 1, 2
tab1 tab2
col1 col2 col3 col4 col5
A 3 B 2 E
39
Para saber o nome do departamento onde cada empregado
trabalha:
NOME_EMP NOME_DEP
PAULO ADMINISTRAO
ANA ADMINISTRAO
SAMANTA PESQUISA
UBIRITAN PESQUISA
RENATO PESQUISA
RITA VENDAS
SILVIO VENDAS
EVERALDO VENDAS
40
NOME_EMP NOME_DEP EMP.N_DEP DEP.N_DEP
SAMANTA ADMINISTRAO 20 10
UBIRATAN ADMINISTRAO 20 10
UBIRATAN ADMINISTRAO 20 10
PAULO ADMINISTRAO 10 10
RITA ADMINISTRAO 30 10
EVERALDO ADMINISTRAO 30 10
SILVIO ADMINISTRAO 30 10
ANA ADMINISTRAO 10 10
RENATO ADMINISTRAO 20 10
SAMANTA PESQUISA 20 20
UBIRATAN PESQUISA 20 20
PAULO PESQUISA 10 20
RITA PESQUISA 30 20
EVERALTO PESQUISA 30 20
SILVIO PESQUISA 30 20
ANA PESQUISA 10 20
RENATO PESQUISA 20 20
SAMANTA VENDAS 20 30
UBIRATAN VENDAS 20 30
PAULO VENDAS 10 30
RITA VENDAS 30 30
EVERALDO VENDAS 30 30
SILVIO VENDAS 30 30
ANA VENDAS 10 30
RENATO VENDAS 20 30
SAMANATA PRODUO 10 40
PAULO PRODUO 10 40
RITA PRODUO 30 40
EVERALDO PRODUO 30 40
SILVIO PRODUO 30 40
ANA PRODUO 10 40
RENATO PRODUO 20 40
41
Dada a tabela FAIXA_SAL, que classifica faixas de salrios:
SALMIN SALMAX F
1 99999 A
100000 149999 B
150000 199999 C
200000 399999 D
400000 800000 E
especifica um tipo
NOME_EMP SAL F de juno
ANA 120000 B
RENATO 100000 B
SAMANTA 150000 C
SILVIO 150000 C
UBIRATAN 300000 D
RITA 300000 D
EVERALDO 200000 D
PAULO 500000 E
42
Pode-se combinar diversas opes no mesmo comando SQL:
NOME_DEP F COUNT(*)
ADMINISTRAO E 1
PESQUISA C 1
PESQUISA D 1
VENDAS D 2
VENDAS C 1
43
III - Exerccios
44
IV Criao e uso de tabelas
45
IV Contedo
1. CREATE TABLE
2. Tipos de colunas
4. O comando INSERT
5. O comando DELETE
6. O comando UPDATE
7. Controle de transaes
8. Manipulao de vises
9. Criao de seqncias
46
IV.1 CREATE TABLE
47
>REFERENCES indica que o valor desta coluna, se
existir,
/ FOREINGN deve existir tambm na coluna col da
tabela
KEY tab (col) primria tab. As colunas referenciadas
na tabela primria devem ser
PRIMARY KEY ou UNIQUE.
Exemplo:
48
- Forma 2:
- Exemplo:
NOME_DEP Media_Salrio
ADMINISTRAO 310000
PESQUISA 183333.333
VENDAS 226666.667
49
Para verificar a estrutura de uma tabela
50
IV.2 Tipos de colunas
CHAR [(tamanho)]
DATE
FLOAT [(tamanho)]
REAL
DOBLE PRECISION
LONG
51
IV.3 Alterao de uma tabela
novo tipo
52
Restries para a alterao da estrutura de uma tabela:
53
IV.4 O comando INSERT
- Forma 1:
INSERT INTO tabela [( cil1, col2, ... coln)]
VALUES ( val1, val2, ... valn)
col1, col2, ... coln lista de colunas nas quais sero inseridos os
valores. Ser inserido o valor NULL nas colunas no
especificadas. Se nenhuma coluna for especificada,
assumida uma lista com todas as colunas da tabela na
ordem apresentada pelo comando DESCRIBE.
val1, val2, ... valn lista de valores a serem inseridos. Os valores devem
concordar em n, ordem e tipo com as colunas
especificadas no comando INSERT
- Exemplo:
54
- Forma 2:
- Exemplo:
55
IV.5 Comando DELETE
Exemplos
56
IV.6 O comando UPDATE
O comando UPDATE usado para alterar valores j
armazenados em tabelas:
UPDATE tabela
SET col1 = exp1, col2, = exp2, ... coln = expn
WHERE condio
ou
UPDATE tabela
SET ( col1 [, col2 ...] ) = ( consulta )
WHERE condio
57
Exemplos
58
IV.7 Controle de transaes
59
O incio de uma transao determinado pelo primeiro
comando de manipulao de dados (INSERT, UPDATE,
DELETE) desde o fim da ltima transao ou inicio da seo
corrente.
60
Exemplo:
N_DEP NOME_DEP
10 ADMINISTRAO
20 PESQUISA
30 VENDAS Incio de uma transao
40 PRODUO
SQL > insert into dep values( 50, `MARKETING`. `SAO PAULO` );
SQL > insert into dep values( 60, `INFORMATICA`, `CAMPINAS`);
SQL > select n_dep, nome_dep from dep;
61
SQL > update dep set nome_dep = `COMERCIAL`
2 where n_dep = 30;
SQL > select nome_dep from dep where n_dep = 30; Incio de outra
transao
NOME_DEP
VENDAS
62
Observaes
USURIO 1 USURIO 2
SQL > select sal from emp SQL > select sal from emp
2 where n_emp = 189; 2 where n_emp = 189;
SAL SAL
330000 330000
SQL > select sal from emp SQL > select sal from emp
2 where n_emp = 189; 2 where n_emp = 189;
SAL SAL
400000 330000
SQL > select sal from emp SQL > select sal from emp
2 where n_emp = 189; 2 where n_emp = 189;
SAL SAL
400000 400000
63
O comando SET AUTOCOMMIT ON do SQL*Plus faz com
que o commit seja executado automaticamente a cada
comando de manipulao de dados:
1 record deleted.
1 record created.
1 record deleted.
64
possvel determinar pontos de salvamento intermedirios
em transaes:
65
Para garantir que vrios comandos SELECT recuperem
sempre os mesmo dados, independentemente de transaes
concorrentes:
SAL
300000
os resultados sero
SQL > sempre iguais
SQL > select sal
2 from emp
3 where n_emp = 110;
SAL
300000
66
IV.8 Manipulao de vises
Tabela Emp
N_EMP NOME_EMP ...N_DEP
67
- convenincia: consultas complexas podem ser simplificadas
com a criao de vises
Emp
N_EMP NOME_EMP ...N_DEP Dep
103 SAMANTA ...20 N_DEP NOME_DEP
110 UIRATAN ...20
175 PAULO ...10 10 ADMINISTRAO
189 RITA ...30 20 PESQUISA
201 EVERALDO ...30 30 VENDAS
208 SILVIO ...30 40 PRODUO
230 ANA ...10
276 RENATO ...20 indicaes para o
dep. 20 apenas,
por motivos de
clareza
68
Uma viso considerada uma tabela virtual, isto , funciona
como uma tabela mas no contem dados. Os dados de uma viso
so calculados a partir de outras tabelas (ou vises!).
69
Uma viso pode ser criada em temo de execuo:
SQL > select ep.nome_emp, dp.nome_dep
1 from emp ep, ( select de.n_dep, de.nome_dep
2 from dep de ) dp
3 where ep.n_dep = dp.n_dep
nome_emp nome_dep
SAMANTA PESQUISA
UBIRATAN PESQUISA
PAULO ADMINISTRAO
RITA VENDAS
...
70
Somente possvel atualizar (INSERT, DELERE, UPDATE)
informaes em vises que:
71
IV.9 Criao de seqncias
Para us-la:
SQL > INSERT INTO( nome_emp, n_emp, ...)
2 VALUES ( `PROXIMO CLIENTE`, seq_emp.NEXTVAL, ...);
72
IV - Exerccios
73
8. Crie uma viso chamada DEP_SAL baseada nas tabelas EMP e
DEP, contendo as seguintes informaes:
74
V Gerao de Relatrios
75
V Contedo
1. Formatao de colunas
2. Formatao de ttulos
3. BREAK e COMPUTE
4. Parmetros de controle
5. Utilizao de variveis
6. Relatrios avanados
V Gerao de Relatrios
76
V.1 Formatao de colunas
V Gerao de Relatrios
77
coluna nome de uma coluna ou expresso especificada no
comando SELECT, tal qual aparece no cabealho do
resultado do comando.
V Gerao de Relatrios
78
Exemplos de formatos disponveis para o comando COLUMN:
V Gerao de Relatrios
79
Exemplos
salrio comisso
Departamento Empreg. anual adicional
ADMINISTRAO PAULO 6000000.00
ADMINISTRAO ANA 1440000.00
PESQUISA SAMANTA 1800000.00
PESQUISA UBIRATAN 3600000.00
PESQUISA RENATO 1200000.00
VENDAS RITA 3960000.00 5000.00
VENDAS SILVIO 1800000.00 9000.00
VENDAS EVERALDO 2400000.00 3000.00
V Gerao de Relatrios
80
V.2 Formatao de ttulos
- TTITLE (BTITLE)
- TTIBLE (BTITLE) ON
V Gerao de Relatrios
81
- TTITLE (BTITLE) param1 param2 ...
o paramN:
V Gerao de Relatrios
82
Exemplo:
25 de dezembro de 1990
Relatrio de Empregados Departamento de Pessoal
N_EMP NOME_EMP SAL
189 RITA 330000
201 EVERALDO 200000
208 SILVIO 150000
V Gerao de Relatrios
83
V.3 BREAK e COMPUTE
V Gerao de Relatrios
84
Exemplo:
SECRETARIA ANA
mudana
de pgina
NOME_DEP CARGO NOME_EMP
PESQUISA ANALISTA SAMANTA
REANATO
DIRETOR UBIRATAN
VENDEDOR SILVIO
EVERALDO
V Gerao de Relatrios
85
Para mostrar as definies correntes:
V Gerao de Relatrios
86
O comando COMPUTE permite realizar clculos sobre os
valores de um grupo organizado pelo comando BREAK:
sum 620000.00
V Gerao de Relatrios
87
Sintaxe do comando:
V Gerao de Relatrios
88
V.4 Parmetros de controle
V Gerao de Relatrios
89
Os comandos SET e SHOW podem ser aplicados aos seguintes
parmetros:
V Gerao de Relatrios
90
FEEDBACK n | 6 | ON | OFF nmero mnimo de linhas que precisam
ser selecionadas para haver impresso
do total de linhas
V Gerao de Relatrios
91
SQLNUMBER ON | OFF liga ou desliga a numerao de linhas
quando da continuao de comandos
SQL
SUFFIX texto | SQL texto que ser usado como sufixo para
execuo e edio de arquivos
V Gerao de Relatrios
92
V.5 Utilizao de variveis
V Gerao de Relatrios
93
O SQL*Plus requisita o valor de uma varivel se esta no tiver
sido previamente definida:
N_EMP NOME_EMP
110 UBIRATAN
175 PAULO
189 RITA
V Gerao de Relatrios
94
Para manter o valor fornecido pelo usurio para futuras
utilizaes, deve-se substituir o `&`por `&&`:
NOME_EMP SAL
RITA 330000
EVERALDO 200000
SILVIO 150000
NOME_EMP SAL
RITA 330000
EVERALDO 200000
SILVIO 150000
V Gerao de Relatrios
95
O comando ACCEPT possibilita iniciar variveis valores
fornecidos pelo usurio:
NOME_EMP SAL
RITA 330000
EVERALDO 200000
SILVIO 150000
V Gerao de Relatrios
96
Pode-se tambm especificar parmentros para a ativao de um
arquivo de comandos SQL*Plus atravs do comando START:
nome do arquivo
de comandos Parmetros posicionais
V Gerao de Relatrios
97
V.6 Relatrios avanados
N_EMP NOME_EMP
175 PAULO
230 ANA
2 records selected.
termina o armazenamento e
imprime o resultado
V Gerao de Relatrios
98
Se o comando SPOOL OUT for substitudo por SPOOL OFF, o
arquivo de sada no ser impresso.
N_EMP NOME_EMP
175 PAULO
230 ANA
SQL > spool out
V Gerao de Relatrios
99
No caso do comando COMPUTE, para eliminar os textos sum
e ****** que aparecem como indicadores do clculo
executado:
$620,000.00
$550,000.00
$680,000.00
V Gerao de Relatrios
100
As opes NEW_VALUE E OLD_VALUE do comando
COLUMN podem ser utilizadas para recuperar dados em uma
consulta e us-los em uma outra consulta:
SUM
1850000
V Gerao de Relatrios
101
vamos agora considerar o seguinte relatrio:
data de hoje
nmero da pgina
Departamento: VENDAS
V Gerao de Relatrios
102
Para produzir o relatrio da pgina anterior, deve-se
acompanhar os seguintes passos:
V Gerao de Relatrios
103
5. Definir uma varive para armazenar a data sendo recuperado
pela consulta:
7. Definir os ttulos:
set pagasize 20
set linesize 75
set newpage 0
V Gerao de Relatrios
104
Os comandos necessrios gerao do relatrio sendo
especificado poderiam (ou deveriam) estar armazenadas em um
arquivo do sistema operacional, RELATORIO.SQL:
V Gerao de Relatrios
105
Dessa forma, o comando:
V Gerao de Relatrios
106
V - Exerccios
V Gerao de Relatrios
107
2. Faa um arquivo de comando SQL*Plus chamado ex52.sql de
forma que sua execuo exiba o seguinte resultado:
Relatorio de Empregados
avg 310000
sum 620000
avg 183333.333
sum 550000
avg 226666.667
sum 680000
V Gerao de Relatrios
108
3. Altere o arquivo ex52.sql de forma que:
V Gerao de Relatrios
109
VI Expresses e funes
110
VI - Contedo
1. Operadores
2. Funes numricas
3. Funes de caracteres
4. Funes de grupo
6. Funes de datas
7. Outras funes
VI Expresses e funes
111
VI.1 - Operadores
Operadores de valor:
Operadores lgicos
VI Expresses e funes
112
[NOT] IN teste de incluso ou CARGO IN (`ANALISTA`, VENDEDOR`)
excluso um conjunto
VI Expresses e funes
113
VI.2 Funes numricas
o `R`indica Rowld
o `W`indica raw
VI Expresses e funes
114
Funes numricas:
T funo Descrio/Exemplo
N SIGN(n) sinal de n
SIGN(-2) = -1
SIGN(0) = 0
SIGN(2) = 1
VI Expresses e funes
115
VI.3 Funes de caracteres
T NOME Descrio/Exemplo
N ASCII(c) cdigo ASCII do primeiro caractere de
c
ASCII( `gua`) = 65
VI Expresses e funes
116
C LTRIM(c, conj_c) remove todos os caracteres de c at o
primeiro caractere que no estiver presente
em conj_c
LTRIM(`AGUA`, `AG`) = `UA`
VI Expresses e funes
117
C TRANSLATE(c, traduz c e substitui todos caracteres de c
de_c, para_c) existentes em de_c para o correspondente
em para_c
TRANSLATE( `AGUA`, `AEIO`, `12345`)
= `1G51`
VI Expresses e funes
118
VI.4 Funes de grupo
T Nome Descrio
VI Expresses e funes
119
VI.5 Converso entre tipos
T Nome Descrio
VI Expresses e funes
120
Converso automtica de tipos:
- `39` + 123
VI Expresses e funes
121
a tabela a seguir mostra os principais formatos de datas
existentes (parmetro fmt utilizado nas funes de converso)
aplicados data 13:07:10 de 16/01/91
VI Expresses e funes
122
VI.6 Funes de datas
T Nome Descrio
VI Expresses e funes
123
VI.7 Outras funes
T Nome Descrio
VI Expresses e funes
124
VI - Exerccios
1. Consulte o nome e o cargo dos empregados da tabela EMP que
foram contratados entre 01/02/85 e 27/12/85 e que so
comissionados.
VI Expresses e funes
125
VII Consultas avanadas
126
VII - Contedo
1. Pseudo-colunas
2. Juno externa
3. Auto-Juno
4. Consultas encaixadas
5. Consultas hierrquicas
127
VII.1 Pseudo-colunas
T Nome Descrio
128
VII.2 Juno externa
129
NOME_EMP NOME_DEP EMP.N_DEP DEP.N_DEP
SAMANTA ADMINISTRAO 20 10
UBIRATAN ADMINISTRAO 20 10
UBIRATAN ADMINISTRAO 20 10
PAULO ADMINISTRAO 10 10
RITA ADMINISTRAO 30 10
EVERALDO ADMINISTRAO 30 10
SILVIO ADMINISTRAO 30 10
ANA ADMINISTRAO 10 10
RENATO ADMINISTRAO 20 10
SAMANTA PESQUISA 20 20
UBIRATAN PESQUISA 20 20
PAULO PESQUISA 10 20
RITA PESQUISA 30 20
EVERALTO PESQUISA 30 20
SILVIO PESQUISA 30 20
ANA PESQUISA 10 20
RENATO PESQUISA 20 20
SAMANTA VENDAS 20 30
UBIRATAN VENDAS 20 30
PAULO VENDAS 10 30
RITA VENDAS 30 30
EVERALDO VENDAS 30 30
SILVIO VENDAS 30 30
ANA VENDAS 10 30
RENATO VENDAS 20 30
SAMANATA PRODUO 10 40
PAULO PRODUO 10 40
RITA PRODUO 30 40
EVERALDO PRODUO 30 40
SILVIO PRODUO 30 40
ANA PRODUO 10 40
RENATO PRODUO 20 40
130
Soluo: fazer de conta que existe uma linha fictcia,
totalmente nula, na tabela de empregados, para que ela seja
associada linha do departamento 40 (juno externa):
131
VII.3 Auto-Juno
132
VII.4 Consultas encaixadas
parnteses delimitam a
SQL > select n_emp, nome_emp, sal
sub-consulta
2 from emp
3 where sal > (select avg(sal) from emp);
N_DEP NOME_DEP
40 PRODUAO esta sub-consulta retorna
um conjunto de valores
133
Uma sub-consulta pode fazer referencias a colunas do comando
no qual est encaixada
134
Os operadores IN, NOT IN, ANY e ALL tambm podem ser
usados para sub-consultas:
135
Consultas encaixadas podem ser combinadas de diversas formas
136
Sub-consultas tambm podem ser usadas nos comandos de
manipulao de dados (I,U,D)
137
VII.5 Consultas hierrquicas
175 / PRESIDENTE
138
Para saber todos os superiores de Everaldo:
indica o comeo da
consulta
especifica a conexo da
139
Podemos usar a pseudo-coluna LEVEL para saber o nvel de
cada registro na hierarquia:
LEVEL NOME
1 PAULO
2 UBIRATAN
3 SAMANTA
3 RENATO
2 RITA
3 EVERALDO
3 SILVIO
2 ANA
140
VII - Exerccios
141
VIII Tpicos avanados
142
VIII - Contedo
1. Manuteno de usurios
143
VIII.1- Manuteno de usurios
144
Para alterar sua prpria senha:
145
VIII.2 Privilgios de acesso
Um usurio pode definir quem pode usar suas tabela e que tipo
de operao podem ser realizadas:
146
WITH GRANT permite que um usurio com um determinado
OPITON privilgio possa transmiti-lo para um terceiro
usurio
147
Para facilitar o acesso a tabelas de outros usurios pode-se criar
sinnimos para os nomes das tabelas:
148
VII.3 Acesso concorrente
149
>EXCLUSIVE permite que outros usurios faam consultas
tabela mas probe qualquer outra operao
sobre ela
150
possvel bloquear antecipadamente algumas linhas de uma
tabela em modo EXCLUSIVE, para posterior atualizao:
151
Deadlock uma situao onde um usurio A espera pela
liberao de uma tabela bloqueada por um usurio B, o qual est
esperando a liberao de outra tabela bloqueada pelo usurio A:
USURIO A USURIO B
152
VII.4 - ndice
153
Para remover um ndice:
ou
o Oracle utilizar o
ndice emp_num
154
ndices tambm podem ser usados para impedir duplicao de
registros:
SQL > insert into emp values ( 110, `JOAO`, `DIRETOR`, 175,
2 `20-Dec-90`, 350000, , 30 );
insert into emp values ( 110, `JOAO`, `DIRETOR`, 175, `20-DEC-90`,
*
ERROR at line 1: ORA-0001: duplicate value in index
155
O Oracle no aproveita ndices para colunas envolvidas em
expresses aritmticas:
Para evitar que um ndice seja usado, basta fazer uma operao
sem efeito na primeiro coluna associada ao ndice:
156
VIII.5 - Clusters
Emp
N_EMP NOME_EMP ...N_DEP Dep
103 SAMANTA ...20 N_DEP NOME_DEP
110 UIRATAN ...20
175 PAULO ...10 10 ADMINISTRAO
189 RITA ...30 20 PESQUISA
201 EVERALDO ...30 30 VENDAS
208 SILVIO ...30 40 PRODUO
230 ANA ...10
276 RENATO ...20
o departamento e seus
empregados esto
fisicamente agrupados
Cluster Emp_Dep
10 ADMINISTRAO SAO PAULO
175 PAULO PRESIDENTE - 27-FEB-86 ...
230 ANA SECRETARIA 175 01-MAY-89 ...
20 PESQUISA CAMPINAS
103 SAMANTA ANALISTA 110 17-MAR-85 ...
110 UBIRATAN DIRETOR 175 20-APR-85 ...
276 RENATO ANALISTA 110 30-APR-86 ...
30 VENDAS BRASILIA
189 RITA DIRETOR 175 25-DEC-85 ...
201 EVERALDO VENDEDOR 189 28-SEP-86 ...
208 SILVIO VENDEDOR 189 30-OCT-86 ...
157
Um cluster pode envolver vrias tabelas, mas uma tabela pode
participar no mximo de um cluster.
158
Para criar um cluster:
159
Para criar uma nova tabela dentro de um cluster j existente:
Table created
Table dropped.
Table renamed.
160
Para remover um cluster, pode-se antes remover suas tabelas:
Em geral clusters:
161
VIII.6 Dicionrio de dados
162
DICTIONARY descries de tabelas e vises do dicionrio de
dados do Oracle
163
Para saber quais so suas tabelas, vises, sinnimos e clusters:
TABLE_NAME TABLE_TYPE
DEP TABLE
DEP_SAL VIEW
EMP TABLE
EMP_DEP VIEW
EMP_DIA VIEW
FAIXA_DIA TABLE
JOAO_ALU SYNONYM
PROJ TABLE
PROJ_DEP CLUSTER
SAL_MEDIO TABLE
164
Para saber todos as tabelas, sinnimos, seqncias e vises s
quais voc tem acesso:
165
Para saber seus privilgios em tabelas de outros usurios:
DOADOR TAB A D N I S U R
JOAO PRODUTO Y Y Y Y Y Y Y
JOAO ALUNO Y Y Y Y
JOAQUIM FRANQUIAS Y Y
JOAO PEDIDO Y Y Y Y Y
JOAO ITEM_PED Y Y Y Y Y
166
possvel armazenar comentrios sobre tabelas e colunas no
dicionrio de dados:
Comment created
Comment created.
Comment created.
TABLE_NAME COMMENTS
EMP Empregados da Software Desing
COLUMN_NAME COMMENTS
NOME:EMP Nome do empregado
CHEFE cdigo do chefe desta pessoa
167
VIII - Exerccios
168
AP. A Tabelas utilizadas
169
Tabelas:
Contedo:
N_EMP NOME_EMP CARGO CHEFE DATA_ADM SAL COM N_DEP
103 SAMANTA ANALISTA 110 17-MAR-85 150000 20
110 UBIRATAN DIRETOR 175 20-APR-85 300000 20
175 PAULO PRESIDENTE 27-FEB-86 500000 10
189 RITA DIRETOR 175 25-DEC-85 330000 5000 30
201 EVERALDO VENDEDOR 189 28-SEP-86 200000 3000 30
208 SILVIO VENDEDOR 189 30-OCT-86 150000 9000 30
230 ANA SECRETARIA 175 01-MAY-89 120000 10
276 RENATO ANALISTA 110 30-APR-86 100000 1000 20
170
SQL > DESCRIBE dep
Name Null? Type
N_DEP NOT NULL NUMBER(2)
NOME_DEP NOT NULL CHAR(14)
LOCAL_DEP CHAR(13)
Contedo:
Contedo:
SALMIN SALMAX F
1 99999 A
100000 149999 B
150000 199999 C
200000 399999 D
400000 800000 E
171
SQL > DESCRIBE proj
172
Vises:
173
Ap. B Sumrio dos Comandos
174
Principais comandos SQL:
175
SAVEPOINT determina um ponto de salvamento
intermedirio para a transao
SELECT realiza uma consulta
SET determina um ponto intermedirio de
TRANSACTION salvamento de transaes
UPDATE altera valores de campos de uma tabela
Comandos SQL*Plus:
176
DEL, D remove a linha corrente do buffer
DESCRIBE, DEC mostra a descrio de uma tabela
DISCONNECT efetiva as transaes pendentes e desconecta do
Oracle
DOCUMENT inicia um bloco de documentao no arquivo
corrente
EDIT, ED invoca um editor do sistema operacional
EXIT, QUIT termina a execuo do SQL*Plus
GET carrega um arquivo no buffer corrente
HELP fornece ajuda sobre comandos SQL e
SQL*Plus
INPUT, I adiciona novas linhas aps a linha corrente do
buffer
LIST, L mostra as linhas presentes no buffer corrente
PAUSE mostra uma mensagem e espera o usurio
teclar algo
PROMPT mostra uma mensagem na tela
REMARK, REM inicia um comentrio em um arquivo de
comandos
RUM mostra e executa o contedo do buffer corrente
RUMFORM executa um formulrio previamente gerado
SAVE salva o contedo do buffer corrente em um
arquivo
SET atribui um valor a um parmetro do SQL*Plus
SHOW mostra as definies atuais dos parmetros do
SQL*Plus
SPOOL controla a copia de sada dos comandos em
arquivos ou na impressora do sistema
TTITLE especifica um titulo a ser mostrado no topo de
cada pgina de um relatrio
UNDEFINE remove a definio de uma varivel
WHENEVER controla o fluxo de execuo do SQL*Plus
quando ocorrem erros em comandos SQL
177
AP. C Resposta dos exerccios
178
II.1:
create table aluno (
nome char( 30 ) not null,
ender char( 50 ),
cidade char( 25 ),
estado char( 2 ),
cep number( 5 ),
aniversario date );
II.2:
insert intoaluno
values ( `Joao da Silva Neto`, `Rua Brasincas, 145`, `Sao Paulo`,
`SP`, 01250, `12-JAN-11`);
insert into aluno
values ( `Joao da Silva Junior`, `Rua Tiradentes, 897`, `Bauru`,
`SP`, 12450, `24-APR-11`);
insert into aluno
values ( `Matias da Silva Salgado`, `Rua Rui Barbosa, 145`,
`Sao Paulo`, `SP`, 01124, `13-AUG-11`);
insert into aluno
values ( `Ana Rosa da Silva Salgado`, `Rua Brs Cubas, 789`,
`Curitiba`, `PR`, 80530, `01-OCT-11`);
II.3:
column niver format a5
select nome Aluno, to_char( aniversario, `DD/MM` ) Niver
from aluno;
179
II.4:
select ender, cidade, estado, cep
from aluno
where nome = `Joo da Silva Neto;
II.5:
save ex24
exit
sqlplus ora1/senha1
start ex24
III.1:
III.2:
select nome_emp, sal + com
from emp
where cargo = `VENDEDOR`
III.3:
III.4:
select min(sal)
from emp;
180
III.5:
III.6:
select nome_emp, nome_dep
from emp, dep
where emp.n_dep = dep.n_dep and
local_dep in ( `SAO PAULO`, `CAMPINAS` );
IV.1:
creat table empreg as
select n_emp, nome_emp, sal
from emp;
IV.2:
rename empreg to temp;
drop table temp;
IV.3a:
alter table aluno
modify ( cidade char( 35 ) );
IV.3b:
alter table aluno
add ( sal_desejado mnber( 11, 2 ) );
181
IV.4:
insert into aluno ( nome, aniversario, sal_desejado )
values ( `Joaquim Alfredo Guimares`, `13-JUL-11`, 350000 );
IV.5:
update aluno
set sal_desejado = 400000
where nome = `Joo da Silva Neto`;
update aluno
set ender = `Rua Pindamonnhangaba, 123`,
cidade = `Taubat`, estado = `SP`, cep = 14500
where nome = `Joaquim Alfredo Guimares`;
IV.6:
create table tmp as
select nome, ender, cidade, estado, cep, aniversario
from aluno;
drop table aluno;
rename tmp to aluno;
IV.7:
delete from aluno
where nome = `Joaquim Alfredo Guimares`;
commit;
182
IV.8:
create view dep_sal as
select nme_dep, count( * ) num_func, min( sal ) sal_min,
avg( sal ) sal_med, max( sal ) sal_max
from emp, dep
where emp.n_dep = dep.n_dep
group by nome_dep;
IV.9:
describe dep_sal
select * from dep_sal;
IV.10:
update emp
set sal = 300000
where nome_emp = `SAMANTA`;
select * from dep_sal;
IV.11:
rollback;
183
V.1:
get ex31
del
1
a Sal/hora
ttitle center Salario por hora skip 1 center dos Empregados skip1
column Sal/hora format 9999.99
column cargo justify right
column
/
V.2:
set echo off
set feedback off
set linesize 50
set pagasize 40
ttitle center Relatorio de Empregados skip 2
break on Departamento skip 1
compute avg sum of Salario on Departamento
select nome_dep Departamento, nome_emp Nome, cargo
Cargo, sal Salario
from emp, dep
where emp.n_dep = dep.n_dep
order by nome_dep;
184
V.3:
set echo off
set verify off
set feedback off
set pause off
set linrsize 50
set pagasize 40
clumn aux noprint
ttitle center Relatorio de empregados skip 2
break on aux skip 1
compute avg sum of Salario on aux
accept MaiorSalario number prompt `Maior Salario: `
spool ex.53.lst
select nome_dep aux, nome_dep Departamento,
nome_emp Nome, cargo Cargo, sal Salrio
from emp, dep
where emp.n_dep = dep.n_dep and
sal > = &1 and sal < = &MaiorSalario
order by nome_dep;
spool off
VI.1:
select nome_emp, cargo
from emp
where to_char( data_adm, `DD/MM/YY` ) between
`01/02/85`and `27/12/85` and
com is not null;
VI.2:
select userenv( `sessionid`), userenv( `terminal`)
from dual;
185
VI.3:
Select stddev( sal ) DesvPadr, avg( sal ) Media
From emp
Where cargo in ( `DIRETOR`, `PRESIDENTE`);
VI.4:
column data 1 format a6
column data 2 format a6
select nome, to_char( aniversario, `DD/MM`) data1,
to_char( aniversario, `DD-MON`) data2
from aluno;
VI.5:
VI.6:
select n_emp, nome_emp, cargo, sal + nvl( com, 0 ) TotSalario
from emp;
VI.7:
select nome_emp,
decode( cargo, `SECRETARIA`, 1, `VENDEDOR`, 2,
`ANALISTA`, 3, 4 ) Categoria
from emp;
186
VI.8:
select emp.nome_emp, greatest( emp.sal, dep_sal.sal_md ) Saladeal
from emp, dep, dep_sal
where emp.n_dep = dep.n_dep and
dep.nome_dep = dep_sal.nome_dep;
VI.9:
select substr( nome_emp, 1, 1)
from emp
order by data_adm;
VII.1:
column data_hora format a15
select uld, user, to_char( sysdate, `HH24:MI-DD/MM/YY` )
DATA HORA
from dual;
VII.2:
select nvl( chefe.nome_emp, `-------` ) NOME_CHEFE,
func.nome_emp NOME_FUNC
from emp func, emp chefe
where func.chefe = chefe.n_emp (+)
order by 1;
187
VII.3:
select nome_emp, sal, local_dep
from emp x, dep, faixa_sal
where x.n_dep = dep.n_dep and
x.sal between salmin and salmax and
faixa = ( select faixa
from faixa_sal, emp y
where y.nome_emp = `UBIRATAN`and
y.sal between salmin and salmax );
VII.4:
update emp x
set sal = 1.2 * sal
where data_adm = ( select min( data_adm ) from emp y
where y.n_dep = x.n_dep);
VII.5:
delete from emp x
where x.sal > ( select avg( y.sal )
from emp y
where y.cargo = x.cargo );
VII.6:
rollback;
VIII.1:
grant select, insert on aluno to ora
188
VIII.2:
create synonym aluno0 for ora0.aluno;
VIII.3:
lock table aluno0 in exclusive mode;
insert into aluno0
select *
from aluno
where nome = `Joao da Silva Neto`;
commit;
VIII.4:
create index alu_nome on aluno( nome );
VIII.5:
revoke select, insert on aluno from ora2;
VIII.6:
select ui.index_name, ui.table_name, column_name
from user_indexes ui, user_ind_columns unid
where ui.index_name = uind.index_name
and ui.table_name = `ALUNO`;
VIII.7:
select grantor doador, table_name tab, alter_priv a, delete_priv d,
index_priv n, insert_priv i, select_priv s, update_priv u,
references_priv r
from all_tab_grants_recd
where table_name = `ALUNO` and grantor = `ORA`;
189