Você está na página 1de 148

 Curso de Introdução ao Oracle

SQL*Plus
– Este curso foi preparado na
Gerência de Informática da
Diretoria de Pesquisa e
Desenvolvimento da Telebras;
– Ele foi desenvolvido com base
num material da própria Oracle,
inclusive utilizando-se dos dados
do esquema exemplo fornecido
na mídia de instalação;
– A versão do Oracle referência é
a V.6;
– A última atualização deste
material foi realizada no ano de
1990.

TELEBRÁS
1
I - INTRODUÇÃO

1. CONCEITOS BÁSICOS DE BANCO DE DADOS

2. VANTAGENS DO MODELO RELACIONAL

3. TERMINOLOGIA RELACIONAL

4. PROJETO DE BANCO DE DADOS

5. ARQUITETURA DO ORACLE

TELEBRÁS
2
1. CONCEITOS BÁSICOS DE BANCO DE
DADOS
BANCO DE DADOS
É uma coleção organizada de informações.

SISTEMA DE GERÊNCIA DE BANCO DE DADOS (SGBD)


É o software que permite a utilização simultânea de um banco de
dados por múltiplos usuários e provê ferramentas para que eles
possam criar e manipular as informações armazenadas no
banco de dados.

PRINCIPAIS OBJETIVOS DE UM SGBD


 Independência de dados
 Controle de redundância de dados
 Controle de acesso aos dados
 Integridade de dados
 Segurança física dos dados

MODELOS DE SGBD
 Hierárquico
– representação dos dados na forma de árvore.
– cada ocorrência de um objeto possui, associada a ela, um
conjunto de ocorrências de outro tipo de objeto.
– cada ocorrência de um objeto pode ter somente um “pai”.
– possui linguagens diferentes para manipulação de dados e
das ligações entre eles.
– ex: IMS da IBM
TELEBRÁS
3
1. CONCEITOS BÁSICOS DE BANCO DE
DADOS (cont.)

 Rede
– proposto pela CODASYL em 1971.
– os dados são apresentados por dois elementos básicos: o
record type que define um objeto e o set type que define o
relacionamento entre objetos.
– as ligações entre tipos de dados diferentes são físicas e
implementadas através de cadeias de apontadores.
– cada ocorrência de um objeto pode ter vários “pais”.
– possui linguagens diferentes para manipulação de dados e
de apontadores.
– exs: IDS da Honeywell
IDMS da Computer Associates
DBMS/VAX da Digital

 Relacional
– proposto por E. F. Codd da IBM Research em 1970,
através da publicação de um artigo na revista Journal of the
ACM.
– baseado num modelo matemático sólido que envolve teoria
de conjunto, álgebra relacional e cálculo relacional.
– os dados são organizados na forma de tabelas (relações).

TELEBRÁS
4
1. CONCEITOS BÁSICOS DE BANCO DE
DADOS (cont.)

– as ligações ou relacionamentos entre diferentes


tipos de dados também são organizados na forma
de tabelas.
– possui somente uma linguagem para manipulação
de dados e relacionamentos.
– exs: DB2 da IBM
ORACLE
SYBASE
INGRES
INFORMIX

 Orientado a objetos
– novo modelo emergente nos últimos anos.
– simplificadamente, permite que cada elemento de
dado seja tratado como um objeto único, com sua
própria identificação e características.
– a informação é localizada pela identidade do
objeto e não pelos valores associados a ele.
– exs: O2 da Altair
G-Base da Graphael
Iris da HP
ObjectStore da Object Design

TELEBRÁS
5
2. VANTAGENS DO MODELO
RELACIONAL

SIMPLICIDADE
 As estruturas de dados e operações empregadas
são fáceis de serem entendidas e usadas.
 A estrutura da base de dados é simples, sem
relacionamentos pré-definidos entre tipos de
registros.

FLEXIBILIDADE
 Consultas ad hoc podem ser facilmente
expressas em SQL, pois não existem
“navegações” a serem realizadas.
 Modificações estruturais na base de dados podem
ser feitas sem impactar toda a base de dados; é
fácil adicionar campos ou modificar tabelas.

INDEPENDÊNCIA DE DADOS
 Modificações nas definições das tabelas podem
ser realizadas sem impactar os programas
existentes.

TELEBRÁS
6
3. TERMINOLOGIA RELACIONAL

TABELA
 estrutura de armazenamento de dados em um modelo
relacional.
 pode representar uma entidade simples ou um
relacionamento entre entidades.
 constituída de linhas e colunas.
 conjunto de ocorrências de um mesmo tipo de objeto.
 formalmente denominada “relação”.
 aproximadamente análoga a um arquivo.

LINHA
 Representa uma ocorrência de uma entidade ou
relacionamento representado por uma tabela.
 Aproximadamente análoga a um registro de arquivo.
 Não devem existir duas linhas idênticas em uma tabela.
 Cada linha possui, no máximo, um valor para cada
coluna.
 Todas as linhas de uma tabela possui o mesmo número
de colunas - grau da tabela.
 A ordem interna das linhas de uma tabela é irrelevante;
não existe “primeira linha” ou “última linha”.

TELEBRÁS
7
3. TERMINOLOGIA RELACIONAL (cont.)

COLUNA
 Representa um único atributo de uma entidade.
 Aproximadamente análoga a um campo de um registro.
 Cada coluna possui um conjunto de valores pertencentes
a um domínio.
 A ordem interna das colunas é irrelevante, para efeito de
manipulação das mesmas.

VISÃO
 representação lógica dos dados de uma tabela ou
combinação de tabelas.
 utilizada da mesma forma que uma tabela.
 não armazena dados; é uma tabela “virtual”.

CHAVE PRIMÁRIA
 É a coluna (ou grupo de colunas) que identifica cada linha
de uma tabela.
 Um valor específico para a(s) coluna(s) da chave primária
identifica univocamente uma linha de uma tabela.
 Nenhuma coluna da chave primária pode ser nula.
 Não tem nada a ver com índices ou caminhos de acesso.

TELEBRÁS
8
3. TERMINOLOGIA RELACIONAL (cont.)

CHAVE ESTRANGEIRA
 coluna (ou grupo de colunas) que representa um
relacionamento entre tabelas.
 um valor específico para a(s) coluna(s) da chave
estrangeira depende do valor de uma chave
primária de outra tabela.
 uma chave estrangeira pode referenciar a chave
primária da própria tabela.
 uma chave estrangeira pode ser nula.
 uma chave estrangeira pode ter valores
duplicados.

RESTRIÇÕES DE INTEGRIDADE
 regras aplicadas às informações de um banco de
dados para garantir a integridade das mesmas.
 podem indicar a obrigatoriedade de uma coluna, a
unicidade de coluna, o domínio da coluna, uma
chave primária, uma chave estrangeira, ações a
serem tomadas quando da atualização de chaves
referenciadas e regras de negócio.

TELEBRÁS
9
4. PROJETO DE BANCO DE DADOS

É a captura dos dados referentes a uma determinada


aplicação e a representação dos mesmos, de forma a
serem armazenados em um banco de dados. Constitui-
se, basicamente, de duas fases:

PROJETO LÓGICO
É a extração dos dados do mundo real e modelagem dos
mesmos a nível conceitual, sem preocupação com o
modelo físico de implementação.
A representação mais comumente utilizada é na forma de
diagrama de entidades e seus relacionamentos,
denominado Modelo de Entidades e Relacionamentos
(MER). As notações mais conhecidas são Chen,
Bachman, Martin.

PROJETO FÍSICO
É o mapeamento das informações refletidas no projeto
lógico para o SGBD utilizado. No caso de um modelo
relacional, o projeto físico consiste em criar-se as
estruturas relacionais compostas por tabelas, linhas,
colunas, etc. Existem notações para representação de
um modelo físico, sendo o mais conhecido o Diagrama
de Binder.

TELEBRÁS
10
5. ARQUITETURA DO ORACLE

Aplicações

Ferramentas
SQL
RDBMS
S.O.

Dados

TELEBRÁS
11
II - SQL*Plus

1. O QUE É SQL?

2. O QUE É SQL*Plus

3. ENTRANDO E SAINDO DO SQL*Plus

4. COMANDOS SQL

5. COMANDOS SQL*Plus

6. EDIÇÃO DE COMANDOS

TELEBRÁS
12
1. O QUE É SQL?

 Uma linguagem unificada de dados para banco de dados


relacionais, com as funções de:
– definição de dados
– acesso a dados
– manipulação de dados
– controle de acesso a dados

 Uma linguagem para diversos tipos de usuários e ambientes:


– usuários finais, programadores e DBA’s.
– interativo ou batch, ad hoc ou programas.

 Uma linguagem semelhante ao inglês e não procedimental:


– o usuário especifica o resultado desejado e não o método
para se obter o resultado.

 Originalmente chamada SEQUEL, abreviação de Structured


English Query Language.

 Desenvolvida pelos laboratório de pesquisa da IBM para um


SGBDR (Sistema Gerenciador de Banco de Dados
Relacional), o System R.

TELEBRÁS
13
1. O QUE É SQL? (cont.)

 Definida em um artigo publicado em Novembro de


1976 no IBM Journal of Research and
Development.

 Primeira implementação comercial: ORACLE em


1979

 Padrão internacional (ANSI, ISO).


– 1986
– 1989
– 1992

TELEBRÁS
14
2. O QUE É SQL*Plus?

É uma ferramenta implementada pela ORACLE, que


consiste de um ambiente interativo para:

 processamento on-line de comandos SQL que:


– definem a estrutura de base de dados
– realizam consultas ad-hoc à base de dados.
– manipulam as informações armazenadas na base de
dados.

 formatação de linhas e colunas recuperadas por uma


consulta SQL.

 edição de comandos SQL através de um editor de linhas


built-in ou de seu editor de textos favorito.

 armazenamento, recuperação e execução de comandos


SQL em/de arquivos.

 Obtenção de help on-line sobre o funcionamento do


sistema.

 opcionalmente, e com o equipamento adequado, a


apresentação dos dados recuperados em uma consulta,
em forma gráfica (linhas, barras, tortas).

TELEBRÁS
15
3. ENTRANDO E SAINDO DO SQL*Plus

ENTRANDO

Para entrar no SQL*Plus, o usuário pode:

 não especificar seu nome e senha e permitir que o SQL*Plus os


requisite através de prompts. Ex :
$ sqlplus
Enter user name: JOSE
Enter password:
SQL>

 especificar seu nome e senha na linha de comando quando o


SQL*Plus for invocado. Ex :
$ sqlplus nome/senha
SQL>

 especificar somente seu nome e permitir que o SQL*Plus


requisite a senha. Ex :
$ sqlplus nome
Enter password:
SQL>

TELEBRÁS
16
3. ENTRANDO E SAINDO DO SQL*Plus
(cont.)

 especificar um arquivo de comandos SQL que contenha o


nome e a senha. Ex :
$ sqlplus @arquivo (a extensão default é sql)

 especificar que o SQL*Plus deve utilizar o nome do usuário


no sistema operacional. Neste caso, o usuário deve estar
inscrito no ORACLE como OPS$nome. Ex :
$ sqlplus
Enter username: <CR>
SQL>

PROMPT
O prompt SQL> significa que o SQL*Plus está disponível para
aceitar um comando.

SAINDO
Para sair do SQL*Plus, o usuário pode usar o comando EXIT ou
QUIT. Ex:
SQL> EXIT
$
ou
SQL> QUIT
$

TELEBRÁS
17
4. COMANDOS SQL

FORMATO
O formato é livre, podendo ocupar uma ou mais linhas. Se o
comando for escrito em mais de uma linha, o SQL*Plus emite
um prompt a cada nova linha, que é o número da mesma. Ex :

SQL> select
2 *
3 from
4 emp;

é equivalente a

SQL>select * from emp;

Existem três maneiras para terminar um comando SQL:

 um ponto e vírgula (;) - indica que o SQL*Plus deve executar o


comando SQL. Deve ser digitado no final da última linha do
comando.

 uma barra (/) - indica que o SQL*Plus deve executar o último


comando SQL. Deve ser digitado em uma linha separada.

 uma linha em branco - indica somente o término do comando


SQL.

TELEBRÁS
18
4. COMANDOS SQL (cont.)

SINTAXE
 Um comando SQL é composto de cláusulas, algumas
opcionais e outras obrigatórias. Para maior
inteligibilidade é conveniente iniciar uma cláusula em
uma linha, mas isso não é obrigatório.
 As palavras que compõem um comando devem ser
separadas por espaços ou TABs.
 Comandos SQL são armazenados no buffer de
comandos.

CAIXA (Maiúsculas/Minúsculas)
 A caixa de uma palavra em um comando é significativa
para:
– Valores alfanuméricos de colunas:
“ RIO DE JANEIRO ” é diferente de “ Rio
de Janeiro ”.
 A caixa de uma palavra não é significativa para:
– Nomes de objetos da base de dados (tabelas,
colunas, etc.): “EMP” e “emp” são a mesma tabela.
– Palavras reservadas:”SELECT” e “select” são
equivalentes

TELEBRÁS
19
5. COMANDOS SQL*Plus

FUNÇÕES
 Controlar o modo como os resultados das consultas são
apresentados.
 Armazenar comandos SQL no disco e recuperá-los para serem
executados.
 Definir opções que influenciarão o comportamento do SQL*Plus.

SINTAXE
 Normalmente, os comandos devem caber numa única linha. Se
um comando necessitar mais de uma linha, pode-se digitá-lo até
o fim, sem se preocupar com o avanço para a próxima linha, e
só então, pressionar <CR>. Ex :
SQL>ttitle center ‘CPqD-TELEBRAS’ skip 1 center ‘Relatorio Anual de
Andamento de Projetos’ skip 3

 Outra maneira é colocar um hífen (-) no final de cada linha,


indicando a continuação na próxima linha.
SQL>ttitle center ‘CPqD-TELEBRAS’ skip 1 -
> center ‘Relatorio Anual de Andamento de Projetos’ skip 3

 Um comando SQL*Plus é terminado por <CR>. O “;” é opcional.


 Comandos SQL*Plus não são armazenados no buffer de
comandos.

TELEBRÁS
20
6. EDIÇÃO DE COMANDOS

BUFFER
Quando você digita um comando SQL, ele fica
armazenado em um buffer de edição.
Quando um novo comando é digitado, ele substitui o
antigo no buffer. Se a última linha do campo for
uma linha em branco, isto é, o comando não for
terminado por “;”, ele não será executado, mas
permanecerá armazenado no buffer.

EDITOR DE LINHAS

COMANDO DESCRIÇÃO
L Lista todas as linhas do buffer
Ln Lista a linha n do buffer que
passa a ser a linha corrente
Lm n Lista da linha m à linha n do
buffer
c/texto1/texto2/ Substitui, na linha corrente, texto1
por texto2

TELEBRÁS
21
6. EDIÇÃO DE COMANDOS (cont.)

A texto concatena o texto à linha corrente


