Buscar

Apostila-SQL

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 191 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 191 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 191 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Índice
 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
II – Comando SQL e SQL*Plus
III – Consultas básicas
IV – Criação e uso de tabelas
V – Geração de relatórios
VI – Expressão e Funções
VII – Consultas avançadas
VIII – Tópicos avançados
Apêndice A – Tabelas utilizadas
Apêndice B – Sumário dos comandos
3
 
 I – Introdução
4
I.1 – Objetivos do Curso
• Neste curso você aprenderá a usar o SQL*Plus para:
- Definir e alterar a estrutura de um banco de dados
- Consultar, inserir, alterar ou remover informações de um 
banco de dados
- Gerar relatórios a partir de consultas
- Gerenciar a segurança e o desempenho de um banco de 
dados 
I – Introdução
5
comando 
do controle
I.2 – O que é SQL*Plus
• É a interface básica para manipulações genéticas de um banco 
de dados ORACLE
 O SQL + SQL
 BD
 ORACLE
 
• Características principais:
- interpretador de comando SQL
- possui extensões para formatação de relatórios
I – Introdução
6
SQL*PLUS
Parâmetros de
Controle de
formatação
 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
II – Comandos SQL e SQL*Plus
8
II.1 – Ativação do SQL*Plus
• Para entrar no SQL*Plus, digite:
 ou
