Escolar Documentos
Profissional Documentos
Cultura Documentos
Conteúdo 3
I Introdução
- 4
1.1 Objetivos do curso
- 5
1.2 O que é SQL*Plus- 6
II Comandos SQL e SQL*Plus
- 7
II-Conteúdo 8
11.1 Ativação do SQL*Plus - 9
11.2 Criação de tabelas - 10
11.3 Manipulação de tabelas - 12
11.4 Formatação de relatórios
- 16
11.5 Edição de comandos - 17
11.6 Outros comandos - 22
II Exercícios
- 23
III Consultas básicas
- 24
111-Conteúdo 25
111.1 Seleção de colunas - 26
111.2- Uso de expressões 27
111.3 Seleção de linhas - 29
111.4 Ordenação de resultados - 31
111.5 Agrupamento - 33
111.6 Operações de conjunto - 35
111.7 Junção de tabelas - 39
III Exercícios - 44
IV- Criação e uso de tabelas 45
1V-Conteúdo 46
1V.1 -CREATETABLE 47
IV.2 Tipos de colunas - 51
IV.3 Alteração 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 transações - 59
lV.8 Manipulação de visões - 67
IV.9 Criação de seqüências - 72
IV Exercícios - 73
V -Geração de Relatórios 75
V Conteúdo - 76
V.1 - Formatação de colunas 77
V.2 - Formatação de títulos 80
V.3 - BREAK e COMPUTE 84
V.4 - Parâmetros de controle 89
V.5 - Utilização de variáveis 93
V.6 - Relatórios avançados 98
1
V Exercícios
- 107
VI Expressões e funções
- 110
VI- Conteúdo 111
VI.1 Operadores - 112
Vl.2 Funções numéricas
- 114
VI.3 Funções de caracteres
- 116
VI.4 Funções de grupo
- 119
VI.5 Conversão entre tipos
- 120
VI.6 Funções de datas
- 123
Vl.7 Outras funções - 124
VI Exercícios
– 125
VII Consultas avançadas
- 126
VII-Conteúdo 127
VII.1 Pseudo-colunas - 128
VII.2 Junção externa - 129
VII.3 Auto-Junção - 132
VII.4 Consultas encaixadas - 133
VII.5 Consultas hierárquicas- 138
VII Exercícios - 141
VIII Tópicos avançados
- 142
VIII Conteúdo - 143
VIII.1 Manutenção de usuários - 144
VllI.2 Privilégios de acesso - 146
VIII.3 Acesso concorrente - 149
VIII.4 lndices - 153
VIII.5 Clusters - 157
VIII.6 Dicionário de dados - 162
VIII Exercícios - 168
Ap. A- Tabelas utilizadas 169
Ap. B- Sumário dos Comandos 174
Ap. C- Resposta dos exercícios 178
2
Conteúdo
I – Introdução
V – Geração de relatórios
VI – Expressão e Funções
3
I – Introdução
4
I.1 – Objetivos do Curso
I – Introdução
5
I.2 – O que é SQL*Plus
O SQL +
comando
SQL*PLUS
Parâmetros de
SQL
BD
do controle Controle de
ORACLE
formatação
• Características principais:
I – Introdução
6
II – Comandos SQL e SQL*Plus
7
II - Conteúdo
1. Ativação do SQL*Plus
2. Criação de tabelas
3. Manipulação de tabelas
4. Formatação de relatórios
5. Edição de comandos
6. Outros comandos
8
II.1 – Ativação 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 não é 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 – Criação de tabelas
• O que é uma tabela?
Coluna
Nome da coluna Linha (ou registro)
Campos
10
• Para criar a tabela de empregados
Somente o cabeçalho
11
II.3 Manipulação de tabelas
12
• Para recuperar as informações da tabela EMP:
Nome da coluna
NOME_EMP
Maiúsculas e minúsculas somente
SAMANTA fazem diferença
RENATO entre ``(aspas simples)
13
• Para remover o empregado de número 110:
14
• Para atualizar o salário do funcionário 110:
15
II.4 Formatação de relatórios
16
II.5 – Edição de comandos
17
• Para inserir linha após a linha corrente:
18
• Para substituir caracteres da linha corrente:
19
• O SQL*Plus permite a utilização de outros buffers além 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 - Exercícios
23
III – Consultas básicas
24
III - Conteúdo
1. Seleção de colunas
2. Uso de expressões
3. Seleção de linhas
4. Ordenação de resultados
5. Agrupamento
6. Operação de conjunto
7. Junção de tabelas
25
III.1 – Seleção 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 expressões
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 – Seleção de linhas
NOME_EMP
SAMANTA
UBIRATAN
RENATO
29
• Para saber o tempo de serviço dos funcionários cuja comissão é
maior que 5% do salário:
NOME_EMP MESES
SILVIO 48.689726
30
III.4 – Ordenação de resultados
31
• Para listar os empregados em ordem decrescente de salário, 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ª expressão do
SELECT, que é
“length(cargo)”
32
III.5 - Agrupamento
• Para saber quantos funcionários trabalham em cada
departamento:
critério de agrupamento
N_DEP COUNT(*)
10 2
20 3
30 3
33
• Para saber a soma dos salários para os cargos onde a média de
salários é maio que 150000:
34
III.6 – Operações 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
- união (UNION)
- intersecção (INTERSECT)
- diferença (MINUS)
35
• União:
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
• Intersecção:
TABELAS CONJUNTOS
Col. 1 Col. 2
B 1 (B, 1)
D 2 (D, 2)
37
• Diferença:
TABELAS CONJUNTOS
Col. 1 Col. 2
A 1
(A, 1)
38
III.7 – Junção 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 ADMINISTRAÇÃO
ANA ADMINISTRAÇÃO
SAMANTA PESQUISA
UBIRITAN PESQUISA
RENATO PESQUISA
RITA VENDAS
SILVIO VENDAS
EVERALDO VENDAS
40
NOME_EMP NOME_DEP EMP.N_DEP DEP.N_DEP
SAMANTA ADMINISTRAÇÃO 20 10
UBIRATAN ADMINISTRAÇÃO 20 10
UBIRATAN ADMINISTRAÇÃO 20 10
PAULO ADMINISTRAÇÃO 10 10
RITA ADMINISTRAÇÃO 30 10
EVERALDO ADMINISTRAÇÃO 30 10
SILVIO ADMINISTRAÇÃO 30 10
ANA ADMINISTRAÇÃO 10 10
RENATO ADMINISTRAÇÃO 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 PRODUÇÃO 10 40
PAULO PRODUÇÃO 10 40
RITA PRODUÇÃO 30 40
EVERALDO PRODUÇÃO 30 40
SILVIO PRODUÇÃO 30 40
ANA PRODUÇÃO 10 40
RENATO PRODUÇÃO 20 40
41
• Dada a tabela FAIXA_SAL, que classifica faixas de salários:
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 junção
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 opções no mesmo comando SQL:
NOME_DEP F COUNT(*)
ADMINISTRAÇÃO E 1
PESQUISA C 1
PESQUISA D 1
VENDAS D 2
VENDAS C 1
43
III - Exercícios
44
IV – Criação e uso de tabelas
45
IV – Conteúdo
1. CREATE TABLE
2. Tipos de colunas
4. O comando INSERT
5. O comando DELETE
6. O comando UPDATE
7. Controle de transações
8. Manipulação de visões
9. Criação de seqüências
46
IV.1 – CREATE TABLE
47
>REFERENCES indica que o valor desta coluna, se
existir,
/ FOREINGN deve existir também na coluna col da
tabela
KEY tab (col) primária tab. As colunas referenciadas
na tabela primária devem ser
PRIMARY KEY ou UNIQUE.
Exemplo:
48
- Forma 2:
- Exemplo:
NOME_DEP Media_Salário
ADMINISTRAÇÃO 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 – Alteração de uma tabela
novo tipo
52
• Restrições para a alteração 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 serão inseridos os
valores. Será inserido o valor NULL nas colunas não
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 condição
ou
UPDATE tabela
SET ( col1 [, col2 ...] ) = ( consulta )
WHERE condição
57
• Exemplos
58
IV.7 – Controle de transações
59
• O início de uma transação é determinado pelo primeiro
comando de manipulação de dados (INSERT, UPDATE,
DELETE) desde o fim da última transação ou inicio da seção
corrente.
60
• Exemplo:
N_DEP NOME_DEP
10 ADMINISTRAÇÃO
20 PESQUISA
30 VENDAS Início de uma transação
40 PRODUÇÃO
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; Início de outra
transação
NOME_DEP
VENDAS
62
• Observações
USUÁRIO 1 USUÁRIO 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 manipulação de dados:
1 record deleted.
1 record created.
1 record deleted.
64
• É possível determinar pontos de salvamento intermediários
em transações:
65
• Para garantir que vários comandos SELECT recuperem
sempre os mesmo dados, independentemente de transações
concorrentes:
SAL
300000
os resultados serão
SQL > sempre iguais
SQL > select sal
2 from emp
3 where n_emp = 110;
SAL
300000
66
IV.8 – Manipulação de visões
Tabela Emp
N_EMP NOME_EMP ...N_DEP
67
- conveniência: consultas complexas podem ser simplificadas
com a criação de visões
Emp
N_EMP NOME_EMP ...N_DEP Dep
103 SAMANTA ...20 N_DEP NOME_DEP
110 UIRATAN ...20
175 PAULO ...10 10 ADMINISTRAÇÃO
189 RITA ...30 20 PESQUISA
201 EVERALDO ...30 30 VENDAS
208 SILVIO ...30 40 PRODUÇÃO
230 ANA ...10
276 RENATO ...20 indicações para o
dep. 20 apenas,
por motivos de
clareza
68
• Uma visão é considerada uma tabela virtual, isto é, funciona
como uma tabela mas não contem dados. Os dados de uma visão
são calculados a partir de outras tabelas (ou visões!).
69
• Uma visão pode ser criada em temo de execução:
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 ADMINISTRAÇÃO
RITA VENDAS
...
70
• Somente é possível atualizar (INSERT, DELERE, UPDATE)
informações em visões que:
71
IV.9 – Criação de seqüências
• Para usá-la:
SQL > INSERT INTO( nome_emp, n_emp, ...)
2 VALUES ( `PROXIMO CLIENTE`, seq_emp.NEXTVAL, ...);
72
IV - Exercícios
73
8. Crie uma visão chamada DEP_SAL baseada nas tabelas EMP e
DEP, contendo as seguintes informações:
74
V – Geração de Relatórios
75
V – Conteúdo
1. Formatação de colunas
2. Formatação de títulos
3. BREAK e COMPUTE
4. Parâmetros de controle
5. Utilização de variáveis
6. Relatórios avançados
V – Geração de Relatórios
76
V.1 – Formatação de colunas
V – Geração de Relatórios
77
»coluna nome de uma coluna ou expressão especificada no
comando SELECT, tal qual aparece no cabeçalho do
resultado do comando.
V – Geração de Relatórios
78
• Exemplos de formatos disponíveis para o comando COLUMN:
V – Geração de Relatórios
79
• Exemplos
salário comissão
Departamento Empreg. anual adicional
ADMINISTRAÇÃO PAULO 6000000.00
ADMINISTRAÇÃO 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 – Geração de Relatórios
80
V.2 – Formatação de títulos
- TTITLE (BTITLE)
- TTIBLE (BTITLE) ON
V – Geração de Relatórios
81
- TTITLE (BTITLE) param1 param2 ...
o paramN:
V – Geração de Relatórios
82
• Exemplo:
25 de dezembro de 1990
Relatório de Empregados – Departamento de Pessoal
N_EMP NOME_EMP SAL
189 RITA 330000
201 EVERALDO 200000
208 SILVIO 150000
V – Geração de Relatórios
83
V.3 – BREAK e COMPUTE
V – Geração de Relatórios
84
• Exemplo:
SECRETARIA ANA
mudança
de página
NOME_DEP CARGO NOME_EMP
PESQUISA ANALISTA SAMANTA
REANATO
DIRETOR UBIRATAN
VENDEDOR SILVIO
EVERALDO
V – Geração de Relatórios
85
• Para mostrar as definições correntes:
V – Geração de Relatórios
86
• O comando COMPUTE permite realizar cálculos sobre os
valores de um grupo organizado pelo comando BREAK:
sum 620000.00
V – Geração de Relatórios
87
• Sintaxe do comando:
V – Geração de Relatórios
88
V.4 – Parâmetros de controle
V – Geração de Relatórios
89
• Os comandos SET e SHOW podem ser aplicados aos seguintes
parâmetros:
V – Geração de Relatórios
90
FEEDBACK n | 6 | ON | OFF número mínimo de linhas que precisam
ser selecionadas para haver impressão
do total de linhas
V – Geração de Relatórios
91
SQLNUMBER ON | OFF liga ou desliga a numeração de linhas
quando da continuação de comandos
SQL
SUFFIX texto | “SQL” texto que será usado como sufixo para
execução e edição de arquivos
V – Geração de Relatórios
92
V.5 – Utilização de variáveis
V – Geração de Relatórios
93
• O SQL*Plus requisita o valor de uma variável se esta não tiver
sido previamente definida:
N_EMP NOME_EMP
110 UBIRATAN
175 PAULO
189 RITA
V – Geração de Relatórios
94
• Para manter o valor fornecido pelo usuário para futuras
utilizações, deve-se substituir o `&`por `&&`:
NOME_EMP SAL
RITA 330000
EVERALDO 200000
SILVIO 150000
NOME_EMP SAL
RITA 330000
EVERALDO 200000
SILVIO 150000
V – Geração de Relatórios
95
• O comando ACCEPT possibilita iniciar variáveis valores
fornecidos pelo usuário:
NOME_EMP SAL
RITA 330000
EVERALDO 200000
SILVIO 150000
V – Geração de Relatórios
96
• Pode-se também especificar parãmentros para a ativação de um
arquivo de comandos SQL*Plus através do comando START:
nome do arquivo
de comandos Parâmetros posicionais
V – Geração de Relatórios
97
V.6 – Relatórios avançados
N_EMP NOME_EMP
175 PAULO
230 ANA
2 records selected.
termina o armazenamento e
imprime o resultado
V – Geração de Relatórios
98
• Se o comando SPOOL OUT for substituído por SPOOL OFF, o
arquivo de saída não será impresso.
N_EMP NOME_EMP
175 PAULO
230 ANA
SQL > spool out
V – Geração de Relatórios
99
• No caso do comando COMPUTE, para eliminar os textos “sum”
e “******” que aparecem como indicadores do cálculo
executado:
$620,000.00
$550,000.00
$680,000.00
V – Geração de Relatórios
100
• As opções 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 – Geração de Relatórios
101
• vamos agora considerar o seguinte relatório:
data de hoje
número da página
Departamento: VENDAS
V – Geração de Relatórios
102
• Para produzir o relatório da página anterior, deve-se
acompanhar os seguintes passos:
V – Geração de Relatórios
103
5. Definir uma variáve para armazenar a data sendo recuperado
pela consulta:
7. Definir os títulos:
set pagasize 20
set linesize 75
set newpage 0
V – Geração de Relatórios
104
• Os comandos necessários à geração do relatório sendo
especificado poderiam (ou deveriam) estar armazenadas em um
arquivo do sistema operacional, RELATORIO.SQL:
V – Geração de Relatórios
105
• Dessa forma, o comando:
V – Geração de Relatórios
106
V - Exercícios
V – Geração de Relatórios
107
2. Faça um arquivo de comando SQL*Plus chamado “ex52.sql” de
forma que sua execução exiba o seguinte resultado:
Relatorio de Empregados
avg 310000
sum 620000
avg 183333.333
sum 550000
avg 226666.667
sum 680000
V – Geração de Relatórios
108
3. Altere o arquivo “ex52.sql” de forma que:
V – Geração de Relatórios
109
VI – Expressões e funções
110
VI - Conteúdo
1. Operadores
2. Funções numéricas
3. Funções de caracteres
4. Funções de grupo
6. Funções de datas
7. Outras funções
VI – Expressões e funções
111
VI.1 - Operadores
• Operadores de valor:
• Operadores lógicos
VI – Expressões e funções
112
[NOT] IN teste de inclusão ou CARGO IN (`ANALISTA`, VENDEDOR`)
exclusão um conjunto
VI – Expressões e funções
113
VI.2 – Funções numéricas
o `R`indica Rowld
o `W`indica “raw”
VI – Expressões e funções
114
• Funções numéricas:
T função Descrição/Exemplo
N SIGN(n) sinal de n
SIGN(-2) = -1
SIGN(0) = 0
SIGN(2) = 1
VI – Expressões e funções
115
VI.3 – Funções de caracteres
T NOME Descrição/Exemplo
N ASCII(c) código ASCII do primeiro caractere de
c
ASCII( `Água`) = 65
VI – Expressões e funções
116
C LTRIM(c, conj_c) remove todos os caracteres de c até o
primeiro caractere que não estiver presente
em conj_c
LTRIM(`AGUA`, `AG`) = `UA`
VI – Expressões e funções
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 – Expressões e funções
118
VI.4 – Funções de grupo
T Nome Descrição
VI – Expressões e funções
119
VI.5 – Conversão entre tipos
T Nome Descrição
VI – Expressões e funções
120
• Conversão automática de tipos:
- `39` + 123
VI – Expressões e funções
121
• a tabela a seguir mostra os principais formatos de datas
existentes (parâmetro fmt utilizado nas funções de conversão)
aplicados à data 13:07:10 de 16/01/91
VI – Expressões e funções
122
VI.6 – Funções de datas
T Nome Descrição
VI – Expressões e funções
123
VI.7 – Outras funções
T Nome Descrição
VI – Expressões e funções
124
VI - Exercícios
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 são
comissionados.
VI – Expressões e funções
125
VII – Consultas avançadas
126
VII - Conteúdo
1. Pseudo-colunas
2. Junção externa
3. Auto-Junção
4. Consultas encaixadas
5. Consultas hierárquicas
127
VII.1 – Pseudo-colunas
T Nome Descrição
128
VII.2 – Junção externa
129
NOME_EMP NOME_DEP EMP.N_DEP DEP.N_DEP
SAMANTA ADMINISTRAÇÃO 20 10
UBIRATAN ADMINISTRAÇÃO 20 10
UBIRATAN ADMINISTRAÇÃO 20 10
PAULO ADMINISTRAÇÃO 10 10
RITA ADMINISTRAÇÃO 30 10
EVERALDO ADMINISTRAÇÃO 30 10
SILVIO ADMINISTRAÇÃO 30 10
ANA ADMINISTRAÇÃO 10 10
RENATO ADMINISTRAÇÃO 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 PRODUÇÃO 10 40
PAULO PRODUÇÃO 10 40
RITA PRODUÇÃO 30 40
EVERALDO PRODUÇÃO 30 40
SILVIO PRODUÇÃO 30 40
ANA PRODUÇÃO 10 40
RENATO PRODUÇÃO 20 40
130
• Solução: fazer de conta que existe uma linha fictícia,
totalmente nula, na tabela de empregados, para que ela seja
associada à linha do departamento 40 (junção externa):
131
VII.3 – Auto-Junção
132
VII.4 – Consultas encaixadas
parênteses 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 PRODUÇAO 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 também podem ser
usados para sub-consultas:
135
• Consultas encaixadas podem ser combinadas de diversas formas
136
• Sub-consultas também podem ser usadas nos comandos de
manipulação de dados (I,U,D)
137
VII.5 – Consultas hierárquicas
175 / PRESIDENTE
138
• Para saber todos os superiores de Everaldo:
indica o começo da
consulta
especifica a conexão da
139
• Podemos usar a pseudo-coluna LEVEL para saber o nível 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 - Exercícios
141
VIII – Tópicos avançados
142
VIII - Conteúdo
1. Manutenção de usuários
143
VIII.1- Manutenção de usuários
144
• Para alterar sua própria senha:
145
VIII.2 – Privilégios de acesso
• Um usuário pode definir quem pode usar suas tabela e que tipo
de operação podem ser realizadas:
146
»WITH GRANT permite que um usuário com um determinado
OPITON privilégio possa transmiti-lo para um terceiro
usuário
147
• Para facilitar o acesso a tabelas de outros usuários pode-se criar
sinônimos para os nomes das tabelas:
148
VII.3 – Acesso concorrente
149
>EXCLUSIVE permite que outros usuários façam consultas à
tabela mas proíbe qualquer outra operação
sobre ela
150
• É possível bloquear antecipadamente algumas linhas de uma
tabela em modo EXCLUSIVE, para posterior atualização:
151
• “Deadlock” é uma situação onde um usuário A espera pela
liberação de uma tabela bloqueada por um usuário B, o qual está
esperando a liberação de outra tabela bloqueada pelo usuário A:
USUÁRIO A USUÁRIO B
152
VII.4 - Índice
153
• Para remover um índice:
ou
o Oracle utilizará o
índice emp_num
154
• Índices também podem ser usados para impedir duplicação 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 não aproveita índices para colunas envolvidas em
expressões aritméticas:
• Para evitar que um índice seja usado, basta fazer uma operação
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 ADMINISTRAÇÃO
189 RITA ...30 20 PESQUISA
201 EVERALDO ...30 30 VENDAS
208 SILVIO ...30 40 PRODUÇÃO
230 ANA ...10
276 RENATO ...20
o departamento e seus
empregados estão
fisicamente agrupados
Cluster Emp_Dep
10 ADMINISTRAÇÃO 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 várias tabelas, mas uma tabela pode
participar no máximo 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 – Dicionário de dados
162
• DICTIONARY descrições de tabelas e visões do dicionário de
dados do Oracle
163
• Para saber quais são suas tabelas, visões, sinônimos 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, sinônimos, seqüências e visões às
quais você tem acesso:
165
• Para saber seus privilégios em tabelas de outros usuários:
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
• é possível armazenar comentários sobre tabelas e colunas no
dicionário 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 código do chefe desta pessoa
167
VIII - Exercícios
168
AP. A – Tabelas utilizadas
169
• Tabelas:
• Conteúdo:
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)
• Conteúdo:
• Conteúdo:
SALMIN SALMAX F
1 99999 A
100000 149999 B
150000 199999 C
200000 399999 D
400000 800000 E
171
SQL > DESCRIBE proj
172
• Visões:
173
Ap. B – Sumário dos Comandos
174
• Principais comandos SQL:
175
• SAVEPOINT determina um ponto de salvamento
intermediário para a transação
• SELECT realiza uma consulta
• SET determina um ponto intermediário de
TRANSACTION salvamento de transações
• UPDATE altera valores de campos de uma tabela
• Comandos SQL*Plus:
176
• DEL, D remove a linha corrente do buffer
• DESCRIBE, DEC mostra a descrição de uma tabela
• DISCONNECT efetiva as transações pendentes e desconecta do
Oracle
• DOCUMENT inicia um “bloco” de documentação no arquivo
corrente
• EDIT, ED invoca um editor do sistema operacional
• EXIT, QUIT termina a execução do SQL*Plus
• GET carrega um arquivo no buffer corrente
• HELP fornece ajuda sobre comandos SQL e
SQL*Plus
• INPUT, I adiciona novas linhas após a linha corrente do
buffer
• LIST, L mostra as linhas presentes no buffer corrente
• PAUSE mostra uma mensagem e espera o usuário
teclar algo
• PROMPT mostra uma mensagem na tela
• REMARK, REM inicia um comentário em um arquivo de
comandos
• RUM mostra e executa o conteúdo do buffer corrente
• RUMFORM executa um formulário previamente gerado
• SAVE salva o conteúdo do buffer corrente em um
arquivo
• SET atribui um valor a um parâmetro do SQL*Plus
• SHOW mostra as definições atuais dos parâmetros do
SQL*Plus
• SPOOL controla a copia de saída dos comandos em
arquivos ou na impressora do sistema
• TTITLE especifica um titulo a ser mostrado no topo de
cada página de um relatório
• UNDEFINE remove a definição de uma variável
• WHENEVER controla o fluxo de execução do SQL*Plus
quando ocorrem erros em comandos SQL
177
AP. C – Resposta dos exercícios
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 Brás 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 = `João 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 Guimarães`, `13-JUL-11`, 350000 );
IV.5:
update aluno
set sal_desejado = 400000
where nome = `João da Silva Neto`;
update aluno
set ender = `Rua Pindamonnhangaba, 123`,
cidade = `Taubaté`, estado = `SP`, cep = 14500
where nome = `Joaquim Alfredo Guimarães`;
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 Guimarães`;
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 “Salário”
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_méd ) 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