I texto insere uma nova linha após a linha
corrente, consistindo de texto
I pede a entrada de novas linhas após
a linha corrente
DEL elimina a linha corrente
CL BUFF elimina todas as linhas do buffer
/ executa o comando armazenado no
buffer
RUN lista e executa o comando no buffer
<n>texto substitui a linha n do buffer pelo
texto. Se n for igual a zero, a linha
será incluída no início do buffer

TELEBRÁS
22
III - CONSULTANDO A SUA BASE DE
DADOS

1. SELEÇÃO DE COLUNAS DE UMA TABELA

2. SELEÇÃO DE LINHAS DE UMA TABELA

3. JUNÇÃO DE TABELAS

4. APRESENTAÇÃO E MANIPULAÇÃO DE VALORES


NUMÉRICOS

5. APRESENTAÇÃO E MANIPULAÇÃO DE VALORES


ALFANUMÉRICOS

6. APRESENTAÇÃO E MANIPULAÇÃO DE VALORES DE


DATAS

7. APRESENTAÇÃO E MANIPULAÇÃO DE VALORES NULOS

8. USO DE SUBQUERIES

9. INFORMAÇÕES HIERÁRQUICAS EM TABELAS

TELEBRÁS
23
1. SELEÇÃO DE COLUNAS DE UMA
TABELA

O COMANDO SELECT
 Usado para fazer consultas à base de dados.
 Forma básica :
SELECT <colunas>
FROM <tabela>

SELEÇÃO DE COLUNAS ESPECÍFICAS


Não é necessário selecionar todas as colunas de uma tabela.
Basta nomear, na cláusula SELECT, as colunas desejadas.

Ex :
SELECT ENAME , SAL
FROM EMP

SELEÇÃO DE TODAS AS COLUNAS


Para selecionar todas as colunas de uma tabela, basta
substituir os nomes das colunas por um asterisco (*). Ex :
SELECT *
FROM EMP

TELEBRÁS
24
1. SELEÇÃO DE COLUNAS DE UMA
TABELA (cont.)

ORDEM DAS COLUNAS


A ordem dos nomes das colunas na cláusula SELECT
determina a ordem em que as colunas são
apresentadas.

EVITANDO DUPLICAÇÕES
Como as colunas selecionadas podem ser um subconjunto
das colunas de uma tabela, poderão ocorrer linhas
duplicadas em uma consulta. Isso pode ser evitado com
a cláusula DISTINCT no comando SELECT :
SELECT DISTINCT <colunas>
FROM <tabela>

PSEUDÔNIMOS
Ao apresentar os resultados de uma consulta, o SQL*Plus
normalmente utiliza o nome de uma coluna como seu
cabeçalho. É possível definir um pseudônimo para uma
coluna que aparecerá no cabeçalho no lugar do nome da
coluna e que poderá também ser utilizado em outras
cláusulas do comando.
SELECT <coluna> <pseudônimo>, <coluna>
FROM <tabela>

TELEBRÁS
25
EXERCÍCIOS - 1

1. Recupere todas as colunas da tabela DEPT.

2. Recupere as colunas DEPTNO e DNAME da tabela


DEPT.

3. Repita o exercício 2 invertendo os nomes das


colunas na cláusula SELECT. Compare os
resultados.

4. Recupere a coluna JOB da tabela EMP.

5. Recupere a coluna JOB da tabela EMP utilizando a


cláusula DISTINCT. Compare com o resultado do
exercício 4.

6. Recupere as colunas DNAME e DEPTNO da tabela


DEPT, porém, faça com que no cabeçalho
apareçam os nomes DEPARTAMENTO e NÚMERO
respectivamente.

TELEBRÁS
26
2. SELEÇÃO DE LINHAS DE UMA
TABELA

A CLÁUSULA WHERE
 Utilizada para selecionar um subconjunto das linhas de
uma tabela.
 Deve seguir sempre a cláusula FROM
 Forma Básica
SELECT <colunas>
FROM <tabela>
WHERE <condição>

CONDIÇÕES NA CLÁUSULA WHERE


 Forma Básica :
<coluna><operador> {<valor|
<coluna|
<lista de valores>}
 Quando valores alfanuméricos ou valores de datas são
utilizados numa condição, eles devem sempre ser
colocados entre apóstrofos.
 Exemplos
DEPTNO = 30
JOB IN (‘CLERK’,’ANALYST’,’SALESMAN’)

TELEBRÁS
27
2. SELEÇÃO DE LINHAS DE UMA
TABELA (cont.)

OPERADORES

SÍMBOLO DESCRIÇÃO

= igual a
!= ou <> ou ^= diferente de
> maior que
>= maior ou igual a
< menor que
<= menor ou igual a
BETWEEN...AND... entre dois valores
IN (lista) qualquer valor da lista
LIKE corresponde a um gabarito
IS NULL é um valor nulo

Os 4 últimos operadores podem ser negados através do operador


NOT (NOT BETWEEN, NOT IN, NOT LIKE, IS NOT NULL).

CONJUNÇÃO DE CONDIÇÕES
 Várias condições podem ser conectadas na cláusula WHERE
através do operador AND. Ex :
WHERE JOB=‘MANAGER’ AND DEPTNO>10

TELEBRÁS
28
2. SELEÇÃO DE LINHAS DE UMA
TABELA (cont.)

DISJUNÇÃO DE CONDIÇÕES

 Várias condições podem ser conectadas na cláusula


WHERE através do operador OR. Ex :
WHERE JOB=‘MANAGER’ OR SAL>2000

PRECEDÊNCIA DE OPERADORES
 Uma cláusula WHERE pode combinar vários operadores
AND e OR.
 O operador AND tem maior precedência que o operador OR.
 Os operadores de comparação têm maior precedência que
os conectivos AND e OR.
 Todos os operadores de comparação têm a mesma
precedência.
 Operadores de igual precedência são calculados da
esquerda para a direita.
 A precedência de operadores pode ser cancelada através
de parênteses:
WHERE SAL>150 AND (JOB=‘MANAGER’
OR JOB=‘SALESMAN’)

TELEBRÁS
29
2. SELEÇÃO DE LINHAS DE UMA
TABELA (cont.)

NEGAÇÃO DE CONDIÇÕES
Uma expressão composta de conjunções e disjunções de
condições pode ser negada se for colocada entre parênteses e
precedida pelo operador NOT. Ex :
NOT (JOB=‘MANAGER’ OR SAL>1500)

CORRESPONDÊNCIA COM GABARITOS


Quando valores alfanuméricos são buscados com os operadores
= ou IN, a coluna deve corresponder exatamente ao valor
procurado.
Algumas vezes, porém, você pode não saber o valor exato. Em
tais casos, você pode usar o operador LIKE que reconhece 2
caracteres especiais em um valor alfanumérico:

% corresponde a uma seqüência


qualquer de 0 ou mais caracteres.
— corresponde a qualquer caractere.

Ex :
WHERE ENAME LIKE ‘M%’
WHERE ENAME LIKE ‘LUI_’

TELEBRÁS
30
2. SELEÇÃO DE LINHAS DE UMA
TABELA (cont.)

A CLÁUSULA ORDER BY
 Você pode controlar a ordem pela qual as linhas selecionadas
são apresentadas, adicionando a cláusula ORDER BY ao
comando SELECT.
SELECT <colunas>
FROM <tabela>
WHERE <condições>
ORDER BY <colunas>

 A cláusula ORDER BY lhe permite ordenar linhas:


– em ordem crescente
– em ordem decrescente
– por múltiplas colunas
– com valores nulos

ORDEM CRESCENTE OU DECRESCENTE


A cláusula ORDER BY normalmente recupera as linhas em ordem
crescente da coluna selecionada.
Você pode ordenar as linhas em ordem decrescente, adicionando a
cláusula DESC depois do nome da coluna.
ORDER BY <coluna> DESC

TELEBRÁS
31
2. SELEÇÃO DE LINHAS DE UMA
TABELA (cont.)

ORDENAÇÃO POR MÚLTIPLAS COLUNAS


Você pode ordenar as linhas recuperadas em uma
consulta pelos valores de várias colunas, em que,
para cada uma pode ser selecionado um tipo diferente
de ordem:
ORDER BY coluna1, coluna2 DESC

ORDENAÇÃO DE VALORES NULOS


Quando uma consulta retorna linhas que contenham
valores nulos na(s) coluna(s) ordenada(s), essas
linhas são colocadas no início da lista, caso a
ordenação seja decrescente, e no final da lista, caso a
ordenação seja ascendente.

TELEBRÁS
32
EXERCÍCIOS - 2

1. Recupere todas as informações sobre os empregados


do departamento 30.
2. Liste os nomes, números e números de
departamentos de todos os escreventes.
3. Encontre todos os empregados (nomes, salários e
comissões) cujas comissões excedam seus salários.
4. Recupere todos os funcionários (nomes e salários) do
departamento 30 cujo salário seja maior ou igual a
$1500.
5. Encontre todos os empregados (nomes e profissões)
que são gerentes ou presidentes.
6. Liste todas as informações sobre os funcionários que
são gerentes ou são escreventes do departamento 10.
7. Liste as informações sobre os empregados do
departamento 10 que não são nem gerentes nem
escreventes.
8. Encontre os funcionários que ganham entre $1200 e
$1400.
9. Encontre os funcionários que ganham ou
menos que $1200 ou mais que $1400.
10. Liste os nomes e os números de
departamentos dos empregados que são
analistas, vendedores ou escreventes.
TELEBRÁS
33
EXERCÍCIOS - 2 (cont.)

11. Liste os nomes e os departamentos dos


empregados que não são analistas,
vendedores ou escreventes.
12. Liste os cargos e os departamentos dos
empregados cujos nomes começam com
“M”.
13. Liste os cargos e os números de
departamentos dos empregados cujos
nomes tem 5 letras, começam com “ALL” e
terminam com “N”.
14. Liste os nomes, os cargos, e os salários
dos empregados do departamento 30, em
ordem crescente de seu salário.
15. Liste os nomes, os cargos e os salários
dos empregados do departamento 30 em
ordem decrescente do seu salário.
16. Ordene os empregados em ordem
decrescente de cargos e crescente de
salários.

TELEBRÁS
34
3. JUNÇÃO DE TABELAS

JOIN
As linhas de uma tabela podem ser juntadas às
linhas de outra tabela através de valores comuns
em colunas correspondentes.
Tabela EMP Tabela DEPT
EMPNO ENAME JOB M SAL COMM DEPTNO DEPTNO DNAME LOC

7499 ALLEN SALESMAN 76 0.0 300.00 30 30 SALES CHICAGO

Dados para junção


A operação de Join não exige que as colunas a
serem juntadas tenham o mesmo nome, nem o
mesmo “domínio” de valores.

TELEBRÁS
35
3. JUNÇÃO DE TABELAS (cont.)

ESPECIFICAÇÃO DAS COLUNAS


 Para fazer uma consulta em que as linhas de 2
tabelas serão juntadas, você deve especificar as
tabelas a serem juntadas na cláusula FROM do
comando SELECT e as colunas de junção na
cláusula WHERE.
Exemplo:

SELECT <colunas>
FROM <tabela 1,tabela 2,...,tabela
n>
WHERE <condições>

Exemplo:

SELECT ENAME, LOC


FROM EMP, DEPT
WHERE ENAME=‘ALLEN’ AND
EMP.DEPTNO=DEPT.DEPTNO

TELEBRÁS
36
3. JUNÇÃO DE TABELAS (cont.)

DISTINÇÃO DE COLUNAS
Se as colunas que definem a junção tiverem o mesmo nome, elas
devem ser diferenciadas na cláusula WHERE, prefixando-as com
o nome da tabela a que pertencem seguido de um ‘.’. Se os
nomes forem diferentes, não é necessário prefixá-las:
WHERE EMP.DEPTNO=DEPT.DEPTNO

ABREVIAÇÃO DOS NOMES DAS TABELAS


O uso dos nomes de tabelas na cláusula WHERE para diferenciação
de colunas pode tornar a digitação tediosa. Para evitar isso,
você pode definir, na cláusula FROM, nomes temporários para as
tabelas e utilizá-los no resto do comando (inclusive na cláusula
SELECT).
SELECT ENAME, LOC
FROM EMP E, DEPT D
WHERE ENAME=‘ALLEN’ AND E.DEPTNO=D.DEPTNO

AUTO JUNÇÃO (SELF-JOIN)


Nomes temporários devem também ser utilizados para fazer-se a
junção de uma tabela com ela mesma. Para tanto, deve-se dar
nomes diferentes para as “cópias” de uma tabela.
FROM EMP FUNCIONÁRIO, EMP PATRÃO

TELEBRÁS
37
JUNÇÃO DE TABELAS (4)

EQUI-JOINS E NON-EQUI-JOINS
 Quando o operador de comparação utilizado na condição da
cláusula WHERE é o de igualdade (‘=‘) diz-se que a junção é do
tipo EQUI-JOIN. Se o operador for de qualquer outro tipo, diz-se
que a junção é do tipo NON-EQUI-JOIN.
Exemplos:
WHERE EMP.DEPTNO = DEPT.DEPTNO (EQUI)
WHERE EMP.DEPTNO != DEPT.DEPTNO (NON-EQUI)

OUTER JOIN
Quando uma linha em uma tabela não satisfaz a condição de junção,
aquela linha, normalmente, não aparece no resultado da consulta.
Para que as linhas que não satisfazem a condição apareçam, é
necessário utilizar o operador outer-join, representado por (+):
WHERE DEPT.DEPTNO=EMP.DEPTNO(+)

Esse símbolo indica ao SQL*Plus que a tabela EMP deve ser


tratada como se ela contivesse uma linha extra contendo o valor
nulo em todas as colunas. O SQL*Plus junta essa linha nula da
tabela EMP a qualquer linha de DEPT que não pode ser juntada a
uma linha real de EMP.

TELEBRÁS
38
EXERCÍCIOS - 3

1. Encontre o local de trabalho de ALLEN.

2. Liste as informações (nomes, profissões, salários,


números e nomes dos departamentos) dos empregados
que trabalham em CHICAGO (use nomes temporários para
tabelas).

3. Recupere os nomes, salários e cargos dos empregados


que ganham mais do que JONES.

4. Liste os nomes e salários dos empregados que ganham


mais que seus gerentes.

5. Encontre a categoria salarial de cada empregado.

6. Liste os nomes dos empregados dos departamentos de


vendas e de operações com os nomes dos respectivos
departamentos, ainda que alguns deles não tenham
funcionários.

7. Liste os departamentos (número, nome, localização) que


não têm empregados.
TELEBRÁS
39
4. MANIPULAÇÃO DE VALORES
NUMÉRICOS

APRESENTAÇÃO DE NÚMEROS

 O formato de apresentação de uma coluna cujo valor é


numérico pode ser controlado através do comando
COLUMN:
COLUMN <coluna> FORMAT <modelo>

 O modelo é uma máscara formada por caracteres


especiais que definem o formato de apresentação da
coluna numérica.

 O comando COLUMN é um comando SQL*Plus. Ele não