• Para sair do SQL*Plus, digite:
II – Comandos SQL e SQL*Plus
9
$ 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
Enter password: ____
Connected to: ORACLE RDBMS V6.0.27.9.2, with transaction...
PL/SQL V1.0.29.1.0 – Beta
SQL>
a senha não é exibida
$ sqlplus ora 1/senha1
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 >
a senha é exibida
SQL > exit
$
II.2 – Criação de tabelas
• O que é uma tabela?
II – Comandos SQL e SQL*Plus
10
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 20 
 
 
Coluna
Nome da coluna Linha (ou registro)
Campos
• Para criar a tabela de empregados
II – Comandos SQL e SQL*Plus
11
SQL > create table emp (
2 n_emp number (4) not null,
3 nome_emp char (10),
4 cargo char (10)
5 chefe number (4),
6 data_adm date,
7 sal number (10,2),
8 com number (10,2),
9 n_dep number (2) );
“.” Separa as 
definições
das colunas
“.” Executa o 
comando
Indica a continuação do 
comando
N_EMP NOME_EMP CARGO CHEFE DATA_ADM SAL COM N_DEP
Somente o 
cabeçalho
II.3 Manipulação de tabelas
• Para inserir informações na tabela EMP:
II – Comandos SQL e SQL*Plus
12
SQL > insert into emp values
2 ( 103, `SAMANTA`, `ANALISTA`, 110,
 3 ´17-MAR-85´, 150000, NULL, 209;
SQL > insert into emp values
2 ( 110, ´UBIRATAN´, ´DIRETOR´, 175, ´20-APR-85´,
3 300000, NULL, 20);
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
Nome da coluna
• Para recuperar as informações da tabela EMP:
• Para recuperar apenas o nome dos empregados que são 
analistas:
II – Comandos SQL e SQL*Plus
13
SQL > select * from emp;
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 10-MAY-89 120000 10
276 RENATO ANALISTA 110 30-APR-86 100000 20 
 
SQL > select nome_emp
2 from emp3 where cargo = ´ANALISTA`;
NOME_EMP
SAMANTA
RENATO
Condição a ser satisfeita
Maiúsculas e minúsculas 
somente
fazem diferença
• Para remover o empregado de número 110:
• Para remover todos os empregados admitidos a partir de 1989:
II – Comandos SQL e SQL*Plus
14
SQL > delete from emp
 2 where n_emp = 110;
SQL > delete from emp
 2 where data_adm > = `01-JAN-89´;
• Para atualizar o salário do funcionário 110:
II – Comandos SQL e SQL*Plus
15
N_EMP NOME_EMP ... SAL ...
110 UBIRATAN 300000
SQL > update emp
2 set sal = 350000
3 where n_emp= 110;
N_EMP NOME_EMP ... SAL ...
110 UBIRATAN 350000
II.4 Formatação de relatórios
• Comandos SQL x Comandos SQL*Plus
- SQL – acesso ao banco de dados
- SQL*Plus – formato de apresentação dos resultados, 
basicamente.
• Para produzir um relatório com o nº, nome e salário de todos os 
funcionários:
 
16
SQL > column n_emp heading NUMERO
SQL > column nome_emp heading NOME
SQL > column sal format 999999.99 –
> heading SALARIO
SQL > select n_emp, nome_emp, sal from emp;
Comandos SQL*Plus não
Precisam de “;”
Para continuar um 
comando,
Use o caractere “_”
NUMERO NOME SALARIO
103 SAMANTA 150000.00
110 UBIRATAN 300000.00
175 PAULO 500000.00
189 RITA 330000.00
201 EVERALDO 200000.00
208 SILVIO 150000.00
230 ANA 120000.00
276 RENATO 100000.00
II – Comandos SQL e SQL*Plus
II.5 – Edição de comandos
• O ultimo comando SQL (não SQL*Plus) fica armazenado no 
buffer de edição do SQL*Plus
• Para listar o conteúdo do buffer:
• Para apagar a linha corrente:
17
SQL > list
ou
SQL > I
1 select
2 n_emp, nome_emp
3 from emp
4* where n_emp =110
Qualquer em desses comando
Poder ser utilizado
“*” indica a linha corrente
SQL > del
SQL > I
1 select
2 n_emp, nome_emp
3* from emp
II – Comandos SQL e SQL*Plus
• Para inserir linha após a linha corrente:
• Para acrescentar caracteres no fim da linha corrente:
18
SQL > list 2
 2* n_emp, nome_emp
SQL > input
ou
SQL > I
3 cargo,
4 sal
5 
SQL > list
1 select
2 n_emp, nome_emp
3 cargo,
4 sal
5* from emp
Deixe uma linha em branco
Para terminar a inserção
SQL > list 2
 2* n_emp, nome_emp
SQL > append, chefe,
ou
SQL > a, chefe,
SQL > list
1 select
2 n_emp, nome_emp, chefe,
3 cargo,
4 sal
5* from emp
II – Comandos SQL e SQL*Plus
• Para substituir caracteres da linha corrente:
• Para executar o comando existente no buffer:
19
SQL > list 2
 2* n_emp, nome_emp, chefe,
SQL > change/chefe/sal/
ou
SQL > c/chefe/sal/
SQL > list
1 select
2 n_emp, nome_emp, sal,
3 cargo,
4 sal
5* from emp
SQL > run
ou
 SQL > r
ou
SQL > /
II – Comandos SQL e SQL*Plus
• O SQL*Plus permite a utilização de outros buffers além do 
buffer de comandos SQL
• Para ativar um buffer chamado “TESTE”, por exemplo:
• Para saber qual é o buffer corrente:
• Para modificar o conteúdo do buffer corrente com um editor 
externo:
 
• O editor externo pode ser especificado pelo usuário da seguinte 
forma: 
20
SQL > set buffer teste
SQL > show buffer
buffer TESTE
SQL > edit
SQL > define _ editor = vi
II – Comandos SQL e SQL*Plus
• para salvar o buffer corrente num arquivo do Sistema 
Operacional:
• Para recuperar um comando SQL armazenado num arquivo: 
• Para executar um seqüência de comando (SQL ou SQL*Plus) 
armazenada num arquivo:
• Para editar um arquivo qualquer do sistema operacional:
 
21
SQL > save arquivo
nome do arquivo; a extensão .sql é
acrescentada automaticamente
SQL > get arquivo
SQL > start arquivo
ou
SQL > @arquivo
SQL > edit en21
É assumida a extensão “.sql”
II – Comandos SQL e SQL*Plus
II.6 – Outros comandos
• Para executar um comando qualquer do sistema operacional:
• Para obter ajuda sobre um comando SQL ou SQL*Plus:
• Para saber todos os comandos disponíveis:
22
SQL > host
ou
SQl > !
total 20
drwxr-xr-x 2 curso oracle 128 Jan 3 18:02 .
drwxr-xr-x 3 curso oracle 1024 Jan 3 17:59 ..
-rw-r-r- 1 curso oracle 800 Jan 3 17:59 ex21.sql
-rw-r-r- 1 curso oracle 838 Jan 3 17:59 ex22.sql
-rw-r-r- 1 curso oracle 1152 Jan 3 18:01 ex23.sql
-rw-r-r- 1 curso oracle 1616 Jan 3 18:01 ex24.sql
-rw-r-r- 1 curso oracle 1796 Jan 3 18:01 ex25.sql
SQL > help select
nome do comando
SQL > help commands
II – Comandos SQL e SQL*Plus
II - Exercícios
1. Crie uma tabela chamada “ALUNO” com as seguintes colunas:
NOME CHAR( 30 ) NOT NULL
ENDER CHAR( 50 )
CIDADE CHAR( 25 )
ESTADO CHAR( 2 )
CEP NUMBER( 5 )
ANIVERSARIO DATE
dica: veja um exemplo na página 11
2. Insira dados sobre você e algum membro da sua família na tabela 
ALUNO
(dica: exemplos na página 12)
3. Consulte o nome e a data de aniversário das pessoas cadastradas
(dica: exemplo na página 13)
4. Consulte o seu (e somente o seu ) endereço completo
5. Salve o comando anterior no arquivo “ex24.sql”, saia do SQL*Plus, 
entre novamente e execute o comando contido no arquivo gerado 
23
II – Comandos SQL e SQL*Plus
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
III – Consultas básicas
25
III.1 – Seleção de colunas
• Para indicar as colunas a serem recuperadas de uma tabela:
• A ordem em que as colunas são especificadas muda a 
apresentação do resultado:
III – Consultas básicas
26
SQL > select n_emp, nome_emp
2 from emp
3 where n_emp < 200;
N_EMP NOME_EMP
103 SAMANTA
110 UBIRATAN
175 PAULO
189 RITA
SQL > select nome_emp, n_emp
2 from emp
3 where n_emp < 200;
NOME_EMP N_EMP
SAMANTA 103
UBIRATAN 110
PAULO 175
RITA 189
III.2 – Uso de expressões
• Para saber o salário anual dos empregados
III – Consultas básicas
27
NOME_EMP CARGO SAL
SAMANTA ANALISTA 150000
UBIRATAN DIRETOR 300000
PAULO PRESIDENTE 500000
RITA DIRETOR 330000
EVERALDO VENDEDOR 200000
SILVIO VENDEDOR 150000
ANA SECRETARIA 120000
RENATO ANALISTA 100000
SQL > select nome_emp, 12* sal from emp;
NOME_EMP 12*SAL
SAMANTA 1800000
UBIRATAN 3600000
PAULO 6000000
RITA 3960000
EVERALDO 2400000
SILVIO 1800000
ANA 1440000
RENATO 1200000
• Para saber o nº total de caracteres nas colunas NOME_EMP E 
CARGO
III – Consultas básicas 
28
NOME_EMP CARGO SAL
SAMANTA ANALISTA 150000
UBIRATAN DIRETOR 300000
PAULO PRESIDENTE 500000
RITA DIRETOR 330000
EVERALDO VENDEDOR 200000
SILVIO VENDEDOR 150000
ANA SECRETARIA 120000
RENATO ANALISTA 100000
SQL > select
2 length ( nome_emp ) +
3 length ( cargo ) “Comprimento Total”
4 from emp;
Comprimento Total
 
 15
 15
 15
 11
 16
 14
 13
 14
III.3 – Seleção de linhas
• Para saber os nomes dos empregados que trabalham no 
departamento 20:
29
N_EMP NOME_EMP CARGO ... N_DEP
103 SAMANTA ANALISTA ... 20
110 UBIRATAN DIRETOR ... 20
175 PAULO PRESIDENTE ... 10
189 RITA DIRETOR ... 30
201 EVERALDO VENDEDOR ... 30
208 SILVIO VENDEDOR ... 30
230 ANA SECRETARIA ... 10
276 RENATO ANALISTA ... 20
SQL > select nome_emp
3 from emp
4 where n_dep = 20;
NOME_EMP
SAMANTA
UBIRATAN
RENATOIII – Consultas básicas
• Para saber o tempo de serviço dos funcionários cuja comissão é 
maior que 5% do salário:
30
SQL > select nome_emp,
2 months_between( sysdate, data_adm ) MESES
3 from emp
4 where com > sal * 0.05;
NOME_EMP MESES
SILVIO 48.689726
III – Consultas básicas
III.4 – Ordenação de resultados
• Para listar os funcionários em ordem alfabética:
31
SQL > select nome_emp, cargo, sal
2 from emp
3 order by nome_emp;
NOME_EMP CARGO SAL
ANA SECRETARIA 120000
EVERALDO VENDEDOR 200000
PAULO PRESIDENTE 500000
RENATO ANALISTA 100000
RITA DIRETOR 330000 
SAMANTA ANALISTA 150000
SILVIO VENDEDOR 150000
UBIRATAN DIRETOR 300000
III – Consultas básicas
• Para listar os empregados em ordem decrescente de salário, por 
cargo:
• Pode-se usar expressões ou referencias à posição de expressões 
no SELECT como argumento do ORDER BY:
32
SQL > select nome_emp, cargo, sal
2 from emp
3 where cargo in ( `ANALISTA`, ´VENDEDOR`,
4 `DIRETOR`, ´SECRETARIA` )
5 order by cargo, sal desc; 
NOME_EMP CARGO SAL
SAMANTA ANALISTA 150000
RENATO ANALISTA 100000
RITA DIRETOR 330000
UBIRATAN DIRETOR 300000
ANA SECRETARIA 120000
EVERALDO VENDEDOR 200000
SILVIO VENDEDOR 150000
SQL > select nome_emp, cargo, length( cargo ), sal
2 from emp
3 where cargo in (`ANALISTA`, `VENDEDOR`,
4 `DIRETOR`, `SECRETARIA`)
5 order by 3, sal – nvl(com, 0 ) desc;
Indica a 3ª expressão do
SELECT, que é
“length(cargo)”
III – Consultas básicas
III.5 - Agrupamento
• Para saber quantos funcionários trabalham em cada 
departamento:
• Para saber quantos funcionários trabalham em cada 
departamento:
22222222222jhglkjhgflkgjhfdlghfg ,lhdlfgn v
• Nota : omitir a cláusula “GROUP BY” significa agrupar toda a 
tabela
33
N_EMP NOME_EMP CARGO CHEFE DATA_ADM SAL COM N_DEP
230 ANA SECRETARIA 175 01-MAY-89 120000 10
175 PAULO PRESIDENTE 27-FEB-86 500000 10
103 SAMANTA ANALISTA 110 17-MAR-85 150000 20
276 RENATO ANALISTA 110 30-APR-86 100000 20
110 UBIRATAN DIRETOR 175 20-APR-85 300000 20
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
SQL > select n_dep, count(*)
2 from emp
3 group by n_dep;
2
3
3
coluna do agrupamento “todas as linhas”
Função de grupo
critério de agrupamento
N_DEP COUNT(*)
10 2
20 3
30 3
III – Consultas básicas
• Para saber a soma dos salários para os cargos onde a média de 
salários é maio que 150000:
34
N_EMP NOME_EMP CARGO ... SAL ...
103 SAMANTA ANALISTA ... 150000 ...
276 RENATO ANALISTA ... 100000 ...
110 UBIRATAN DIRETOR ... 300000 ...
189 RITA DIRETOR ... 330000 ...
175 PAULO PRESIDENTE ... 500000 ...
230 ANA SECRETARIA ... 120000 ...
201 EVERALDO VENDEDOR ... 200000 ...
208 SILVIO VENDEDOR ... 150000 ...
AVG = 125000
AVG = 315000 
AVG = 120000
AVG = 175000
SQL > select cargo, sum( sal ), max( sal )
2 from emp
3 group by cargo
4 having avg( sal ) > 150000;
seleciona os 
grupos
(“where” de 
função de grupo
CARGO SUM(SAL) MAS(SAL)
DIRETOR 630000 330000
PRESIDENTE 500000 500000
VENDEDOR 350000 200000
III – Consultas básicas 
III.6 – Operações de conjunto
• Uma tabela pode ser encerada como um conjunto
• Os elementos do conjunto são as linhas da tabela:
Col. 1 Col. 2
A 1
B 1
D 2
Tabela Conjunto
• Existem três operações básicas de conjunto em SQL:
- união (UNION) 
 
- intersecção (INTERSECT)
- diferença (MINUS)
35
 (A, 1)
 (B, 1)
 (D, 2)
elementos
do
conjunto
III – Consultas básicas
• União:
 TABELAS CONJUNTOS
 
 TAB1 TAB2 Cj1 Cj2 
Col. 1 Col. 2
A 1
B 1
D 2
 
 colunas com tipo igual 
 select col1, col2 from tab1
 Cj1 U Cj2
 union
 select col1, col2 from tab2 
Col. 1 Col. 2
A 2
B 1
E 2
D 2
Col. 1 Col. 2
A 1
A 2
B 1
D 2
E 2
36
(A, 1)
(B, 1)
(D, 2)
 (A, 2)
(B, 1)
(E, 2)
(D, 2)
(A, 1)
(A, 2)
(B, 1)
(D, 2)
(E, 2)
III – Consultas básicas
• Intersecção:
 TABELAS CONJUNTOS
 
 TAB1 TAB2 Cj1 Cj2 
Col. 1 Col. 2
A 1
B 1
D 2
 
 colunas com tipo igual 
 select col1, col2 from tab1
 Cj1 inter Cj2
 intersect
 select col1, col2 from tab2 
Col. 1 Col. 2
A 2
B 1
E 2
D 2
Col. 1 Col. 2
B 1
D 2
37
(A, 1)
(B, 1)
(D, 2)
 (A, 2)
(B, 1)
(E, 2)
(D, 2)
(B, 1)
(D, 2)
III – Consultas básicas
• Diferença:
 TABELAS CONJUNTOS
 
 TAB1 TAB2 Cj1 Cj2 
Col. 1 Col. 2
A 1
B 1
D 2
 
 colunas com tipo igual 
 select col1, col2 from tab1
 Cj1 - Cj2
 minus
 select col1, col2 from tab2 
Col. 1 Col. 2
A 2
B 1
E 2
D 2
38
(A, 1)
(B, 1)
(D, 2)
 (A, 2)
(B, 1)
(E, 2)
(D, 2)
III – Consultas básicas
III.7 – Junção de tabelas
• A junção de tabelas corresponde à operação de produtos 
cartesiano entre conjuntos:
 
 X
 tab1 tab2
col1 col2 col3 col4 col5
A 3 B 2 E
Col. 1 Col. 2
A 1
39
(A, 1)
A,
B, C 1, 2
(A, 1), (A, 2),
(B,1), (B,2),
(C,1), (C, 2)
select col1, col2, col3, col4, col5
from tab1, tab2;
Col1 col2 col3 col4 col5
A 3 B 2 E
III – Consultas básicas
• Para saber o nome do departamento onde cada empregado 
trabalha:
40
SQL > select nome_emp, nome_dep
2 from emp, dep
3 where emp.n dep = dep.n_dep; 
produto cartesiano
critério de seleção da junção 
para diferenciar coluna 
de
mesmo nome usa-se o 
no-
NOME_EMP NOME_DEP
PAULO ADMINISTRAÇÃO 
ANA ADMINISTRAÇÃO
SAMANTA PESQUISA
UBIRITAN PESQUISA
RENATO PESQUISA
RITA VENDAS
SILVIO VENDAS
EVERALDO VENDAS
III – Consultas básicas
41
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
III – Consultas básicas
• Dada a tabela FAIXA_SAL,que classifica faixas de salários:
• Para saber a faixa salarial de todos os empregados:
42
SALMIN SALMAX F
1 99999 A
 100000 149999 B
 150000 199999 C
 200000 399999 D
 400000 800000 E
SQL > select nome_emp, sal, faixa
2 from emp, faixa_sal
3 where sal between salmin and salmax;
NOME_EMP SAL F
ANA 120000 B
RENATO 100000 B
SAMANTA 150000 C
SILVIO 150000 C
UBIRATAN 300000 D
RITA 300000 D
EVERALDO 200000 D
PAULO 500000 E
 
especifica um tipo 
de junção
III – Consultas básicas
• Pode-se combinar diversas opções no mesmo comando SQL:
43
SQL > select nome_dep, faixa, count( * )
2 from emp, dep, faixa_sal
3 where emp.n_dep = dep.n_dep and
4 sal between salmin and salmax
5 group by nome_dep, faixa
6 having sum( sal ) > 120000
7 order by nome_dep, count( * ) desc
NOME_DEP F COUNT(*)
ADMINISTRAÇÃO E 1
PESQUISA C 1
PESQUISA D 1
VENDAS D 2
VENDAS C 1
III – Consultas básicas
III - Exercícios
1. Consulte o cargo, o nome e o salário por hora (assumindo 160 
horas/mês) de todos os funcionários da tabela EMP; salve seu 
exercício no arquivo “ex31.sql”.
2. Consulte o nome e o total mensal (salário mais comissão) 
recebido pelos vendedores da tabela EMP.
3. Carregue o conteúdo do arquivo “ex31.sql” no buffer corrente e 
modifique-o de forma a ordenar o resultado em ordem 
decrescente do salário por hora; salve seu exercício novamente, 
no mesmo arquivo. 
4. Descubra o menor salário de todos os empregados. Dica: vela a 
nora da página 33.
5. Descubra o menor, o maior e a média dos salários de cada 
departamento, para aqueles departamentos que tem mais de um 
empregado. Dica: veja a página 34.
 
6. Consulte o nome e o departamento de todos os empregados que 
trabalham em São Paulo ou Campinas; salve sei exercícios no 
arquivo “ex36.sql”. Dica: faça uma junção da tabela EMP com a 
tabela DEP (página 42), e recupere somente as linhas onde a 
localidade do departamento é São Paulo ou Campinas.
44
III – Consultas básicas
IV – Criação e uso de tabelas
45
IV – Conteúdo
1. CREATE TABLE
2. Tipos de colunas
3. Alteração de uma tabela
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
IV.1 – CREATE TABLE
• O comando CREATE TABLE é usado para criar novas tabelas 
no banco de dados
- Forma 1:
 
» nome_da_tabela nome da tabela a ser criada
» coluna_1,... colunas da tabela
» tipo1, tipo2,... tipos das respectivas colunas
» tamanho tamanho para um tipo
» restrições uma combinação de zero ou mais de:
>NULL ou NOT indica que a coluna pode conter 
valores nulos (opção “default”) ou não
>DEFAULT expr determina o valor “default” da coluna 
como sendo expr
47
CREATE TABLE nome_da_tabela
 (
coluna_1 tipo1,
coluna_2 tipo2( tamanho ),
coluna_3 tipo3 restrições,
coluna_4 tipo4( tamanho ) restrições
restrições
 );
especificação do tamanho
entre parênteses
Definição das 
colunas separadas 
por “,”
>UNIQUE indica que não podem existir valores 
duplicados para esta coluna. Não pose 
ser usado com PRIMARY KEY
>PRIMARY KEY indica que esta coluna é chave primaria. 
Não pode ser usado com UNIQUE.
IV – Criação e uso de tabelas
>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. 
 
>CHECK determina que o valor desta coluna 
deve condição obedecer á condição lógica 
especificada
>CONSTRAINT determina que o valor desta coluna 
deve 
nome_restr obedecer à restrições nome_restr
 OBS: Embora todas as restrições acima possam ser definidas, o 
RDBMS ORACLE versão 6 só garante a primeira: NULL ou 
NOT NULL. Entretanto, o SQL*Forms 3.0 é capaz de gerar 
código automaticamente para vários tipos de restrições. 
 Exemplo:
48
SQL > CREATE TABLE emp
 2 ( n_emp number(4) NOT NULL PRIMARY KEY,
 3 nome_emp char(10) NOT NULL,
 4 cargo char(10),
 5 chefe number(4) REFERENCES emp(n_emp),
 6 data_adm date DEFAULT sysdate
7 CHECK (data_adm < = sysdate),
8 sal number(10,2),
9 com number(10,2) CHECK(com > 0),
10 n_dep number(2) REFERENCES dep(n_dep) );
IV – Criação e uso de tabelas
- Forma 2:
- Cria uma tabela igual ao resultado da consulta executada 
com o comando “SELECT” 
- Exemplo:
49
CREATE TABLE tabelas AS
SELECT col1, col2, ... coln
FROM ...
SQL > create table sal_médio as
2 select nome_dep, avg( sal ) “Media_Salario”
3 from dep, emp
4 where emp.n_dep = dep.n_dep
5 group by nome_dep;
SQL > select * from sal_médio;
NOME_DEP Media_Salário
ADMINISTRAÇÃO 310000
PESQUISA 183333.333
VENDAS 226666.667
IV – Criação e uso de tabelas
• Para verificar a estrutura de uma tabela
• Para remover uma tabela:
• Para mudar o nome de uma tabela: 
50
SQL > describe emp
Ou
SQL > desc emp
Name Null? Type
N_EMP NOT NULL NUMBER(4)
NOME_EMP NOT NULL CHAR(10)
CARGO CHAR(10)
CHEFE NUMBER(4)
DATA_ADM DATE
SAL NUMBER(10,2)
COM NUMBER(10,2)
N_DEP NUMBER(2)
SQL > drop table faixa_sal;
SQL > rename dep to departamento;
IV – Criação e uso de tabelas
IV.2 – Tipos de colunas
• O Oracle suporta os seguintes tipos:
 CHAR [(tamanho)]
 VARCHAR [(tamanho)] (sinônimo de CHAR)
 CHARACTER [(tamanho)] (sinônimo de CHAR)
 DATE
 NUMBER [(tamanho [, decimais] )]
 DECIMAL [(tamanho [, decimais] )]
 INTEGER, INT (sinônimos de NUMBER)
 NUMERIC, DEC (sinônimo de DECIAMAL)
 FLOAT [(tamanho)]
 REAL
51
 DOBLE PRECISION
 LONG
 RAW (tamanho), LONG RAW
IV – Criação e uso de tabelas
IV.3 – Alteração de uma tabela
• Para acrescentar uma coluna à tabela DEP:
• Para aumenta o tamanho da coluna NOME_DEP:
52
SQL > desc dep
Name Null? Type
N_DEP NOT NULL NUMBER(2)
NOME_DEP CHAR(14)
LOCAL_DEP CHAR(13)
SQL > alter table dep
 2 add ( diretor number( 4 ) ); tabela a ser modificada
nome da coluna Tipo da coluna
SQL > alter table dep
 2 modify ( nome_dep char( 30 ) );
coluna a ser modificada
novo tipo
SQL > desc dep
Name Null? Type
N_DEP NOT NULL NUMBER(2)
NOME_DEP CHAR(30)
LOCAL_DEP CHAR(13)
DIRETOR NUMBER(4)
IV – Criação e uso de tabelas
• Restrições para a alteração da estrutura de uma tabela:
- Não se pode adicionar colunas não nulas (NOT NULL) 
em tabelas que já possuem linhas.
- Só é possível diminuir o tamanho de uma coluna, ou 
mudar seu tipo, se todos os valores desta coluna forem 
nulos.
- Só é possível alterar o tipo de uma coluna para “NOT 
NULL” se nenhum dos seus valores for nulo.
- Não é possível remover uma coluna de uma tabela com o 
comando ALER TABLE. Para conseguir este efeito deve-
se criar outra tabela sem a coluna a ser removida. Por 
exemplo. Para apagar a coluna DIRETOR:
53
SQL > create table dep_temp as
2 select n_dep, nome_dep, local_dep
3 from dep;
SQL > drop table dep;
SQL > rename dep_temp to dep;
IV – Criação e uso de tabelas
IV.4 – O comando INSERT
• O comando INSERT é usado para inserir linhas com uma tabela.
- Forma 1:
» tabela nome da tabela onde os dados serão inseridos
»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
INSERT INTO tabela [( cil1, col2, ... coln)]
VALUES ( val1, val2, ... valn)
SQL > Insert into emp
2 (nome_emp, n_emp, cargo, chefe, data_adm, sal, n_dep)
3 values ( ´SAMANTA`, 103, `ANALISTA`, 110, sysdate-30,
4 150000, 20);
ou
SQL > Insert into emp
2 values ( 103, `SAMANTA`, `ANALISTA`, 110, sysdate-30 
 3 150000, NULL, 20); 
IV – Criação e uso de tabelas
- Forma 2:
- Insere todas as linhas retornadas pela consulta executada pelo 
comando SELEC
- As expressões exp1, exp2, expn devem concordar em nº, 
ordem e tipo com as colunas especificadas no comando 
INSERT.
- Exemplo:
55
INSERT INTO tabela ( col, col2, ... coln )
SELECT exp1, exp2, ... expn
FROM ...
SQL > insert into faixa_sal(salmin, salmax, faixa)
2 select min( sal ), max( sal ), substr( cargo, 1, 1 )
3 from emp
4 group by substr( cargo, 1, 1 );
IV – Criação e uso de tabelas
IV.5 – Comando DELETE
• O comando DELETE é usado para remover linhas de uma 
tabela:
 »tabela nome da tabela de onde serão removidas as linhas
 »condição condição que especifica as linhas a serem removidas. 
Opcional.
• Exemplos
 - Para remover o empregado de nº 189: 
- Para remover todos empregados do departamento 20:
56
DELETE FROM tabela WHERE condição
SQL > delete from emp where n_emp = 189;
SQL > delete from emp where n_dep = 20;
- Para remover todos os empregados:
IV – Criação e uso de tabelas
IV.6 – O comando UPDATE
• O comando UPDATE é usado para alterar valores já 
armazenados em tabelas:
ou
 »tabela nome da tabela a ser atualizada
 »col1, col2, ... coln colunas cujos valores serão alterados
 »exp1, exp2, ... expn expressões cujos resultados serão atribuídos às 
colunas col1, ... coln respectivamente
 »consulta consultas que deve retornar o mesmo número 
de colunas especificas na cláusula SET
57
SQL > delete from emp;
UPDATE tabela
 SET col1 = exp1, col2, = exp2, ... coln = expn
WHERE condição
UPDATE tabela
 SET ( col1 [, col2 ...] ) = ( consulta )
WHERE condição
 »condição especifica as linha que serão atualizadas
IV – Criação e uso de tabelas
• Exemplos
- Para colocar 1000 de comissão para o funcionário de número 
208:
- Para dobrar o salário de todos empregados do departamen20 e 
transferi-los para o departamento 30:
- Para atualizar o salário do funcionário 208 como sendo o 
salário de seu chefe:
 
58
SQL > update emp
2 set com = 1000
3 where n_emp = 208;
SQL> update emp
2 set sal = 2 * sal, n_dep = 30
3 where n_dep = 20;
SQL > update emp e 1
2 set sal = ( select sal from emp e2
3 where e2.n:emp = e1.chefe ) where e1.n_emp = 208;
IV – Criação e uso de tabelas
IV.7 – Controle de transações
• Uma transação é uma seqüência “indivisível” de comandos SQL 
que modifica o conteúdo de banco de dados.
• Por exemplo, para transferir uma certa quantia em dinheiro de 
uma conta A para uma conta B, devemos:
- retirar o dinheiro da conta A
- depositar o dinheiro n conta B
• Para que a operação acima seja segura, ou os dois passos são 
executados ou nenhum deles pode ocorrer. 
59
IV – Criação e uso de tabelas
• 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.
• O fim de uma transação é determinada de uma das seguintes 
formas:
- execução do comando COMMIT, todas as modificações 
são efetivadas no banco de dados
- execução do comando ROLLBACK; nenhuma 
modificação é efetivada
- execução de comando de definição de dados (CREATE, 
ALTER, ...); equivale ao comando COMMIT
- término da sessão corrente: equivale ao comando 
COMMIT
60
- quando uma transação é interrompida por fatores externos 
(queda do sistema) ou internos (“deadlock”); equivale ao 
comando ROLLBACK 
IV – Criação e uso de tabelas 
• Exemplo:
 
61
$ 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;
N_DEP NOME_DEP
10 ADMINISTRAÇÃO
20 PESQUISA
30 VENDAS
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;
N_DEP NOME_DEP
10 ADMINISTRAÇÃO
20 PESQUISA
30 VENDAS
40 PRODUÇÃO
50 MARKETING
60 INFORMATICA
SQL > commit;
Commit complete.
inibe algumas mensagens de
aviso
O próprio usuário vê os dados, mas 
eles ainda não foram efetivados
fim da transação, com
efetivação dos dados
Início de uma transação
IV – Criação e usa de tabelas
62
SQL > update dep set nome_dep = `COMERCIAL`
2 where n_dep = 30;
SQL > select nome_dep from dep where n_dep = 30;
NOME_DEP
COMERCIAL
SQL > rollback;
Rollback complete.
SQL > select nome_dep from dep where n_dep = 30;
NOME_DEP
VENDAS
SQL > delete from emp where n_emp = 103;
SQL > insert into emp values
2 ( 103, `SAMANTA`, `DIRETOR`, 175, `17-MAR-85`,
3 200000, NULL, 20);
SQL > commit;
Commit complete.
SQL > update emp set cargo = `DIRETOR`, chefe = 175, sal = 200000
2 where n_emp =103;
SQL > commit;
Commit complete.
SQL > delete from emp
2 where n_dep = 10;
SQL > exit
Início de 
outra
transação
fim da transação; 
as
atualizações foram
Produzem o
Mesmo 
efeito
IV – Criação e usa de tabelas
• Observações
- Uma transação ou é executada totalmente ou não é 
executada; não existe transação parcialmente executada, 
por definição.
- As modificações efetuadas no decorrer de uma transação 
por um usuário só são visíveis a outros usuários após a 
efetivação da transação (COMMIT).
63
inicio da 
ultima
transação
Fim da ultima transação
Com COMMIT implícito
 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 > update emp SQL >
2 set sal = 400000
3 where n_emp = 189;
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 > commit; SQL > 
Commit coplete.
SQL > select sal from emp SQL > select sal from emp
 2 where n_emp = 189; 2 where n_emp = 189;
 SAL SAL
 400000 400000 
 
IV – Criação e usa de tabelas
• O comando SET AUTOCOMMIT ON do SQL*Plus faz com 
que o commit seja executado automaticamente a cada 
comando de manipulação de dados:
64
SQL > set feedback on
SQL > set autocommit on
SQL > delete from dep
2 where n_emp = 10;
Commmit complete.
1 record deleted.
SQL > insert into emp values( 103, `SAMANTA`, `ANALISTA`,
 2 110, `17-MAR-85`, 150000, NULL, 20);
Commit complete.
1 record created.
SQL > set autocommit off
SQL > delete from emp
2 where n_emp = 189;
1 record deleted.
SQL > rollback;
Rollback complete.
IV – Criação e usa de tabelas
• É possível determinar pontos de salvamento intermediáriosem transações:
65
SQL > update conta
2 set saldo = saldo – 10
3 where codigo = 1;
SQL > savepoint ja_tirou;
SQL > update conta
2 set saldo = saldo + 10
3 where codigo = 2;
SQL > rollback to ja_tirou;
determina um ponto de
salvamento
desfaz as modificações feitas após
o ponto de salvamento “ já_tirou” 
IV – Criação e usa de tabelas
• Para garantir que vários comandos SELECT recuperem 
sempre os mesmo dados, independentemente de transações 
concorrentes:
66
SQL > set transction read only;
SQL > select sal
2 from emp
3 where n_emp = 110;
 SAL
 300000 
SQL > 
SQL > select sal
2 from emp
3 where n_emp = 110;
 SAL
 300000 
os resultados serão
sempre iguais
IV – Criação e usa de tabelas
IV.8 – Manipulação de visões
• Uma visão é como uma janela que permite visualizar ao 
modificar seletivamente informações armazenadas em 
tabelas.
• Visões são utilizadas por:
- segurança : pode-se restringir o acesso a informações 
contidas em tabelas
 Tabela Emp
 
 Visão Emp_10
 
67
N_EMP NOME_EMP ...N_DEP
103 SAMANTA ... 20
110 UBIRATAN ...20
175 PAULO ...10
189 RITA ...30
201 EVERALDO ...30
208 SILVIO ...30
230 ANA ...10
276 RENATO ...20
N_EMP NOME_EMP ...N_DEP
175 PAULO ... 10 
230 ANA ...10 
IV – Criação e usa de tabelas
- conveniência: consultas complexas podem ser simplificadas 
com a criação de visões
 Emp
 Dep
 
 Emp_Dep
68
as colunas (nome e definição) 
são
herdadas da tabela origem
SQL > create view emp_10 as
2 select * from emp
3 where n_dep = 10;
 
N_EMP NOME_EMP ...N_DEP
103 SAMANTA ...20
110 UIRATAN ...20
175 PAULO ...10
189 RITA ...30
201 EVERALDO ...30
208 SILVIO ...30
230 ANA ...10
276 RENATO ...20 
N_DEP NOME_DEP
10 ADMINISTRAÇÃO
20 PESQUISA
30 VENDAS
40 PRODUÇÃO
NOME NUM NUM_DEPTO NOME_DEPTO
SAMANTA 103 20 PESQUISA
UBIRATAN 110 20 PESQUISA
PAULO 175 10 ADMINISTRAÇÃO 
RITA 189 30 VENDAS
EVERALDO 201 30 VENDAS
SILVIO 208 30 VENDAS
ANA 230 10 ADMINISTRAÇÃO
RENATO 276 20 PESQUISA
indicações para o
dep. 20 apenas,
por motivos de
clareza
SQL > create view emp_dep ( nome, num, num_epto, nome_depto )
2 as select nome_emp, n_emp, dep.n_dep, nome_dep
3 from emp, dep
4 where emp.n_dep = dep.n_dep; o nome das colunas pode ser modificado
IV – Criação e usa de tabelas
• 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!).
• Para descrever a estrutura de uma visão:
• Para consultar uma visão:
69
SQL > desc emp_dep
Name Null? Type 
NOME CHAR(10)
NUM NOT NULL NUMBER(4)
NUM_DEPTO NOT NULL NUMBER(2)
NOME_DEP CHAR(14)
SQL > select * from emp_dep;NOME NUM NUM_DEPTO NOME_DEPTO
SAMANTA 103 20 PESQUISA
UBIRATAN 110 20 PESQUISA
PAULO 175 10 ADMINISTRAÇÃO
RITA 189 30 VENDAS
EVERALDO 201 30 VENDAS
SILVIO 208 30 VENDAS
ANA 230 10 ADMINISTRAÇÃO
RENATO 276 20 PESQUISA
IV – Criação e usa de tabelas
• Uma visão pode ser criada em temo de execução:
70
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
...
IV – Criação e usa de tabelas
• Somente é possível atualizar (INSERT, DELERE, UPDATE) 
informações em visões que:
- estão baseadas em uma única tabela
- fazem referência a todas as colunas não nulas (NOT 
NULL) da tabela
- recuperam todas as colunas diretamente, sem nenhuma 
expressão
• A visão EMP_10 pode ser atualizada, ao contrário da visão 
EMP_DEP, que é baseada em duas tabelas
• Para visualizar a consulta que define uma visão: 
71
SQL > set long 500
SQL > select tex from eser_views where view_name = `EMP_DEP`;
TEXT
select nome_emp, n_emp, dep.n_dep, nome_dep
from emp, dep
where emp.n_dep = dep.n_dep
faz o SQL*Plus mostrar até 500 caracteres de
colunas do tipo LONG
• Para remover uma visão:
IV – Criação e usa de tabelas
IV.9 – Criação de seqüências 
• É possível definir seqüências numéricas a serem geradas 
automaticamente pelo OROCLE:
• Para criar uma seqüência chamada “seq_emp” :
 
72
SQL > drop view emp_dep;
CREATE SEQUENCE nome_seq
[INCREMENT BY {1 / num}]
[START WITH num]
[MAXVALUE num / NOMAXVALUE]
[MINVALUE num / NOMINVALUE]
[CYCLE / NOCYCLE]
[CACHE {20 / num} / NOCACHE]
[ORDER / NOORDER]
SQL > CREATE SEQUENCE seq_emp
 2 START WITH 1 NOMAXVALUE ORDER;
• Para usá-la:
IV – Criação e usa de tabelas
IV - Exercícios
1. Crie uma tabela EMPREG que contém os dados das colunas 
N_EMP, NOME_EMP E SAL da tabela EMP. Dica: use a forma 
2 do comando CREATE TABLE (página 49).
2. mude o nome da tabela EMPREG para TEMP e depois a 
remova.
3. altere a estrutura da tabela ALUNO criada no exercício a da 
parte II, de forma a:
a) aumenta o tamanho da coluna CIDADE para 35 caracteres
b) acrescentar o campo SAL_DESEJADO, com tipo 
numérico de 9 dígitos na parte inteira e 2 casas decimais. 
Dica: lembre-se que o tamanho de um numero é dado pela 
73
SQL > INSERT INTO( nome_emp, n_emp, ...)
 2 VALUES ( `PROXIMO CLIENTE`, seq_emp.NEXTVAL, ...);
soma dos dígitos na parte inteira com os dígitos na parte 
decimal do numero.
4. Insira os seguintes dados de um(a) amigo(a) seu(sua) na tabela 
ALUNO: NOME, ANIVERSARIO e SAL_DESEJADO
5. Atualize o seu salário desejado e o endereço completo da pessoa 
cadastrada no exercício anterior.
6. Remova o atributo SAL_DESEJADO da tabela ALUNO. Dica: 
veja a página 54.
7. Remova os dados da pessoa cadastrada no exercício 4 e efetive 
sua transação.
IV – Criação e usa de tabelas
8. Crie uma visão chamada DEP_SAL baseada nas tabelas EMP e 
DEP, contendo as seguintes informações:
- Nome do departamento (NOME_DEP)
- Numero de funcionários (NUM_FUNC)
- Salário mínimo (SAL_MIN)
- salário médio (SAL_MED)
- salário Maximo (SAL_MAX)
dica: primeiro faça uma consulta que retorna os dados acima, 
para depois criar uma visão baseada nessa consulta
9. Verifique a estrutura da visão DEP_SAL com o comando 
DESCRIBE e depois consulte todos os seus dados.
10.Atualize o salário de SAMANTA para 300000 e consulte a visão 
DEP_SAL novamente.
74
11.Desfaça a última atualização realizada. 
IV – Criação e usa de tabelas
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
V.1 – Formatação de colunas
• Os comandos de formatação de colunas (formatação em geral) 
do SQL*Plus são acumulativos
• Sintaxe do comando COLUMN:
77
COLUMN coluna
ALIAS sinônimo 
CLEAR
DEFAULT
FOLD_A[FTER]
FOLD_B[EFORE]
FORMAT formato
HEADING texto
JUSTIFY
LEFT
CENTER
RIGHT
LIKE coluna
NEWLINE
NEW_VALUE var
OLD_VALUE var
NULL nulo
NOPRINT
PRINT
ON
OFF
WRAPPED
WORD_WRAPPERD
TRUNCATED
V – Geração de Relatórios
»coluna nome de uma coluna ou expressão especificada no 
comando SELECT, tal qual aparece no cabeçalho do 
resultado do comando.
»sinônimo nome de uma outra coluna da qual serão copiadas asespecificações de formatação
»formato formato de apresentação do conteúdo de uma coluna
»texto texto a ser apresentado como cabeçalho de uma 
coluna
»nulo texto a ser exibido quando o conteúdo de uma coluna 
for nulo
»var nome de uma variável (será explicado adiante)
78
V – Geração de Relatórios
• Exemplos de formatos disponíveis para o comando COLUMN:
 
79
Formato Valor Resultado Observação
A20 Empregado Empregado
A5 Empregado Empre corta o resto
999.99 56.478 56.48 arredonda
999V99 56.478 5648 alinha pelo “V”
9,999 8410 8,410
99999 607 607
09999 607 00607
999 -5609 -5609
9999MI -5609 5609-
9999PR -5609 <5609>
B999 564
B999 0 brancos imprime brancos quando zero
99.99 124.98 # #.# # estouro
DATE 2441453 12/23/80 valor = data Juliana
EDATE 2441453 23/12/80
• O comando COLUMN, seguido de um nome de coluna (ou 
sozinho), exibe as definições daquela coluna (ou de todas as 
coluna)
• O comando CLEAR COLUMN elimina todas as definições de 
uma coluna
V – Geração de Relatórios
• Exemplos
80
SQL > column 12*sal format 999999999.99
SQL > column nome_emp format a20 heading `Empreg.`word_wrap
SQL > column nome_dep like nome_emp heading `Departamento`
SQL > column com heading `comissão | adicional`format 9999-99
SQL > column 12*sal g~heading `salario| anual`
SQl > column 12*sal
column 12*sal ON
heading `salario | anual`headsep `|`
format 999999999.99
SQL > select nome_dep, nome_emp, 12*sal,com
2 from emp, dep
3 where emp.n_dep = dep.n_dep
 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
definições acumulativas
Pula uma linha
exibe as definições 
associadas
à coluna “12*sal”
V – Geração de Relatórios
V.2 – Formatação de títulos
• É possível definir o cabeçalho (TTITLE) e o rodapé (BTITLE) 
das páginas de uma consulta:
- TTITLE (BTITLE) “texto”
o define o texto como cabeçalho (rodapé), podendo 
conter “|” para pular linhas
o este formato acrescenta data e numeração de página 
automaticamente
o só existe para manter compatibilidade com versões 
antigas
- TTITLE (BTITLE)
81
o mostra a definições corrente
- TTITLE (BTITLE) OFF
o desabilita a exibição do cabeçalho (rodapé)
- TTIBLE (BTITLE) ON
o habilita a exibição do cabeçalho (rodapé)
V – Geração de Relatórios
- TTITLE (BTITLE) param1 param2 ...
o paramN :
» “texto” texto livre que aparecerá no cabeçalho
»&variável imprime o valor de uma variável no cabeçalho
»COLn faz o próximo caracter na coluna n
»SKIPn pula n linhas
»LEFT alinha o texto seguinte à esquerda
»CENTER centraliza o texto seguinte
»RIGHT alinha à direita o texto seguinte
»SQL.PNO imprime o número da página corrente
»SQL.LNO imprime o número da linha corrente 
82
V – Geração de Relatórios
• Exemplo:
83
SQL > ttitle center `25 de dezemvro de 1990`skip col 6 –
> `Relatório de empregados – Departamento de Pessoal`
SQL > select n_emp, nome_emp, sal
2 from emp
3 where n_dep = 30;
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
SQL > ttitle
Ttitle on and is the follwing 95 characters:
Center `25 de dezembro de 1990` skip col 6 –
`Relatório de Empregados – Departamento de Pessoal`
V – Geração de Relatórios
V.3 – BREAK e COMPUTE
• O comando BREAK permite organizar grupos de linhas de um 
relatório
• É possível definir ações a serem executadas no fim de cada 
grupo controlado pelo comando BREAK:
»controleN grupo ação repetição
»grupo nome de uma coluna, expressão, ROW ou 
REPORT
»ação SKIP n, onde n é um número de linhas a serem 
puladas, SKIP PAGE ou PAGE; este parâmetro 
pode ser omitido 
84
BREAK ON controle1 ON controle2 ... ON controleN
»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:
85
SQL > break on nome_dep page on cargo skip 1
SQL > select nome_dep, cargo, nome_emp
2 from dep, emp
3 where dep.n_dep = emp.n_dep
4 order by nome_dep, cargo;
é importante ordenar o resultado 
de
acordo com os grupos formados!NOME_DEP CARGO NOME_EMP
ADMINISTRAÇÃO PRESIDENTE PAULO
SECRETARIA ANA
NOME_DEP CARGO NOME_EMP
PESQUISA ANALISTA SAMANTA
REANATO
DIRETOR UBIRATAN
NOME_DEP CARGO NOME_EMP
VENDAS DIRETOR RITA
VENDEDOR SILVIO
EVERALDO
mudança
de página
V – Geração de Relatórios
• Para mostrar as definições correntes:
• Para eliminar as definições de grupo:
86
SQL > brek
break on nome_dep page 1 nodup
 on cargo skip 1 nodup
SQL > clear break
• O comando BREAK não é acumulativo côo o comando 
COLUMN
V – Geração de Relatórios
• O comando COMPUTE permite realizar cálculos sobre os 
valores de um grupo organizado pelo comando BREAK:
87
SQL > break on n_dep on nome_dep skip 1
SQL > compute sum of sal on nome_dep
SQL > select dep.n_dep, nome_dep, nome_emp, sal
2 from dep, emp
3 where dep.n_dep = emp.n_dep
4 oeder by dep.n_dep;
N_DEP NOME_DEP NOME_EP SAL
10 ADMINISTRAÇÃO PAULO 500000.00
 ANA 120000.00
****************
sum 620000.00
20 PESQUISA SAMANTA 150000.00
RENATO 100000.00
UBIRATAN 300000.00
***************
sum 550000.00
30 VENDAS RITA 330000.00
EVERALDO 200000.00
SILVIO 150000.00
***************
sum 680000.00
V – Geração de Relatórios
• Sintaxe do comando:
»opearaçãoN uma das seguintes operações: COUNT, SUM, AVG, 
MIN, MAX,STD, NUM, VAR
»operaçãoN coluna, expressão entre aspas ou sinônimo, sobre o 
qual as operações serão efetuadas. Devem ser 
especificados no comando SELECT
88
COMPUTE operação1 ... OF operando1 ... ON
 evento_break
»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
V.4 – Parâmetros de controle
• O SQL*Plus possui uma série de parâmetros para controle de 
formatação.
• O comando SET é usado para alterar o valor de um parâmetro.
• O comando SHOW é usado para visualizar o valor atual de um 
parâmetro. 
89
V – Geração de Relatórios
• Os comandos SET e SHOW podem ser aplicados aos seguintes 
parâmetros:
ARRAYSIZE n | 20 número de linhas recuperadas 
simultaneamente do banco de dados
AUTOCOMMIT ON | OFF faz com que cada alteração feita na base 
de dados seja efetivada imediatamente
BUFFER buffer | SQL torna buffer o buffer de edição corrente
CMDSEP c | `;` | ON | OFF caractere de separação entre vários 
comandos SQL digitados em uma 
mesma linha
90
SQL > set pagesize 25
SQL > show pagesize
pagesize 25 
COMPATIBILITY V5 | V6 força compatibilidade com o RDMS 
ORACLE V5 ou V6 
CONCAT c | `.` | ON | OFF caractere de concatenação para 
utilização de variáveis
COPYCOMMIT n | 0 tamanho do lote de registros que deve 
ser processado pelo comando COPY 
antes da execução de um COMMIT
CRT crt define o crt padrão para o comando 
RUNFORM
DCLSEP c | `! ` caractere de separação de comandos do 
sistema operacional
DEFINE c | `&` | ON | OFF caractere que precede a utilização de 
variáveis
DOCUMENT ON | OFF interpreta ou não o texto dentro do 
comando DOCUMENT
ECHO ON | OFF exibe ou não os comandos SQL*Plus 
quando são executadosde um arquivo 
de comandos 
EMBEDDED ON | OFF força ou não que todo relatório comece 
em uma nova página
ESCAPE c | ON | OFF caractere de “escape” para permitir a 
inserção de caracteres especiais
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
HEADING ON | OFF permite ou não a impressão de 
cabeçalho de colunas
HEADSEP c | `I`| ON | OFF caractere para pular linha em cabeçalhos 
(formato antigo)
LINESIZE n | 80 número de caractere por linha
LONG n | 80 número máximo de caracteres 
visualizados para valores do tipo LONG
91
MAXDATE n tamanho máximo de uma linha que o 
SQL*Plus pode processar
NEWPGE n | 1 número de linhas brancas a serem 
impressas a cada página nova (0 indica a 
impressão de um “pulo de página”)
NULL texto texto a ser exibido quando um valor é 
nulo
NUMFORMAT formato formato padrão para exibição de número 
(formato numérico do comando 
COLUMN)
NUMWIDTH n | 10 largura padrão para exibição de números
PAGESIZE n | 14 número de linhas por página
PAUSE texto | ON | OFF antes de começar cada página, exibe o 
texto e espera (ou não) que o usuário 
tecle ENTER
SCAN ON | OFF liga ou desliga p procedimento de 
substituição de variáveis
SHOWMODE ON | OFF exibe ou não os valores antigo e atual de 
parâmetros modificados com o comando 
SET
SPACE n | 1 número de espaço entre colunas
SQLCONTINUE c | “>” caractere exibido quando da continuação 
de um comando SQL*Plus 
V – Geração de Relatórios
SQLNUMBER ON | OFF liga ou desliga a numeração de linhas 
quando da continuação de comandos 
SQL
SQLPREFIX c | `#` caractere de prefixo para a execução de 
comandos SQL durante a edição de um 
outro comando
SQLPROMPT texto | “SQL>” texto exibido no início de cada linha de 
edição
SQLTERMINATOR c |`;`| ON | OFF caractere que indica o término de um 
comando SQL
92
SUFFIX texto | “SQL” texto que será usado como sufixo para 
execução e edição de arquivos
TAB ON | OFF permite ou não a utilização de caracteres 
TAB na impressão de brancos
TERMOUT ON | OFF permite ou não a exibição de comando 
sendo executados
TIME ON | OFF exibe ou não a hora antes de cada linha 
de edição
TIMING ON | OFF exibe ou não estatísticas de tempo para 
cada comando executado
TRIMOUT ON | OFF inibe ou não impressão de brancos no 
final de cada linha
TRUNCATE ON | OFF permite ou não o “corte” de uma linha 
se ela for muito grande
UNDERLINE c|`-`| ON | OFF caractere que será utilizado para 
sublinhas o cabeçalho de colunas
VERIFY ON | OFF exibe ou não comandos SQL antes e 
depois da substituição de variáveis
WRAP ON | OFF é o inverso do comando TRUNCATE
• O comando SHOW ALL mostra o valor de todos ps parâmetros 
V – Geração de Relatórios
V.5 – Utilização de variáveis
• O SQL*Plus permite a definição e uso de variáveis genéricas:
 
93
SQL > define v_dep = 20
SQL > define v_nomerel = “relatorio de utilidades”
• 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
• O SQL*Plus requisita o valor de uma variável se esta não tiver 
sido previamente definida:
94
SQL > define v_dep = 20
SQL > select * from dep
 2 where n_dep = &v_dep
SQL > select * from emp
2 where sal > &limite;
Enter value for limite: 200000
old 2: where sal > &limite
new 2: where sal > 200000
N_EMP NOME_EMP
110 UBIRATAN
175 PAULO
189 RITA
• após a utilização de uma variável não previamente definida, 
seu valor (fornecido pelo usuário) é descartado
V – Geração de Relatórios
• Para manter o valor fornecido pelo usuário para futuras 
utilizações, deve-se substituir o `&`por `&&`:
95
SQL > select nome_emp, sal
2 from emp
3 where n_dep = &&v_dep
Enter value for v_dep: 30
old 3: where n_dep = &&v_dep
new 3: where n_dep = 30
NOME_EMP SAL
RITA 330000
EVERALDO 200000
SILVIO 150000
SQL > run
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
EVERALDO 200000
SILVIO 150000
interação para ler 
o
valor da variável
Não há interação: a 
variável
Está permanentemente
V – Geração de Relatórios
• O comando ACCEPT possibilita iniciar variáveis valores 
fornecidos pelo usuário:
96
SQL > accept v_dep NUMBER PROMPT `Departamento: `
Departamento: 30
SQL > select nome_emp, sal
2 from emp
3 where n_dep = &v_dep;
oldo 3: where n_emp = &v_dep
new 3: where n_emp = 30
NOME_EMP SAL
RITA 330000
EVERALDO 200000
SILVIO 150000
especifica o tipo da variável; 
podendo
ser NUMBER ou CHAR
• O comando PROMPT permite exibir informações na tela:
V – Geração de Relatórios
• Pode-se também especificar parãmentros para a ativação de um 
arquivo de comandos SQL*Plus através do comando START:
97
SQL > prompt Relatorio de Empregados
Relatórios de Empregados
SQL >
SQL > start listaemp 10 100000
nome do 
arquivo
de comandos
Parâmetros posicionais
• Onde o arquivo LISTAEMP.SQL contém os seguintes 
comandos:
V – Geração de Relatórios
V.6 – Relatórios avançados
• Os relatórios produzidos até aqui foram sempre apresentados 
na tela; é possível imprimi-los e armazena-los em arquivo do 
sistema operacional:
98
rem O primeiro parametro determina o departamento onde os
rem empregados selecionados trabalham
rem O segundo parametro determina o menor salário que os 
rem empregados selecionados recebem. 
select n_emp, nome_emp
from emp
where n_emp = & 1 and
sal > = &2;
linhas de comando
primeiro e 
segundo
parâmetro 
inicia armazenamento do 
resultado
no arquivo “relat1.lst”
V – Geração de Relatórios
• Se o comando SPOOL OUT for substituído por SPOOL OFF, o 
arquivo de saída não será impresso.
• Para evitar que os próprios comandos e mensagens do 
SQL*Plus sejam enviadas para o arquivo juntamente com o 
relatório.
99
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.
SQL > spool out
termina o armazenamento e
imprime o resultado
SQL > set echo off
SQL > set verify off
SQL > set feedback off
SQL > spool relat1
SQL > start listaemp 10 10000
N_EMP NOME_EMP
175 PAULO
230 ANA
SQL > spool out
V – Geração de Relatórios
• No caso do comando COMPUTE, para eliminar os textos “sum” 
e “******” que aparecem como indicadores do cálculo 
executado:
100
SQL > collumn aux_dep noprint
SQL > column sal format $999,999,999.99
SQL > break on n_dep on nome_dep on aux_dep skip1
SQL > compute sum of sal on aux_dep
SQL > select dep.n_dep aux_dep, dep.n_dep, nome_dep,
2 nome_emp, sal
3 from dep, emp
 4 where dep.n_dep = emp.n_dep
 5 order by dep.n_dep; 
V – Geração de Relatórios
• As opções NEW_VALUE E OLD_VALUE do comando 
COLUMN podem ser utilizadas pararecuperar dados em uma 
consulta e usá-los em uma outra consulta:
 
101
N_EMP NOME_DEP NOME_EMP SAL
10 ADMINISTRAÇÃP PAULO $500,000.00
ANA $120,000.00
$620,000.00
20 PESQUISA SAMANTA $150,000.00
RENATO $100,000.00
UBIRATAN $300,000.00
$550,000.00
30 VENDAS RITA $330,000.00
EVERALDO $200,000.00
SILVIO $150,000.00
$680,000.00
SQL > set echo off
SQL > set verify off
SQL > set feedback off
SQL > column PROCENT format 999.99
SQL > column sum(sal) new_value soma
SQL > rem calcula o valor de “soma”
SQL > select sum(sal) from emp;
SQL > rem calcula porcentagens dos salarios utilizando “soma”
SQL > select nome_emp, sal, 100 * sal / &soma “PORCENT”
2 from emp
3 order by 3 desc; Indica a terceira expressão do
SELECT
 SUM
1850000
NOME_EMP SAL PORCENT
PAULO 500000 27.03
RITA 330000 17.84
UBIRATAN 300000 16.22
EVERALDO 200000 10.81
SAMANTA 150000 8.11
SILVIO 150000 8.11
ANA 120000 6.49
RENATO 100000 5.41
V – Geração de Relatórios
• vamos agora considerar o seguinte relatório:
102
23/11/90 Relatorio de Empregados Pág. 3
Departamento: VENDAS
 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
 201 EVERALDO $200,000.00 $5,000.00 1.48
Departamento: VENDAS
data de hoje
número da página
departamento dos empregados
apresentados nesta página
V – Geração de Relatórios
• Para produzir o relatório da página anterior, deve-se acompanhar 
os seguintes passos:
1. Definir a consulta a ser realizada:
103
select nome_dep, n_emp, nome_emp, sal, nvl(com, 0) comissão,
(nvl( com, 0 ) / ( sal + nvl( com, 0) ) * 100) procnt_com,
to_char( sysdate, `DD/MM/YY` ) data
from dep, emp
where dep.n_dep = emp.n_dep
order bu nome_dep, 6 desc; 
2. Definir os formatos das colunas
3. Definir o agrupamento por departamento:
4. Definir duas variáveis que armazenarão o valor novo e o 
antigo da coluna NOME_DEP durante a quebra do grupo:
V – Geração de Relatórios
5. Definir uma variáve para armazenar a data sendo recuperado 
pela consulta:
 
6. Esconde as colunas NOME_DEP e DATA:
104
column n_emp format 9999 heading `Num`
column nome_emp format A 15 heading `Nome Empregado`
column sal format $999,999,999.99 heading `Salario`
column comissao format $999,999,999.99 heding `Comissao`
column porcent_com format 99.99 heading `Porc.`
column data format A8
break on nome_dep skip page
column nome_dep old_value vardep_ant new_value vardep_novo
column data new_value varhoje 
column nome_dep noprint
column data noprint
7. Definir os títulos:
8. Definir o tamanho da página:
9. Em caso de erro, interromper o processamento do SQL*Plus 
retornando o código do erro:
V – Geração de Relatórios
• Os comandos necessários à geração do relatório sendo 
especificado poderiam (ou deveriam) estar armazenadas em um 
arquivo do sistema operacional, RELATORIO.SQL:
105
ttitle left varhoje center `Relatorio de Empregados` -
right `Pag. `sql.pno skip 1 –
left `Departamento: `vardep_novo skip 2
btitle left `Departamento: `vardep_ant 
set pagasize 20
set linesize 75
set newpage 0
Wherenever sqlerror exit SQL.SQLCODE;
set echo off
set pagasize 20
set linesize 75
set newpage 0
whenever sqlerror exit sql.sqlcode;
column n_emp format A 15 heading `Nome empregado`
column sal format $999,999,999.99 heading `Salario`
column comissao format $999,999,999.99 heading `Comissao`
column porcent_com format 9.99 heading `Porc.`
column data format A8
break on nome_dep skip page
column nome_dep old_value vardep_ant new_value vardep_novo
column data new_value varhoje noprint
column nome_dep noprint
ttitle left varhoje center `Relatorio de Empregados` -
righe `Pag.`sql.pno skip 1 left `Departamento: `vardep_novo skip 2 
btitle left `Departamento: `vardep_ant
spool relatorio
select nome_dep, n_emp, sal, nvl(com,0) comissão,
 (nvl(com, 0) / (sal + nvl(com,0) ) * 100) porcent_com,
 to_char( sysdate, `DD/MM/YY` ) data
from dep, emp where dep.n_dep = emp.n_dep
order by nome_dep, 6 desc;
spool out
V – Geração de Relatórios
• Dessa forma, o comando:
106
$ sqlplus –s ora 1/senha1 @relatorio
- teria como efeito gerar o relatório na impressora do 
sistema
V – Geração de Relatórios
V - Exercícios
1. Recupere o comando contido no arquivo “ex31.sql” e formate 
seu resultado da seguinte forma:
a) mude o cabeçalho da coluna que indica o salário por hora 
para “Sal/hora”
107
b) coloque um titulo centralizado indicando “Salário por hora 
dos Empregados”
c) mude o formato da coluna “Sal/hora” para um número 
com quatro casas inteiras e duas decimais.
d) Alinhe o cabeçalho da coluna CARGO pela direita
e) Verifique as definições de coluna existentes 
V – Geração de Relatórios
2. Faça um arquivo de comando SQL*Plus chamado “ex52.sql” de 
forma que sua execução exiba o seguinte resultado:
108
Relatorio de Empregados
Departamento Nome Cargo Salário
ADMINISTRAÇÃO PAULO PRESIDENTE 500000
ANA SECRETARIA 120000
***************
avg 310000
sum 620000
PESQUISA SAMANTA ANALISTA 150000
UBIRATAN DIRETOR 300000
RENATO ANALISTA 100000
**************
avg 183333.333
sum 550000
VENDAS RITA DIRETOR 330000
SILVIO VENDEDOR 150000
EVERALDO VENDEDOR 200000
**************
avg 226666.667
sum 680000
Dica: comece fazendo a consulta; depois, acrescenta as definições da 
coluna, comandos BREAK e COMPUTE; finalmente, ajuste o 
tamanho da página e o tamanho da linha com o co,mando SET.
V – Geração de Relatórios
3. Altere o arquivo “ex52.sql” de forma que:
a) O menor salário a ser considerado na consulta seja 
passado como parâmetro (veja página 99)
b) O maior salário a ser considerado na consulta seja entrado 
pelo usuário através de um comando ACCEPT
109
c) Somente o resultado da consulta seja armazenado no 
arquivo “ex.53.lst”
d) Desapareçam os textos “sum”, “avg” e *********” 
exibidos pelo SQL`Plus (veja página 102)
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
5. Conversão entre tipos
6. Funções de datas
7. Outras funções
VI – Expressões e funções
112
VI.1 - Operadores
• Operadores de valor:
+ , - indicador de sinal WHERE X = -1
* , / multiplicação e divisão SELECT 2 * X...
+ , - soma e subtração SELECT X + Y...
| | concatena “strings” SELECT `EMPREGADO`| | 
NOME_EMP
• Operadores lógicos
= teste igualdade WHERE SAL = 100000
! =, < >, ^ = testa desigualdade WHERE SAL ! = 100000
>, > = testa maior (ou igual) WHERE SAL > 100000
<, < = testa menor (ou igual) WHERE SAL < = 100000
113
VI – Expressões e funções
[NOT] IN teste de inclusão ou CARGO IN (`ANALISTA`, VENDEDOR`)
exclusão um conjunto
[NOT] teste de intervalo SAL BETWEEN 10000 AND 200000
BETWEEN …
AND
[ NOT ] LIKE testa casamento de WHERE NOME_EMP LIKE `_X%`
padrão
IS [ NOT ] testa valor nulo WHERE COM IS NULL
NULL
NOT inverte resusltado WHERE NOR ( SAL = 100000 )
lógico de expressões
AND operação lógica e WHERE SAL < 100000 AND CARGO =
`ANALISTA`
OR operação lógica ou WHERE COM IS NULL OR SAL > 100000
ANY deve casar com WHERE SAL = ANY (SELECT SAL
qualquer dos valores FROM EMP WHERE N_DEP = 30)
retornados por uma
lista ou consulta
ALL deve casar com todos WHERE (SAL,COM) > = ALL (
os valores retornados (150000. 30000), (2000000, 0) )
por uma lista ou
consulta
114
VI – Expressões e funções
VI.2 – Funções numéricas
• Em geral, funções podem ser usadas em qualquer lugar onde 
variáveis ou expressões domesmo tipo são usadas.
• Legenda para as próximas tabelas:
- T : tipo retornado pela função:
o `C`indica caractere
o `D`indica data
o `N`indica número
 
