Professional Documents
Culture Documents
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
Indica a continuação do
comando
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
SAMANTA somente
RENATO fazem diferença
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 – Comandos SQL e SQL*Plus
17
II – Comandos SQL e SQL*Plus
18
II – Comandos SQL e SQL*Plus
19
II – Comandos SQL e SQL*Plus
20
II – Comandos SQL e SQL*Plus
21
II – Comandos SQL e SQL*Plus
nome do comando
22
II – Comandos SQL e SQL*Plus
II - Exercícios
23
II – Comandos SQL e SQL*Plus
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
III – Consultas básicas
NOME_EMP MESES
SILVIO 48.689726
30
III – Consultas básicas
31
III – Consultas básicas
Indica a 3ª expressão do
SELECT, que é
“length(cargo)”
32
III – Consultas básicas
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
III – Consultas básicas
função de grupo
seleciona os
grupos
(“where” de
34
III – Consultas básicas
Col. 1 Col. 2
A 1 (A, 1) elementos
B 1 (B, 1) do
D 2 conjunto
(D, 2)
Tabela Conjunto
- união (UNION)
- intersecção (INTERSECT)
- diferença (MINUS)
35
III – Consultas básicas
• 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
III – Consultas básicas
• Intersecção:
TABELAS CONJUNTOS
Col. 1 Col. 2
B 1 (B, 1)
D 2 (D, 2)
37
III – Consultas básicas
• Diferença:
TABELAS CONJUNTOS
38
Col. 1 Col. 2
A 1
(A, 1)
A,
B, C X 1, 2
tab1 tab2
col1 col2 col3 col4 col5
A 3 B 2 E
39
select col1, col2, col3, col4, col5
from tab1, tab2;
NOME_EMP NOME_DEP
PAULO ADMINISTRAÇÃO
ANA ADMINISTRAÇÃO
SAMANTA PESQUISA
UBIRITAN PESQUISA
RENATO PESQUISA
RITA VENDAS
SILVIO VENDAS
EVERALDO VENDAS
40
III – Consultas básicas
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
41
ANA PRODUÇÃO 10 40
RENATO PRODUÇÃO 20 40
III – Consultas básicas
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
III – Consultas básicas
NOME_DEP F COUNT(*)
ADMINISTRAÇÃO E 1
PESQUISA C 1
PESQUISA D 1
VENDAS D 2
VENDAS C 1
43
III – Consultas básicas
III - Exercícios
44
III – Consultas básicas
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 – Criação e uso de tabelas
47
>UNIQUE indica que não podem existir valores
duplicados para esta coluna. Não pose
ser usado com PRIMARY KEY
- Forma 2:
- Exemplo:
NOME_DEP Media_Salário
ADMINISTRAÇÃO 310000
PESQUISA 183333.333
VENDAS 226666.667
49
IV – Criação e uso de tabelas
50
IV – Criação e uso de tabelas
CHAR [(tamanho)]
DATE
FLOAT [(tamanho)]
REAL
51
DOBLE PRECISION
LONG
53
IV – Criação e uso de tabelas
- 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.
- Forma 2:
- Exemplo:
55
IV – Criação e uso de tabelas
• Exemplos
56
- Para remover todos os empregados:
SQL > delete from emp;
UPDATE tabela
SET col1 = exp1, col2, = exp2, ... coln = expn
WHERE condição
ou
UPDATE tabela
SET ( col1 [, col2 ...] ) = ( consulta )
WHERE condição
57
»condição especifica as linha que serão atualizadas
• Exemplos
58
IV – Criação e uso de tabelas
59
IV – Criação e uso de tabelas
60
- quando uma transação é interrompida por fatores externos
(queda do sistema) ou internos (“deadlock”); equivale ao
comando ROLLBACK
• Exemplo:
$ sqlplus ora 1/senha 1
SQL*Plus: version 3.0.6.5.1 – Production on Wed Apr 3 08:56 ...
Copyright (c) ORACLE Corporation 1979, 1989. All ...
Connected to: ORACLE RDBMS V6.0.27.9.2, with transaction ...
PL/SQL V1.0.29.1.0 – Beta
SQL > set feedback off
SQL > select n_dep, nome_dep from dep;
inibe algumas mensagens de
aviso
N_DEP NOME_DEP
10 ADMINISTRAÇÃO
20 PESQUISA
30 VENDAS
40 PRODUÇÃO
Início de uma transaçã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;
N_DEP NOME_DEP
10 ADMINISTRAÇÃO O próprio usuário vê os dados, mas
20 PESQUISA eles ainda não foram efetivados
30 VENDAS
40 PRODUÇÃO
50 MARKETING
60 INFORMATICA
fim da transação, com 61
SQL > commit; efetivação dos dados
Commit complete.
IV – Criação e usa de tabelas
SQL > update dep set nome_dep = `COMERCIAL`
2 where n_dep = 30;
SQL > select nome_dep from dep where n_dep = 30;
NOME_DEP Início de
outra
COMERCIAL transação
fim da transação;
as
SQL > rollback; atualizações foram
Rollback complete.
SQL > select nome_dep from dep where n_dep = 30;
NOME_DEP
VENDAS
• Observações
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;
63
SAL SAL
400000 400000
IV – Criação e usa de tabelas
1 record deleted.
1 record created.
1 record deleted.
65
IV – Criação e usa de tabelas
SAL
300000
os resultados serão
SQL > sempre iguais
SQL > select sal
2 from emp
3 where n_emp = 110;
SAL
300000
66
IV – Criação e usa de tabelas
Tabela Emp
N_EMP NOME_EMP ...N_DEP
67
as colunas (nome e definição)
são
herdadas da tabela origem
Emp
N_EMP NOME_EMP ...N_DEP Dep
103 SAMANTA ...20 N_DEP NOME_DEP
110 UIRATAN ...20
10 ADMINISTRAÇÃO
175 PAULO ...10
20 PESQUISA
189 RITA ...30
30 VENDAS
201 EVERALDO ...30
40 PRODUÇÃO
208 SILVIO ...30
230 ANA ...10
276 RENATO ...20 indicações para o
dep. 20 apenas,
por motivos de
clareza
nome_emp nome_dep
SAMANTA PESQUISA
UBIRATAN PESQUISA
PAULO ADMINISTRAÇÃO
RITA VENDAS
...
70
IV – Criação e usa de tabelas
72
• Para usá-la:
IV - Exercícios
73
soma dos dígitos na parte inteira com os dígitos na parte
decimal do numero.
74
11.Desfaça a última atualização realizada.
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
76
5. Utilização de variáveis
6. Relatórios avançados
V – Geração de Relatórios
78
V – Geração de Relatórios
79
• O comando COLUMN, seguido de um nome de coluna (ou
sozinho), exibe as definições daquela coluna (ou de todas as
coluna)
V – Geração de Relatórios
• 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 80
VENDAS SILVIO 1800000.00 9000.00
VENDAS EVERALDO 2400000.00 3000.00
V – Geração de Relatórios
- TTITLE (BTITLE)
81
o mostra a definições corrente
- TTIBLE (BTITLE) ON
V – Geração de Relatórios
o paramN:
82
V – Geração de Relatórios
• 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
84
»repetição NODUPLICATES (padrão) ou DUPLICATES:
controla se os valores de grupo duplicados são
exibidos ou não
V – Geração de Relatórios
• Exemplo:
SECRETARIA ANA
86
• O comando BREAK não é acumulativo côo o comando
COLUMN
V – Geração de Relatórios
• Sintaxe do comando:
88
»evento_break especifica o evento que o SQL*Plus irá utilizar como
“quebra” . Pode ser o nome de uma coluna, expressão
entre aspas, sinônimo, ROW ou REPORT
V – Geração de Relatórios
89
SQL > set pagesize 25
SQL > show pagesize
pagesize 25
V – Geração de Relatórios
• Os comandos SET e SHOW podem ser aplicados aos seguintes
parâmetros:
90
COMPATIBILITY V5 | V6 força compatibilidade com o RDMS
ORACLE V5 ou V6
V – Geração de Relatórios
FEEDBACK n | 6 | ON | OFF número mínimo de linhas que precisam
ser selecionadas para haver impressão
do total de linhas
91
MAXDATE n tamanho máximo de uma linha que o
SQL*Plus pode processar
V – Geração de Relatórios
SQLNUMBER ON | OFF liga ou desliga a numeração de linhas
quando da continuação de comandos
SQL
92
SUFFIX texto | “SQL” texto que será usado como sufixo para
execução e edição de arquivos
V – Geração de Relatórios
93
• Para recuperar o valor de uma variável em uma comando SQL,
deve-se escrever o nome da variável precedido de `&`:
V – Geração de Relatórios
N_EMP NOME_EMP
110 UBIRATAN 94
175 PAULO
189 RITA
• após a utilização de uma variável não previamente definida,
seu valor (fornecido pelo usuário) é descartado
• Para
NOME_EMP manter SAL
o valor fornecido pelo usuário para futuras
RITA utilizações, deve-se
330000 substituir o `&`por `&&`:
EVERALDO 200000
SILVIO 150000
interação para ler
SQL > run o
valor da variável
1 select nome_emp, sal
2 from emp
3 where n_dep = &&v_dep
old 3: where n_dep = &&v_dep
new 3: where n_dep = 30
NOME_EMP SAL
RITA 330000 95
Não há interação: a
EVERALDO 200000 variável
SILVIO 150000 Está permanentemente
V – Geração de Relatórios
NOME_EMP SAL
RITA 330000
EVERALDO 200000 96
SILVIO 150000
• O comando PROMPT permite exibir informações na tela:
V – Geração de Relatórios
nome do
arquivo Parâmetros posicionais
de comandos
97
• Onde o arquivo LISTAEMP.SQL contém os seguintes
comandos:
V – Geração de Relatórios
inicia armazenamento do
resultado
98
no arquivo “relat1.lst”
SQL > apool relat1
SQL > start listaemp 10 100000
SQL > rem O primeiro parametro determina o departamento onde os
SQL > rem empregados selecionados trabalham
SQL > rem O segundo parâmetro determina o salário minino que os
SQL > rem empregados selecionados recebem.
SQL > select n_emp, nome_emp
2 from emp
3 where n_dep = &1 and
4 sal > = &2;
old 3: where n_dep = &1 and
new 3: where n_deo = 10 and
old 4: sal > = &2;
new 4: sal > = 100000;
N_EMP NOME_EMP
175 PAULO
230 ANA
2 records selected.
termina o armazenamento e
imprime o resultado
V – Geração de Relatórios
N_EMP NOME_EMP
175 PAULO
99
230 ANA
SQL > spool out
V – Geração de Relatórios
$620,000.00
$550,000.00
$680,000.00
V – Geração de Relatórios
V – Geração de Relatórios
Num Nome Empregado Salário Comissão Porc.
208 SILVIO $150,000.00 $9,000.00 5.66
189 RITA $330,000.00 $5,000.00 1.49
• vamos
201 agora considerar
EVERALDO o seguinte
$200,000.00 relatório:
$5,000.00 1.48
data de hoje
número da página
102
departamento dos empregados
Departamento: VENDAS apresentados nesta página
V – Geração de Relatórios
V – Geração de Relatórios
set pagasize 20
set linesize 75
set newpage 0
106
- teria como efeito gerar o relatório na impressora do
sistema
V – Geração de Relatórios
V - Exercícios
107
b) coloque um titulo centralizado indicando “Salário por hora
dos Empregados”
Relatorio de Empregados
avg 310000
sum 620000
V – Geração de Relatórios
PESQUISA SAMANTA ANALISTA 150000
UBIRATAN DIRETOR 300000
RENATO ANALISTA 100000
2. Faça um arquivo
************** de comando SQL*Plus chamado “ex52.sql” de
forma que sua execução exiba o seguinte resultado:
avg 183333.333
sum 550000
V – Geração de Relatórios
109
c) Somente o resultado da consulta seja armazenado no
arquivo “ex.53.lst”
V – Geração de Relatórios
110
VI – Expressões e funções
111
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
112
VI.1 - Operadores
• Operadores de valor:
• Operadores lógicos
113
VI – Expressões e funções
114
VI – Expressões e funções
o `D`indica data
o `N`indica número
o `R`indica Rowld
o `W`indica “raw”
o m, n : expressões numéricas
115
VI – Expressões e funções
• 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
116
VI – Expressões e funções
T NOME Descrição/Exemplo
N ASCII(c) código ASCII do primeiro caractere de
c
ASCII( `Água`) = 65
117
VI – Expressões e funções
118
VI – Expressões e funções
119
VI – Expressões e funções
T Nome Descrição
120
VI – Expressões e funções
T Nome Descrição
121
VI – Expressões e funções
- `39` + 123
122
VI – Expressões e funções
123
VI – Expressões e funções
T Nome Descrição
124
VI – Expressões e funções
T Nome Descrição
125
VI – Expressões e funções
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.
126
VI – Expressões e funções
127
VII - Conteúdo
1. Pseudo-colunas
2. Junção externa
3. Auto-Junção
4. Consultas encaixadas
5. Consultas hierárquicas
128
VII – Consultas avançadas
VII.1 – Pseudo-colunas
T Nome Descrição
129
VII – Consultas avançadas
130
VII – Consultas avançadas
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
131
VII – Consultas avançadas
132
VII – Consultas avançadas
VII.3 – Auto-Junção
133
VII – Consultas avançadas
parênteses
SQL > select n_emp, nome_emp, sal
delimitam a
2 from emp sub-consulta
3 where sal > (select avg(sal) from emp);
N_DEP NOME_DEP
40 PRODUÇAO esta sub-consulta retorna
um conjunto de valores
134
VII – Consultas avançadas
135
VII – Consultas avançadas
136
VII – Consultas avançadas
137
VII – Consultas avançadas
138
VII – Consultas avançadas
175 / PRESIDENTE
139
VII – Consultas avançadas
indica o começo
da
especifica a conexão da
consulta
140
VII – Consultas avançadas
LEVEL NOME
1 PAULO
2 UBIRATAN
3 SAMANTA
3 RENATO
2 RITA
3 EVERALDO
3 SILVIO
2 ANA
141
VII – Consultas avançadas
VII - Exercícios
142
VII – Consultas avançadas
143
VIII - Conteúdo
1. Manutenção de usuários
144
VIII – Tópicos avançados
145
VIII – Tópicos avançados
146
VIII – Tópicos avançados
• Um usuário pode definir quem pode usar suas tabela e que tipo
de operação podem ser realizadas:
147
>UPDATE (col1, permite atualizar as colunas col1, …, coIN
..., coIN Se nenhuma coluna for especificada, então
todas poderão ser alteradas
148
VIII – Tópicos avançados
149
VIII – Tópicos avançados
150
EXCLUSIVE individualmente, mas sem poder bloquear toda
a tabela de forma alguma (nem em modo
SHARE)
151
VIII – Tópicos avançados
152
VIII – Tópicos avançados
USUÁRIO A USUÁRIO B
O Oracle detecta a
ocorrência
de um deadlock
153
VIII – Tópicos avançados
VII.4 - Índice
154
VIII – Tópicos avançados
ou
155
o Oracle utilizará
o
índice emp_num
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
156
VIII – Tópicos avançados
• Para evitar que um índice seja usado, basta fazer uma operação
sem efeito na primeiro coluna associada ao índice:
157
VIII – Tópicos avançados
VIII.5 - Clusters
Emp
N_EMP NOME_EMP ...N_DEP Dep
103 SAMANTA ...20 N_DEP NOME_DEP
110 UIRATAN ...20
10 ADMINISTRAÇÃO
175 PAULO ...10
20 PESQUISA
189 RITA ...30
30 VENDAS
201 EVERALDO ...30
40 PRODUÇÃO
208 SILVIO ...30
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 ...
158
VIII – Tópicos avançados
159
VIII – Tópicos avançados
160
VIII – Tópicos avançados
Table created
Table dropped.
Table renamed.
161
VIII – Tópicos avançados
• Em geral clusters:
162
VIII – Tópicos avançados
163
• ALL_TAB_COMENTS comentários sobre tabelas e visões acessíveis
ao usuário
164
VIII – Tópicos avançados
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
165
VIII – Tópicos avançados
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
167
VIII – Tópicos avançados
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
168
VIII – Tópicos avançados
VIII - Exercícios
169
VIII – Tópicos avançados
170
• Tabelas:
• Conteúdo:
171
Ap. A – Tabelas utilizadas
• Conteúdo:
172
• Conteúdo:
SALMIN SALMAX F
1 99999 A
100000 149999 B
150000 199999 C
200000 399999 D
400000 800000 E
173
Ap. A – Tabelas utilizadas
• Visões:
175
• Principais comandos SQL:
176
• INSERT insere novas linhas em uma tabela ou visão
• LOCK TABLE bloqueia uma tabela
• RENAME muda o nome de uma tabela, visão ou
sinônimo
• Comandos SQL*Plus:
177
• CLEAR apaga as definições dos comandos BREAK,
COMPUTE, COLUMN, etc.
• COLUMN especifica como uma coluna e seu nome devem
ser mostrados em um relatório
• COMPUTE realiza cálculos em um conjunto de linhas
selecionadas. Funciona em conjunto com o
comando BREAK
• CONNECT termina a sessão corrente e se conecta
novamente ao ORACLE
• DEFINE define uma variável e atribui um valor a ela
178
• 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
179
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`);
180
II.3:
column niver format a5
select nome “Aluno”, to_char( aniversario, `DD/MM` ) “ Niver”
from aluno;
II.5:
save ex24
exit
sqlplus ora1/senha1
start ex24
III.1:
III.2:
select nome_emp, sal + com
from emp
where cargo = `VENDEDOR`
181
III.3:
III.4:
select min(sal)
from emp;
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;
182
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 ) );
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;
183
IV.7:
delete from aluno
where nome = `Joaquim Alfredo Guimarães`;
commit;
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;
184
IV.11:
rollback;
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; 185
Ap. C – Resposta dos exercícios
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 186
com is not null;
VI.2:
select userenv( `sessionid`), userenv( `terminal`)
from dual;
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:
187
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;
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;
188
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;
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 ); 189
VII.6:
rollback;
VIII.1:
grant select, insert on aluno to ora
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;
190
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`;
191