é colocado no buffer de comandos SQL. O seu efeito
no formato de apresentação da coluna numérica por ele
afetada, permanecerá até que ele seja cancelado ou um
novo formato seja definido.

 Para cancelar um formato em efeito usa-se o comando:


COLUMN <coluna> CLEAR

TELEBRÁS
40
4. MANIPULAÇÃO DE VALORES
NUMÉRICOS (cont.)

MODELO VALOR APRES. EFEITO

999.99 56.478 56.48 Arredondado p/


2 casas decimais
999V99 56.478 5648 Multiplicado por
102 e arredondado
9,999 8410 8,410 Vírgula para separação
de milhares
09999 607 00607 Zeros à esquerda
9999MI -5609 5609- Sinal à direita
9999PR -5609 <5609> Números negativos
entre parênteses
B9999 0 Zeros transformados,
em branco
99.99 124.98 #### Formato inválido
$99.99 45.23 $45.23 Apresentação de cifrão
9.99EEEE 12000 1.20E+04 Notação científica
$99.99PR -45.23 <$45.23> Formatos podem
ser combinados

TELEBRÁS
41
4. MANIPULAÇÃO DE VALORES
NUMÉRICOS (cont.)

EXPRESSÕES ARITMÉTICAS

Você pode realizar cálculos baseados nos valores


numéricos armazenados na base de dados,
incluindo expressões aritméticas em um comando
SQL. Uma expressão aritmética consiste de
nomes de colunas numéricas, constantes
numéricas e funções aritméticas conectadas por
operadores aritméticos. Os seguintes operadores
são permitidos:
+ soma
- diferença
* multiplicação
/ divisão

A precedência dos operadores é a padrão, podendo


ser alterada pelo uso de parênteses.

TELEBRÁS
42
4. MANIPULAÇÃO DE VALORES
NUMÉRICOS (cont.)

EXPRESSÕES NA CLÁUSULA SELECT

Uma consulta à base de dados pode recuperar tanto colunas


de tabelas como também valores computados sobre
aquelas colunas. Isto é feito incluindo-se expressões
aritméticas na lista de colunas da cláusula SELECT. Estas
expressões podem ter pseudônimos como as colunas. Ex:
SELECT A, B, A+B/2, C*D “VOLUME TOTAL”
Pseudônimos que incluem espaços ser limitados por aspas.

EXPRESSÕES NA CLÁUSULA WHERE


A seleção de linhas pode também utilizar expressões
aritméticas nas condições da cláusula WHERE:
WHERE A > (B+C)/2

EXPRESSÕES NA CLÁUSULA ORDER BY


A ordem das linhas recuperadas em uma consulta pode ser
definida por uma expressão aritmética na cláusula ORDER
BY. Ex:
ORDER BY (B+C)/2 DESC

TELEBRÁS
43
4. MANIPULAÇÃO DE VALORES
NUMÉRICOS (cont.)

FUNÇÕES ARITMÉTICAS

FUNÇÃO RESULTADO

ABS(n) Valor absoluto de n


CEIL(n) O menor inteiro maior ou igual a n
FLOOR(n) O maior inteiro menor ou igual a n
GREATEST(m,n,p...) O maior valor da lista
LEAST(m,n,p..) O menor valor da lista
MOD(m,n) Resto da divisão de m por n
POWER(m,n) m elevado a n-ésima potência
ROUND(n[,m]) n arredondado em m casas decimais.
O default de m é 0. m pode ser negativo.
SIGN(n) -1 se n<0; 0 se n=0; 1 se n>0
SQRT(n) Raiz quadrada de n. NULL se n<0.
TRUNC(n[,m]) n truncado em m casas decimais. O
default de m é 0. Se m for negativo, os
m dígitos à esquerda do
ponto decimal
são truncados para 0.

TELEBRÁS
44
4. MANIPULAÇÃO DE VALORES
NUMÉRICOS (cont.)

FUNÇÕES DE GRUPO

As funções aritméticas vistas anteriormente são individuais:


elas retornam um valor para cada linha selecionada de
uma tabela. As funções de grupo, por sua vez, retornam
um valor para um grupo de linhas.

FUNÇÃO RESULTADO
AVG([distinct]n) Média de n
COUNT ({*|[distinct]<exp>}) Número de vezes que a
expressão retorna qualquer
coisa
diferente de NULL. * conta as
linhas selecionadas
MAX([distinct]<exp>) Máximo da expressão
MIN([distinct]<exp>) Mínimo da expressão
STDDEV([distinct]<exp>) Desvio padrão da
expressão
SUM([distinct]<exp>) Soma dos valores
da expressão
VARIANCE([distinct]<exp>) Variância da
expressão

TELEBRÁS
45
4. MANIPULAÇÃO DE VALORES
NUMÉRICOS (cont.)

USO DE FUNÇÕES DE GRUPO

O resultado de um comando SELECT é sempre uma tabela.


Se a cláusula SELECT contiver expressões com funções
de grupo, a tabela retornada terá somente uma linha.
Assim, na cláusula SELECT, não podem aparecer
resultados individuais juntos com expressões que
contenham funções de grupo.Ex:

SELECT ENAME, AVG(SAL)


FROM EMP
WHERE DEPTNO=30

A consulta acima é inválida, porém a consulta a seguir é


válida:

SELECT AVG(SAL)+AVG(COMM),STDDEV(SAL)
FROM EMP
WHERE DEPTNO=30

O grupo sobre o qual a função de grupo é calculada é


constituído das linhas definidas pela cláusula WHERE.

TELEBRÁS
46
4. MANIPULAÇÃO DE VALORES
NUMÉRICOS (cont.)

A CLÁUSULA DISTINCT
A cláusula DISTINCT é utilizada nas funções de grupo para
eliminar valores duplicados antes do cálculo das
funções.

A FUNÇÃO COUNT
A função COUNT é utilizada para contar:

 Número de valores não nulos:


SELECT COUNT (COMM)
FROM EMP

 Número de valores distintos


SELECT COUNT (DISTINCT JOB)
FROM EMP
WHERE DEPTNO=30

 Número de linhas que satisfazem uma condição


SELECT COUNT(*)
FROM EMP
WHERE DEPTNO=30

TELEBRÁS
47
4. MANIPULAÇÃO DE VALORES
NUMÉRICOS (cont.)

A CLÁUSULA GROUP BY
A cláusula GROUP BY é usada para dividir as linhas de
uma tabela em grupos menores. O SQL*Plus
recupera cada grupo de linhas de acordo com os
valores da(s) expressão(ões) especificada(s) na
cláusula GROUP BY.
Sintaxe:
GROUP BY <exp1>,< exp2>, ..., <expn>

A cláusula GROUP BY deve vir sempre após a cláusula


WHERE (ou após a cláusula FROM se aquela não
existir). Se existirem várias expressões, uma
modificação em qualquer uma delas define um novo
grupo.
Quando a cláusula GROUP BY é utilizada, é possível
combinar resultados individuais com funções de
grupo na cláusula SELECT, desde que aqueles
resultados individuais sejam usados na cláusula
GROUP BY. Ex:

SELECT DEPTNO, AVG(SAL)


FROM EMP
GROUP BY DEPTNO

TELEBRÁS
48
4. MANIPULAÇÃO DE VALORES
NUMÉRICOS (cont.)

A CLÁUSULA HAVING

 Os grupos definidos pela cláusula GROUP BY podem


ser selecionadas pela cláusula HAVING, ou seja, ela
permite restringir os grupos a serem retornados.

HAVING <condição>

 É recomendável que a cláusula HAVING venha


imediatamente após a cláusula GROUP BY.Ex:

SELECT JOB,COUNT(*),12*AVG(SAL)
FROM EMP
GROUP BY JOB
HAVING COUNT(*)>2

TELEBRÁS
49
EXERCÍCIOS - 4

1. Modifique o formato da coluna SAL de modo que ela


seja apresentada com 5 posições inteiras, nenhuma
casa decimal, milhares separados por vírgula e com o
cifrão indicador de moeda.

2. Calcule a renda mensal de todos os vendedores.

3. Liste os empregados cuja comissão é maior que 25%


do seu salário.

4. Liste os vendedores na ordem decrescente do


percentual de sua comissão em relação ao seu
salário.

5. Calcule a renda anual de todos os vendedores.

6. Calcule o salário diário dos empregados do


departamento 30. Apresente seu valor sem
arredondamento, juntamente com seus valores
arredondados com 0 e 2 casas decimais. Considere
um mês com 22 dias úteis.
TELEBRÁS
50
EXERCÍCIOS - 4 (cont.)

7. Repita o exercício 6, com truncamento ao invés de


arredondamento.

8. Calcule o salário médio dos escriturários.

9. Calcule o salário total e a comissão total dos vendedores.

10. Calcule a renda média anual dos vendedores.

11. Calcule o maior salário, o menor salário e a diferença


entre eles, para todos os funcionários.

12. Para cada departamento, calcule o salário médio anual


do pessoal que não ocupa posição de gerência.

13. Para cada cargo, em cada departamento, calcule o


número de empregados existentes, e seu salário médio
anual.

14. Liste todos os departamentos que tenham um mínimo


de 2 escriturários.
TELEBRÁS
51
15. Volte o formato da coluna SAL a seu valor inicial.
5. MANIPULAÇÃO DE VALORES
ALFANUMÉRICOS

APRESENTAÇÃO DE VALORES ALFANUMÉRICOS

Valores alfanuméricos são normalmente apresentados


exatamente como foram inseridos na base de dados;
contudo, você pode alterar o comportamento com que um
valor é exibido através do comando COLUMN:
COLUMN <coluna> FORMAT A<n>
onde o modelo A<n> define o comprimento de exibição dado
por n.

EXPRESSÕES ALFANUMÉRICAS

 Uma expressão alfanumérica consiste de nomes de


colunas, constantes alfanuméricas (cadeias) e funções
alfanuméricas, conectadas pelo único operador
alfanumérico definido, a concatenação , representado
pelo símbolo ”||”. Qualquer expressão alfanumérica e, em
particular uma constante, pode ser recuperada como uma
coluna computada, no comando SELECT.
 Constantes alfanuméricas consistem de uma cadeia de
caracteres delimitadas por apóstrofos. Se a cadeia
incluir, ela própria, um apóstrofo, ele deve ser duplicado:
‘Pau d”alho’
 Exemplo de expressão alfanumérica:
‘O FUNCIONÁRIO ’||INITCAP(ENAME)||’ RECEBE ’||
SAL||’ POR MES ’

TELEBRÁS
52
5. MANIPULAÇÃO DE VALORES
ALFANUMÉRICOS (cont.)
FUNÇÕES ALFANUMÉRICAS
CHR(n)
Retorna o caractere correspondente ao valor ASCII n.
INITCAP(alfa)
Retorna a cadeia alfa com cada inicial maiúscula e as demais
letras minúsculas.
LOWER(alfa)
Retorna a cadeia alfa com todas as letras em minúsculo.
LPAD(alfa1,n[,alfa2])
Retorna a cadeia alfa1 com a cadeia alfa2 concatenada à
esquerda, tantas vezes quantas forem necessárias para
completar o comprimento n. O default de alfa2 é o espaço.
LTRIM(alfa[,S])
Retorna a cadeia alfa com os caracteres iniciais removidos até o
primeiro caractere não contido no conjunto S.
REPLACE(alfa,sde[,spara])
Retorna a cadeia alfa com todas as ocorrências da cadeia sde
substituídas pela cadeia spara. O default de S é o espaço.
RPAD(alfa1,n[,alfa2])
Retorna a cadeia alfa1 com a cadeia alfa2 concatenada à direita,
tantas vezes quantas forem necessárias para completar o
comprimento n. O default de alfa2 é o espaço.
RTRIM(alfa[,S])
Retorna a cadeia alfa com os caracteres finais removidos depois
do último caractere não contido no conjunto S. O default de S é
o espaço.
TELEBRÁS
53
5. MANIPULAÇÃO DE VALORES
ALFANUMÉRICOS (cont.)
SOUNDEX(alfa)
Retorna um valor alfanumérico representando o som das palavras
em alfa.
SUBSTR(alfa,m[,n])
Retorna uma sub-cadeia de alfa, começando no m-ésimo caractere,
e de comprimento n (default de n é 1).
INSTR(alfa,cadeia)
Retorna a posição dentro de alfa onde se encontra a cadeia.
TRANSLATE(alfa,sde,spara)
Retorna a cadeia alfa traduzida do conjunto de caracteres sde para o
conjunto de caracteres spara.
UPPER(alfa)
Retorna a cadeia alfa com todas as letras em maiúsculo.
TO_CHAR(n[,fmt])
Retorna a cadeia resultante de transformação do número ou data n
segundo o modelo fmt.
DECODE (expressão,val1,cod1,val2,cod2,...,[default])
Retorna cod i se a expressão for igual a val i; caso contrário, retorna
default. Se default for omitido, retorna NULL.
A expressão deve ser do mesmo tipo de dado de val i.
GREATEST,LEAST
Iguais às funções aritméticas.
LENGHT(alfa)
Retorna o comprimento da cadeia alfa.

TELEBRÁS
54
EXERCÍCIOS - 5

1. Modifique o comprimento de apresentação da coluna


DNAME para 8. Recupere todas as colunas da tabela
DEPT.
2. Modifique o comprimento de apresentação da coluna
DNAME para 20. Recupere todas as colunas da tabela
DEPT. Compare o resultado do exercício 1.
3. Recupere uma coluna computada da tabela DEPT, cujo
pseudônimo será DEPARTAMENTOS, e que será
constituída da concatenação do nome do departamento
e de sua localização, separados por um ‘-’.
4. Recupere o nome, o cargo e a categoria de cargo para
cada funcionário. A categoria de cargos é definida
como sendo 1 para escreventes, 3 para gerentes, 5 para
presidentes e 2 para os demais.
5. Selecione o nome e o cargo do empregado WARD, do
modo que só a inicial de seu nome apareça em
maiúsculo. Considere para esse exercício que você não
sabe como foram inseridos os nomes dos funcionários
na base de dados, em relação à cadeia.
6. Selecione os nomes dos funcionários que soam como
‘SMYTH’.
7. Volte o formato da coluna DNAME a seu valor original.
TELEBRÁS
55
6. MANIPULAÇÃO DE DATAS

APRESENTAÇÃO DE DATAS

Colunas do tipo DATA são apresentadas num formato


padrão: DD-MON-YY
17-DEC-83
02-APR-84
15-MAY-85

A FUNÇÃO TO_CHAR

Você pode especificar um formato diferente para qualquer


coluna do tipo DATA, convertendo-a para um valor
alfanumérico com a função TO_CHAR, cuja sintaxe é a
seguinte:
TO_CHAR(<data>,<modelo>) onde:

<data> - é um valor do tipo data a ser convertido num


valor alfanumérico.
<modelo> - é uma máscara que define o formato do
valor alfanumérico. Consiste de uma constante
alfanumérica composta de diversos elementos de
formatação.