o `R`indica Rowld
o `W`indica “raw”
 - Argumentos para funções:
o `*` : tipo depende do contexto da função
o m, n : expressões numéricas
o c, c1, c2, conj_c, de_c, para_c: expressões que retornam 
cadeias de caracteres
o d, d1: expressões que retorna datas
o expr, caso, ret, ret_outro: expressões de qualquer tipo 
115
VI – Expressões e funções
• Funções numéricas:
T função Descrição/Exemplo 
N ABS(n) valor absoluto de n
ABS(-5) = 5
N CEIL(n) arredonda para cima
CEIL(5.1) = 6
CEIL(5) = 5
N FOOR(n) arredonda para baixo
CEIL(5.1) = 5
CEIL(5) = 5
N MOD(m, n) resto da divisão de m por n
MOD(5,2) = 1
N POWER(m,n) m elevado a n; n deve ser inteiro 
POWER(2,3) = 8
N ROUND(m,[n]) arredonda m para n casas decimais
ROUND(2.3456) = 2.35
ROUND(1989, -3) = 2000
N SIGN(n) sinal de n
SIGN(-2) = -1
SIGN(0) = 0
SIGN(2) = 1
N SQRT(n) raiz quadrada de n
SQRT(4) = 2
SQRT(-4) = NULL
N TRUNC(n,[m]) trunca n para m casas decimais
TRUNC(2.3456,2) = 2.34
TRUNC(1989, -3) = 1000
 
116
VI – Expressões e funções
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
C CHR(n) caractere de código ASCII igual a n
CHR(65) = `A`
C INITCAP(c) retorna c com o primeiro caractere de 
cada palavra em maiúscula 
INITCAP( `SAO PAULO`) = `Sao Paulo`
N INSTR(c1, c2[,m[, n]]) a posição da n-ésima ocorrência de c2
em c1, iniciando a busca na posição m.
O valor 1 é assumido para m e n em 
caso de omissão 
INSTR( `SAO PAULO`, `A`, 1, 2) = 6
N LENGTH(c) número de caracteres em c
LENGTH( `SAO PAULO`) = 9
C LOWER(c) converte todos os caracteres de c para 
minúsculas 
LOWER( `SAO PAULO` ) = `são paulo` 
C LPAD(c1, n[, c2])concatena c2 à esquerda de c1, o suficiente
para que c1 atinja o tamanho n.
O caractere ``é assumido caso c2 seja
omitido
LPAD( `SP`, 5, `-`) = `-SP`
117
VI – Expressões e funções
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`
N NLSSORT(c) valor de c na “linguagem nacional” 
(National Language).
NLSSORT(`Q`) = 5100
C REPLACE(c, de_c troca todas as ocorrências de de_c em c
para_c]) para c 
R E P L A C E( `X U XU`, `X`, `C H`) =
`CHUCHU`
C RPAD concatena c2 à direita de c1, o suficiente
para que c1 atinja o tamanho n. 
O caractere ``é assumido caso c2 seja 
omitido.
RPAD(`SP`, 5, `-`) = `SP-`
C RTRIM(c, conj_c) remove todos os caracteres de c, a partir do 
último, até encontrar o primeiro caractere 
que não estiver presente em conj_c
RTRIM(`AGUA`, `UA`) = `AG` 
C SOUNDEX(c) uma cadeia de caracteres que representa o 
som das palavras em c
SOUNDEX( `SAO PAULO`) = `S140`
C SUBSTR(c, m[, n]) a subseqüência de c com início na posição 
m com n caracteres. Caso n seja omitido, 
retorna da posição m até o fim
SUBSTR(`São Paulo`, 5 ) = `Paulo` 
118
VI – Expressões e funções
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`
C UPPER(c) converte todos os caracteres de c_para 
maiúsculas
UPPER( `Sao Paulo`) = `SAO PAULO`
C USERENV(c) c pode assumir os seguintes valores:
`ENTRYID` = novo identificador para o 
propósito de auditoria
`SESSIONID`= identificador da sessão de 
auditoria
`TERMINAL` = identificador do terminal
`LANGUAGE`= língua em uso
 