TELEBRÁS
56
6. MANIPULAÇÃO DE DATAS (cont.)

ELEMENTO SIGNIFICADO

SCC ou CC Século. S prefixa século AC com ‘-’


YYYY ou SYYYY Ano. S prefixa século AC com ‘-’
YYY ou YY ou Y Últimos dígitos do ano
Y,YYY Ano com vírgula nessa posição
SYEAR ou YEAR Ano soletrado. S prefixa século AC
com ‘-’
BC ou AD Indicador de AC/DC
B.C. ou A.D. Indicador com ‘.’
Q Trimestre
MM Mês (01-12;JAN=01)
MONTH ou MON Nome do mês ou abreviação com
três letras
WW ou W Semana do ano ou do mês (1-52 ou 1-5)
DDD ou DD ou D Dia do ano, mês ou semana
DAY ou DY Nome do dia ou abreviação com 3
letras

TELEBRÁS
57
6. MANIPULAÇÃO DE DATAS (cont.)

ELEMENTO SIGNIFICADO

J Data Juliana: número de dias desde


31/12/4712 A.C.
AM ou PM Indicador de período do dia
HH ou HH12 Hora do dia (1-12)
HH24 Hora do dia (0-23)
MI Minuto(0-59)
SS Segundo(0-59)
SSSSS Segundos após meia-noite(0-86399)

TELEBRÁS
58
6. MANIPULAÇÃO DE DATAS (cont.)

SUFIXOS
Os seguintes sufixos podem ser adicionados aos elementos de
formatação:
TH-Número ordinal (DDTH 4th)
SP-Número escrito(DDSP Four)
SPTH ou THSP- Número ordinal por escrito
(DDSPTH Fourth)

PONTUAÇÃO
O modelo de formatação pode incluir também caracteres de
pontuação como ‘-’ , ’/’ e ‘,’.
Constantes alfanuméricas podem ser incluídas delimitadas por
aspas (“). Esses caracteres serão reproduzidos na saída.

EXEMPLO - To_char(‘12-Jan-86’,modelo)

MODELO RESULTADO

(nenhum) 12-JAN-86
‘MM/DD/YY’ 01/12/86
‘DD.MM.YYYY’ 12.01.1986
‘Month DD,YYYY’ January 12,1986
‘DY DD MON YY’ WED 12 JAN 86
‘Day Mon DD’ Wednesday Jan 12

TELEBRÁS
59
6. MANIPULAÇÃO DE DATAS (cont.)

ARITMÉTICA DE DADOS

Você pode realizar operações aritméticas com


valores de datas:
data+número : adiciona um número de dias a
uma data produzindo uma nova data.

data-número : subtrai um número de dias de uma


data produzindo uma nova data.

data-data : número de dias entre 2 datas.

SYSDATE

O SQL*Plus reconhece uma “coluna” especial,


SYSDATE, que retorna a data e a hora correntes.
Como SYSDATE não é uma coluna real de uma
tabela, ela é chamada de pseudo-coluna, podendo
ser, no entanto, usada em qualquer lugar em que
uma coluna de data seria usada em um comando
SQL.

TELEBRÁS
60
6. MANIPULAÇÃO DE DATAS (cont.)

FUNÇÕES DE DATA
ADD_MONTHS(d,n)
Retorna a data d mais n meses. n deve ser inteiro e pode ser
negativo.
LAST- DAY(d)
Retorna a data do último dia do mês que contém d.
MONTHS_BETWEEN(d1,d2)
Retorna o número de meses entre as datas d1 e d2.
NEW_TIME(d,a,b)
Retorna a data e a hora na zona b quando d é a data e a hora
na zona a.
NEXT_DAY(d,alfa)
Retorna a data do primeiro dia da semana nomeada por alfa
que posterior à data d.
TO_DATE(alfa[,fmt])
Simétrica à função TO_CHAR.
GREATEST(d1, d2)
Retorna a data mais recente entre d1 e d2.
LEAST(d1, d2)
Retorna a data mais antiga entre d1 e d2.
ROUND(d)
Arredonda a data d para o dia inteiro mais próximo.
TRUNC(d)
Retorna a data d com a hora zerada.

TELEBRÁS
61
EXERCÍCIOS - 6

1. Recupere a data de admissão e o nome de todos os


empregados do departamento 20.

2. Recupere a data de admissão de todos os empregados


do departamento 20 nos seguintes formatos:
‘MM/DD/YY’
‘DAY MONTH DD,YYYY’
‘DY DD Month YYYY’
‘DY “the” ddth “of” Month YYYY’
‘Month DD, YYYY HH:MIPM’)
Para que a data caiba em uma única linha, dê um
pseudônimo para a data de admissão e defina, para
cada formato, um tamanho conveniente de
apresentação.

3. Recupere a data de admissão, a data de avaliação e o


nome de todos os empregados do departamento 20. A
data de avaliação ocorre 90 dias após a data de
admissão.

4. Recupere o nome, a data de admissão, a data de hoje e a


data de avaliação de todos os empregados do
departamento
TELEBRÁS
20, cuja data de avaliação é posterior à de
hoje. 62
EXERCÍCIOS - 6 (cont.)

5. No exercício anterior, acrescente uma coluna


com o número de dias que faltam para a
avaliação.

6. No exercício anterior, use a função


ADD_MONTHS para 3 meses para calcular a data
de avaliação e o número de dias até a sua
ocorrência.

7. Suponha que a avaliação de um empregado


ocorra na primeira sexta-feira depois que um
empregado está trabalhando por 3 meses. Além
disso, no caso de uma avaliação positiva, ele
recebe um aumento no último dia do mês de
revisão. Recupere o nome, as datas de
contratação, avaliação e aumento salarial para
os empregados do departamento 20.

8. Conte o número de empregados contratados em


cada trimestre de cada ano.

TELEBRÁS

9. Liste os empregados admitidos entre 4/1/81 e 63


15/4/81 em ordem de antigüidade.
7. MANIPULAÇÃO DE VALORES NULOS

O VALOR NULO

 Uma coluna que não tem um valor armazenado é dita


conter o valor NULO.
 Uma coluna numérica que contém o valor NULO é
diferente de uma coluna que contém o valor 0. Valores
nulos são normalmente apresentados com espaços em
branco e valores zero com 0’s.

PESQUISA DO VALOR NULO

Para buscar linhas que contenham o valor NULO em uma


coluna deve-se usar a condição IS NULL. A condição =
NULL é inválida.

ORDENAÇÃO DE LINHAS COM VALORES NULOS

Quando a cláusula ORDER BY é usada para ordenar


colunas que contêm valores nulos, as linhas que os
contêm são sempre apresentadas primeiro, caso a
ordenação for decrescente, e no final, caso a ordenação
seja ascendente.

TELEBRÁS
64
7. MANIPULAÇÃO DE VALORES NULOS
(cont.)

VALORES NULOS EM FUNÇÕES/EXPRESSÕES

Quando uma expressão ou função referir-se a uma coluna


que contém um valor nulo, o resultado da expressão ou
função também será nulo.

A FUNÇÃO NVL

 Quando é necessário tratar valores nulos como sendo 0


(ou qualquer outro valor) a função NVL deve ser usada.

 A função NVL tem dois argumentos:


– uma expressão
– um valor não nulo
Cada vez que a função NVL é calculada, ela retorna o valor
do primeiro argumento se este for diferente de NULO.
Caso contrário, o segundo argumento será retornado.

 A função NVL pode retornar valores numéricos,


alfanuméricos e datas.
NVL (<expressão>, <valor>)

TELEBRÁS
65
EXERCÍCIOS - 7

1. Recupere as comissões dos funcionários


TURNER e JAMES.
2. Recupere as informações (nome, profissão,
salário, comissão) sobre todos os funcionários
que são elegíveis p/ receberem comissões.
3. Recupere as informações (nome, profissão,
salário, comissão) sobre todos os funcionários
cuja comissão é diferente de $500.
4. Recupere as informações (nome, profissão,
salário, comissão) sobre todos os funcionários
que recebem comissão.
5. Liste os empregados do departamento 30 em
ordem crescente de comissão.
6. Liste os empregados do departamento 30 em
ordem decrescente de comissão.
7. Calcule a renda total dos funcionários do
departamento 30.
8. Repita o exercício 7 considerando comissões
nulas como 0’s.

TELEBRÁS
66
8. USO DE SUBQUERIES

SUBQUERIES

 São comandos SELECT que são utilizados em condições


de cláusulas WHERE ou HAVING para prover resultados
que são utilizados para completar a consulta (query)
principal.

 EXEMPLO: Encontre os empregados com o mesmo


cargo que JONES:
SQL> SELECT ENAME,JOB
2 FROM EMP
3 WHERE JOB=(SELECT JOB
4 FROM EMP
5 WHERE ENAME=‘JONES’)

 Subqueries substituem operandos dos operadores de


comparação. Como um comando SELECT pode retornar
uma lista de valores, é necessário que o operador seja
adequado ao resultado produzido pelo comando. A
alternativa é que, no caso de listas, o outro operando
seja também uma lista.

TELEBRÁS
67
8. USO DE SUBQUERIES (cont.)

OS OPERADORES ANY E ALL


Quando um subquery pode retornar mais de um valor, os
operadores ANY e ALL podem ser utilizados para compatibilizar
o resultado do subquery com o tipo do operador de
comparação:
SAL > ANY<subquery>
Essa condição será verdadeira quando SAL for maior que qualquer
um dos resultados retornados pelo subquery.
SAL > ALL<subquery>
Essa condição será verdadeira quando SAL for maior que todos os
resultados retornados pelo subquery.

OS OPERADORES IN E NOT IN
Os operadores IN e NOT IN são adequadas para subqueries que
retornam uma lista de valores de uma coluna já que o segundo
argumento deles deve ser uma lista:
JOB IN <subquery>

SUBQUERIES COM MÚLTIPLAS COLUNAS


Subqueries que retornam várias colunas podem ser utilizadas em
condições em que o outro operando é uma lista de valores:
(JOB,SAL) IN (SELECT JOB,SAL
FROM...
 )

TELEBRÁS
68
8. USO DE SUBQUERIES (cont.)

SUBQUERIES MÚLTIPLOS

Quando uma cláusula contém várias condições conectadas


pelos operadores AND e OR, cada uma delas pode conter
subqueries.

OPERADORES DE CONJUNTOS

 Como o resultado de um query é um conjunto de linhas, você


pode realizar operações de conjuntos entre queries:
– UNION (união) - Retorna todas as linhas distintas
retornadas por qualquer um dos queries aos quais a
operação é aplicada.
– INTERSECT (interseção) - Retorna todas as linhas
retornadas por todos os queries.
– MINUS (diferença) - Retorna todas as linhas que são
retornadas por um query mas que não são retornadas
por outro query.

 O resultado de uma operação de conjuntos entre queries é


sempre um query.

TELEBRÁS
69
8. USO DE SUBQUERIES (cont.)

EXEMPLO DE OPERAÇÃO ENTRE QUERIES

SQL> SELECT ENAME,JOB,SAL


2 FROM EMP
3 WHERE SAL IN
4 (SELECT SAL
5 FROM EMP
6 WHERE ENAME=‘SCOTT’
7 UNION
8 SELECT SAL
9 FROM EMP
10 WHERE ENAME=‘WARD’);

RESTRIÇÕES NAS OPERAÇÕES DE CONJUNTO

 Os queries devem selecionar o mesmo número de


colunas e colunas correspondentes devem ser do mesmo
tipo.
 A cláusula ORDER BY não pode ser usada nos queries
operandos. Somente no query resultado. As colunas na
cláusula ORDER BY devem ser identificadas não pelo seu
nome, mas pelo seu número de ordem.

TELEBRÁS
70
8. USO DE SUBQUERIES (cont.)

SUBQUERIES CORRELACIONADOS
No exemplo de subquery apresentado, o subquery era executado
uma vez e o valor resultante era usado pela cláusula WHERE
do query principal. Você pode compor um subquery que é
executado repetidamente, uma vez para cada linha candidata
considerada para seleção pelo query principal. Isso acontece
quando o subquery faz referência a uma coluna das linhas
selecionadas no query principal.
SQL> SELECT DEPTNO,ENAME,SAL
2 FROM EMP X
3 WHERE SAL >
4 (SELECT AVG(SAL)
5 FROM EMP
6 WHERE X.DEPTNO=DEPTNO)
Observe que um subquery correlacionado exige que se defina um
pseudônimo para a tabela do query principal, se ela for a
mesma do subquery.

O OPERADOR EXISTS
O operador lógico EXISTS retorna o valor verdadeiro se um
determinado subquery retornar ao menos uma linha e falso
caso contrário:
WHERE EXISTS <subquery>
Conforme mostra o exemplo, o operador EXISTS, juntamente com
um subquery, substitui uma condição na cláusula WHERE.

TELEBRÁS
71
EXERCÍCIOS - 8

1. Recupere as informações sobre os empregados que


ganham mais que algum empregado do departamento
30.
2. Recupere as informações sobre os empregados que
ganham mais que todos os empregados do
departamento 30.
3. Liste os empregados do departamento 10 com o mesmo
cargo que alguém do departamento 30.
4. Liste os empregados do departamento 10 com um cargo
que ninguém possua no departamento 20.
5. Liste os empregados com o mesmo cargo e o mesmo
salário de FORD.
6. Liste os empregados que têm ou o mesmo cargo de
JONES ou um salário maior ou igual ao de FORD.
Apresente os resultados em ordem de cargo e salário.
7. Liste os empregados do departamento 10 que têm o
mesmo cargo que alguém no departamento de vendas.
8. Liste os empregados que trabalham em CHICAGO e que
possuem o mesmo cargo que ALLEN, em ordem
alfabética do nome.
9. Recupere as informações (número, nome, profissão, nº
do departamento) sobre os empregados que têm ao
menos
TELEBRÁS um subordinado. Ordene o resultado em ordem
72
crescente do número do empregado (EMPNO).
9. ESTRUTURAS HIERÁRQUICAS EM
TABELAS

KING

CLARK JONES BLAKE

ALLEN WARD MARTIN TURNER JAMES


MILLER
SCOTT FORD

ADAMS SMITH

TELEBRÁS
73
9. ESTRUTURAS HIERÁRQUICAS EM
TABELAS (cont.)

REPRESENTAÇÕES DE ÁRVORES EM TABELAS


 O relacionamento que conecta os nós de uma
árvore pode ser representado por
relacionamentos entre linhas da tabela
(MGR/EMPNO)
 A raiz da árvore tem que ser identificada
 Cada linha da tabela corresponde a um nó da
árvore

INSPEÇÃO DE UMA ÁRVORE


O processo de inspecionar ou visitar os nós de uma
árvore pode ser realizado de diversas maneiras,
em função da ordem em que os nós são
visitados.
No ORACLE você poderá inspecionar uma árvore
(ou sub-árvore) através do comando SELECT, ao
qual serão adicionadas cláusulas para identificar:
 o relacionamento que conecta os nós
 a direção da inspeção: da raiz para as folhas