119
VI – Expressões e funções
VI.4 – Funções de grupo
T Nome Descrição
N AVG([distinct | all] n) media de n; ignora valores nulos
N COUNT([distinct | all] número de linhas para as quais 
expr | *) expr não é nulo. * faz contar todas as 
linhas selecionadas
N MAX([distinct | all] expr) maior valor de expr
N MIN([distinct | all] expr) menor valor de expr
N STDDEV([distinct | all] n) desvio padrão de n; ignora valores 
nulos
N SUM([distinct | all] n) soma dos valores de n
N VARIANCE([distinct|all] n) variância de n; ignora valores nulos
120
VI – Expressões e funções
VI.5 – Conversão entre tipos 
T Nome Descrição
C CHARTOROWID(char) converte char para um “rowid”
W HEXTORAW(char) converte char contendo dígitos 
hexadecimais para um valor binário, 
conveniente para ser inserido em uma 
coluna do tipo RAW
C RAWTOHEX(raw) converte raw para a cadeia e 
caracteres contendo números 
hexadecimais
C ROWIDTOCHAR(rowid) converte um rowid para uma cadeia 
de 18 caracteres
C TO_CHAR(n[,fmt]) ou converte o número n ou a data d para
 TO_CHAR(d[,fmt]) uma cadeia de caracteres, de acordo 