ou das folhas para a raiz
 o ponto de partida da inspeção (você pode
percorrer sub-árvores)
 os ramos da árvore que deverão ser
excluídos (poda) da inspeção.

TELEBRÁS
74
9. ESTRUTURAS HIERÁRQUICAS EM
TABELAS (cont.)
A CLÁUSULA CONNECT BY
 A cláusula CONNECT BY define o relacionamento que conecta os
nós da árvore, a direção de inspeção e os ramos que deverão ser
podados.
 Forma:
CONNECT BY PRIOR <coluna1>=<coluna2>
{AND <condição> } onde:
- <coluna1> e <coluna2> definem a conexão dos nós da árvore.
Devem ser entendidas como:
“A coluna1 do nó pai é igual à coluna2 do nó fiho”
- a posição do operador PRIOR define a direção de inspeção:
PRIOR <coluna1> : da raiz para as folhas
PRIOR <coluna2> : das folhas para a raiz
- <condição> define os nós que serão podados juntamente com
seus descendentes.

 A cláusula CONNECT BY deve vir após a cláusula FROM ou após


a cláusula WHERE, se esta existir. A cláusula WHERE define nós
individuais que deverão ser excluídos, mantendo, porém, seus
descendentes.
 Quando uma árvore é percorrida das folhas para a raiz, somente
os nós que pertencem ao caminho que leva da folha à raiz, são
inspecionados.
 Exemplo :
SQL>SELECT ENAME,EMPNO,JOB,DEPTNO,MGR
1 FROM EMP
2 CONNECT BY PRIOR EMPNO=MGR
TELEBRÁS
75
9. ESTRUTURAS HIERÁRQUICAS EM
TABELAS (cont.)

A CLÁUSULA START WITH


 A cláusula START WITH define o(s) nó(s) que será (ão) tomado(s)
como ponto(s) de partida de uma inspeção. Dependendo da
direção definida na cláusula CONNECT BY, os nós serão
considerados raízes ou folhas
 Forma:
START WITH <condição>
onde <condição> define os nós que serão considerados como ponto
(s) de partida para a inspeção.
 Exemplo:
SQL>SELECT ENAME,EMPNO,JOB,DEPTNO,MGR
1 FROM EMP
2 CONNECT BY PRIOR EMPNO=MGR
3 START WITH ENAME=‘KING’

NÍVEIS DE NÓS
O nome LEVEL identifica uma pseudo-coluna pré-definida no
SQL*Plus (assim como SYSDATE). Seu valor em uma
determinada linha corresponde ao nível do nó na árvore, cuja raiz
é determinada pela cláusula START WITH. A pseudo-coluna
LEVEL pode ser usada em qualquer cláusula onde um nome de
coluna pode aparecer.

TELEBRÁS
76
EXERCÍCIOS - 9

1. Gere uma lista dos funcionários da empresa refletindo


a estrutura organizacional de modo que os nomes
dos funcionários apareçam identados de acordo com
o seu nível na empresa.
Inclua na lista, além dos nomes dos funcionários, o
nível, o número do empregado, o número do seu
gerente e o número do departamento.
Considere que o presidente da firma (nível 1) se
chama KING.
Use um tamanho de 21 caracteres para o nome do
empregado. Utilize 2 caracteres em branco para
identação de cada nível.

2. Encontre o salário médio para cada nível da


organização. Apresente o resultado ordenado por
nível.

TELEBRÁS
77
EXERCÍCIOS - 9 (cont.)

3. Liste as informações (vide exercício 1) sobre so


funcionários que trabalham para JONES. Apresente os
resultados como no exercício 1.

4. Liste as informações sobre as pessoas que trabalham


para CLARK ou para BLAKE. Ordene pelo número do
departamento.

5. Liste as informações sobre as pessoas a quem SMITH


está subordinado.

6. Liste as informações sobre todas as pessoas que


trabalham para JONES exceto SCOTT.

7. Liste as informações sobre todas as pessoas que


trabalham para JONES, exceto SCOTT e seus
subordinados.

8. Liste todos os funcionários que trabalham para JONES


exceto FORD, SCOTT e os subordinados de SCOTT.

TELEBRÁS
78
IV - CRIAÇÃO, REVISÃO E
ATUALIZAÇÃO DE TABELAS

1. CRIAÇÃO DE TABELAS

2. INSERÇÃO, ATUALIZAÇÃO E ELIMINAÇÃO DE


LINHAS DE UMA TABELA

3. MODIFICAÇÃO DE UMA TABELA

4. CRIAÇÃO E USO DE VISÕES

TELEBRÁS
79
1. CRIAÇÃO DE TABELAS

O COMANDO CREATE TABLE

CREATE TABLE <tabela>


(<coluna><tipo><tamanho> [NOT NULL]
[{,<coluna><tipo><tamanho>[NOT NULL]}...])

NOMES DE TABELAS

 Devem começar com uma letra.


 Podem conter letras, dígitos e os caracteres $, #, @, _.
 A caixa não é significativa.
 O tamanho máximo é de 30 caracteres.
 Não pode duplicar o nome de outra tabela ou visão.
 Não pode duplicar uma palavra reservada.
 Se o nome da tabela for delimitado por apóstrofos as 3
primeiras regras acima não valem e serão substituídas
pelas seguintes:
 o nome pode conter quaisquer caracteres, exceto
o apóstrofo.
 a caixa é significativa.

TELEBRÁS
80
1. CRIAÇÃO DE TABELAS (cont.)

NOMES DE COLUNAS
As regras são as mesmas que as regras para nomes de tabelas.

TIPOS DE DADOS
CHAR(w) - valores alfanuméricos consistindo
ou de letras, dígitos e caracteres
VARCHAR(w) especiais. w é o tamanho
máximo permitido. Não pode
exceder 255.
NUMBER - valores numéricos constituídos de
dígitos, um sinal (+ ou -) opcional e
um ponto decimal. O número máximo

de dígitos é 38.
NUMBER(w) - o mesmo que NUMBER mas com
tamanho limitado a w dígitos, que não pode
ser maior que 38. Representa um número inteiro.

TELEBRÁS
81
1. CRIAÇÃO DE TABELAS (cont.)

TIPOS DE DADOS (cont.)

NUMBER (w,d) - o mesmo que NUMBER (w), porém com d


casas decimais. Representa
números reais.
DATE - valores de datas entre 1/1/4712 AC e
31/12/4712 DC.
LONG - similar a CHAR, mas os valores podem ter até
64K caracteres. Esse tipo de coluna não pode fazer
parte de condições de queries. Uma tabela pode ter
no máximo 1 coluna do tipo LONG.

A CLÁUSULA NOT NULL


A cláusula NOT NULL proíbe que uma coluna receba o valor nulo.
A tentativa de inserir um valor nulo nessa coluna provocará a
emissão de mensagem de erro.

INICIALIZAÇÃO DE TABELAS
Você pode criar e inicializar uma tabela simultaneamente através
de um subquery.
CREATE TABLE BONUS(ENAME,JOB,SAL,COMM)
AS(SELECT ENAME,JOB,SAL,COMM
FROM EMP
WHERE JOB=‘MANAGER’
OR COMM>0,25*SAL)
TELEBRÁS
82
2. MANIPULAÇÃO DE LINHAS

Os tipos e tamanhos das colunas criadas são determinados


pelos tipos e tamanhos das colunas retornadas pelos
subqueries.

INSERÇÃO DE LINHAS

 A inserção de uma linha em uma tabela é feita através


do comando INSERT:
 Forma
INSERT INTO <tabela> [(lista de colunas)]
VALUES (lista de valores)
 Se a lista de colunas for omitida, a lista de valores
deverá conter valores para todas as colunas da tabela.
Colunas nulas deverão receber o valor NULL
explicitamente. Os valores deverão estar na mesma
ordem em que as colunas foram definidas na criação da
tabela. Os valores deverão estar separados por vírgula.
Datas e valores alfanuméricos deverão ser delimitados
por apóstrofos.
 Se a lista de colunas for incluída as colunas não
precisarão estar na ordem de definição, mas os valores
devem ser colocados na mesma ordem da lista de
colunas. As colunas omitidas serão inicializadas com
NULL.

TELEBRÁS
83
2. MANIPULAÇÃO DE LINHAS (cont.)

CÓPIA DE LINHAS ENTRE TABELAS

 Uma forma especial do comando INSERT permite o uso


de um subquery para selecionar linhas de uma tabela e
inserí-las em outra. Subquery substitui a cláusula
VALUES. Somente as linhas e colunas selecionadas pelo
subquery serão inseridas:
INSERT INTO <tabela> [(lista de colunas)]
subquery
 O número e o tipo de colunas selecionadas pelo
subquery têm que ser os mesmos da lista de colunas.

CONFIRMAÇÃO DE MODIFICAÇÕES

Inserções e outras modificações em tabelas são feitas em


caráter temporário e só são tornadas permanentes
quando você sai do SQL*Plus ou quando algum comando
de um grupo especial é executado. Até que as
modificações sejam confirmadas:
 você poderá vê-las quando realizar consultas às
tabelas modificadas;
 outros usuários não poderão vê-las ao realizar
consultas às tabelas modificadas;
 você poderá cancelá-las se mudar de opinião ou
necessitar corrigir erros.

TELEBRÁS
84
2. MANIPULAÇÃO DE LINHAS (cont.)

O COMANDO ROLLBACK
O comando ROLLBACK cancela todas as modificações
que não foram confirmadas.

O COMANDO COMMIT
O comando COMMIT torna permanentes todas as
modificações pendentes.

ATUALIZAÇÃO DE CAMPOS EM UMA LINHA


 O comando UPDATE permite a atualização dos campos
de um conjunto de linhas:
UPDATE tabela
SET <coluna>=<valor>,[{,<coluna>=<valor>,...]
WHERE <condição>
 A cláusula SET define as colunas a serem atualizadas e
os novos valores que elas assumirão.
 A cláusula WHERE define quais linhas da tabela serão
atualizadas. A condição da cláusula WHERE pode conter
subqueries.
 Na cláusula SET o valor da atribuição <coluna>=<valor>
pode ser substituído por um subquery colocado entre
parênteses:
SET <coluna>=(SELECT ...)

TELEBRÁS
85
2. MANIPULAÇÃO DE LINHAS (cont.)

ELIMINAÇÃO DE LINHAS
 O comando DELETE permite a eliminação de linhas em uma
determinada tabela :
DELETE FROM <tabela>
WHERE <condição>
 A condição da cláusula WHERE define quais linhas serão
eliminadas. Ela pode conter um subquery.
A CHAVE AUTOCOMMIT
Existe uma “chave” com o nome de AUTOCOMMIT cujo estado
(LIGADA/DESLIGADA) faz com que as modificações realizadas
na Base de Dados sejam imediatamente executadas (ligadas) ou
deferidas até que um comando COMMIT seja executado
(desligado):
SET AUTOCOMMIT ON - liga a chave
SET AUTOCOMMIT OFF - desliga a chave

RECUPERAÇÃO AUTOMÁTICA DE FALHAS


O conjunto de modificações realizadas na base de dados entre
duas operações sucessivas de COMMIT e/ou ROLLBACK
chama-se transação.
Quando uma transação é interrompida por uma falha do sistema
operacional, da máquina ou da “media”, a transação é
automaticamente cancelada (ROLLEDBACK). Isso previne que a
falha provoque modificações indesejáveis nos seus dados e
retorna suas tabelas ao seu status por ocasião do último
COMMIT.

TELEBRÁS
86
3. MODIFICAÇÃO DE TABELAS

AUMENTANDO COLUNAS

 Para aumentar o tamanho máximo de uma coluna


numérica ou alfanumérica, use o comando ALTER
TABLE com a cláusula MODIFY :
ALTER TABLE <tabela>
MODIFY (<definições de colunas>)

 Você pode aumentar o tamanho de uma coluna ou


modificar seu número de casas decimais. Você só
poderá diminuir o tamanho de uma coluna ou
modificar seu tipo de dado se a coluna for nula para
todas as linhas da tabela.

 Você pode modificar uma coluna de NOT NULL para


NULL através de cláusula NULL:
...MODIFY(BUDGET NUMBER(9,2) NULL);

 Você pode modificar uma coluna de NULL para NOT


NULL somente se não existirem valores nulos, na
tabela, para aquela coluna.

TELEBRÁS
87
3. MODIFICAÇÃO DE TABELAS (cont.)

ADICIONANDO COLUNAS

 Para adicionar colunas a uma tabela use o


comando ALTER TABLE com a cláusula ADD:
ALTER TABLE <tabela>
ADD (<definições de colunas>)

 As definições de colunas são idênticas às do


comando CREATE TABLE, devendo, como
naquele comando, serem separadas por vírgulas.

 Você só poderá adicionar uma coluna do tipo NOT


NULL se a tabela estiver vazia.
Caso contrário você deverá criá-la como NULL,
preencher a coluna com algum valor para todas
as linhas e mudar o seu tipo para NOT NULL
através da cláusula MODIFY.

TELEBRÁS
88
EXERCÍCIOS - 10

1. Crie uma tabela chamada PROJ com as seguintes


colunas:
 Número do projeto (PROJNO), numérica, valores nulos
proibidos
 Nome do projeto (PNAME), alfanumérica, máximo de 10
caracteres
 Orçamento do projeto (BUDGET), numérico, máximo de
8 dígitos com 2 casas decimais.
2. Insira uma nova linha na tabela de funcionários com as
seguintes informações:
Nº do funcionário : 7954
Nome : CARTER
Cargo : CLERK
Gerente : 7698
Admissão : 7/4/84
Salário : 1000
Departamento : 30
3. Insira 3 linhas na tabela PROJ com os seguintes valores
para as colunas:
PROJNO PNAME BUDGET
101 ALPHA 250000
102 BETA 175000
103 GAMMA 95000
TELEBRÁS
89
EXERCÍCIOS - 10 (cont.)

4. Insira uma nova linha na tabela de funcionários com as


seguintes informações:
Nº do funcionário : 7955
Nome : WILSON
Admissão : 22/04/84
Salário : 1500
Departamento : 30

5. Insira uma nova linha na tabela de funcionários com as


seguintes informações: (coloque a data de admissão no
formato MM/DD/YY)
Nº do funcionário : 7657
Nome : MASON
Cargo : ANALISTA
Gerente : 7566
Admissão : 24/4/84
Salário : 3400
Departamento : 20

TELEBRÁS
90
EXERCÍCIOS - 10 (cont.)

6. Insira um novo empregado contratado às 9:30 em 3 de


Maio de 1984:
Nº do funcionário : 7658
Nome : CHAN
Cargo : Analyst
Gerente : 7566
Salário : 3000
Departamento : 20

7. Copie na tabela BONUS os dados sobre os funcionários


que são gerentes ou que ganham comissão maior que
25% do salário.
Para obter uma descrição da tabela BONUS digite o
comando DESC BONUS

8. Confirme as modificações que você fez na base de dados


até agora.

9. Copie na tabela BONUS os dados sobre os funcionários


que são gerentes. Consulte a tabela BONUS e verifique a
duplicação de linhas.
Corrija seu “erro” cancelando a operação anterior.
Verifique se o “erro” foi corrigido.
TELEBRÁS
91
EXERCÍCIOS - 10 (cont.)

10. Atualize os dados de WILSON com os


seguintes valores:
Cargo : SALESMAN
Admissão : hoje
Salário : 10% de aumento
Verifique o resultado.

11. Dê um aumento de 15% a todos os


analistas e escreventes do departamento 20.
Confirme as modificações realizadas até
agora.

12. Dê um aumento de 5% a cada empregado


(tabela EMP) que consta da tabela BONUS.
Verifique o resultado e depois CANCELE a
operação.

13. Faça com que os salários de todos os


vendedores seja igual a 1,1 vezes o salário
médio dos vendedores. Verifique o
resultado da operação e depois cancele-a.

TELEBRÁS
92
EXERCÍCIOS - 10 (cont.)

14. Elimine o funcionário WARD da tabela BONUS.

15. Elimine todos os funcionários da tabela BONUS que


tem o mesmo cargo que JONES. Verifique o resultado e
CANCELE as operações de eliminação realizadas até
agora.

16. Ligue a chave AUTOCOMMIT. Elimine o funcionário


BLAKE da tabela BONUS. Verifique o resultado. Tente
cancelar a operação. Verifique o resultado e desligue a
chave de AUTOCOMMIT.

17. Modifique a coluna BUDGET da tabela PROJ para que


ela aceite números com até 9 dígitos com 2 decimais.

18. Adicione uma coluna PROJNO numérica à tabela EMP.


Coloque todos os gerentes e os funcionários do
departamento 20 no projeto 101.
Coloque todos os empregados com números maiores
que 7700 no projeto 102. (dos que restaram)
Coloque os demais funcionários no projeto 103
Confirme
TELEBRÁS as operações. 93
4. CRIAÇÃO E USO DE VISÕES

VISÕES

 Uma visão é como uma janela através da qual você


pode examinar ou modificar informações em tabelas. Por
exemplo, você pode definir uma visão da tabela EMP
chamada EMP10 que contém somente as colunas
EMPNO, ENAME e JOB e somente as linhas do
departamento10.

 Uma visão é estruturada como uma tabela com linhas e


colunas embora não contenham dados próprios. Assim
sendo, com algumas exceções, você pode tratá-las
como tabela. Devido ao fato delas não ocuparem
espaço de armazenamento elas são chamadas de
tabelas “virtuais”.

 Visões são utilizadas com 3 finalidades:


– Segurança
– Conveniência
– Independência lógica de dados

TELEBRÁS
94
4. CRIAÇÃO E USO DE VISÕES (cont.)

CRIAÇÃO DE VISÕES

 Para criar uma visão use o comando CREATE VIEW:


CREATE VIEW <visão> [(lista de colunas)]
AS <query>
[WITH CHECK OPTION]
 O query da cláusula AS seleciona colunas, linhas e tabelas que
comporão a visão.
 Qualquer query válido pode ser usado na cláusula AS desde que
não contenha uma cláusula ORDER BY.
 O query pode acessar outras visões.
 A lista de colunas é opcional, mas, se existir, deve conter o
mesmo número de colunas da cláusula SELECT do query.
 A cláusula WITH CHECK OPTION especifica que as inserções e
atualizações da visão não podem resultar linhas que não seriam
selecionadas pela visão.

CONSULTAS DE VISÕES

 Você pode consultar uma visão do mesmo modo que uma tabela.
 Quando uma modificação é efetuada numa tabela, ela é refletida
nas visões da tabela.

TELEBRÁS
95
4. CRIAÇÃO E USO DE VISÕES (cont.)

ATUALIZAÇÕES DE VISÕES

 Você pode atualizar informações diretamente em certas


VISÕES bem como através das tabelas que a definem.
 Para que uma visão seja “atualizável” o query que a definiu
deve obedecer certas restrições:
– deve-se referir a uma única tabela
– não pode conter cláusulas GROUP BY e DISTINCT,
funções de grupo ou uma referência a pseudo-coluna
ROWNUM
 Você pode eliminar linhas de uma visão se a sua definição
observar as mesmas restrições acima.
 Você pode inserir linhas em uma visão se a sua definição
observar as mesmas restrições acima e mais uma extra :
– não pode conter colunas definidas por expressões.

VISÕES DE VÁRIAS TABELAS

Você pode construir uma visão de mais de uma tabela


definindo a visão com um query que contém um JOIN de
duas ou mais tabelas. Você pode também realizar JOINS de
visões com tabelas e com outras visões.

TELEBRÁS
96
4. CRIAÇÃO E USO DE VISÕES (cont.)

USO DE EXPRESSÕES E FUNÇÕES EM VISÕES

 Quando você cria uma visão, você pode


selecionar expressões or funções no query que a
define. Essas colunas computadas são chamadas
de colunas virtuais.
 Quando você define colunas virtuais numa visão,
você deve dar nomes a todas as colunas da
visão.

FUNÇÕES DE GRUPO EM VISÕES

Você pode definir visões com funções de grupo e a


cláusula GROUP BY no query.

TELEBRÁS
97
EXERCÍCIOS - 11

1. Crie uma visão da tabela EMP, chamada EMP10 que


contén as colunas EMPNO, ENAME e JOB para os
funcionários do departamento 10.
Recupere todas as linhas da visão EMP10. Recupere os
funcionários incluídos na visão EMP10 cujo número é
maior que 7800.

2. Promova MILLER a analista na tabela EMP e verifique a


modificação na tabela EMP10.

3. Adicione um novo empregado na tabela EMP e verifique


o resultado na visão EMP10. Recupere os funcionários
ordenados segundo o nome. Empregado a ser
incluído :
Número : 7999
Nome : BROWN
Cargo : CLERK
Gerente : 7902
Admissão : 25/01/83
Salário : 800
Departamento : 10
Projeto : 102
TELEBRÁS
98
EXERCÍCIOS - 11 (cont.)

4. Restaure o cargo original de MILLER através


de EMP10 e verifique o resultado em EMP.

5. Crie uma visão chamada PROJSTAFF que


contenha o nome do funcionário
(EMPLOYEE), o nome do projeto (PROJECT)
e o número do projeto (PROJNO)

6. Liste os empregados que trabalham no


projeto ALPHA.

7. a) Crie uma visão chamada PROJECT que


contenha o nome do projeto (PROJECT), o
nome do empregado (EMPLOYEE), o
número do empregado (EMP_NUMBER) e o
local de trabalho do empregado
(LOCATION).
b) Liste os projetos e empregados
localizados em NEW YORK.

TELEBRÁS
99
EXERCÍCIOS - 11 (cont.)

8. Defina uma visão chamada PAY que


contenha o salário mensal (MONTHLY-SAL),
o nome do funcionário (NOME), o salário
anual (ANNUAL-SAL) e o número do
departamento (DEPTNO).

Selecione todas as linhas da visão.

9. Crie uma visão chamada DEPT-COMP que


contenha para cada departamento, o
número do departamento (DEPTNO), o
menor salário do departamento (LOSAL), o
maior salário do departamento (HISAL), o
salário médio do departamento (MEDSAL) e
o total em salários do departamento
(TOTSAL)

10. Liste o salário mínimo, o médio e o máximo


em cada departamento.

TELEBRÁS
100
V - GERAÇÃO DE RELATÓRIOS

1. SALVANDO E RECUPERANDO COMANDOS

2. ARMAZENANDO RESULTADOS

3. FORMATAÇÃO DE RESULTADOS

4. VARIÁVEIS DO SISTEMA

5. VARIÁVEIS DO USUÁRIO

TELEBRÁS
101
1. SALVANDO E RECUPERANDO
COMANDOS
O COMANDO SET BUFFER
 O último comando SQL digitado fica armazenado num buffer
(buffer SQL), onde pode ser editado e executado.
Comandos de formatação de consultas, isto é, comandos
SQL*Plus, não são armazenados no buffer SQL.

 O usuário pode definir outros buffers, onde comandos do


SQL*Plus podem ser inseridos juntamente com o comando SQL:
SET BUFFER <nome>

 Em cada momento , somente um buffer pode estar ativo, o buffer


corrente. O comando SET BUFFER automaticamente torna
corrente o buffer por ele nomeado.
Se o buffer nomeado já estiver sido criado anteriormente, ele é
simplesmente ativado.

 O nome de um buffer segue as mesmas regras de formação de


nomes de tabelas e colunas.

 Para inserir comandos num buffer, que não o SQL, deve-se usar
o comando I do editor de linhas. Os comandos serão inseridos no
buffer corrente.

 O comando R ou o comando / só se aplicam ao buffer SQL. A


execução de um comando SQL torna corrente, automaticamente,
o buffer SQL.

TELEBRÁS
102
1. SALVANDO E RECUPERANDO
COMANDOS (cont.)

O COMANDO SAVE

 O comando SAVE salva o conteúdo do buffer corrente em um


arquivo do sistema operacional:
SAVE <arquivo> [CREATE|REPLACE|APPEND]
 A extensão default do nome do arquivo é sql.
 A opção CREATE faz com que uma mensagem de erro seja
emitida se já existir um arquivo com o mesmo nome.
 A opção REPLACE, que é a default, faz com que o conteúdo do
arquivo, se já existir, seja substituído pelo conteúdo do buffer.
 A opção APPEND faz com que o conteúdo do buffer seja
justaposto ao conteúdo do arquivo se esse já existir.

O COMANDO GET

 O comando GET carrega o conteúdo de um arquivo no buffer


corrente. Se este for o SQL, somente o comando SQL será
carregado:
GET <arquivo> [LIST|NOLIST]
 A extenção default do nome do arquivo é sql.
 A opção LIST faz com que o conteúdo do buffer seja listado.
 A opção NOLIST faz com que o conteúdo do buffer não seja
listado.

TELEBRÁS
103
1. SALVANDO E RECUPERANDO
COMANDOS (cont.)
O COMANDO START

 O comando START carrega o buffer SQL com o conteúdo de uma


arquivo e executa-o:
START <arquivo> [param1, param2,....]

 A extensão default é sql.

 Parâmetros podem ser adicionados ao comando START que


subtituirão variáveis existentes no arquivo que devem ser
utilizados no arquivo com os nomes de &1, &2, ..., &9.

 Exemplo:
Suponha o arquivo PROMOTE com o seguinte conteúdo :
SELECT * FROM EMP
WHERE MGR = &1 AND JOB = ‘&2’
AND SAL>&3
A chamada :
SQL> START PROMOTE 7280 CLERK 950;

executaria o comando :
SELECT*FROM EMP
WHERE MGR=7280 AND JOB=‘CLERK’
AND SAL >950;

TELEBRÁS
104
2. ARMAZENANDO RESULTADOS

O COMANDO SPOOL

 O comando SPOOL é utilizado para armazenar e


imprimir os resultados de consultas

 Para armazenar o resultado de uma consulta num


arquivo use o comando:
SPOOL <arquivo>
o default da extensão do nome do arquivo é lis.

 Toda a informação que for apresentada na tela


será armazenada no arquivo de spool até que o
processo seja terminado pelo comando:
SPOOL OFF

 Para imprimir o conteúdo do arquivo de spooling ao


fim do processo de armazenamento dos resultados
deve-se usar o comando:
SPOOL OUT

TELEBRÁS
105
3. FORMATAÇÃO DE RESULTADOS

O COMANDO COLUMN

 O comando COLUMN especifica como uma coluna e seu


cabeçalho devem ser formatados num relatório.

 Forma
COLUMN {<coluna>|<expressão>}
[<lista de cláusulas>]

 Qualquer número de comandos COLUMN pode ser digitado para


diferentes colunas.

 Qualquer número de comandos COLUMN pode ser digitado para


a mesma coluna e suas cláusulas serão aplicadas coletivamente.
Se vários comandos aplicarem a mesma cláusula à mesma
coluna, valerá a última entrada.

 O comando COLUMN sem parâmetros exibe as definições


vigentes de colunas.

 O comando COLUMN sem cláusulas, exibe a definição vigente da


coluna nomeada.

TELEBRÁS
106
3. FORMATAÇÃO DE RESULTADOS
(cont.)
O COMANDO COLUMN (cont.)

 Exemplo:
COLUMN REMARKS FORMAT A20 WRAP;

 Cláusulas:
ALIAS <pseudônimo> : atribui um pseudônimo à coluna que poderá
mais tarde ser utilizado em outros comandos de formatação.

{CLEAR|DEFAULT} : remove a definição da coluna (CLEAR) ou faz


valer a definição (DEFAULT).

FORMAT <formato> : especifica o formato de exibição da coluna.

HEADING <texto>[JUSTIFY{LEFT|CENTER|RIGHT}] : Define o


cabeçalho da coluna e como deve ser justificado. O texto deve ser
delimitado por apóstrofos. Uma barra vertical “|” força uma nova
linha.

LIKE {<expressão> | <coluna>} : Copia a especificação de outra


coluna.

NEWLINE : começa uma nova linha antes de apresentar o resultado.

NEW_VALUE <variável> : armazena um novo valor da coluna numa


variável de usuário quando ocorre uma quebra.
TELEBRÁS
107
3. FORMATAÇÃO DE RESULTADOS
(cont.)
O COMANDO COLUMN (cont.)

PRINT | NOPRINT : apresenta ou não a coluna.

NULL <texto> : apresenta texto no lugar de brancos quando o valor


da coluna é nulo.

OLD_VALUE <variável> : armazena o antigo valor da coluna numa


variável de usuário quando ocorre uma quebra.

ON | OFF : ativa ou desativa a atual especificação da coluna, sem


destruí-la.

WRAPPED | WORD_WRAPPED | TRUNCATED: especifica como


serão tratadas colunas ou cabeçalhos que ultrapassarem em
comprimento o tamanho especificado para a coluna na cláusula
FORMAT. Só para valores alfanuméricos.

JUSTIFY {LEFT|CENTER|RIGHT}:alinha a exibição da coluna; por


default char e date são alinhados à esquerda e number à
direita.

TEMP : especifica que as definições para a coluna são apenas


para uma consulta, sendo removidas em seguida.

TELEBRÁS
108
3. FORMATAÇÃO DE RESULTADOS
(cont.)
O COMANDO TTITLE

 Força a apresentação de um título antes do início de cada página


do resultado de uma consulta.

 Forma:
TTITLE [ON|OFF|<lista de cláusulas>]
ON/OFF: suprime ou restaura a apresentação do título sem
afetar sua definição
<lista de cláusulas> : define o título.

 Exemplo:
SQL> TTITLE LEFT ‘Análise Mensal’ RIGHT ‘Page’ SQL.PNO SKIP
CENTER ‘Dados em Milhares’

 O comando pode continuar em mais de uma linha colocando-se