com o formato fmt
D TO_DATE(char[,fmt]) converte char para uma data, de 
acordo com o formato fmt
N TO_DATE(n[,fmt]) converte char para uma data, de 
acordo com o formato fmt; este 
formato deve corresponder a um 
número (J, MM etc.)
N TO_NUMBER(char) converte char para um número; char 
deve conter um número válido
121
VI – Expressões e funções
• Conversão automática de tipos:
- 123 > `39` = 132 > to_number(`39`)
- `39` > 123 = `39` < to_char(123)
- `39` + 123 = to_number(`39`) + 123
- 123 | | `39` = to_char(123) | | `39`
• Se uma operação pode ser usada com vários tipos de dados, o 
tipo do primeiro operando determina o tipo dominante:
- 123 > `39`
• Se uma operação só pode ser usada com um tipo de dados, 
esse fica sendo o tipo dominante:
- `39` + 123
122
VI – Expressões e funções
• 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
- OBS: qualquer combinação dos formatos acima pode ser 
feita para formar o parâmetro fmt (EX: `HH24:MI:SS-
DD/MON/YYYY`)
123
formato resultado descrição
SCC ou CC 20 século
SYYYY ou YYYY 1991 ano
YYY, YY e Y 991, 91 e 1 últimos 3, 2 e 1 dígitos do ano
SYEAR ou YEAR nineteen-ninety-one ano por extenso
MM 01 mês
MON jan nome do mês abreviado
MONTH january nome do mês
WW e W 03, 3 semana do ano e do mês
DDD, DD e D 016, 16, 4 dias do ano, mês e semana
DAY wednesday nome do dia
J 2448273 data Juliana
HH ou HH12 01 hora do dia (1-12)
HH24 13 hora do dia (0-23)
MI 07 minutos
SS 10 segundos
SSSSS 42730 segundos após a meia-noite
(0-83399)
Month, YYYY January , 1991 os tamanhos são fixos
FmMonth, YYYY January, 1991 os tamanhos são variáveis 
(“fill-mode”)
VI – Expressões e funções
VI.6 – Funções de datas
 