um hífen (-) no fim da linha e digitando-se <CR>.

 Cláusulas:
COLUMN <n> : salta para a coluna n.
SKIP <n> : salta n linhas. O default de n é 1.
TAB <n> : salta n colunas.
LEFT|RIGHT|CENTER : alinha qualquer texto que venha depois desta
cláusula, até a próxima cláusula do mesmo tipo ou COLUMN.

TELEBRÁS
109
3. FORMATAÇÃO DE RESULTADOS
(cont.)

O COMANDO TTITLE (cont.)

FORMAT <formato> : determina o formato em que deverão


aparecer itens do tipo especificado que venham a seguir
até uma nova especificação de formato.
<texto> : texto a aparecer no título.
<variáveis> : variáveis do sistema cujo valor deve aparecer no
título. Devem ser prefixados com ‘SQL.’ :

SQL.PNO (número da página do relatório)


SQL.LNO (número de linha do relatório)
SQL.USER (nome do usuário)
SQL.SQLCODE (valor mais recente de mensagem de erro do
SQL)

O COMANDO BTITLE
 Força a apresentação de um título após o final de cada
página do resultado de uma consulta.
 Forma:
BTITLE [ON|OF|lista de cláusulas]
 Funciona de maneira análoga ao comando TTITLE.

TELEBRÁS
110
3. FORMATAÇÃO DE RESULTADOS
(cont.)
O COMANDO BREAK
 Uma quebra é um evento que ocorre sempre que um comando
SELECT está sendo processado: fim de uma página, mudança no
valor de uma expressão, etc. Uma quebra faz com que algum tipo
de ação seja tomada.

 O comando BREAK especifica que tipos de eventos causarão


uma quebra e que tipo de ação deve ser realizada para cada tipo
de quebra.

 Somente um comando BREAK pode estar em efeito num


determinado instante. Um novo comando BREAK cancela o
anterior.

 Os eventos definidos num comando BREAK são organizados


numa hierarquia de quebra. O SQL*Plus verifica a ocorrência de
um determinado tipo de evento em uma quebra somente se essa
quebra não determinou um outro evento mais alto na hierarquia.

 Forma:
BREAK ON <evento1> <ação1>[{on evento2 acão2}...]

TELEBRÁS
111
3. FORMATAÇÃO DE RESULTADOS
(cont.)
 Tipos de eventos
ON<expressão> : causa uma quebra quando o valor de <expressão>
muda. <expressão> pode envolver colunas e pseudônimos. Vários
eventos do tipo <expressão> são hierarquizados pela ordem de
definição.
ON ROW : causa uma quebra cada vez que uma linha é selecionada.
Vai para o fim da hierarquia.
ON PAGE : causa uma quebra no fim de página. Independe da
hierarquia.
ON REPORT : causa uma quebra no fim do relatório. Vai para o início
da hierarquia.

 Ações:
SKIP <n> : salta n linhas antes de imprimir a linha associada ao
evento.
SKIP PAGE : salta uma página antes de imprimir a linha associada ao
evento.
DUPLICATES : normalmente o valor de uma coluna (ou expressão) de
um evento de quebra só é exibido quando ele muda de valor. Essa
ação força a exibição da coluna.

 Exemplo :
BREAK ON DEPTNO SKIP2 ON EMPNO
SKIP1 DUPLICATES

TELEBRÁS
112
3. FORMATAÇÃO DE RESULTADOS
(cont.)

O COMANDO COMPUTE

 Calcula funções de grupo nas linhas de um grupo


determinado por uma quebra. O resultado pode ser
apresentado no fim do grupo ou armazenado em
variáveis.
 Forma:
COMPUTE <lista de funções>
OF <lista de expressões>
ON <evento>
[INTO <lista de variáveis>]

 Lista de funções

– AVG
– COUNT
– MAX
– MIN NÃO SEPARAR POR (,)
– NUM COMPUTE AVG MAX MIN
– STD
– SUM
– VAR

TELEBRÁS
113
3. FORMATAÇÃO DE RESULTADOS
(cont.)
O COMANDO COMPUTE (cont.)

 A CLÁUSULA OF
Define as expressões sobre as quais serão computadas as
funções de grupo. As colunas desta cláusula devem ser
mencionadas no comando SELECT. As expressões devem
ser separadas por (,).
OF SAL, COMM, SAL + COMM

 A CLÁUSULA ON
Especifica o evento que determinará a quebra equivalente ao
comando BREAK.
ON JOB

 A CLÁUSULA INTO
Se incluída, define as variáveis que receberão os valores
computados das funções de grupo. As variáveis devem ser
separadas por vírgulas.
Se omitida, os resultados serão exibidos no relatório.
INTO SALAVG, SALMAX

 O comando COMPUTE não tem efeito sem um comando BREAK


correspondente.

TELEBRÁS
114
3. FORMATAÇÃO DE RESULTADOS
(cont.)

O COMANDO COMPUTE (cont.)

 Exemplo:

SQL> BREAK ON DEPTNO SKIP 2


SQL> COMPUTE SUM OF SAL ON DEPTNO
SQL> SELECT DEPTNO, ENAME, SAL
2 FROM EMP
3 ORDER BY DEPTNO;

ELIMINAÇÃO DE OPÇÕES DE FORMATAÇÃO

 Você pode “limpar” as definições de formatação feitas através


do comando CLEAR :

CLEAR BREAKS
CLEAR BUFFER
CLEAR COLUMNS
CLEAR COMPUTES
CLEAR SCREEN

TELEBRÁS
115
4. VARIÁVEIS DO SISTEMA

 Variáveis do sistema armazenam valores que determinam o


comportamento do sistema em qualquer instante.

 O valor de uma variável do sistema pode ser examinado através


do comando SHOW.

 O valor de uma variável do sistema pode ser modificado através


do comando SET. Algumas variáveis não podem ter o seu valor
mudado pelo usuário.

 O valor de uma variável do sistema pode ser atribuído a uma


variável de usuário ou utilizado num comando, quando deve então
ser prefixado por “SQL”.

 A lista abaixo identifica algumas variáveis do sistema. Os


possíveis valores que ela pode receber através do comando SET
são colocadas entre parênteses :

AUTOCOMMIT (ON|OFF)
Define se a confirmação de modificações na base de dados
deve ser automática (ON) ou não (OFF). O default é OFF.

BUFFER (nome)
Define o buffer corrente.

TELEBRÁS
116
4. VARIÁVEIS DO SISTEMA (cont.)

ECHOSET (ON|OFF)
Define se comandos SQL executados a partir de um arquivo
devem ser exibidos na tela (ON) ou não (OFF).

HEADING (ON|OFF)
Define se os cabeçalhos de colunas devem ser apresentados
(ON) ou não (OFF).

FEEDBACK (n|ON|OFF)
Mostra o número de registros retornados por uma consulta
quando a consulta seleciona pelo menos n registros. O
default de n é 6

LINESIZE (n)
Define o número máximo de caracteres de uma linha de
relatório. O default é 80.

NEWPAGE (n)
Define o número de linhas em branco a serem colocadas
entre o fim de uma página e o início de outra. O valor “0”
faz com que um FORMFEED seja emitido.

NULL (texto)
Define o texto que deve aparecer como valor de uma coluna
nula. O default é brancos.

TELEBRÁS
117
4. VARIÁVEIS DO SISTEMA (cont.)

NUMFORMAT (formato)
Define o formato default para apresentação de valores
numéricos.

NUMWIDTH (n)
Define o tamanho default de apresentação de valores
numéricos.

PAGESIZE (n)
Define o número de linhas por página do relatório.

PAUSE (ON|OFF|texto)
Define se, a cada página de relatório, deve ser feita uma
pausa e solicitada a digitação de <CR> para que a
apresentação continue. texto define o prompt a ser emitido.

SPACE (n)
Define o número de espaços entre colunas.

VERIFY (ON|OFF)
Mostra (ON) o texto de uma linha de comando antes e depois
de substituir uma variável com seu valor.

TIMING (ON|OFF)
Mostra (ON) a estatística de tempo de cada comando SQL
que está sendo executado.
TELEBRÁS
118
4. VARIÁVEIS DO SISTEMA (cont.)
TAB (ON|OFF)
Define se o caractere <TAB> deve ou não ser utilizado para
formatar a saída. O default é ON.

TERMOUT (ON|OFF)
Suprime (ON) da tela a apresentação dos resultados de
comandos executados a partir de arquivos.

TIME (ON|OFF)
Apresenta (ON) a hora corrente antes de cada prompt.

TRIMOUT (ON|OFF)
Elimina os caracteres em branco no fim das linhas do relatório
(ON).

TRUNCATE (ON|OFF)
Trunca a apresentação do valor de uma coluna se não couber
dentro da especificação da coluna (ON).

LNO
Número da linha do relatório. Seu valor não pode ser modificado
pelo comando SET.

PNO
Página corrente do relatório. Seu valor não pode ser modificado
pelo comando SET.
TELEBRÁS
119
4. VARIÁVEIS DO SISTEMA (cont.)

O COMANDO SET
 Permite a definição de um valor para uma variável do
sistema.
 Forma:
SET <variável> <valor>

O COMANDO SHOW
 Apresenta na tela o valor atual de uma variável do
sistema.
 Forma:
SHOW <opção>

Opção pode ser:

 <variável do sistema>
Variáveis que são definidas pelo comando SET.
 ALL
Lista todas as variáveis definidas.
 BTITLE
Mostra o valor corrente de BTITLE.
 LNO
Mostra o valor corrente da linha.
 PNO
Mostra o valor corrente da página.
TELEBRÁS
120
4. VARIÁVEIS DO SISTEMA (cont.)

 RELEASE
Mostra a versão do ORACLE RDBMS ao qual o
SQL*Plus está conectado.
 SQLCODE
Mostra o valor do código da mais recente
operação.
 TTITLE
Mostra o valor corrente de TTITLE.
 USER
Mostra o usuário corrente que está acessando
o SQL*Plus.

TELEBRÁS
121
5. VARIÁVEIS DO USUÁRIO

 O usuário pode definir variáveis a que ele pode atribuir valores


através do comando DEFINE ou do operador ‘:=‘ :
DEFINE NOMETAB=EMP
NOMECOL := EMPNO

 O valor atribuído a uma variável de usuário deve ser uma cadeia


(sem apóstrofos) ou uma variável do sistema prefixada por
‘SQL.’:
NUMLIN := SQL.LNO

 A cada variável de usuário corresponde uma variável de


substituição formada pelo nome da variável de usuário
precedido por & ou &&:
&& NOMETAB
& NOMECOL

 Variáveis de substituição podem ser usadas em comandos SQL


e SQL*Plus. Quando o SQL*Plus encontra uma variável de
substituição em um comando, ele a substitui pelo valor da
variável de usuário correspondente:
SELECT * FROM &NOMETAB;

SELECT * FROM EMP;

TELEBRÁS
122
5. VARIÁVEIS DO USUÁRIO (cont.)

 Se a variável de usuário não estiver definida será


solicitado ao usuário que digite um valor para ela:
Enter value for NOMETAB:

 Se a variável de substituição tiver um & como


prefixo, o valor digitado pelo usuário só valerá
para a primeira ocorrência da variável naquele
comando. Se ela tiver && como prefixo , aquele
valor será utilizado daí em diante até que um novo
valor lhe seja atribuído.

 O valor de uma variável pode ser tornado


indefinido através do comando UNDEFINE:
UNDEFINE NOMETAB

 Variáveis de substituição não podem ser usadas


em:
– expressões
– comando DEFINE ou :=
– comandos de edição do buffer

 A entrada de um valor para uma variável de


substituição pode ser explicitamente solicitada
através do comando ACCEPT:
ACCEPT <var> [NUMBER|CHAR][PROMPT <texto>|
NOPROMPT][HIDE]
TELEBRÁS
123
EXERCÍCIOS - 12

1. Gere um relatório que mostre, para cada


departamento, o salário total de cada cargo.
Totalize também, os salários por departamento e
por cargo. Siga os passos abaixo:

(a) Selecione as colunas JOB, SAL e DEPTNO da


tabela EMP.
(b) Exploda a coluna SAL em três colunas,
DEPARTAMENTO 10, DEPARTAMENTO 20 e
DEPARTAMENTO 30 que conterão, para cada
linha, o valor 0 se o funcionário não trabalhar
naquele departamento ou seu salário, caso
contrário. Use a condição DECODE. Retire a
coluna DEPTNO.
(c) Agrupe as linhas de modo a calcular o salário
total em cada cargo em cada departamento.
(d) Acrescente uma coluna que conterá o salário
total de cada cargo através de todos
departamentos. Dê-lhe o nome de TOTAL POR
CARGO.
(e) Acrescente uma coluna que conterá o valor 0
para todas as linhas. Dê-lhe o nome de TEMP.
(f) Defina uma quebra na coluna TEMP e totalize as
colunas numéricas, por ela.
(g) Formate as colunas numéricas com o modelo
$99,999.99.
(h) Suprima a apresentação da coluna TEMP

TELEBRÁS
124
EXERCÍCIOS - 12 (cont.)

(i) Acrescente um título com 3 linhas. Na primeira linha coloque


a data alinhada à esquerda e a página alinhada à direita. Na
segunda coloque o nome da companhia centralizado. Na
terceira coloque o título do relatório centralizado.
(j) Acrescente um rodapé com a palavra CONFIDENCIAL
centralizada.

2. Gere um relatório que, para cada departamento, analisa o


salário de cada empregado como uma porcentagem do total
do departamento e como uma porcentagem do total da
empresa. Totalize as colunas numéricas para cada
departamento. Siga os passos abaixo:
(a) Cancele os títulos, quebras e computações do exercício
anterior.
(b) Crie uma visão que contém o salário total da companhia.
(c) Formate a coluna SAL da tabela EMP com o modelo
$99,999.99
(d) Junte a tabela ENAME à visão definida em (b), selecionando
as colunas EMP, SAL e PCT COMP (percentual do salário em
relação ao total da companhia).
(e) Crie uma visão que contém o salário total de cada
departamento.

TELEBRÁS
125
EXERCÍCIOS - 12 (cont.)

(f) Junte a visão do item (e) à tabela EMP e à visão do item (b),
adicionando assim ao resultado do item (d) uma coluna ‘PCT
DEPTO’ que contém o percentual do salário de cada empregado
em relação ao total de seu departamento.
(g) Adicione uma primeira coluna ao resultado em (f), que contém o
nome do departamento.
(h) Defina uma quebra no nome do departamento, totalizando as
colunas numéricas. Salte 2 linhas por departamento.
(i) Acrescente títulos como no exercício 1.
(j) Defina um espaçamento de 3 entre colunas.
(k) Defina o tamanho da página como 32.
(l) Formate as colunas da seguinte maneira:

COLUNA FORMATO CABEÇALHO

DNAME NOME DO
DEPARTAMENTO
(CENTRALIZADO)
ENAME A9 NOME DO
EMPREGADO
SAL $99,999.99 SALÁRIO
MENSAL
PCT DEPTO 999.99 PERCENT.
DEPTO
PCT COMP 999.99 PERCENT.
COMP
TELEBRÁS
126
VI - GERÊNCIA DA BASE DE DADOS

1. COMPARTILHAMENTO DE DADOS

2. INDEXAÇÃO DE TABELAS

3. ELIMINAÇÃO DE TABELAS

4. O DICIONÁRIO DE DADOS

TELEBRÁS
127
1. COMPARTILHAMENTO DE DADOS

ACESSO A TABELAS DE OUTROS USUÁRIOS


Para acessar tabelas de outros usuários prefixe o nome da tabela
com o nome do usuário que a criou:
SELECT *
FROM ALUNO 1.EMP;

SINÔNIMOS
 Você pode evitar a repetição da prefixação de uma tabela de
outro usuário, criando um sinônimo para ela:
CREATE SYNONYM EMP1
FOR ALUNO1.EMP;

SELECT *
FROM EMP1;

PRIVILÉGIOS
 Você possui cada tabela, visão ou sinônimo que criou. A menos
que você queira compartilhar um desses objetos com outros
usuários, somente você pode acessá-lo.
Para permitir a outro usuário o acesso a um objeto seu, use o
comando GRANT:
GRANT <lista de privilégios>
ON <objeto>
TO <lista de usuários>
[WITH GRANT OPTION]

TELEBRÁS
128
1. COMPARTILHAMENTO DE DADOS
(cont.)

 Os privilégios são:
SELECT
INSERT
UPDATE
DELETE
ALTER
INDEX
REFERENCES
ALL
 Exemplo:
GRANT INSERT,UPDATE
ON DEPT
TO ALUNO1, ALUNO2
 Existe um usuário chamado PUBLIC que inclui todos os usuários
do sistema:
GRANT SELECT
ON DEPT
TO PUBLIC
 Além de garantir a um usuário um ou mais privilégios, você pode
lhe dar o direito de transferí-los a outrem:
GRANT SELECT
ON EMP
TO ADAMS
WITH GRANT OPTION

TELEBRÁS
129
1. COMPARTILHAMENTO DE DADOS
(cont.)

VIOLAÇÕES DE ACESSO

Se você tentar fazer algum tipo de acesso que não lhe é permitido,
a seguinte mensagem lhe será emitida:
Table or view does not exit
Observe que a mensagem é propositalmente ambígua.

RETIRANDO PRIVILÉGIOS

 Você pode retirar um privilégio concedido anteriormente através


do comando REVOKE.

REVOKE <lista de privilégios>


ON {<tabela>|<visão>}
FROM <lista de usuários>

 Exemplo
REVOKE ALL
ON DEPT
FROM ALUNO1;

TELEBRÁS
130
1. COMPARTILHAMENTO DE DADOS
(cont.)

USO DE VISÕES PARA CONTROLE DE ACESSO

 Você pode restringir os privilégios de acesso a


partes de uma tabela se, ao invés de garantir os
privilégios sobre a tabela, o fizer sobre uma visão
que acessa somente partes da tabela:

CREATE VIEW EMP20


AS SELECT * FROM EMP
WHERE DEPTNO=20;

GRANT SELECT
ON EMP20
TO ALUNO1;

 Você pode criar uma visão que retorna diferentes


resultados dependendo de quem a usa:

CREATE VIEW MEU_DEPTO AS


SELECT * FROM EMP
WHERE DEPTNO IN
( SELECT DEPTNO FROM EMP
WHERE ENAME=USER
AND JOB=‘MANAGER’)

TELEBRÁS
131
1. COMPARTILHAMENTO DE DADOS
(cont.)

MODIFICAÇÃO DE PASSWORDS

 Você pode mudar seu password através de uma forma especial


do comando GRANT:

GRANT CONNECT
TO <nome do usuário>
IDENTIFIED BY <nova password>
MUDANÇA DE CONEXÃO

Se você tiver acesso ao sistema com mais de um “username”,


você pode, numa mesma sessão de uso do SQL*Plus, mudar
de um “username” para outro através do comando CONNECT:

CONNECT <username/password>
CONNECT <username>
CONNECT

TELEBRÁS
132
2. INDEXAÇÃO DE TABELAS

ÍNDICES

 A utilização de índices permite que o tempo que o SQL*Plus leva


para realizar uma consulta seja reduzido, especialmente se a
tabela é grande. Para criar um índice para uma tabela usa-se
o comando CREATE INDEX:

CREATE [UNIQUE] INDEX índice


ON <tabela> (<coluna1>, coluna2, ...)

ACELERAÇÃO DE CONSULTAS

 Quando você define uma cláusula WHERE que se refere a uma


coluna indexada, O SQL*Plus usa o índice para localizar as
linhas desejadas. Isso acontece automaticamente, você não
precisa dizer qual índice deve ser usado.

 SQL*Pus pode tirar vantagem da existência de um índice


somente quando você usa uma coluna indexada diretamente,
não quando você usa uma expressão que envolve uma coluna
indexada.

TELEBRÁS
133
2. INDEXAÇÃO DE TABELAS (cont.)

REFORÇO DE UNIDADE

 Você pode utilizar índices para garantir que uma coluna de uma
tabela contenha valores únicos. Isso é feito através da coluna
UNIQUE:
CREATE UNIQUE INDEX EMP_EMPNO
ON EMP(EMPNO)

 Se você tentar inserir uma linha com o mesmo valor de uma


coluna unicamente indexada de outra linha existente, a seguinte
mensagem será gerada:
duplicate value in index
A unicidade também é reforçada quando você atualiza uma
coluna unicamente indexada.

ACELERAÇÃO DE JOINS

 Índices são especialmente importantes em consultas que usam


JOINS, pois o SQL*Pus deve procurar em uma tabela um valor
que se casa a cada linha selecionada na outra tabela. Assim, se
duas tabelas são juntadas freqüentemente, deve-se criar um
índice na coluna envolvida em uma ou ambas tabelas.

TELEBRÁS
134
2. INDEXAÇÃO DE TABELAS (cont.)

ACELERAÇÃO DE JOINS (cont.)

 Exemplo:

CREATE INDEX EMP_DEPTNO


ON EMP (DEPTNO);

SELECT ENAME, LOC


FROM EMP, DEPT
WHERE EMP.DEPTNO=DEPT.DEPTNO;

Nesse exemplo um índice poderia ser criado tanto para a tabela EMP
como para a tabela DEPT.

REMOÇÃO DE ÍNDICES

 Um índice pode ser removido da base de dados através do


comando DROP INDEX:

DROP INDEX EMP.EMPNO;

TELEBRÁS
135
2. INDEXAÇÃO DE TABELAS (cont.)

QUANDO CRIAR ÍNDICES

1. SE UMA TABELA CONTIVER MAIS QUE


ALGUMAS CENTENAS DE LINHAS, INDEXE-A.
Quanto maior for a tabela, mais o índice poderá
melhorar o tempo de resposta de uma consulta.

2. EVITE CRIAR MAIS DO QUE 2 OU 3 ÍNDICES


EM UMA TABELA.
Criar um índice para cada coluna, de uma tabela é
contraproducente: Além de ocupar espaço em
disco, tornam mais lentas as operações de
INSERT, UPDATE e DELETE.

3. INDEXE AS COLUNAS USADAS COM MAIOR


FREQÜÊNCIA.
Indexe as colunas que você usa mais
freqüentemente em condições nas cláusulas
WHERE, ORDER BY e GROUP BY. Não existe
necessidade de indexar colunas usadas só para
apresentar valores.

TELEBRÁS
136
3. ELIMINAÇÃO DE TABELAS

O COMANDO DROP

 O comando DROP é utilizado para eliminar tabela e


visões da base de dados:

DROP TABLE BONUS;

DROP VIEW PAY;

 Os comandos de CREATE TABLE, ALTER TABLE,


DROP TABLE, CREATE VIEW, DROP VIEW
implicam na execução de um COMMIT. Assim,
essas operações não podem ser canceladas.

TELEBRÁS
137
4. DICIONÁRIO DE DADOS

DICIONÁRIO

 É um grupo de tabelas e visões que contêm informações sobre a


base de dados. Elas são criadas quando a base de dados é
criada.

 O dicionário de dados descreve tabelas, colunas, índices, ,


usuários, privilégios de acesso e outros objetos. O ORACLE
automaticamente o atualiza sempre que um desses objetos é
criado, modificado ou eliminado. O dicionário sempre contém uma
descrição atualizada da base de dados.

 Você pode ler tabelas do catálogo com comandos SELECT


padrões.

DESCRIÇÃO DO DICIONÁRIO

O dicionário de dados é descrito pela tabela DICTIONARY que


contém 2 colunas:

table-name - contém os nomes das tabelas e


visões do dicionário.

comments - descreve as tabelas.

TELEBRÁS
138
4. DICIONÁRIO DE DADOS (cont.)

TABELAS QUE DESCREVEM OUTRAS TABELAS

ALL_CATALOG: apresenta todas as tabelas, visões, sinônimos e


seqüências que você criou ou pode acessar, incluindo as do
catálogo.

USER_CATÁLOG: descreve todas as tabelas, visões, sinônimos


e seqüências que você criou ou pode acessar, excluindo as do
catálogo.

TAB: descreve todas as tabelas, visões, seqüências e clusters


que você criou.

TABELAS QUE DESCREVEM COLUNAS

ALL_TAB_COLUMNS: descreve nomes e definições de colunas


de tabelas, visões e clusters que você possui ou pode
acessar, incluindo as do catálogo.

USER_TAB_COLUMNS: descreve nomes e definições de colunas


de tabelas, visões e clusters que você possui ou pode
acessar, excluindo as do catálogo.

COLS: descreve nomes e definições de colunas de tabelas,


visões e clusters que você criou.

TELEBRÁS
139
4. DICIONÁRIO DE DADOS (cont.)

REGISTRO DE COMENTÁRIOS

 Você pode armazenar um comentário sobre uma tabela ou uma


base de dados:

COMMENT ON TABLE PROJ


IS ‘Números de projetos, nomes e despesas’

COMMENT ON COLUMN PROJ.PROJNO


IS ‘Número do projeto’

 Comentários sobre as tabelas são armazenados na coluna


COMMENTS das tabelas USER_TAB_COMMENTS e
ALL_TAB_COMMENTS.

 Comentários sobre colunas são armazenados na coluna


COMMENTS das tabelas USER_COL_COMMENTS e
ALL_COL_COMMENTS.

TELEBRÁS
140
4. DICIONÁRIO DE DADOS (cont.)

DESCRIÇÃO DE ÍNDICES

USER_INDEXES: descrição dos índices que você


criou.

ALL_INDEXES: descrição dos índices das tabelas


que são acessíveis ao usuário.

DESCRIÇÃO DE VISÕES

USER_VIEWS: textos das visões que o usuário criou.

ALL_VIEWS: textos das visões que o usuário pode acessar.

DESCRIÇÃO DE PRIVILÉGIOS

TABLE_PRIVILEGES: lista os privilégios de acesso que você possui


nas suas tabelas, visões e clusters e os privilégios de acesso
garantidos a você por outros usuários.

TELEBRÁS
141
VII - CONTROLE DE CONCORRÊNCIA

1. CONTROLE DE CONCORRÊNCIA

2. MODOS DE BLOQUEIO

3. BLOQUEIO DE LINHAS

4. RESUMO

TELEBRÁS
142
1. CONTROLE DE CONCORRÊNCIA

 Os problemas de concorrência surgem quando vários usuários


tentam MODIFICAR um mesmo objeto: TABELAS ou LINHAS.

 Aplicações que são utilizadas simultaneamente por vários


usuários podem se tornar inoperantes se os problemas de
concorrência não forem levados em consideração quando do
seu desenvolvimento.

 A técnica utilizada para resolver os problemas de concorrência


consiste no BLOQUEIO de um recurso a ser utilizado, isto é, a
reserva do recurso para uso próprio com a posterior liberação
para uso alheio.

TELEBRÁS
143
2. MODOS DE BLOQUEIO

 Exclusive (X)

Permite consultas no recurso bloqueado, mas proíbe qualquer


outra atividade (atualização, inserção, deleção) no recurso.

 Share (S)

Permite consultas, mas proíbe atualizações na tabela.

 Row Share ou Share Update (RS)

Permite acesso concorrente a uma tabela. Proíbe outros


usuários de bloquear a tabela toda para acesso exclusivo.

 Row Exclusive (RX)

É o mesmo que Row Share Lock, mas proíbe bloqueio em modo


compartilhado. Este bloqueio acontece automaticamente na
atualização, inserção ou deleção.

TELEBRÁS
144
2. MODOS DE BLOQUEIO (cont.)

 Share Row Exclusive (SRX)

Permite outros usuários consultar as linhas da tabela mas


não bloquear a tabela em modo compartilhado ou atualizar
registros.

COMANDO LOCK TABLE

LOCK TABLE <tabela> IN


Row Share |
Row Exclusive |
Share Update |
Share |
Share Row Exclusive |
Exclusive }
MODE [NOWAIT]

 O comando LOCK TABLE é usado manualmente para substituir


o lock default.

 A cláusula NOWAIT significa que o ORACLE não deve esperar


pela tabela, se a mesma estiver sendo bloqueada por outro
usuário.

TELEBRÁS
145
3. BLOQUEIO DE LINHAS

COMANDO

SELECT ROWID, ENAME


FROM EMP
WHERE ENAME=‘KING’
FOR UPDATE OF ENAME

REQUISITOS

 ROWID deve ser selecionado


 A cláusula FOR UPDATE OF é obrigatória

MODO
As linhas são bloqueadas em modo EXCLUSIVO

OMISSÃO

Se o comando acima for omitido, mas a tabela tiver sido bloqueada


em SHARE UPDATE MODE, as linhas alteradas por comandos
INSERT, UPDATE, DELETE serão implicitamente bloqueadas.

TELEBRÁS
146
3. BLOQUEIO DE LINHAS (cont.)

LIBERAÇÃO

Através do comando COMMIT ou ROLLBACK


BLOQUEIO DA TABELA

 O bloqueio de linhas pode ser realizado para


qualquer modo de bloqueio da tabela
correspondente. Contudo, se a tabela tiver sido
bloqueada em modo exclusivo, somente o usuário
que bloquear a tabela poderá bloquear as linhas.

 Se as linhas de uma tabela forem explicitamente


bloqueadas pelo comando SELECT, sem que a
tabela correspondente tenha sido explicitamente
bloqueada, um bloqueio implícito em modo
compartilhado para atualização (SHARE UPDATE
MODE) será realizado para a tabela.

TELEBRÁS
147
4. RESUMO

Nível de Locking

Comando SQL Linha Tabela

Select Não há lock Não há lock

Select For Update X RS

Lock <tabela> in

Exclusive X

Share Update RS

Row Share RS

Share Row Exclusive SRX

Row Exclusive RX

Share S

Insert X RX

Update X RX

Delete X RX
TELEBRÁS
148