T Nome Descrição
D ADD_MONTHS(d,n) adiciona n meses à data d
ADD_MONTHS( `13-AUG-91`8) =
13-APR-92
D LAST_DAY(d) data do último dia do mês da data d
LAST_DAY( `13-FEB-92`) = 
29-FEB-92
N MONTHS_BEETWEEN(d,e) o número de meses existentes antes 
as datas d e e
MONTHS_BETWEEN( sysdate,
`01-JAN-80`) = 133.466529
D NEXT_DAY(d, char) devolve o primeiro dia da semana 
determinado por char (MONDAY, 
FRIDY etc.) com data igual ou maior 
que d
NEXT_DAY(`13-FEB-91 `,` MONDAY`) 
= 18-FEB-91
N TRUNC(d [, fmt]) devolve a data d “truncada” para o 
formato fmt. Se fmt não for 
especificado, devolve a data d sem as 
horas
TRUNC( to_date(`13-JAN-91 11:34`,
`DD-MONY-YY HH:MI`) ) = 13-JAN-91
N ROUND( d, fmt) devolve a data d arredondada para o 
formato fmt
ROUBD( to_date(`13-jan-91`), `YEAR`)
= 01-JAN-91
124
VI – Expressões e funções
VI.7 – Outras funções
T Nome Descrição
* DECODE(expr, s1, r1, se expr for igual a algum s, então 
 ...[padrão]) devolve o r seguinte; caso contrário 
devolve padrão. Caso padrão seja 
omitido e não haja “casamento” o 
valor

Continue navegando