Você está na página 1de 113

SQL*PLUS

Conceito
O SQL*PLUS um ambiente de trabalho que permite ao usurio ORACLE
acessar o banco de dados para efetuar varias atividades como incluir, consultar, alterar
ou remover dados;

O ambiente SQL*PLUS permite:


- Editar, armazenar, recuperar e executar comandos SQL e blocos de comando SQL;
- Formatar, executar clculos, armazenar e imprimir resultados de uma consulta;
- Criar, alterar, remover e listar objetos, como: tabelas, ndices, seqncias, sinnimos
e views;
- Atribuir valores para execuo de comandos SQL;
- Escolher um ambiente prprio de trabalho para edio de comandos;

Caractersticas do SQL:
- uma linguagem no Procedural, que executa linhas de comandos;
- Permite Incluir, consultar, alterar ou remover dados da base;
- Garante consistncia e a integridade de dados;
- Permite dar e retirar permisses de acesso a usurios;
- Acesso e copia entre Bancos de dados diferentes;
- Pode ser usada por:
. Administradores de sistema;
. Administradores de Banco de Dados;
. Administradores de Segurana em Banco;
. Gerentes;
. Programadores em diversas ferramentas;
. Pessoal de Suporte;
. Usurios de banco de dados de modo geral;

- Com o SQL standard pode-se usar diversas ferramentas como Pr-compiladores:


. Pro*Ada;
. Pro*C;
. Pro*Cobol;
. Pro*Fortran;
. Pro*Pascal;
. Pro*PL/I ;

Structured Query Language - SQL*PLUS

Captulo 1
ACESSANDO O SQL*PLUS
Para que o usurio possa se conectar com o produto SQL*PLUS, necessrio
que esteja previamente cadastrado como usurio ORACLE.
Quando o ORACLE instalado, e criado automaticamente um usurio chamado
SCOTT com a senha TIGER, este usurio acessa vrias tabelas e estruturas prprias
deste usurio.
Sintaxe de comando ambiente Character mode:
SQLPLUS[usurio]/[senha]
Prompt>sqlplus scott/tiger
SQL*PLUS: Release 3.1.3.7.2 - Production on Wed Sep 04 15:22:47 1996
Copyright ORACLE Corporation 1979, 1994. All rights reserved.
Connected to:
Oracle7 Server Release 7.1.3.3.6 - Production Release
With the tributed option
PL/SQL Release 2.1.3.2.1 - Production
SQL>
Em ambiente Grfico:
Localize o cone Sql*Plus no Windows e d um Click Duplo.
Para abandonar o SQL*PLUS basta digitar:
SQL> Exit;
Para consulta comandos usa-se o comando HELP
SQL> Help
Para consulta o contedo do diretrio sem deslogar do SQL*PLUS:
SQL> Host
ou para executar o comando dentro do SQL*PLUS
SQL> Host <comando do Sistema Operacional>

Structured Query Language - SQL*PLUS

Edio de comandos SQL no SQL*PLUS


O SQL*PLUS possui um editor de comandos prprio conhecido como buffer.sql.
O Buffer.sql uma rea que armazena sempre o ltimo comando SQL executado. O
comando permanece nesta rea at que o usurio entre com um novo comando SQL.
Exemplo:
SQL> create table cadastro
2
(Codigo
3
Nome
4
dt_nascimento
5
id_sexo
6
Observao

number(2)
not null,
varchar2(20) not null,
date,
char,
long

List
O contedo do buffer ou parte do mesmo, pode ser exibido atravs do comando:
Sintaxe:
L[ist] [nmero linha] ou
[*]
[linha_inicial linha_final] ou
[linha_inicial * ] ou
L[ast]
Obs: O asterisco ( * ) indica sempre a linha corrente do buffer. Ou seja a linha
em que se est operando no momento
Exemplo 1: Listando todo o buffer
SQL> List
1
2
3
4
5
6*

create table cadastro


(Codigo
number(2)
not null,
Nome
varchar2(20) not null,
dt_nascimento
date,
id_sexo
char,
Observao
long

Exemplo2: Listando o contedo da linha 1 at a linha 3


SQL> List 1 3
1
create table cadastro
2
(Codigo
number(2)
not null,
3*
Nome
varchar2(20) not null,

Structured Query Language - SQL*PLUS

Exemplo 3: listando apenas a linha 2 e tornando-a corrente


SQL> L 2
2* (Codigo

number(2)

not null,

Input
Pode-se incluir uma ou mais linhas no buffer a partir da linha corrente ,ou no
meio do texto, forando uma determinada linha a se tornar corrente.
Sintaxe:
I[NPUT] [texto]
Exemplo 1: Incluindo uma linha depois da linha 2
SQL>List 3
3* nome

varchar2(20)

not null,

SQL> i
4* data_inclusao date,
ou
SQL> i data_inclusao date,
SQL> List
1
2
3
4
5
6
7*

create table cadastro


(Codigo
number(2)
not null,
Nome
varchar2(20) not null,
Data_inclusao
date.
dt_nascimento
date,
id_sexo
char,
Observao
long)

Change
Sintaxe:
C[HANGE]/texto antigo/[texto novo]
O contedo de qualquer linha do buffer pode ser alterado todo ou parcialmente
atravs do comando CHANGE.
Exemplo:
SQL> L 4
4* data_inclusao date,
SQL> c/data_inclusao/dt_inclusao

Structured Query Language - SQL*PLUS

SQL> List
1
2
3
4
5
6
7*

create table cadastro


(Codigo
number(2)
not null,
Nome
varchar2(20) not null,
dt_inclusao
date.
dt_nascimento
date,
id_sexo
char,
Observao
long)

Nota: No local da / pode-se usar outros caracteres. Preferencialmente usar


caracteres no usados na descricao dos comandos;

Del
Exclui a linha corrente do buffer;
Sintaxe:
DEL
Exemplo:
SQL> L 4
4* dt_inclusao date,
SQL> del
SQL> L
1
2
3
4
5
6*

create table cadastro


(Codigo
number(2)
not null,
Nome
varchar2(20) not null,
dt_nascimento
date,
id_sexo
char,
Observao
long

Nota: No possvel excluir vrias linhas ao mesmo tempo.


Append
Pode-se acrescentar, ao final da linha corrente, um texto ou um caracter,
utilizando o comando APPEND.
Sintaxe:
A[PPEND] [texto, caracter]

Structured Query Language - SQL*PLUS

Exemplo:
SQL> 6
6* observao long
SQL> a )
SQL> L
1
create table cadastro
2
(Codigo
number(2)
not null,
3
Nome
varchar2(20) not null,
4
dt_nascimento
date,
5
id_sexo
char,
6*
Observao
long)
- possvel ativar um editor de texto no SQL*PLUS utilizando o comando EDIT.
O editor a ser chamado ser o que estiver definido na varivel _EDITOR. Caso esta
no esteja definida, ser utilizado o editor default do sistema operacional no qual o
usurio estiver trabalhando.
Define
Usado para definir variveis atribuindo-lhes valores
Sintaxe:
DEF[INE] [varivel [=valor]]
Obs: Quando nenhuma varivel informada, o SQL*PLUS exibe o valor de
todas as variveis que esto definidas.
Exemplo 1: Verificando o contedo da varivel _EDITOR:
SQL>define _EDITOR
symbol _editor is UNDEFINED
Exemplo 2: Escolhendo o editor de texto do DOS (Edit):
SQL> define_ EDITOR = EDIT
SQL>define_EDITOR
define _EDITOR = EDIT
(CHAR)
Edit
Sintaxe:
ED[IT] [[caminho] nome_arquivo [extenso]

para

O editor ativado e, aps a sada do mesmo, o controle novamente transferido


o SQL*PLUS.
SQL> Edit arquivo.sql

Structured Query Language - SQL*PLUS

Quando nenhum arquivo especificado, o SQL*PLUS criar no diretrio


corrente um arquivo chamado AFIEDT.BUF que conter o comando do buffer. O editor
ser ento ativado, carregando para a memria este arquivo; todas as alteraes
realizadas atravs do editor sero automaticamente transferidas para o buffer, quando
da sada do mesmo.
Exemplo: Se existir algo no buffer:
SQL> edit
Wrote file afiedt.buf
Executando o contedo do Buffer:
O contedo de SQL editado no buffer, pode ser executada de trs maneiras
diferentes: ; , / e run , especificadas a seguir:
SQL Terminator
A varivel de sistema SQLT[erminator], define o caracter que representa para o
SQL*PLUS fim do comando de SQL e execuo imediata do mesmo. Normalmente,
este caracter o ponto e virgula (;).
Exemplo: Editando um arquivo para criar uma estrutura:
SQL> SHOW SQLTERMINATOR
SQLTERMINATOR , (hex 3b)
SQL> create table cadastro
2
(Codigo
3
Nome
4
dt_nascimento
5
id_sexo
6*
Observao

number(2)
not null,
varchar2(20) not null,
date,
char,
long);

Table created
Barra (/):
A barra / , quando digitada na primeira coluna da linha em branco do buffer,
determinada a execuo do comando SQL; se for digitada diretamente no prompt,
significa que o comando de SQL, contido no buffer, deve ser executado sem a exibio
do mesmo.

Structured Query Language - SQL*PLUS

Exemplo 1:
SQL> create table cadastro
2
(Codigo
3
Nome
4
dt_nascimento
5
id_sexo
6
Observao
7 /

number(2)
not null,
varchar2(20) not null,
date,
char,
long)

Table created
Exemplo 2: Executando arquivo previamente digitado:
SQL> /
Table created
RUN
O comando run ou r , determina que o comando SQL do buffer, deve ser
executado com a exibio do mesmo.
Exemplo: Executando arquivo do buffer:
SQL> Run
1 create table cadastro
2
(Codigo
3
Nome
4
dt_nascimento
5
id_sexo
6*
Observao

number(2)
not null,
varchar2(20) not null,
date,
char,
long)

Table created
Buffer x arquivo
O buffer uma rea de memria capaz de armazenar temporariamente, um
comando SQL; quando a conexo com o SQL*PLUS encerrada, o comando
abandonado. Da mesma forma, quando outro comando digitado, o anterior passa a
no existir; se for necessrio executar o comando outras vezes, tal comando deve ser
gravado em um arquivo atravs do comando SAVE.
OBS: A varivel de sistema SUF[FIX] define a extenso que deve ser
assumida nas transaes, entre o SQL*PLUS e o sistema operacional, quando a
extenso for omitida; normalmente esta extenso .sql .

Structured Query Language - SQL*PLUS

Save
Para salvar um comando SQL em um arquivo, armazenando-o no diretrio
especificado, ou no diretrio corrente.
Sintaxe:
SAV[E] [[caminho] nome_arquivo [.extenso] [REPLACE]
Exemplo 1: Salvando arquivo no diretrio corrente
SQL> Save c:\users\trabalho\arquivo
Created file arquivo
Exemplo 2: Salvando com o mesmo nome quando j existe
SQL> Save arquivo replace
Wrote file arquivo
GET
Para recuperar um arquivo tipo SQL e carregar no buffer
Sintaxe:
GET [[caminho] nome_arquivo [.extenso]
Exemplo 1: Chamando arquivo SQL.
SQL> get c:\users\trabalho\arquivo
Start ou @
Para carregar em buffer e executar comandos:
Sintaxe:
STA[RT] [[caminho] nome_arquivo [.extenso]
@ [[caminho] nome_arquivo [.extenso]

ou

Exemplo 1: Executando o arquivo diretamente


SQL> @arquivo
Clear buffer
Limpa conteudo do SQL buffer

Structured Query Language - SQL*PLUS

SQL> clear buffer


Colocando comentrios nos comandos SQL
Usando REM[ARK]
Usa-se no incio da linha acompanhado do comentrio
Exemplo:
REM Relacao de Funcionrios
REM para pagamento de Salrios
Select empno, ename, job, comm, sal
REM verificando na tabela EMP
from emp
order by deptno
/
Usando

/* ....... */

Usa-se para abranger o comentario


Exemplo:
/* Relacao de Funcionarios
para pagamento de Salrios */
/*
*/
Select empno, ename, job, comm, sal
from emp /* verificando na tabela EMP */
order by deptno
/
Usando -Usa-se antes do comentario:
Exemplo:
-- Relacao de Funcionarios
-- para pagamento de Salrios
-Select empno, ename, job, comm, sal
from emp -- verificando na tabela EMP
order by deptno
/

Structured Query Language - SQL*PLUS

10

Captulo 2
ACESSANDO O BANCO DE DADOS ORACLE
Criando uma Tabela:
- Uma tabela corresponde a um arquivo convencional;
- Uma linha da tabela corresponde a um registro de um arquivo convencional;
- Uma coluna da tabela corresponde a um registro de um arquivo convencional;
- Uma tabela e composta por uma ou mais colunas;
- Cada coluna possui um tipo de dado e tamanho(quando aplicvel);
- Pode-se informar restries para cada coluna ou p/ um conjunto de colunas;
Criando a estrutura de uma tabela.
- O nome da tabela pode ser composto por letras, nmeros e underscore, porm
deve sempre comear com caracter alfabtico;
- Mximo 30 caracteres;
- No pode ser palavra reservada;
- O nome do objeto deve ser nico;
- Deve ter no mnimo uma coluna;
Sintaxe:
CREATE TABLE usurio.nome_tabela
(nome_coluna tipo_dado [tamanho}
[restries],
(nome_coluna tipo_dado [tamanho]
[restries],
[restries])
TABLESPACE nome_tablespace
PCTFREE
nmero
PCTUSED nmero
Exemplo: Para criar uma tabela, digite na linha de comando:
SQL> create table EMP
2 (empno
number(4) not null,
3 ename
varchar2(20),
4 job
varchar2(10),
5 mrg
number(4),
6 hiredate
date,
7 sal
number(7,2),
8 comm
number(7,2),
9 deptno
number(2) not null)
Table created.

Structured Query Language - SQL*PLUS

11

Tipos de dados
Informar um tipo de dado para uma coluna significa que a coluna s aceita
valores compatveis com este tipo de dado.
CHAR
Colunas que armazenam valores alfanumricos com tamanho fixo (mximo de
255 bytes): caso o tamanho no seja informado, o ORACLE assume que o tamanho 1.
Nota: Na insero de um valor temos:
* Se o valor for menor que o tamanho definido, so adicionados brancos;
* Se o valor for maior que o tamanho definido, retornado um erro.
Exemplos:
SQL> create table cadastro
2 (....
3 nome
char(20),
4 ......);
SQL> create table cadastro
2 (....
3 Id_Sexo
char,
4 ......);
VARCHAR2
Colunas que armazenam valores alfanumricos com tamanho varivel (mximo
de 2000 bytes), o tamanho deve ser informado.
Exemplo:
SQL> create table cadastro<n>
2 (....
3 Nome
varchar2(20),
4 .......);
VARCHAR
Usado nas verses anteriores, a ORACLE no recomenda seu uso.
LONG [VARCHAR]
Colunas que armazenam valores alfanumricos com tamanho varivel (mximo
de 2G bytes); o tamanho no deve ser informado.

Structured Query Language - SQL*PLUS

12

Exemplo:
SQL> create table cadastro
2 (......
3 Observao
Long varchar ou
Observao
Long,
4 ....);
RAW
Colunas que armazenam valores binrios com tamanho varivel mximo de 255
bytes). O tamanho tem que ser informado (este tipo mais usado para armazenar
seqncias de caracteres grficos).
LONG RAW
Colunas que armazenam valores binrios com tamanho varivel (mximo de 2G
bytes); o tamanho no deve ser informado (este tipo mais usado para armazenar
seqncias de caracteres grficos).
Nota: Para os tipos LONG e LONG RAW:
- Somente permitido um campo por tabela;
- No podem fazer parte de clusulas
WHERE, GROUP BY, ORDER BY, CONNECT BY ou DISTINCT,
No podem ser usados em expresses (SUBSTR, INSTR, etc);
- No podem ser indexes;
- No podem aparecer em expresses ou condies
- No podem ser passados como argumentos para procedures ou funes;
NUMBER
Colunas que armazenam valores numricos, positivos ou negativos, com no
mximo de 38 dgitos; caso o tamanho no seja informado, o ORACLE assumir que o
tamanho mximo 38 com o ponto decimal flutuante. O tamanho de uma coluna
numrica pode ser definido com preciso e escala .
Exemplos:
Especificao
number
number(9)
number(9,2)
number(9,1)
number(6)
number(15,1)
number(7,2)
number(7,-2)
number(4,5)

Dados
7456123.89
7456123.89
7456123.89
7456123.89
7456123.8
7456123.8
7456123.89
7456123.89
.01234

Structured Query Language - SQL*PLUS

Valor Armazenado
7456123.89
7456124
7456123.89
7456123.9
Erro
7456123.8
Erro
7456100
.01234
13

number(4,5)
number(4,5)
number(2,7)
number(2,7)

.00012
.000127
.0000012
.00000123

.00012
.00013
.0000012
.0000012

cdigo
number (2) not null,
salrio
number(9,2),
vl_completo
number(3,8),
vl_deposito
number (10,-2)
DATE
Colunas que armazenam data, hora (com minutos e segundos) e o sculo; no
deve ser informado o tamanho.
Exemplo:
SQL> Create table Cadastro
(....
dt_inclusao date,
....);
Verificando a Estrutura de uma tabela
Uma vez criada a tabela no Banco de Dados, pode-se visualizar a definio de
sua estrutura atravs do comando DESCRIBE
DESCRIBE
Sintaxe:
DESC[RIBE] nome_tabela
Exemplo:
SQL> desc emp

Structured Query Language - SQL*PLUS

14

Exerccios - 01
1. Editar no buffer SQL o seguinte comando:
Create table departamento
( deptno
number(2),
nome
varchar2(14),
local
varchar2(13),
data_de_cadastro date,
observao
long
2. Efetuar as seguintes alteraes:
- Alterar a coluna local para Loc e data_de_cadastro para dt_cadastro ;
- Alterar o tamanho da coluna nome para 20
- Incluir as colunas dt_atualizacao
nm_usurio

date e
varchar2(20)

- Excluir a coluna observao ;


- Acrescentar ) ao final da ultima coluna.
3. Executar o contedo do buffer.
4. Salvar o arquivo de comandos com o nome dept.sql.
5. Editar o comando
Create table grade_salarial
(grade
number(2),
minsal
number,
maxsal
number)
6. Salvar no arquivo salgrade.sql
7. - Desconectar-se e conectar-se novamente no SQL*PLUS.
- Executar o comando de criao da tabela salgrade.
- Verificar a descrio da tabela salgrade criada.

Structured Query Language - SQL*PLUS

15

Captulo 3
INTEGRIDADE DE DADOS E REFERENCIAL
Restries / Constraints

Restries so regras bsicas, informadas ao RDBMS, para o controle do


preenchimento de uma ou mais colunas da tabela. Podem ser especificadas na
definio da coluna (column constraint) ou no final do comando de criao da tabela
(table constraint).

Estas restries foram a consistncia e integridade referencial do Banco de


Dados; toda restrio criada possui um nome que pode ser atribudo pelo usurio
atravs da opo CONSTRAINT. Caso isto no ocorra, o ORACLE se encarregar de
escolher um nome de acordo com critrios prprios (a vantagem dessa atribuio ser
realizada pelo usurio a facilidade de uma excluso futura).

O uso de restries eliminam erros de programao, alm de sua funcionalidade


ser controlada pelo ORACLE. Estas restries so armazenadas no dicionrio de
dados; por isso os dados inseridos atravs de qualquer aplicao se ajustam as
constraints definidas.

Caso alguma restrio seja violada, imediatamente so retornadas mensagens


de erro que podem ser tratadas pelas aplicaes.

Exemplo 1: Column Constraint


SQL> Create table Emp
(empno
number(4)
ename
varchar2(20)
job
varchar2(10),
mrg
number
hiredate
sal
comm
deptno

date
number(12,2)
number(5,2),
number(2)

Structured Query Language - SQL*PLUS

constraint pk_emp primary key,


constraint uk_emp unique,
constraint fk_mgr
references emp,
default sysdate,
constraint ck_sal check (sal > 500),
constraint fk_deptno
references dept);

16

Exemplo 2: Table Constraint


SQL. Create table Emp
(empno
number(4) ,
ename
varchar2(20) ,
job
varchar2(10) ,
mgr
number ,
hiredate
date ,
sal
number(12,2) ,
comm
number(5,2) ,
deptno
number(2) ,
constraint pk_emp primary key (empno),
constraint uk_emp unique(ename),
constraint fk_mgr foreign key (mgr)
references emp(empno),
constraint ck_sal check (sal > 500),
constraint fk_deptno foreign key (deptno)
references dept(deptno)
on delete cascade)

Not Null
Define se o preenchimento da coluna obrigatrio, s pode ser declarado junto
com a coluna. Caso no seja informada, ser assumida a opo NULL.
Exemplo:
SQL> Create table Emp
(.....,
ename
varchar2(20)
.....);

not null,

Primary Key
Define que uma ou mais colunas compem a chave primria da tabela. So
usadas para identificar uma linha exclusiva da tabela. Desta forma para cada chave
retornada apenas uma linha da tabela.
Exemplo:
SQL> Create table Emp
(empno
number(4),
...
deptno
number(2),
constraint pk_emp primary key (empno),
....);

Structured Query Language - SQL*PLUS

17

Unique
Define que uma ou mais colunas no podem ter valores repetidos em diferentes
linhas da tabela.
Exemplo:
SQL> Create table Emp
(...,
ename
varchar2(20)
...);

constraint uk_emp unique,

References
Define que uma coluna a chave primria ou nica, em uma outra tabela, s
pode ser declarada junto com a coluna.
Exemplo:
SQL> Create table Emp
(....,
deptno
number(2)
constraint fk_deptno references dept(deptno));
Nota: - A referncia garante que para cadastrar um empregado, o cdigo do
departamento tem que estar cadastrado na tabela Dept.
- Omitindo a definio do tipo de dado, ser herdado o tipo da coluna a
qual esta sendo referenciada.
- Omitindo-se o nome da coluna referenciada, ser realizada a
correspondncia com a chave primria da outra tabela.
Exemplo:
SQL> Create table Emp
( ...,
deptno
constraint fk_emp_dept

references dept);

On delete cascade
- Garante a deleo dos filhos quando o pai e deletado atravs da
integridade referencial.

Structured Query Language - SQL*PLUS

18

Foreign Key
Define que uma ou mais colunas compem a chave primria ou so nicas em
uma outra tabela, s podem ser declaradas depois de todas as colunas.
Exemplo:
SQL> Create table Emp
(....
deptno
number(2)

constraint fk_deptno foreign key (deptno)


references dept(deptno));

Check
Define um domnio de valores permitidos para uma coluna.
Exemplo 1:
SQL> Create table Emp
(.....,
sal
number(12,2)
.....);

constraint ck_sal check (sal > 500),

Exemplo 2:
SQL> Create table Cadastro
(.....,
id_sexo
varchar2(1) constraint ck_sexo
check (id_sexo in ( M , F )),
.....);

Structured Query Language - SQL*PLUS

19

Exerccios - 02
1. Criar as seguintes tabelas e suas constraints:
Cliente
--------cd_cliente
nm_cliente
ie_sexo
endereo
cidade
c(20)
estado
CEP
DDD
fone
cd_representante
vl_limite_credito
observao
Produto
---------cd_produto
ds_produto
Pedido
--------nr_pedido
dt_pedido
ie_comissao
cd_cliente
dt_envio
vl_total
Item_Pedido
----------------nr_pedido
nr_item
cd_produto
vl_unitario
quantidade
vl_total_item

n(6)
c(45)
c(1)
c(45)
c(2)
n(9)
n(4)
n(9)
n(4)
n(10,2)
long

chave primria
chave nica
somente aceitar F ou M
obrigatrio

obrigatrio

n(6)
c(50)

chave primria
chave nica

n(4)
data
c(1)

chave primria
obrigatria
deve aceitar S ou N
chave estrangeira na tabela cliente

data
n(12,2)

n(4)
n(4)
n(6)
n(9,2)
n(8)
n(9,2)

deve ser maior ou igual a zero

chave estrangeira na tabela pedido


chave estrangeira na tabela produto
obrigatrio
obrigatrio

obs.: Chave primria composta por:

nr_pedido e nr_item

2. Verificar a estrutura das tabelas criadas.

Structured Query Language - SQL*PLUS

20

Manuteno da Estrutura de Tabelas e Controle de Transaes

Alterando a Estrutura de uma Tabela:


Depois de criada a estrutura de uma tabela, possvel acrescentar colunas,
acrescentar ou excluir restries, modificar caractersticas de colunas.
ALTER TABLE
Sintaxe:
ALTER TABLE nome_tabela
ADD ( nome_coluna tipo_dado [tamanho] [restrio],
nome_coluna tipo_dado [tamanho] [restrio])
MODIFY ( nome_coluna tipo_dado [tamanho],
nome_coluna tipo_dado [tamanho])
DROP CONSTRAINT nome_restrio
- A opo ADD utilizada para acrescentar definies de colunas ou restries.
- A opo MODIFY utilizada para alterar as definies da coluna ( tamanho
e/ou tipo de dado, ou acrescentar a restrio de nulo ou no nulo).
- A opo DROP CONSTRAINT utilizada para excluir restries de colunas ou
da tabela.
Nota: - No possvel alterar uma coluna contendo nulos para uma constraint
NOT NULL; tambm no possvel diminuir o tamanho da coluna ou alterar o
tipo de dado, a menos que esta no contenha dados.
- Para alterar uma restrio, esta deve ser eliminada e ento pode-se adicionar
as alteraes desejadas, como uma nova restrio.
Exemplo 1: Incluindo uma constraint na tabela Emp
SQL> Alter table Emp
add constraint ck_sal check (sal <= 5000);
Exemplo 2: Modificando a tabela Emp
SQL> Alter table Emp
modify ename char(25);

Structured Query Language - SQL*PLUS

21

Exemplo 3: Dropando uma constraint na tabela Emp


SQL> Alter table Emp
drop constraint ck_sexo;
Nota: A definio da constraint fica na tabela USER_CONSTRAINTS e as
colunas descritas na constraint ficam na tabela USER_CONS_COLUMNS.
SQL> desc user_constraints;

Structured Query Language - SQL*PLUS

22

Exerccios - 03
1. Incluir na tabela grade_salarial a coluna:
Observao

long.

2. Incluir na tabela departamento :


chave primria usando a coluna deptno;
chave nica usando o nome;
dt_cadastro com data do sistema.
3. Retirar a unicidade da tabela produto para descrio.
4. Incluir na tabela produto as colunas:
dt_atualizacao
nm_usurio

date
c(20)

Structured Query Language - SQL*PLUS

deve ter como default a data do sistema

23

Captulo 4
INCLUINDO LINHAS EM UMA TABELA
Sintaxe:
INSERT INTO nome_tabela
(coluna_1, [coluna_2], [coluna_n])
VALUES
(valor_1, [valor_2], [valor_n])
Existem 3 maneiras de inserir dados numa tabela usando o Insert do SQL:
- Informando valores para cada coluna:
SQL> Insert into Emp
(empno, ename, job, mgr, hiredate, sal, comm, deptno)
values
(2121, Roberto , Analista , 7566, 12-feb-96 ,
3000, null, 20);
- Informando apenas volores para colunas obrigatrias.
SQL> Insert into Emp
(empno, deptno) values (2121, 20);
- No declarando as colunas:
SQL> Insert into Emp
values
(2121, Roberto , Analista ,7566, 12-feb-96 ,
3000,null,20);
Nota: Quando no so informadas as colunas da tabela, deve-se informar
valores para toda a tabela, inclusive as colunas que admitem valores nulos.

Structured Query Language - SQL*PLUS

24

Concluindo Transaes com o Banco de Dados


Transao uma unidade lgica de trabalho composta por comandos de SQL
que sero tratados pelo RDBMS.
Uma transao comea com o primeiro comando SQL executado depois da
conexo com o SQL*PLUS, ou do encerramento da transao anterior; e pode ser
finalizada de vrias formas.
Nenhum dos comandos de SQL que realizam alteraes no dicionrio de dados
(DDL) pode ser desfeito, ou seja, ao criarmos a estrutura de uma tabela, esta passa a
ser verdadeira para o banco de dados. Estes comandos tambm encerram uma
transao.
Os comandos de SQL que realizam operaes com linhas de tabela, podem ser
desfeitos com o comando ROLLBACK ou confirmados com o COMMIT, finalizando
desta forma a transao que estava pendente. Enquanto a transao no for concluda,
as alteraes s sero vlidas para a sesso corrente, ou seja, outros usurios no
tero acesso aos dados dessas alteraes.
Os comandos de SQL DDL ao encerrarem uma transao, tornam verdadeiras,
para todos os usurios, as atualizaes feitas no banco de dados.
Savepoint
Um processo completo pode ser dividido em vrias partes com o comando
SAVEPOINT. A finalidade desta diviso a opo de desfazer somente uma parte do
processo e no todo ele.
sintaxe:
SAVEPOINT nome_ponto
Por default, o nmero mximo de pontos ativos numa transao 5, mas pode
ser alterado para at 255, conforme parametrizao do Banco de Dados.
Exemplo:
SQL> Insert into Emp values
(2121, Roberto , Analista ,7566, 12-feb-96 ,
3000,null,20);
1 row created
SQL> Savepoint Primeiro_ponto;

Structured Query Language - SQL*PLUS

25

SQL> Insert into Emp values


(2122, Magali , Programadora ,7566,
to_date( 13/07/1996 10:30 , dd/mm/yyyy hh:mi ),
2000,null,20);
1 row created
ROLLBACK
sintaxe:
ROLLBACK [TO [SAVEPOINT] nome_ponto]
Nota: Se for digitado apenas a palavra ROLLBACK, todas as transaes no
efetivadas sero desfeitas, ou tambm pode-se informar a partir de qual ponto podem
ser desfeitas as transaes.
Exemplo 1: Desfazendo a segunda incluso
SQL> rollback to Savepoint Primeiro_ponto;
Rollback complete
Exemplo 2: Desfazendo toda a transao
SQL> Rollback;
Rollback complete
COMMIT
sintaxe:
COMMIT
Efetiva todas as transaes pendentes.
Exemplo 1: Confirmando transao
SQL> Rollback to Savepoint Primeiro_ponto;
Rollback complete
SQL> Commit;
Commit complete

Structured Query Language - SQL*PLUS

26

Nota: Pode-se estabelecer para uma sesso, ou parte da mesma, que ao final
da execuo de cada comando de SQL DML, ser realizado um COMMIT
AUTOMTICO. Desta forma, cada transao ser composta de um e somente um
comando, e no poder ser desfeita. Para realizar tal procedimento, basta atribuir ON
ou IMM[EDIATE] varivel de sistema AUTO[COMMIT].
Exemplo:
SQL> set autocommit on;

Structured Query Language - SQL*PLUS

27

Exerccios - 04
1. Incluir na tabela PRODUTO os seguintes registros:
Codigo
--------1
2
3
4

Descrio
------------------Clipes pequeno
Clipes Mdio
Clipes Grande
Caneta Azul

dt_atualizacao = SYSDATE
nm_usurio
= USER
2. Incluir na tabela GRADE_SALARIAL os seguintes registros:
Grade
-------1
2
3
4
5

minsal
-----------1
501
1001
2001
3001

maxsal
---------500
1000
2000
3000
9999

observao = Null
3. Confirmar no banco de dados as incluses realizadas.
4. Executar o arquivo DEMOBLD7.SQL que est no diretrio corrente.

Structured Query Language - SQL*PLUS

28

Captulo 5
RECUPERAO DE DADOS
Em uma tabela possvel selecionar todas as colunas, somente algumas
colunas, um texto fixo, colunas concatenadas entre si, colunas concatenadas com um
texto fixo, colunas formatadas, etc.
Podemos tambm, eliminar na exibio, as tuplas do resultado que forem
repetidas.
A ordem em que as colunas foram criadas no importa, pois o comando
SELECT permite vrias combinaes para a seleo.
Sintaxe:
SELECT [ALL/DISTINCT]
{ [*] [ [tabela.]nome_coluna1 [alias1] ,
[tabela.]nome_coluna2 [alias2]
[,funo(nome_coluna3) [alias3] ]
[, texto ]}
FROM
[usurio.]nome_tabela1 [alias_tabela1],
[usurio.]nome_tabela2 [alias_tabela2]
[WHERE <condies>]
[GROUP BY <expresso>]
[HAVING <condio>]
[ORDER BY nome_coluna / posicao_coluna [ASC/DESC]] ;

Nota: A opo ALL define que devero ser exibidas todas as tuplas
selecionadas, mesmo que elas aparecem mais de uma vez.
- A opo DISTINCT especifica que para cada grupo de tuplas repetidas, s ser
exibido um elemento.
- O asterisco (*) indica que devero ser exibidas todas as colunas, nos seus
formatos originais e na ordem de criao da tabela.

Structured Query Language - SQL*PLUS

29

Exemplo 1: Retornando todas as Colunas


SQL> select * from emp;
EMPNO
----7839
7698
7782
7566
7654
7499
7844
....

ENAME
---------KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER

JOB
MGR HIREDATE
SAL
COMM DEPTNO
--------- --------- --------- ------- --------- ------PRESIDENT
17-NOV-81
5000
10
MANAGER
7839 01-MAY-81
2850
30
MANAGER
7839 09-JUN-81
2450
10
MANAGER
7839 02-APR-81
2975
20
SALESMAN
7698 28-SEP-81
1250
1400
30
SALESMAN
7698 20-FEB-81
1600
300
30
SALESMAN
7698 08-SEP-81
1500
0
30

14 rows selected.

Exemplo 2: Aplicando uma funo de grupo


SQL> select sum(sal) from emp;
SUM(SAL)
-----------29025
Exemplo 3: Com expresses aritmticas ( +, -, *, / )
SQL> select ename, (sal + 10) * 10 from emp;
ENAME
(SAL+10)*10
---------- ----------KING
5020
BLAKE
2870
CLARK
2470
JONES
2995
MARTIN
1270
ALLEN
1620
TURNER
1520
....
14 rows selected.
Exemplo 4: Com Colunas Concatenadas
SQL> select empno || ename from emp;

Structured Query Language - SQL*PLUS

30

EMPNO||ENAME
------------------------7839KING
7698BLAKE
7782CLARK
7566JONES
7654MARTIN
....
Exemplo 5: Colunas Concatenadas com texto
SQL> select empno|| - ||ename, TRABALHA NO DEPARTAMENTO , deptno
from emp;
FUNCIONARIO
TRABALHANODEPARTAMENTO'
DEPTNO
------------------ ------------------------------- -----7839-KING
TRABALHA NO DEPARTAMENTO
10
7698-BLAKE
TRABALHA NO DEPARTAMENTO
30
7782-CLARK
TRABALHA NO DEPARTAMENTO
10
7566-JONES
TRABALHA NO DEPARTAMENTO
20
7654-MARTIN
TRABALHA NO DEPARTAMENTO
30
....
Exemplo 6: Colunas com ALIAS
SQL> select empno || - || ename FUNCIONRIO from emp;
FUNCIONRIO
--------------------------7839-KING
7698-BLAKE
7782-CLARK
7566-JONES
7654-MARTIN
....
Exemplo 7: Apresentando todos os tipos de cargos
SQL> select distinct job from emp;
JOB
--------ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN

Structured Query Language - SQL*PLUS

31

Nota: O alias ou apelido deve ser usado para colocar TTULOS sobre as
colunas, estes apelidos podem ter uma ou mais palavras, quando for composto podese usar underscore ( _ ), ou faze-lo com espaos em branco colocando o apelido neste
caso entre aspas duplas ( )
Exemplos:
SQL> select empno || - || ename FUNCIONRIO,
TRABALHA NO DEPARTAMENTO , deptno NMERO
from emp;
SQL> select empno || - || ename Cdigo e Nome
from emp;
Cdigo e Nome
---------------------7839-KING
7698-BLAKE
7782-CLARK
7566-JONES
7654-MARTIN
7499-ALLEN
7844-TURNER
....
14 rows selected
SQL> select to_char(hiredate,'dd/mm/yy hh24:mi:ss')
2
"Dt Admissao"
3* from emp;
Dt Admissao
--------------------------------------------------------17/11/81 00:00:00
01/05/81 00:00:00
09/06/81 00:00:00
02/04/81 00:00:00
28/09/81 00:00:00
20/02/81 00:00:00
08/09/81 00:00:00
....
14 rows selected.

Structured Query Language - SQL*PLUS

32

Variveis de Ambiente SQL*PLUS


O ambiente do SQL*PLUS pode ser formatado para revelar um ambiente
particular, de acordo com as necessidades do usurio. O ambiente do SQL*PLUS
possui um formato default, mas que pode ser alterado atravs de variveis de sistema.
Feedback
Toda vez que um comando SQL executado, o RDBMS retorna uma mensagem
de acordo com o tipo de operao que foi realizada. Por exemplo, quando
selecionamos dados de uma tabela, a mensagem n rows select exibida. Essas
mensagens podem ser omitidas, atribuindo-se OFF varivel de sistema FEEDBACK.
Sintaxe:
SET FEED[BACK] ON/OFF
Exemplo:
SQL> set feedback off;
SQL> select empno || - || ename Codigo e Nome from Emp;
Codigo e Nome
-------------------7839-KING
7698-BLAKE
7782-CLARK
7566-JONES
7654-MARTIN
7499-ALLEN
7844-TURNER
....
Space
Determinar a quantidade de caracteres em branco que devem ser exibidos entre
uma coluna e outra.
Sintaxe:
SET SPA[CE] nmero_de_espacos

Structured Query Language - SQL*PLUS

33

Exemplo: Colocando o space com 10 (dez)


SQL> set space 10
SQL> select 'Funcionario: , empno from emp;
'FUNCIONARIO
--------------------Funcionario:
Funcionario:
Funcionario:
Funcionario:
Funcionario:
Funcionario:
Funcionario:
....

EMPNO
-------7839
7698
7782
7566
7654
7499
7844

Linesize
Determina o nmero mximo de caracteres que o SQL*PLUS exibir por linha.
Sintaxe:
SET LIN[ESIZE] nmero_de_colunas
Exemplo: Com tamanho de linha 35
SQL> set linesize 35
SQL> select empno, ename, job, deptno from emp;
EMPNO
---------DEPTNO
--------7839
10
7698
30
7782
10
....

ENAME
JOB
---------- --------KING

PRESIDENT

BLAKE

MANAGER

CLARK

MANAGER

Wrap
Se o total de caracteres a serem exibidos for maior que o nmero mximo
especificado na varivel de sistema Linesize, o SQL*PLUS passar a(s) coluna(s) que
no couberem na linha para a linha de baixo (WRAP=ON), caso contrrio o restante da
linha ser truncado (WRAP=OFF)

Structured Query Language - SQL*PLUS

34

Sintaxe:
SET WRA[P] ON / OFF
Exemplo: Exibindo as colunas selecionadas em uma mesma linha
SQL> set wrap off
SQL> select empno, ename, job, deptno from emp;
rows will be truncated
truncating (as per request) before column DEPTNO
EMPNO
--------7839
7698
7782
7566
7654
7499
7844
....

ENAME
------------KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER

JOB
--------PRESIDENT
MANAGER
MANAGER
MANAGER
SALESMAN
SALESMAN
SALESMAN

Pagesize
Determina o nmero mximo de linhas que o SQL*PLUS exibir por pgina.
Para realizar este clculo, deve-se levar em considerao a linha do ttulo da coluna, a
sublinha, o total de tuplas e mais uma linha em branco.
Sintaxe:
SET PAGES[IZE] nmero_de_linhas
Exemplo 1 : Especificando no mximo de 6 linhas por pgina
SQL> set pagesize 6
SQL> select empno, ename, job , deptno
from emp;
EMPNO ENAME
JOB
--------- ---------7839 KING
7698 BLAKE
7782 CLARK

DEPTNO
--------- --------PRESIDENT
10
MANAGER
30
MANAGER
10

EMPNO ENAME
JOB
DEPTNO
--------- ---------- --------- ---------

Structured Query Language - SQL*PLUS

35

7566 JONES
7654 MARTIN
7499 ALLEN

MANAGER
SALESMAN
SALESMAN

20
30
30

EMPNO
--------7844
7900
7521

ENAME
---------TURNER
JAMES
WARD

JOB
DEPTNO
--------- --------SALESMAN
30
CLERK
30
SALESMAN
30

EMPNO
--------7902
7369
7788
....

ENAME
---------FORD
SMITH
SCOTT

JOB
DEPTNO
--------- --------ANALYST
20
CLERK
20
ANALYST
20

Pause
possvel fazer com que o SQL*PLUS pare de exibir os dados selecionados
toda vez que ocorrer quebra de pgina, aguardando que o usurio pressione <ENTER>
, para exibir a prxima pgina.
Sintaxe:
SET PAU[SE] ON / OFF
Exemplo:
SQL> Set pause on

Heading
Toda coluna selecionada, carrega um ttulo de identificao, caso seja
necessrio a omisso do mesmo, basta atribuir OFF varivel de sistema HEADING.
Sintaxe:
SET HEA[DING] ON / OFF
Exemplo: Omitindo o cabealho.
SQL> set heading off
SQL> select empno, ename, job, deptno
from emp;

Structured Query Language - SQL*PLUS

36

7839
7698
7782
7566
7654
7499
7844
....

KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER

PRESIDENT
MANAGER
MANAGER
MANAGER
SALESMAN
SALESMAN
SALESMAN

10
30
10
20
30
30
30

Underline
O ttulo de identificao da coluna pode ser sublinhado ou no. A sublinha pode
ser formada por qualquer caracter que no seja alfanumrico, nem espao em branco.
Sintaxe:
SET UND[ERLINE] caracter
Exemplo 1: Colocando o sublinhado como (=)
SQL> set underline =
SQL> select empno, ename, job, deptno
from emp;
EMPNO
=========
7839
7698
7782
7566
7654
7499
7844
....

ENAME
==========
KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER

JOB
DEPTNO
========= ========
PRESIDENT
10
MANAGER
30
MANAGER
10
MANAGER
20
SALESMAN
30
SALESMAN
30
SALESMAN
30

Structured Query Language - SQL*PLUS

37

Exemplo 2: Retirando o sublinhado


SQL> set underline off
SQL> select empno, ename, hiredate, sal, comm, job
from emp;
EMPNO
7839
7698
7782
7566
7654
7499
7844

ENAME
KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER

JOB
PRESIDENT
MANAGER
MANAGER
MANAGER
SALESMAN
SALESMAN
SALESMAN

DEPTNO
10
30
10
20
30
30
30

....

Feedback
Sempre que um comando SQL executado, o RDBMS retorna uma mensagem
de acordo com o comando que foi executado. Por exemplo: no comando select a
mensagem final de quantas linhas foram selecionada: n rows Selected , caso o select
no retorne linha: no rows selected . o Comando Feedback ativa e desativa esta
opo.
Sintaxe:
SET FEED[BACK] ON / OFF

SQL> select * from dept;


DEPTNO
--------10
20
30
40

DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON

SQL>

Structured Query Language - SQL*PLUS

38

Exerccios - 05
1. Elimine as duplicidades de departamento, selecionando apenas um de cada tipo da
tabela emp.
2. Selecione dados da tabela CUSTOMER para obter o seguinte resultado:
Cliente
------100
101
102
103
104
105
106
107
108

Nome
Limite Credito
----------------------------------------- -------------JOCKSPORTS
5000
TKB SPORT SHOP
10000
VOLLYRITE
7000
JUST TENNIS
3000
EVERY MOUNTAIN
10000
K + T SPORTS
5000
SHAPE UP
6000
WOMENS SPORTS
10000
NORTH WOODS HEALTH AND FITNESS SUPPLY CENTER
8000

3. selecione dados da tabela CUSTOMER para obter um resultado semelhante:


Codigo e Nome
****************************************************************
100 - JOCKSPORTS
101 - TKB SPORT SHOP
102 - VOLLYRITE
103 - JUST TENNIS
104 - EVERY MOUNTAIN
105 - K + T SPORTS
106 - SHAPE UP
107 - WOMENS SPORTS
108 - NORTH WOODS HEALTH AND FITNESS SUPPLY CENTER
4. selecione dados da tabela CUSTOMER para obter um resultado semelhante:
( 10 espaos entre cada coluna)
100
101
102
103
104

JOCKSPORTS
TKB SPORT SHOP
VOLLYRITE
JUST TENNIS
EVERY MOUNTAIN

5. Selecione o nome, salrio anual e a comisso dos funcionrios.

Structured Query Language - SQL*PLUS

39

Funes de Converso entre Tipos de Dados


Toda coluna de uma tabela definida com um tipo de dado, no entanto, quando
uma coluna selecionada, pode ser exibida em um formato diferente. Para isso devese utilizar as funes de converso.
To_date (char, formato)
Converte para o formato DATE, um valor (de data) em CHAR que se encontra
no formato indicado.
Exemplo:
SQL> select to_date('15-jul-96' , 'dd/mon/yy') data_selecionada
2* from dual
DATA_SELE
--------15-JUL-96

To_char (number/date [,formato])


Converte para o formato CHAR informado, um valor em NUMBER.
Exemplo: Com a coluna Salrio da tabela EMP
SQL> select to_char(sal, '999,999,999.99') salarios
2 from emp;
SALARIOS
-------------5,000.00
2,850.00
2,450.00
2,975.00
1,250.00
1,600.00
1,500.00
....

SQL> select to_char( sysdate, HH24:MI:SS ) hora_sistema from dual;


HORA_SISTEMA
---------------------16:07:22

Structured Query Language - SQL*PLUS

40

Nota: Prefixos:
0 - Com zeros no inicio
$ - Com o caracter $ no inicio
B - Valor zerado exibido em branco
Sufixos:
MI - Quando o nmero for negativo, o sinal - aparecer no final do nmero
PR - Quando o nmero for negativo, aparecer no formato <n> .
To_Number(char)
Converte para o formato NUMBER, um valor (numrico) em CHAR.
Exemplo:
SQL> select sal + to_number('20') from emp;
SAL+TO_NUMBER('20')
------------------5020
2870
2470
2995
1270
1620
1520
....

Structured Query Language - SQL*PLUS

41

To_Char (date)
Converte para o formato CHAR informado, um valor em DATE.
Usado freqentemente para formatar campo tipo date.
sintaxe:
TO_CHAR (coluna_date[,formato_char])
Exemplo: Convertendo para o formato char intercalando um texto
SQL> select to_char(hiredate,
2 '"Contratao realizada em" dd/mm/yy "as" hh:mi')
3 Contrataes from emp;
Contrataes
---------------------------------------------------------------Contratao realizada em 24/06/94 as 09:30
Contratao realizada em 13/06/94 as 09:00
Formatos vlidos para colunas DATE
Uso
CC
SCC
YYYY
SYYYY
YYY ou YY ou Y
YEAR
SYEAR
Q
MM
MONTH
MON
WW
W
DDD
DD
D
DAY
J
HH ou HH12
HH24
MI
SS
SSSSS

Descrio
Sculo
Sculo precedido de - quando for (BC)
Ano com 4 dgitos
Ano com quatro dgitos precedido de - quando for (BC)
Ano com trs, dois ou um digito
Ano por extenso
Ano por extenso precedido de - quando for (BC)
Trimestre
Ms em representao numrica (01 - 12)
Ms por extenso
Abreviao com trs letras do ms por extenso
Semana do ano (01-52)
Semana do ms (01-05)
Dia do ano (01-366)
Dia do ms (01-31)
Dia da semana (01-07)
Dia da semana por extenso
formato Juliano, quantidade de dias desde 1 de janeiro de 4712 BC
Hora do dia (01-12)
Hora do dia (00-23)
Minuto (00-59)
Segundo (00-59)
Segundos aps a meia noite (00-86399)

Structured Query Language - SQL*PLUS

42

Nota
BC - AC
ou
B.C. - A.C.
AM - PM
ou
A.M. - P.M.

Descrio
Indicador de antes de Cristo (BC) ou depois de Cristo (AD);
ou
Indicador de antes de Cristo (BC) ou depois de Cristo (AD) com
ponto.
Antes do meio-dia (AM) ou depois do meio-dia (PM);
ou
Antes do meio-dia (AM) ou depois do meio-dia (PM) com ponto.

Prefixos
FM

Descrio
Retira brancos esquerda e zeros direita

Sufixos
TH
SP

Descrio
Nmero ordinal
Nmero por extenso

Exemplo: Selecionando o dia de admisso por extenso:


SQL> select hiredate,
2
to_char(hiredate, 'ddsp') "Dia de Admisso"
3* from emp
HIREDATE
--------17-NOV-81
01-MAY-81
09-JUN-81
02-APR-81
28-SEP-81
20-FEB-81
08-SEP-81
....

Dia de Admisso
-----------------------------------------------seventeen
one
nine
two
twenty-eight
twenty
eight

Structured Query Language - SQL*PLUS

43

Exerccios - 06
1. Atravs do comando select apresentar os resultados semelhantes aos abaixo:
a) Da tabela emp, coluna hiredate
Data de Contratacao
------------------------------------------------17 de november
de 81
01 de may
de 81
09 de june
de 81
02 de april
de 81
28 de september
de 81
.....
b) Tabela Ord, colunas ordid e orderdate
Pedido:
Pedido:
Pedido:
Pedido:
Pedido:
.....

610
611
612
601
602

realizado
realizado
realizado
realizado
realizado

no:
no:
no:
no:
no:

1
1
1
2
2

trimestre
trimestre
trimestre
trimestre
trimestre

de
de
de
de
de

1987
1987
1987
1986
1986

2. Selecione o dia da semana de hoje por extenso ( usar sysdate).

Structured Query Language - SQL*PLUS

44

Domnio de atuao de um comando SQL DML


Clausula WHERE
Quando uma seleo, alterao ou excluso processada em um tabela, podese informar em quais linhas da tabela o comando deve atuar. A clusula WHERE deve
estabelecer a restrio para a escolha das linhas.
sintaxe:
SELECT coluna_1,coluna_2, ..., coluna_N
FROM tabela
WHERE coluna_restrio tipo_comparao valor
Exemplo: Selecionar apenas o funcionrios do Departamento 10.
SQL> select ename, sal from emp
2 where deptno = 10;
ENAME
SAL
---------- -------KING
5000
CLARK
2450
MILLER
1300
3 rows selected.
Tipo de Comparao
A clusula WHERE pode trabalhar com vrios tipos de comparao, permitindo
combinaes para uma restrio mais especfica para a escolha de linhas.
Igualdade
Diferena

=
!= ou ^= ou <>

Exemplo: Selecionar departamentos com cdigo diferente de 20.


SQL> select * from dept where deptno <> 20;
DEPTNO
--------10
30
40

DNAME
-------------ACCOUNTING
SALES
OPERATIONS

LOC
-------NEW YORK
CHICAGO
BOSTON

3 rows selected.

Structured Query Language - SQL*PLUS

45

Maior que
Menor que

>
<

e
e

Maior ou Igual a
Menor ou Igual a

>=
<=

Exemplo: Selecionar departamentos com cdigo maior ou igual 20.


SQL> select * from dept where deptno >= 20;
DEPTNO
--------20
30
40

DNAME
-------------RESEARCH
SALES
OPERATIONS

LOC
------------DALLAS
CHICAGO
BOSTON

3 rows selected.
Testa contedo nulo
is null

is not null

Exemplo 1: Selecionar o funcionrios que tenham registro de comisso.


SQL> select ename, job from emp where comm is not null;
ENAME
---------MARTIN
ALLEN
TURNER
WARD

JOB
-------SALESMAN
SALESMAN
SALESMAN
SALESMAN

4 rows selected.
Exemplo 2: Selecionar o funcionrios que tenham registro de comisso.
SQL> select ename, job from emp where comm = null;
no rows selected
Neste caso o select no retornara nenhuma linha, pois o null no pode ser comparado
usando o operador = .
A pesquisa retorna apenas as linhas que Pertencem ao conjunto solicitado:
IN (elemento 1, ... , elemento N)
NOT IN (elemento 1, ... , elemento N)
Exemplo: Selecionar os funcionrios que pertencem aos departamentos 10, 20

Structured Query Language - SQL*PLUS

46

SQL> select empno, ename , deptno from emp


where deptno in (10, 20);
EMPNO
----7839
7782
7566
7902
7369
7788
7876
7934

ENAME
DEPTNO
--------- --------KING
10
CLARK
10
JONES
20
FORD
20
SMITH
20
SCOTT
20
ADAMS
20
MILLER
10

8 rows selected.
A pesquisa retorna linhas que Pertencem a um intervalo (Inclusive)
BETWEEN valor_mnimo
NOT BETWEEN valor_mnimo

AND valor mximo


AND valor mximo

Exemplo: Selecionar o funcionrio com salrios entre 1000 e 2000


SQL> select ename from emp
2 where sal between 1000 and 2000;
ENAME
-----------MARTIN
ALLEN
TURNER
WARD
ADAMS
MILLER
6 rows selectd
A pesquisa retorna linhas que Contenham os caracteres solicitados:
LIKE char
NOT LIKE char
Nota: No operador LIKE podem ser utilizados os seguintes caracteres:
% --> pesquisa de um ou mais caracteres
_ --> pesquisa de n caracteres definidos (apenas 2, apenas 1, etc)

Structured Query Language - SQL*PLUS

47

Exemplo 1:
SQL> Select ename from emp
2 where ename like '%LL%';
ENAME
---------ALLEN
MILLER
2 rows selected.
where job like %ANA%
where job like _N%
where hiredate like __-JUL-__
Exemplo 2: Selecione os funcionrios que tenham apenas 4 caracteres no nome:
SQL> select ename, job from emp
2 where ename like '____' /* 4 underscore */
ENAME
---------KING
WARD
FORD

JOB
--------PRESIDENT
SALESMAN
ANALYST

3 rows selected.
Testar se entre as linhas da tabela alguma atende as especificaes desejadas
EXISTS
NOT EXISTS
Exemplo:
SQL> select 'No encontrou departamento 50' from dual
2 where not exists (select * from emp
3*
where deptno = 50)
'NAOENCONTROUDEPARTAMENTO50'
-----------------------------------------------------Nao encontrou departamento 50
1 row selected.

Structured Query Language - SQL*PLUS

48

Ordenando resultados de uma seleo


A ordem em que as linhas foram includas na tabela no importante, a clusula
ORDER BY do comando SELECT permite exibir as tuplas do resultado, na ordem
desejada pelo usurio.
Sintaxe:
SELECT coluna1,coluna2, ..., coluna_n
FROM Tabela
[WHERE coluna_restrio Tipo_comparao valor]
ORDER BY coluna_ordenao [DESC]
Nota: Order by ascendente por default, para se ter uma seleo decrecente, use
a
palavra DESC ao lado direito da coluna selecionada na clusula ORDER BY.
Pode-se classificar o resultado do seleo sem que a coluna esteja referenciada
no select.
Exemplo: Classificando pelo nome em ordem crescente.
SQL> select empno, ename from emp
2 order by ename;
EMPNO
---------7876
7499
7698
7782
7902
7900
7566
....

ENAME
---------ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES

Exemplo 2: Ordenando o resultado por ordem numrica decrescente


EMPNO
--------7934
7902
7900
7876
7844
7839
7788
7782
....

ENAME
---------MILLER
FORD
JAMES
ADAMS
TURNER
KING
SCOTT
CLARK

Structured Query Language - SQL*PLUS

49

Operadores Lgicos usados para Combinar mais de uma comparao

A restrio pode ser composta por uma ou mais comparaes, estas devem ser
combinadas usando operadores lgicos AND, OR e NOT

Comparao1 e Comparao2 AND


Exemplo:Selecionar funcionrios do deptno 20 que sejam analistas
SQL> Select ename from emp
where deptno = 20 and
job
= ANALYST ;
ENAME
---------FORD
SCOTT
2 rows selected.

Comparao1 ou Comparao 2

OR

Exemplo: Selecionar funcionrios que sejam do deptno 20 ou analistas.


SQL> Select ename from emp
where deptno = 20 OR
job
= ANALYST ;
ENAME
---------JONES
FORD
SMITH
SCOTT
ADAMS
5 rows selected.

Structured Query Language - SQL*PLUS

50

No deve ser atendida Comparao

NOT

Exemplo:
SQL> select ename from emp
2 where not ( deptno = 30);
ENAME
---------KING
CLARK
JONES
FORD
SMITH
SCOTT
ADAMS
MILLER
8 rows selected.
Comparao com todos os elementos do conjunto
{ =, !=, >, <, >=, <=} ALL
Exemplo: Selecionar os funcionrios com departamento diferente de todos da lista.
SQL> select ename, deptno from emp
2 where deptno <> all (10,20);
ENAME
DEPTNO
---------- --------BLAKE
30
MARTIN
30
ALLEN
30
TURNER
30
JAMES
30
WARD
30
Comparao com qualquer elemento do conjunto
{ =, !=, >, <, >=, <=} ANY
Exemplo: Selecionar funcionrios com departamento igual a qualquer um da lista.
SQL> select ename, deptno from emp
2 where deptno = any (10,20);

Structured Query Language - SQL*PLUS

51

ENAME
DEPTNO
---------- --------KING
10
CLARK
10
JONES
20
FORD
20
SMITH
20
SCOTT
20
ADAMS
20
MILLER
10

Structured Query Language - SQL*PLUS

52

Exerccios - 07
1. Selecione os funcionrios, codigo e nome, que tenham sido contratados entre o
perodo de 01/Maio/81 e 31/Dezembro/81.
2. Selecionar o presidente da empresa atravs da coluna mgr (codigo do gerente).
3. Selecionar funcionrios que no tenham o cargo iniciado com A e No sejam do
departamento 10.
4. Selecionar funcionrios que tem salrios maiores que 1500 que sejam
gerentes(MANAGER) , ou funcionrios que sejam vendedores (SALESMAN).
5. Selecionar funcionrios que tem salrios maiores que 1500 que sejam
gerentes(MANAGER) ou vendedores (SALESMAN).
6. Selecionar os pedidos (ordid) da tabela pedido (ord) que no tenham sido entregues
num prazo mnimo de 10 dias, ordenando por cliente (custid).

Structured Query Language - SQL*PLUS

53

FUNES

Funes aplicveis a valores Alfanumricos


As funes relacionadas neste captulo devem ser aplicadas a colunas
alfanumricas e retornam tipos CHAR ou NUMBER.

INITCAP(char)
Retorna as iniciais de cada palavra em maisculas o restante da palavra em
minsculas.
Exemplo:
SQL> select initcap(dname), initcap('CURSO SQL')
2*
from dept;
INITCAP(DNAME)
-------------Accounting
Research
Sales
Operations

INITCAP('
--------Curso Sql
Curso Sql
Curso Sql
Curso Sql

LOWER(char)
Retorna todas as letras de todas as palavras em minsculas.
Exemplo:
SQL> select lower(dname), lower('CURSO SQL')
2* from dept;
LOWER(DNAME)
-----------accounting
research
sales
operations

LOWER('CUR
---------curso sql
curso sql
curso sql
curso sql

UPPER(char)
Retorna todas as letras de todas as palavras em maisculas.
Exemplo:

Structured Query Language - SQL*PLUS

54

SQL> select upper(dname), upper('CURSO SQL')


2*
from dept;
UPPER(DNAME)
-----------ACCOUNTING
RESEARCH
SALES
OPERATIONS

UPPER('CUR
---------CURSO SQL
CURSO SQL
CURSO SQL
CURSO SQL

SUBSTR(char, posicao_inicial[,qtde_caracteres])
Retorna uma parte do valor original.
Exemplo:
SQL> select substr(dname,1,5), substr('Curso SQL',6,4)
2*
from dept;
SUBST SUBS
----- ---ACCOU SQL
RESEA SQL
SALES SQL
OPERA SQL
INSTR(char, char [,posicao_inicial, n_ocorrencia])
Retorna a n_sima ocorrncia de um determinado string.
Exemplo:
SQL> select ename, instr(ename,'A') from emp;
ENAME
INSTR(ENAME,'A')
---------- ---------------KING
0
BLAKE
3
CLARK
3
JONES
0
MARTIN
2
ALLEN
1
TURNER
0
JAMES
2
WARD
2
FORD
0

Structured Query Language - SQL*PLUS

55

LENGTH(char)
Retorna o total de caracteres existentes.
Exemplo:
SQL> select length(dname), length('Curso SQL')
2*
from dept;
LENGTH(DNAME) LENGTH('CURSOSQL')
------------- -----------------10
9
8
9
5
9
10
9
REPLACE(char, texto_antigo , texto_novo)
Retorna o valor original, com todas as ocorrncias do texto antigo trocadas pelo
texto novo.
Exemplo:
SQL> select replace('JACK and JUE', 'J', 'BL') Alterado
2* from dual;
ALTERADO
-------------BLACK and BLUE
RPAD( char, tamanho{, char])
Retorna o valor original, preenchido a direita com o caracter informado, quantas
vezes forem necessrias at que se complete o tamanho estabelecido.
Exemplo:
SQL> select rpad(dname, 14 , '*' ) Departamento
2* from dept;
DEPARTAMENTO
-------------ACCOUNTING****
RESEARCH******
SALES*********
OPERATIONS****

Structured Query Language - SQL*PLUS

56

LPAD( char, tamanho{, char])


Retorna o valor original, preenchido a esquerda com o caracter informado,
quantas vezes forem necessrias at que se complete o tamanho estabelecido.
Exemplo:
SQL> select lpad(dname,14,'*') Departamento
2* from dept;
DEPARTAMENTO
-------------****ACCOUNTING
******RESEARCH
*********SALES
****OPERATIONS
Exemplo 2: Apresentando descricao do departamento alinhado a direita.
SQL> select lpad(dname,14) from dept;
LPAD(DNAME,14)
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
SOUNDEX(char)
Retorna a representao fontica das palavras que compem o valor informado.
Exemplo:
SQL> select ename from emp
2* where soundex(ename) = soundex('smythe');
ENAME
---------SMITH
RTRIM(char [,conjunto_de_caracteres])
Retorna o string com os caracteres finais removidos at o primeiro caracter no
contido no conjunto de caracteres informados, inicia a pesquisa pela direita. Se no for
especificado o conjunto de caracteres, assumir por default um branco.

Structured Query Language - SQL*PLUS

57

Exemplo:
SQL> select dname, ltrim(dname,'A'), ltrim(dname,'ASOP')
2* from dept;
DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

LTRIM(DNAME,'A
-------------CCOUNTING
RESEARCH
SALES
OPERATIONS

LTRIM(DNAME,'A
-------------CCOUNTING
RESEARCH
LES
ERATIONS

LTRIM(char [,conjunto_de_caracteres])
Retorna o string com os caracteres iniciais removidos at o primeiro caracter no
contido no conjunto de caracteres informados, inicia a pesquisa pela esquerda. Se no
for especificado o conjunto de caracteres, assumir por default um branco.
Exemplo:
SQL> select dname, rtrim(dname,'S'), rtrim(dname,'GHS')
2 from dept;
DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS

RTRIM(DNAME,'S
-------------ACCOUNTING
RESEARCH
SALE
OPERATION

RTRIM(DNAME,'G
-------------ACCOUNTIN
RESEARC
SALE
OPERATION

TRANSLATE(char, caracter_antigo, caracter_novo)


Retorna o string com todos os caracteres informados substitudos.
Exemplo:
SQL> select ename, translate(ename,'C', 'P') ,
2*
job, translate(job, 'AR', 'IT') from emp;
ENAME
---------KING
BLAKE
CLARK
ALLEN
JAMES
.....

TRANSLATE(
---------KING
BLAKE
PLARK
ALLEN
JAMES

JOB
--------PRESIDENT
MANAGER
MANAGER
SALESMAN
CLERK

Structured Query Language - SQL*PLUS

TRANSLATE
--------PTESIDENT
MINIGET
MINIGET
SILESMIN
CLETK

58

Exerccios - 08

1. Selecionar a descrio do departamento centralizada na tela.


Nome
---------------------------------------------------------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
2. Selecionar o produto, apresentando a descrio apenas at a palavra TENNIS .
Descricao
-----------------------------ACE TENNIS RACKET I
ACE TENNIS RACKET II
ACE TENNIS BALLS-3 PACK
ACE TENNIS BALLS-6 PACK
ACE TENNIS NET
SP TENNIS RACKET
SP JUNIOR RACKET
RH: "GUIDE TO TENNIS"
SB ENERGY BAR-6 PACK
SB VITA SNACK-6 PACK

Structured Query Language - SQL*PLUS

Descricao
-----------------------------ACE
ACE
ACE
ACE
ACE
SP
RH: "GUIDE TO

59

Funes aplicveis a Valores Numricos


As funes relacionadas neste captulo devem ser aplicadas a colunas do tipo
NUMBER, sendo o retorno do tipo NUMBER.

SIGN(number)
Testa o contedo de uma coluna numrica:
se for negativo, retorna -1,
se for 0 retorna 0,
se for positivo retorna 1 ou
se for nulo retorna null.
Exemplo:
SQL> select sign(-100), sign(150), sign( 150 - 150) from dual;
SIGN(-100) SIGN(150) SIGN(150-150)
---------- --------- -------------1
1
0

ABS(number)
Retorna o valor absoluto de um nmero.
Exemplo:
SQL> select abs(100 - 150) vl_abs from dual;
VL_ABS
--------50

CEIL(number)
Retorna o menor nmero inteiro, que seja maior ou igual ao nmero
Exemplo:
SQL> select ceil(14.4) from dual;
CEIL(14.4)
---------15

Structured Query Language - SQL*PLUS

60

FLOOR(number)
Retorna o maior nmero inteiro, que seja menor ou igual ao nmero
Exemplo:
SQL> select floor(14.4) from dual;
CEIL(14.4)
---------14
MOD(dividendo, divisor)
Retorna o resto da diviso de um nmero por outro. O primeiro valor informado
o dividendo e o segundo o divisor.
Exemplo:
SQL> select mod(10,3) from dual;
MOD(10,3)
--------1

POWER(base, expoente)
Retorna o resultado de uma potenciao, o primeiro valor informado a base e o
segundo, o expoente.
Exemplo:
SQL> select power(5,2) from dual;
POWER(5,2)
---------25

SQRT(number)
Retorna a raiz quadrada do nmero.
Exemplo:
SQL> select SQRT(16) from dual;

Structured Query Language - SQL*PLUS

61

SQRT(16)
--------4

ROUND(number[,n_decimal])
Retorna o nmero arredondado em n casas decimais (se for suprimido,
considera INTEIRO).
Exemplo:
SQL> select round(123.456, 2) from dual;
ROUND(123.456,2)
---------------123.46

TRUNC(number[,n_decimal])
Retorna o nmero truncado em n casas decimais.
Exemplo:
SQL> select trunc(123.456 , 2) from dual;
TRUNC(123.456,2)
---------------123.45

OUTRAS FUNES:
SIN(number)
COS(number)
TAN(number)
LN(number)
LOG(m,n)

Seno de um nmero
Coseno
Tangente
Logaritmo Natural
Logaritmo da base m por n

Structured Query Language - SQL*PLUS

62

Exerccios - 09

1. Selecionar os Pedidos e data do pedido da tabela Ord que foram realizados em dias
pares (orderdate).

2. Apresentar o valor total do pedido e o valor total do pedido acrescido em 10%,


arredondado em 2 casas decimais dos pedidos realizados em Fev/87.
3. Selecionar o cdigo e descrio dos produtos, alinhada direta, ordenados de
forma decrescente pelo tamanho do nome.

Structured Query Language - SQL*PLUS

63

Funes aplicveis a Datas

As funes relacionadas neste captulo devem ser aplicadas a colunas do tipo


DATE, o retorno pode ser do tipo DATE ou NUMBER.
SYSDATE
Retorna a data e a hora corrente.
Exemplo:
SQL> select sysdate from dual;
SYSDATE
--------13-JUL-96
ADD_MONTHS(data, nmero_meses)
Retorna a data somada ou subtrada de n meses.
Exemplo:
SQL> select hiredate, add_months(hiredate, 2) "2 meses depois"
2 from emp;
HIREDATE
--------17-NOV-81
01-MAY-81
09-JUN-81
02-APR-81
28-SEP-81
20-FEB-81
08-SEP-81
....

2 meses d
--------17-JAN-82
01-JUL-81
09-AUG-81
02-JUN-81
28-NOV-81
20-APR-81
08-NOV-81

MONTHS_BETWEEN(data, data)
Retorna a quantidade de meses existentes entre duas datas.
Exemplo:
SQL> select hiredate,
2
months_between(to_date('10-JUL-82','dd/mon/yy'), hiredate) diferenca
3* from emp

Structured Query Language - SQL*PLUS

64

HIREDATE
--------17-NOV-81
01-MAY-81
09-JUN-81
02-APR-81
28-SEP-81
20-FEB-81
08-SEP-81
....

DIFERENCA
--------7.7741935
14.290323
13.032258
15.258065
9.4193548
16.677419
10.064516

LAST_DAY(data)
Retorna a data que corresponde ao ultimo dia do ms
Exemplo:
SQL> select sysdate, last_day(sysdate) "Ultimo dia",
2
last_day(sysdate) - sysdate "Diferenca"
3* from dual
SYSDATE
Ultimo di Diferenca
--------- --------- --------13-SEP-96 30-SEP-96
17

NEXT_DAY(data)
Retorna a data correspondente ao prximo dia da semana seguinte
Exemplo:
SQL> select sysdate, next_day(sysdate, 'FRIDAY') from dual;
SYSDATE
NEXT_DAY(
--------- --------13-SEP-96 20-SEP-96

TRUNC(data[,formato_char])
Retorna a data correspondente ao incio do perodo segundo o formato
informado.

Structured Query Language - SQL*PLUS

65

Exemplo:
SQL> select trunc(sysdate)
"dia",
2
trunc(sysdate,'mm') "Mes",
3
trunc(sysdate,'yy') "Ano"
4* from dual
dia
Mes
Ano
--------- --------- --------13-SEP-96 01-SEP-96 01-JAN-96

ROUND(data[,formato_char])
Retorna a data correspondente ao incio do perodo (formato informado) corrente
(se dia entre 1 e 15) ou seguinte (se dia maior que 15).
Exemplo:
SQL> select round(sysdate)
"dia",
2
round(sysdate,'mm') "Mes",
3
round(sysdate,'yy') "Ano"
4* from dual
dia
Mes
Ano
--------- --------- --------14-SEP-96 01-SEP-96 01-JAN-97

Structured Query Language - SQL*PLUS

66

Exerccios - 10

1. Os funcionrios contratados at o dia 15, recebem seus salrios na ltima sexta feira
do ms, os demais na ltima sexta do mes seguinte. Desta forma identifique os
funcionrios, data admisso e data de pagamento.

2. Selecione da tabela emp, o nome do funcionrio e total de dias existentes entre sua
admisso e o ultimo dia do ms de admisso, ordenando pelos dias pares.

3. Selecione da tabela emp, o nome do funcionrio e total de dias existentes entre sua
admisso e o ltimo dia do ano de admisso.

Structured Query Language - SQL*PLUS

67

Agrupando resultados de uma seleo


GROUP BY
Os dados que so recuperados numa seleo podem ser agrupados de acordo
com um critrio especfico. O agrupamento implica na exibio de uma e somente uma
linha por grupo; alm disso, s permitido selecionar as colunas especificadas na
clusula GROUP BY e/ou funes de grupo.
A clusula GROUP BY do comando SELECT, determina o critrio a ser utilizado
na formao dos grupos.
Sintaxe:
SELECT [coluna1,]funcao(coluna2)
FROM tabela
[WHERE coluna_restrio Tipo_comparao valor]
GROUP BY coluna_agrupamento
[ORDER BY coluna [ASC/DESC]]
Nota: Pode-se fazer uso de vrias funes, que por definio j selecionam grupos de
linhas, gerando apenas um resultado para este grupo.
Funes de Grupo
COUNT({* / [DISTINCT / ALL ] nome_coluna / expresso})
Retorna o total de elementos do grupo
Exemplo:
SQL> select count(*) from emp;
COUNT(*)
--------14
1 row selected.
SQL> select count( distinct job ) "Cargos"
2*
from emp;
Cargos
--------5
1 row selected.

Structured Query Language - SQL*PLUS

68

SUM([DISTINCT / ALL] number)


Retorna o somatrio de uma coluna.
Exemplo:
SQL> select sum(sal), job from emp
2*
group by job;
SUM(SAL)
--------6000
4150
8275
5000
5600

JOB
--------ANALYST
CLERK
MANAGER
PRESIDENT
SALESMAN

5 rows selected.
Exemplo:
SQL> select deptno, sum(sal) from emp
2*
group by deptno;
DEPTNO SUM(SAL)
--------- --------10
8750
20
10875
30
9400
3 rows selected.
MIN( [DISTINCT / ALL ] {nome_coluna / expresso})
Retorna o menor valor de uma coluna.
Exemplo:
SQL> select min(sal) "Menor Salario"
2*
from emp;
Menor Salario
------------800
1 row selected.

Structured Query Language - SQL*PLUS

69

Exemplo 2: Selecionar o funcionrio que com maior salrio da empresa.


SQL> select ename, sal from emp
2*
where sal = (select max(sal) from emp);
ENAME
SAL
---------- --------KING
5000
1 row selected.

MAX( [DISTINCT / ALL ] {nome_coluna / expresso})


Retorna o maior valor de uma coluna.
Exemplo: Selecionar o funcionrio contratado mais recentemente.
SQL> select max(hiredate) "Ultima Admissao"
2*
from emp;
Ultima Ad
--------12-JAN-83
1 row selected.

AVG( [DISTINCT / ALL ] {nome_coluna / expresso})


Retorna a mdia aritmtica de uma coluna.
Exemplo:
SQL> select deptno, avg(sal) from emp
2
group by deptno
3*
order by 1
DEPTNO AVG(SAL)
--------- --------10 2916.6667
20
2175
30 1566.6667
3 rows selected.

Structured Query Language - SQL*PLUS

70

STDDEV( [DISTINCT / ALL ] {nome_coluna / expresso})


Retorna o desvio padro de uma coluna.
Exemplo:
SQL> select stddev(sal)
2*
from emp;
STDDEV(SAL)
----------1182.5032
1 row selected.

VARIANCE( [DISTINCT / ALL ] {nome_coluna / expresso})


Retorna a varincia de uma coluna.
Exemplo:
SQL> select variance(sal)
2*
from emp;
VARIANCE(SAL)
------------1398313.9
1 row selected.

Structured Query Language - SQL*PLUS

71

Selecionando Grupos
HAVING
Pode-se tambm determinar para quais grupos sero exibidos os dados
selecionados; basta indicar na clusula HAVING o critrio a ser utilizado para essa
determinao.
A clusula HAVING primeiramente agrupa e depois seleciona os grupos que
correspondem ao critrio requisitado; esta clusula proporciona maior rapidez j que o
teste de seleo feito sobre grupos e no a partir de linhas.
Sintaxe:
SELECT coluna1, funcao(coluna2)
FROM
tabela
GROUP BY coluna_1
HAVING coluna_restrio Tipo_comparao valor
[ORDER BY coluna_ordenao [ASC/DESC]]
nota: Sempre deve-se indicar a coluna de agrupamento (GROUP BY) e a seleo de
agrupamento (HAVING).
Exemplo:
SQL> select deptno, sum(sal) from emp
2
group by deptno
3*
having sum(sal) > 9000;
DEPTNO SUM(SAL)
--------- --------20
10875
30
9400
2 rows selected.

Structured Query Language - SQL*PLUS

72

Exerccios - 11

1. Selecione o cdigo e a mdia salarial arrendondada em 2 casas decimais e no


formato 999,999.99, dos departamentos que possuem mdia salarial maior que 2000.

2. Selecione o cdigo e a mdia salarial dos departamentos que possuem mais de trs
funcionrios.

3. Selecionar o menor e o maior salrio, a mdia salarial e o nmero de funcionrios


dentre os vendedores ( SALESMAN).

4. Selecionar pedido(ordid) e a data do pedido (orderdate) mais recente da tabela ord.

5. Selecione os produtos (product) e quantidade total pedida (qty) na tabela item,


ordenando pelo quantidade total.

Structured Query Language - SQL*PLUS

73

Funes Genricas
As funes vistas nesta sesso podem ser aplicadas a qualquer tipo de dado.
DECODE(valor, comparao_1, valor_1[,
comparao_N, valor_N], [valor_default])
Retorna um valor decodificado de acordo com uma comparao.
Exemplo:
SQL> select ename "Nome",
2
decode(job, 'PRESIDENT','Presidente',
3
'MANAGER', 'Gerente',
4
'SALESMAN', 'Vendedor', 'Outros') "Cargo"
5 from emp
6* order by 1
Nome
---------ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
KING
MARTIN
MILLER
SCOTT
SMITH
TURNER
WARD

Cargo
---------Outros
Vendedor
Gerente
Gerente
Outros
Outros
Gerente
Presidente
Vendedor
Outros
Outros
Outros
Vendedor
Vendedor

14 rows selected.
GREATEST(valor_1[, valor_2[, valor_3,...]])
Retorna maior valor de uma lista
Exemplo:
SQLselect ename Nome , decode(greatest(sal,1500),
2
sal, 'Salario Alto',
3
'Salario baixo') Tipo de Salar
4* from emp;

Structured Query Language - SQL*PLUS

74

Nome
---------KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER
JAMES
WARD
FORD
SMITH
SCOTT
ADAMS
MILLER

Tipo de Salar
------------Salario Alto
Salario Alto
Salario Alto
Salario Alto
Salario baixo
Salario Alto
Salario Alto
Salario baixo
Salario baixo
Salario Alto
Salario baixo
Salario Alto
Salario baixo
Salario baixo

14 rows selected.

LEAST(valor_1[, valor_2[, valor_3,...]])


Retorna o menor valor de uma lista
Exemplo:
SQL> select least( 11, 50, 30, 95, 12) "Menor valor"
2* from dual
Menor valor
----------11
1 row selected.
NVL(valor,valor_a_ser_recuperado)
Retorna o valor especificado pelo usurio caso o valor seja nulo, do contrrio
retorna o valor original.
Exemplo:
SQL> select sal, comm, sal + comm from emp;

Structured Query Language - SQL*PLUS

75

SAL
COMM SAL+COMM
--------- --------- --------5000
2850
1250
1400
2650
1600
300
1900
1500
0
1500
950
1250
500
1750
3000
800
SQL> select sal, comm, sal + nvl(comm,0)
2*
from emp
SAL
COMM SAL+NVL(COMM,0)
--------- --------- --------------5000
5000
2850
2850
1250
1400
2650
1600
300
1900
1500
0
1500
950
950
1250
500
1750
3000
3000
800
800

USER
Retorna o usurio ORACLE logado:
Exemplo:
SQL> select user from dual;
USER
-------------SCOTT

Structured Query Language - SQL*PLUS

76

UID
Retorna um nmero inteiro que identifica o usurio ORACLE corrente
Exemplo:
SQL> select UID from dual;
UID
---------5645

Structured Query Language - SQL*PLUS

77

Exerccios - 12
1. Selecionar nome, cargo e salrio aumentado de acordo coma tabela:
Analista
Atendente
Gerente

- ANALYST 10%
- CLERK
15%
- MANAGER 20%

2. Selecione o maior valor entre salrio e comisso para os funcionrios;

Structured Query Language - SQL*PLUS

78

Captulo 6
RECUPERANDO DADOS DE VRIAS TABELAS

possvel exibir numa mesma tupla de resultado, dados que estejam em tabelas
diferentes; este tipo de operao chamada de JOIN.
Quando o JOIN realizado entre duas tabelas, sero criados os pares ordenados de
acordo com:
A = { 1, 2, 3, 4 }
B = { 1, 3 }
Resultado A B = { 1 1, 1 3, 2 1, 2 3, 3 1, 3 3, 4 1, 4 3 }
No entanto somente os pares ordenados em que o elemento da tabela A igual
ao elemento da tabela B so teis. Por esta razo, todo JOIN deve possuir esta
igualdade entre os pares ordenados, expressa na clusula WHERE.
sintaxe:
SELECT [ALL / DISTINCT] {[nome_da_tabela] * }
[nome_da_tabela.]nome_da_coluna[,funo([nome_da_tabela.]
nome_da_coluna)]
FROM nome_da_tabela, nome_da_tabela
[WHERE ...]
[GROUP BY ...]
[HAVING ...]
[ORDER BY ...]

EQUI-JOIN ou RELAO DIRETA


Quando h relacionamento de colunas entre duas ou mais tabelas.
Exemplo:
SQL> Select empno, dept.deptno, dname
2
from emp, dept
3
where dept.deptno = emp.deptno
4*
order by dname

Structured Query Language - SQL*PLUS

79

EMPNO
DEPTNO DNAME
--------- --------- -------------7839
10 ACCOUNTING
7782
10 ACCOUNTING
7566
20 RESEARCH
7788
20 RESEARCH
7876
20 RESEARCH
7902
20 RESEARCH
7499
30 SALES
7844
30 SALES
7900
30 SALES
....
NON-EQUI-JOIN ou RELAO INDIRETA:
Quando no ha coluna que se relacione com uma coluna de uma outra tabela.
Exemplo:
SQL> select ename, sal , grade
2 from emp e, salgrade s
3 where e.sal between s.losal and s.hisal;
ENAME
SAL
GRADE
---------- --------- --------JAMES
950
1
SMITH
800
1
ADAMS
1100
1
MARTIN
1250
2
MILLER
1300
2
ALLEN
1600
3
TURNER
1500
3
BLAKE
2850
4
....
OTHER JOIN
Quando uma das tabelas no contm todos os elementos existentes na outra.
Neste caso algumas linhas no sero recuperadas. Para que isto no ocorra, utiliza-se
o (+) ao lado da tabela onde os elementos esto faltando.
Exemplo:
SQL> SELECT ename, b.deptno, dname
FROM emp a, dept d
WHERE a.deptno (+) = b.deptno;

Structured Query Language - SQL*PLUS

80

DEPTNO
--------10
10
10
20
20
20
20
20
30
30
30
30
30
30
40

DNAME
SAL
-------------- --------ACCOUNTING
5000
ACCOUNTING
2450
ACCOUNTING
1300
RESEARCH
2975
RESEARCH
3000
RESEARCH
1100
RESEARCH
800
RESEARCH
3000
SALES
2850
SALES
1250
SALES
1600
SALES
1500
SALES
950
SALES
1250
OPERATIONS

15 rows selected.
SQL> SELECT count(empno), dname
FROM emp, dept
WHERE emp.deptno (+) = dept.deptno
GROUP BY dname;
Nr Funcionrios
--------------3
0
5
6

Departamento
-------------ACCOUNTING
OPERATIONS
RESEARCH
SALES

Nota: count(empno) tem que ser um campo que aparea na tabela que esteja
faltando o dado.

Structured Query Language - SQL*PLUS

81

Operaes com conjuntos


Todo resultado de uma seleo pode ser definido como um conjunto. A estes
conjuntos podem-se aplicar as operaes bsicas da teoria de conjuntos, como:
UNION (Distinct/All)
Distinct - Permite unir os elementos resultantes de duas selees de forma que
apaream oriundos de apenas uma (traz todas as linhas dos conjuntos sem repeti-las).
Resultado: A U B = {1,2,3,4}
All - Permite unir os elementos resultantes de duas selees de forma que
apaream oriundos de uma nica seleo (traz todas as linhas dos conjuntos, mesmo
as repeti-las).
Resultado: A U B = {1,2,3,4,1,3}
Exemplo:
SQL> select empno codigo, ename nome from emp
2
union
3
select deptno codigo, dname nome from dept
4*
order by 2;
CODIGO
--------10
7876
7499
7698
7782
7902
7900
7566
7839
7654
7934
40
20
30
7788
7369
7844
7521

NOME
-------------ACCOUNTING
ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
KING
MARTIN
MILLER
OPERATIONS
RESEARCH
SALES
SCOTT
SMITH
TURNER
WARD

18 rows selected.

Structured Query Language - SQL*PLUS

82

INTERSECT
Permite exibir os elementos resultantes de duas selees que sejam comuns s
duas (retorna as linhas comuns as duas queries requeridas).
Resultado: A

B = {1,3 }

Exemplo:
SQL> select prodid, descrip from product
2 where descrip like '%RACKET%'
3 intersect
4 select prodid, descrip from product;
PRODID
--------100860
100861
101860
101863

DESCRIP
-----------------------------ACE TENNIS RACKET I
ACE TENNIS RACKET II
SP TENNIS RACKET
SP JUNIOR RACKET

4 rows selected.
MINUS
Permite mostrar os elementos resultantes de uma seleo que no estejam
contidos na outra (recupera as linhas que no tem correspondncia).
Resultado: A - B = {2,4}
SQL> select prodid, descrip from product
2
minus
3
select prodid, descrip from product
4*
where descrip like '%RACKET%'
PRODID
--------100870
100871
100890
102130
200376
200380

DESCRIP
-----------------------------ACE TENNIS BALLS-3 PACK
ACE TENNIS BALLS-6 PACK
ACE TENNIS NET
RH: "GUIDE TO TENNIS"
SB ENERGY BAR-6 PACK
SB VITA SNACK-6 PACK

6 rows selected.

Structured Query Language - SQL*PLUS

83

SUBQUERY
Quando a pesquisa depende dos prprios dados da tabela.
Exemplo: Selecione os funcionrios com cargo igual ao cargo de JONES:
SQL> Select job from emp
2
where ename = JONES ;
JOB
--------MANAGER
Exemplo:
SQL> select ename, job from emp
2 where job = (select job from emp
3
where ename = JONES ) ;
ENAME
----JONES
BLAKE
CLARK

JOB
--------MANAGER
MANAGER
MANAGER

SUBQUERY- CORRELATA
Usa parmetros da query principal
Exemplo: Selecione os funcionrios que tenham salrios maiores que a media salarial
do departamento.
SQL> select ename from emp a
2 where sal > ( select avg(sal)
3
from emp b
4
where b.deptno = a.deptno)
5 order by ename;
ENAME
----ALLEN
BLAKE

Structured Query Language - SQL*PLUS

84

Exerccios - 13

1. Selecione todos os funcionrios que pertecem a grade salarial 3.

2. Selecione todos os departamentos e total de salrios de cada um deles.

3. Selecionar o codigo, nome dos cliente que possuem mais de 3 pedidos, classificando
pela qtde de pedidos .

4. selecionar funcionrios que tenham cargos iguais aos dos funcionrios do


departamento 30.

5. selecionar funcionrios com o mesmo cargo de JONES ou com salrio maior ou


igual ao salrio de FORD, inclusive.

6. Selecione da tabela departamento (dept) os nome e local dos departamentos que


no possuem funcionrios.

7. Selecionar o cargo, nome e salrio dos funcionrios que tm os maiores salrios de


seus departamentos em ordem decrescente de salrio.

Structured Query Language - SQL*PLUS

85

Captulo 7
ATUALIZAO DE DADOS
De uma forma geral, em uma transao pode-se executar incluses, selees,
alteraes e excluses. Quando a transao finalizada com o COMMIT, estas
modificaes tomam-se disponveis para todos os usurios que tenham acesso a esses
dados.
As vezes, as alteraes realizadas por outros usurios podem distorcer o
resultado das selees feitas em uma sesso. Por exemplo, em caso de relatrios que
envolvam nmeros.
possvel a um usurio ter uma viso congelada do RDBMS em um
determinado momento, ou seja, desconsiderando quaisquer modificaes que por
ventura venham a ser feitas por outros usurios.
O comando SET TRANSACTION determina o inicio deste processo que
encerrado pelo COMMIT ou ROLLBACK.

SET TRANSACTION:
sintaxe:
SET TRANSACTION (READ ONLY l READ WRITE)

Atualizando dados de uma tabela


UPDATE
usado para atualizar uma ou mais colunas de tabela ao mesmo tempo..
sintaxe:
UPDATE nome_tabela SET
nome_coluna = valor [,
nome_coluna = valor]
WHERE <condio>
Exemplo 1: Retirar comisso dos funcionrios que No sejam gerentes ou vendedores.
SQL> Update emp set
comm = null
where job not in ( MANAGER , SALES );

Structured Query Language - SQL*PLUS

86

Exemplo 2: Alterar os salrios e comisses com a mdia de cada departamento


SQL> update emp e
2
set (sal,comm) = (select avg(sal) , avg(comm)
3
from emp
4
where deptno = e.deptno)
5/

Structured Query Language - SQL*PLUS

87

Captulo 8
EXCLUSO DE LINHAS DE UMA TABELA
Delete
Comando usado para excluir uma ou mais linhas de uma tabela.
sintaxe:
DELETE [FROM] nome_tabela
WHERE <Condio>
Exemplo 1:
SQL> Delete salgrade;
5 rows deleted.
exemplo 2:
SQL> Delete from emp
where job
= SALESMAN
comm < 100;

Structured Query Language - SQL*PLUS

and

88

Exerccios - 14
1. Aumentar o valor
possuem comisso.

das comisses dos funcionrios em 10%, somente dos que

2. Alterar a data de envio (shipdate) da tabela ord para 30 dias depois da data do
pedido (orderdate).

3. Remover funcionrios dos departamentos que no tm sua somatria de salrios


maiores que 10000.

4. Remover os departamentos da tabela dept que no possuem funcionrios.

Structured Query Language - SQL*PLUS

89

Captulo 9
MANIPULANDO OBJETOS DO RDBMS
Uma vez criadas a(s) tabela(s) no Banco de Dados, pode-se criar comentrios,
documentao sobre as tabelas e colunas. Esta documentao ser armazenada no
dicionrio de dados do ORACLE. E para recuperar esta documentao devero ser
acessadas as tabelas:
ALL_COL_COMMENTS
USER_COL_COMMENTS
ALL_TAB_COMMENTS
USER_TAB_COMMENTS

Para todas as colunas existentes no Banco de Dados.


Para todas as colunas criadas por um usurio.
Para todas as tabelas existentes no Banco de Dados.
Para todas as tabelas criadas por um usurio.

Para criar um comentrio em alguma tabela e/ou coluna, deve-se utilizar o


comando COMMENT.
sintaxe:
COMMENT ON [TABLE nome_da_tabela | COLUMN
nome_da_tabela.nome_da_coluna]
IS 'comentrio'
Exemplo 1:
SQL> comment on table emp is 'text';
Comment created.
Exemplo 2:
SQL> comment on column emp.comm is 'Comisso dos vendedores e gerentes';
Comment created.
Para retirar o comentrio de alguma tabela e/ou coluna deve-se gravar um
comentrio com espaos.
Exemplo 3:
SQL> comment on column emp.comm is ' ';
Comment created.

Structured Query Language - SQL*PLUS

90

Criando uma Tabela a partir de outra Tabela


No h um comando que exclua uma coluna de uma tabela. Se a coluna for
desnecessria, e a tabela j possuir dados, deve-se criar outra tabela herdando as
linhas j existentes (Comando CREATE TABLE ... AS SELECT ...); depois basta excluir
a estrutura da tabela anterior (antiga) utilizando o comando DROP TABLE e renomear
a nova com o comando RENAME.
Sintaxe:
CREATE TABLE nome_tabela (nome_coluna [restrio] [,
nome_coluna [restrio]] [,restries])
AS
SELECT ...
Exemplo:
SQL> Create table temporaria
2
(codigo, nome, dt_admisso, salario)
3
as
4
select empno, ename, hiredate, sal
5*
from emp;
Table created.
Eliminando Tabelas
DROP TABLE
possvel remover a definio das tabelas ORACLE, usando DROP TABLE,
(inclusive se a tabela possuir dados, por isso e importante verificar suas constraints e
constraints com outras tabelas).
Sintaxe:
DROP TABLE nome_tabela
[ON CASCADE CONSTRAINTS]
Nota: Ao eliminar uma tabela:
- Todos os dados sero eliminados;
- As views permanecero, mas se tornaro invalidas;
- Algumas transaes pendentes sero efetivadas;
- Somente o criador da tabela ou o DBA pode eliminar a tabela;
- A opaco de cascade constraints garante que a tabela seja removida mesmo
que exista integridade referencial com outra tabela;

Structured Query Language - SQL*PLUS

91

Exemplo:
SQL> Drop table salgrade;
Table dropped.
Renomeando Tabelas
RENAME
sintaxe:
RENAME nome_tabela_antiga TO nome_tabela_nova
Exemplo:
SQL> Rename grade_salarial to salgrade;
Table renamed.
Incluindo Linhas em uma tabela a partir de outra tabela
Quando uma tabela j contem dados, no e permitida a alterao do tipo de
dado de uma coluna; para realizar tal modificao e necessrio criar outra tabela e
depois incluir as linhas.
sintaxe:
INSERT INTO nome_tabela
[(nome_coluna [,
nome_coluna])]
SELECT ...
Exemplo:
SQL> delete temporaria;
14 rows deleted.
SQL> insert into temporaria
2
select empno, ename, hiredate, sal from emp
3
where sal > 1100;
11 rows created.

Structured Query Language - SQL*PLUS

92

Create View (Vises)


As vezes uma tabela possui colunas que no devem ser visveis por todos os
usurios; desta forma e necessrio criar uma viso parcial da tabela. Uma view uma
tabela lgica que no ocupa espao no Banco de Dados, pode ser composta de linhas
de uma ou mais tabelas, agrupadas ou no. As views no armazenam dados. Elas
montam um imagem da(s) coluna(s) da(s) tabela(s) selecionada(s).
sintaxe:
CREATE [OR REPLACE] {FORCE/NOFORCE] VIEW nome_view
[coluna_1 [,coluna_2], [ coluna_n]
AS
subquery;
Nota: De forma geral, em uma view e permitido selecionar, atualizar, excluir e incluir
dados. Porm, nas views que estiverem em um dos casos abaixo, somente o
select permitido
- JOIN de uma ou mais tabelas, GROUP BY,
- DISTINCT (select Distinct ...), ALIAS
- Expresses do tipo concatenao, converso, funes de grupo, ...
REPLACE - Se a viso j existir recria com o mesmo nome
FORCE - Cria a viso mesmo se a tabela referenciada no existir
Exemplo:
SQL> create or replace view emp_dept
2
as
3
select ename, dname, sum(sal) total_sal
4
from emp a, dept b
5
where a.deptno = b.deptno
6*
group by ename, dname;
View created.
SQL> desc emp_dept
Name
Null?
------------------------------- -------ENAME
DNAME
TOTAL_SAL

Type
---VARCHAR2(10)
VARCHAR2(14)
NUMBER

SQL> select * from emp_dept


2 order by ename;

Structured Query Language - SQL*PLUS

93

ENAME
---------ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
KING
MARTIN
MILLER
SCOTT
SMITH
TURNER
WARD

DNAME
TOTAL_SAL
-------------- --------RESEARCH
1100
SALES
1600
SALES
2850
ACCOUNTING
2450
RESEARCH
3000
SALES
950
RESEARCH
2975
ACCOUNTING
5000
SALES
1250
ACCOUNTING
1300
RESEARCH
3000
RESEARCH
800
SALES
1500
SALES
1250

14 rows selected.
Drop View
No havendo mais necessidade, uma viso pode ser removida da base.
Sintaxe:
DROP VIEW nome_view
Exemplo:
SQL> Drop view emp_dept;
View dropped.

Structured Query Language - SQL*PLUS

94

Criando Seqncias
Seqncia uma estrutura criada no Banco de Dados que retorna para cada
acesso um nmero diferente. Ela pode ser utilizada para fornecer seqencialmente e
sem repetio, valores a serem armazenados em cdigos que formam a chave primria
de uma tabela.
Create Sequence
Sintaxe:
CREATE SEQUENCE nome_da_sequencia
[START WITH valor_inicial]
[INCREMENT BY incremento]
[MAXVALUE valor_maximo_sequencia | NOMAXVALUE]
[MINVALUE valor_minimo_sequencia | NOMINVALUE]
[CYCLE | NOCYCLE]
CACHE nmero | NOCACHE]
INCREMENT BY se no for especificado assume por default 1;
CYCLE | NOCYCLE determina se a seqncia e cclica ou no. Se for
cclica, quando atingir o valor mximo, voltara ao valor inicial;
CACHE |NOCACHE determina se os valores da seqncia devem ser pralocados em memria ou no.
Exemplo:
SQL> create sequence seq_funcionario
2 start with 8000
3 increment by 1
4 maxvalue 999999
5 minvalue 000001
8 nocycle;
Sequence created.
Para recuperar o valor de uma seqncia:

Valor corrente : CURRVAL


Prximo valor : NEXTVAL

Exemplo:
SQL> select seq_pedido.nextval
2*
from dual;
NEXTVAL
--------8000

Structured Query Language - SQL*PLUS

95

SQL> select seq_pedido.currval


2*
from dual;
CURRVAL
--------8000
Exemplo:
SQL> Insert into emp values
(seq_pedido.nextval, RITA DE CASSIA , ANALYST ,
7939, sysdate, 3000,null, 10);

Exceto o valor inicial, todos os parmetros de uma seqncia podem ser


alterados atravs do comando ALTER SEQUENCE.
Exemplo:
SQL> alter sequence seq_funcionario
increment by 2;

Uma definio de seqncia e excluda atravs do comando DROP SEQUENCE.


Sintaxe:
Drop sequence nome_da_sequencia;
Exemplo:
SQL> Drop sequence seq_funcionario;
Sequence dropped.

Structured Query Language - SQL*PLUS

96

ndices
Quando se cria um ndice em uma tabela, o ORACLE monta uma estrutura que
permite o encontro rpido das linhas a serem acessadas. Isto faz com que melhore a
performance dos comandos de SQL, que tiverem na clausula WHERE, as colunas
usadas na criao do ndice. O ndice pode ser nico ou no. Quando uma tabela e
criada com constraints Primary key ou Unique j criado um ndice que identifica a
chave primria.
Create Index
Sintaxe:
CREATE [UNIQUE] INDEX nome_indice
ON nome_tabela (coluna_1 [ASC/DESC][,coluna_2[ASC/DESC]])
Nota: UNIQUE especifica que a coluna ou conjunto de colunas que compem o ndice
no podem ter valor duplicado na tabela.
Exemplo:
SQL> Create index ind_emp_mgr
2*
on emp(mgr);
Index created.
SQL> Create index ind_pedido
2*
on ord (ordid, custid);
Index created.
Drop Index
A definio de um ndice no pode ser alterada. Se o ndice for criado errado ou
no for mais necessrio, basta exclui-lo.
Sintaxe:
DROP INDEX nome_indice
Exemplo:
SQL> Drop table ind_emp_mgr;
Index dropped.

Structured Query Language - SQL*PLUS

97

Lock
Durante algumas operaes com tabelas e necessrio limitar, por determinado
momento o acesso aquela tabela ou a seus dados.
E possvel realizar o Lock de duas maneiras, atravs dos comandos Lock table
ou do comando For Update Of no comando select.
Sintaxe:
LOCK TABLE nome_tabela1 [,nome_tabela2, ...]
IN mode_lock MODE [NOWAIT]
Locks a nvel de tabela:
- EXCLUSIVE
Garante que nenhum outro processo possa executar locks na tabelas ou alterar
linhas da tabela; Outros processos podem apenas realizar consultas nas tabelas
locadas;
-SHARE
Garante que nenhum outro processo possa executar lock exclusive nas tabelas;
Outros processos podem apenas realizar consultas, locks compartilhados (SHARE) e
compartilhados de linha (ROW SHARE);
-SHARE ROW EXCLUSIVE
Garante que nenhum outro processo realize lock na tabela inteira; Outros
processos podem apenas realizar consultas, locks compartilhados de linha (ROW
SHARE);
Nota: Se no for possvel realizar o Lock no momento o comando NOWAIT libera o
processo, seno aguarda at conseguir efetuar o lock;
O lock e finalizado pelos comandos COMMIT ou ROLLBACK;
Exemplo:
Lock table dep
in share mode;

Structured Query Language - SQL*PLUS

98

Exerccios - 15
1. Criar uma seqncia para facilitar entrada de dados na tabela de pedido:
incrementar 1,
iniciar com 1000,
valor mnimo 000001,
valor mximo 999999,
no cclica

2. Incluir dois pedidos na tabela Ord usando a seqncia para incrementar o nmero
do pedido ( ordid).

3. Criar uma viso que apresente, o codigo do cliente (custid), nome (name), o nmero
do pedido (ordid) e total de cada pedido(total).

4. Criar um ndice para cliente por CEP (ZIP).

Structured Query Language - SQL*PLUS

99

Captulo 10
PERMISSES PARA USURIOS
A princpio um usurio s pode acessar objetos criados por ele. Mas com
algumas permisses ou restries ele poder fazer outras intervenes na base de
dados.
GRANT
O comando GRANT fornece privilgios necessrios para que o usurio possa
acessar de diversas maneiras os objetos da base.
Sintaxe:
GRANT {privilgio_1[,privilgio_2] [ / ALL[PRIVILEGES]}
ON nome_objeto
TO [usurio_1[,usurio_2] / PUBLIC]
[ WITH GRANT OPTION]
ALL PRIVILEGES - fornece todos os privilgios possveis ao usurio para um
determinado objeto.
PUBLIC - o grant vale para todos os usurios cadastrados
WITH GRANT OPTION - o usurio pode repassar seus privilgios para outros
usurios que ele criar.

Privilgios mais comuns:


ALTER - Pode alterar a estrutura dos objetos
DELETE - Pode excluir linhas de tabelas ou views
INDEX - Pode criar ndices
INSERT - Pode criar linhas nas tabelas ou views
REFERENCES - Pode criar uma tabela fazendo referencia a outra
SELECT - Pode acessar valores das tabelas, view ou seqncias
UPDATE - Pode alterar dados das tabelas ou views

Structured Query Language - SQL*PLUS

100

Exemplo1: Permitindo que o usurio curso1 possa acessar a tabela emp fazendo
consultas, inseres , delees e alteraes em algumas coluna.

SQL> grant select, insert , delete,


2 update (ename, job, mgr, hiredate, sal, comm, deptno)
3* on emp to curso1;
Grant succeeded
Exemplo 2: Permitindo que o usurio curso2 possa acessar a tabela emp fazendo
consultas, inseres, delees e alteraes e repassando este privilgio para seus
subordinados.
SQL> grant select, insert, delete, update
2*
on emp to curso2;
grant succeeded.
REVOKE
Para retirar um ou mais privilgios.
Sintaxe:
REVOKE {privilgio_1[, privilgio_2] / ALL { PRIVILEGES]}
ON nome_objeto
FROM { usurio_1[,usurio_2] / PUBLIC
Exemplo 1: Retirando todos os privilgios do usurio Curso1 para tabela EMP
SQL> Revoke all on emp from curso1;
Revoke succeeded.
Exemplo 2: Retirando privilgio de alterao da tabela emp para usurio Curso2
SQL> Revoke update on emp from Curso2;
Revoke succeeded.
Quando o privilgio de um usurio que tem a opo WITH GRANT OPTION
retirado, automaticamente retirado o privilgio dos usurios que herdaram o privilgio
dele.

Structured Query Language - SQL*PLUS

101

CONNECT
possvel se conectar como outro usurio ORACLE sem encerrar a sesso
corrente.

Sintaxe:
CONN[ECT] [usurio/senha]
Exemplo:
SQL> Connect curso1/curso1
Para retornar:
SQL> Connect curso/curso

DISCONNECT
O comando Disconnet desfaz a conexo com o RDBMS, No encerra a sesso.
Desta forma s permite uso de comandos SQL*PLUS.
Sintaxe:
DISC[ONNECT]
Exemplo:
SQL> disconnect
Disconnected from Oracle7 Server Release 7.1.3.3.6 - Production Release
With the distributed option
PL/SQL Release 2.1.3.2.1 - Production
+SQL>

Structured Query Language - SQL*PLUS

102

Captulo 11
MONTAGEM DE RELATRIOS A PARTIR DO SQL*PLUS
possvel formatar o resultado de uma query, como os heading,
totalizaes, ttulos e rodaps, atravs de comandos SQL*PLUS
SQL> select ename, job, comm, sal
2*
from emp;
ENAME
--------KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER
JAMES
WARD
FORD
SMITH
SCOTT
ADAMS
MILLER

JOB
COMM
SAL
--------- --------- --------PRESIDENT
5000
MANAGER
2850
MANAGER
2450
MANAGER
2975
SALESMAN
1400
1250
SALESMAN
300
1600
SALESMAN
0
1500
CLERK
950
SALESMAN
500
1250
ANALYST
3000
CLERK
800
ANALYST
3000
CLERK
1100
CLERK
1300

14 rows selected.
Alterao de labels e formatao de resultados
Sintaxe:
COL[UMN] { nome_coluna / alias} [HEAD[ING] Nome Label ]
[FOR[MAT] <formato>]
[{PRI[NT] / NOPR[INT]}]
[ JUS[TIFY] { L[EFT] / C[ENTER] / R[IGHT]}]
Exemplo:
SQL> column ename
SQL> column job
SQL> column comm
SQL> column sal
SQL> set feed off
SQL> /

heading nome
heading cargo
noprint
heading salrio

Structured Query Language - SQL*PLUS

format a6

format 999,999,999.99

103

nome
-----KING
KLAKE
CLARK
JONES
ARTIN
ALLEN
TURNER
JAMES
WARD
FORD
.....

cargo
salrio
--------- ---------------PRESIDENT
5,000.00
MANAGER
2,850.00
MANAGER
2,450.00
MANAGER
2,975.00
SALESMAN
1,250.00
SALESMAN
1,600.00
SALESMAN
1,500.00
CLERK
950.00
SALESMAN
1,250.00
ANALYST
3,000.00

SQL> column sal heading 'Sal Mensal'


nome
-------KING
BLAKE
CLARK
JONES
MARTIN
ALLEN
TURNER
JAMES
WARD
FORD
SMITH
SCOTT
.....

cargo
-----------PRESIDENT
MANAGER
MANAGER
MANAGER
SALESMAN
SALESMAN
SALESMAN
CLERK
SALESMAN
ANALYST
CLERK
ANALYST

Sal Mensal
--------------5,000.00
2,850.00
2,450.00
2,975.00
1,250.00
1,600.00
1,500.00
950.00
1,250.00
3,000.00
800.00
3,000.00

Para listar contedo das colunas:


SQL> column
column job ON
heading 'cargo'
column comm ON
noprint
column sal ON
format 999,999,999.99
column ename ON
heading 'nome'
format a6

Structured Query Language - SQL*PLUS

104

Para reinicializar colunas:


COLUMN nome_coluna CLEAR ou
CLEAR COLUMNS
Realizando quebras
SQL> select job, ename, sal
2 from emp
3 order by job
4* /
Sintaxe:
BREAK ON coluna_break SKIP nmero [DUP/NODUP]
SQL> break on job skip 1 nodup
cargo
nome
salrio
--------- ---------- -----------ANALYST
FORD
3,000.00
SCOTT
3,000.00
CLERK

JAMES
SMITH
MILLER
ADAMS

950.00
800.00
1,300.00
1,100.00

MANAGER

BLAKE
CLARK
JONES

2,850.00
2,450.00
2,975.00

PRESIDENT KING

5,000.00

SALESMAN

1,250.00
1,600.00
1,250.00
1,500.00

MARTIN
ALLEN
WARD
TURNER

Para listar e reinicializar breaks:


BREAK
CLEAR BREAKS

Structured Query Language - SQL*PLUS

105

Totalizando as quebras
Sintaxe:
BREAK ON coluna_break
COMPUTE <funo> OF coluna_1 coluna_2 coluna_n
ON break_coluna
Funes:
SUM, MIN, MAX, AVG, STD, VAR,
COUNT - retorna o nmero de linhas no nulas
NUM - retorna o nmero de linhas (nulas inclusive)
SQL> compute sum of sal on job
SQL> /
cargo
nome
--------- ---------ANALYST
FORD
SCOTT
*********
sum
CLERK
JAMES
SMITH
MILLER
ADAMS
*********
sum
MANAGER
BLAKE
CLARK
JONES
*********
sum
PRESIDENT KING
*********
sum
SALESMAN MARTIN
ALLEN
WARD
TURNER
*********
sum

salrio
-----------3,000.00
3,000.00
-----------6,000.00
950.00
800.00
1,300.00
1,100.00
-----------4,150.00
2,850.00
2,450.00
2,975.00
-----------8,275.00
5,000.00
-----------5,000.00
1,250.00
1,600.00
1,250.00
1,500.00
-----------5,600.00

Structured Query Language - SQL*PLUS

106

Totalizando apenas no final do relatrio:


Exemplo:
SQL> break on report
SQL> compute sum of sal on report
cargo
nome
salrio
--------- ---------- -----------ANALYST
FORD
3,000.00
ANALYST
SCOTT
3,000.00
CLERK
JAMES
950.00
....
SALESMAN ALLEN
1,600.00
SALESMAN WARD
1,250.00
SALESMAN TURNER
1,500.00
--------------sum
29,025.00
Para listar e reinicializar computes:
COMPUTE
CLEAR COMPUTES

Colocando ttulos no relatrio


Sintaxe:
TTITLE posio titulo
TTITLE ON/OFF

SKIP nmero

A posio possveis:
CENTER, RIGHT, LEFT
Exemplo:
SQL> ttitle center 'RELAO DE FUNCIONRIOS - CARGOS E SALRIOS' > skip 1 > center ============================================ skip 1
Fri Sep 06

page 1
RELAO DE FUNCIONRIOS - CARGOS E SALRIOS
=============================================

Structured Query Language - SQL*PLUS

107

cargo
Nome
salrio
--------- ---------- -----------ANALYST
FORD
3,000.00
ANALYST
SCOTT
3,000.00
CLERK
JAMES
950.00
....
SALESMAN ALLEN
1,600.00
SALESMAN WARD
1,250.00
SALESMAN TURNER
1,500.00
--------------sum
29,025.00

Colocando rodaps no relatrio


Sintaxe:
BTITLE posio titulo
BTITLE ON/OFF

SKIP nmero

A posio possveis:
CENTER, RIGHT, LEFT
SQL> btitle center '------------------------ Confidencial ----------------------------'
SQL> /
Fri Sep 06

page 1

RELAO DE FUNCIONRIOS - CARGOS E SALRIOS


=============================================
cargo
nome
salrio
--------- ---------- --------------ANALYST
FORD
3,000.00
ANALYST
SCOTT
3,000.00
CLERK
JAMES
950.00
CLERK
SMITH
800.00
CLERK
MILLER
1,300.00
.....
SALESMAN ALLEN
1,600.00
SALESMAN WARD
1,250.00
SALESMAN TURNER
1,500.00
--------------sum
29,025.00
--------------

Structured Query Language - SQL*PLUS

Confidencial -------------------

108

Armazenado e Imprimindo resultados


O comando SPOOL usado para mover todo display de tela para um arquivo.
Ou seja, depois que o comando Spool estiver ativado toda entrada via teclado ser
registrada e armazenada num arquivo. Para obter um melhor resultado as variveis do
SQL*PLUS e o comando SQL devem estar montados previamente.
O arquivo gerado ter extenso .lst , se no lhe for atribuda outra.
Geralmente preparado um arquivo chamado FLAT FILE e simplesmente
executado sempre que necessrio. Desta forma teremos:
SQL> ed relat.sql
column ename
heading nome
format a6
column job
heading cargo
column comm
noprint
column sal
heading salrio
format 999,999,999.99
-set feed off
set pages 22
-break on job skip 1 nodup
compute sum of sal on job
-ttitle center 'RELAO DE FUNCIONRIOS - CARGOS E SALRIOS' Skip 1 center ============================================ skip 2
-btitle center '------------------------ Confidencial ----------------------------'
-- Listar todos os funcionrios e salrios ordenados por Cargo
select job, ename, comm, sal from emp
order by job
/
Para ligar o spool
SQL> spool <arquivo>
Para desligar o spool
SQL> Spool off
Para fechar e enviar para impressora
SQL> Spool out
SQL> Spool relatorio
SQL> @relat
SQL> Spool off

Structured Query Language - SQL*PLUS

109

CAPTULO 12
PASSAGEM DE PARMETROS PARA EXECUO DO SELECT
permitido o uso de parmetros para execuao de qualquer comando SQL.
Atravs da varivel de sistema DEF[INE] se especifica qual o caracter que identifica o
parmetro. Quando o SQL executa o comando e encontra o caracter definido , ele
solicita as usurio um valor para substituir pelo parmetro.
Sintaxe:
<Comando_sql>
WHERE COLUNA <operador> &PARAMETRO
Exemplo: Selecionar nome, salrio dos funcionarios sob gerencia escolhida.
SQL> show define
define "&" (hex 26)
SQL> select ename "Nome", sal "Salrio"
2
from emp where mgr = &gerente;
Enter value for gerente: 7839
old
new

2: where mgr = &Gerente


2: where mgr = 7839

Nome
Salrio
---------- --------BLAKE
2850
CLARK
2450
JONES
2975
Exemplo 2: Selecionar nome, salrio dos funcionarios sob cargo escolhido
SQL> select ename "Nome", sal "Salrio"
2
from emp
3*
where job = upper('&cargo');
Enter value for cargo: salesman
old
new

2: where job = upper('&cargo')


2: where job = upper('salesman')

Nome
Salrio
---------- --------MARTIN
1250

Structured Query Language - SQL*PLUS

110

ALLEN
TURNER
WARD

1600
1500
1250.

Para executar novamente o comando passando outro parmetro basta usar / ;


SQL> /
Enter value for cargo: Manager
old
new

2: where job = upper('&cargo')


2: where job = upper('Manager')

Nome
Salrio
---------- --------BLAKE
2850
CLARK
2450
JONES
2975
Quando o SQL*PLUS encontra o caracter & ,ele verifica se a varivel a ser
substituda j est criada. Se no estiver , solicita um valor para a mesma.
O comando DEF[INE] serve para criar uma varivel e para verificar se ela j
existe ou no.
Sintaxe:
DEF[INE] variavel [ = valor]
Exemplo:
SQL> Define cargo
symbol cargo is UNDEFINED
SQL> define cargo = CLERK
SQL> define cargo
DEFINE CARGO

= "CLERK" (CHAR)

SQL> select ename "Nome", sal "Salrio" from emp


2* where job = upper('&cargo');
old
new

2: where job = upper('&cargo')


2: where job = upper('CLERK')

Nome
Salrio
---------- ---------

Structured Query Language - SQL*PLUS

111

JAMES
SMITH
ADAMS
MILLER

950
800
1100
1300

o comando && determina que se a varivel no existir, ela deve ser criada.
SQL> select ename "Nome", sal "Salrio" from emp
2* where sal < &&salario;
Enter value for salario: 1500
old
new

2: where sal < &&salario


2: where sal < 1500

Nome
Salrio
---------- --------MARTIN
1250
JAMES
950
WARD
1250
SMITH
800
ADAMS
1100
MILLER
1300
6 rows selected.
SQL> /
old
new

2: where sal < &&salario


2: where sal < 1500

Nome
Salrio
---------- --------MARTIN
1250
JAMES
950
WARD
1250
SMITH
800
ADAMS
1100
MILLER
1300
6 rows selected.
ACCEPT
O comando ACC[EPT] solicita um valor para uma varivel, mesmo que ela j
esteja definida.

Structured Query Language - SQL*PLUS

112

Sintaxe:
ACC[EPT] variavel [NUM[BER] / CHAR
[PROMPT text] NOPR[OMPT]] [HIDE]
Onde: PROMPT texto - deve apresentar o texto para solicitao de entrada;
NOPROMPT - no apresenta o texto;
HIDE
- o valor preenchido no aparece na digito (senhas).

Exemplo:
SQL> accept salario prompt 'Informe o salrio base: '
Informe o salrio base: 1000
SQL> select ename "Nome", sal "Salrio" from emp
2*
where sal < &&salario;
old
new

2: where sal < &&salario


2: where sal < 1000

Nome
Salrio
---------- --------JAMES
950
SMITH
800
O Comando VERIFY suprime a apresentao da substituicao.
SQL> set verify off
SQL>
SQL> accept salario prompt 'Informe o salrio base: '
Informe o salrio base: 1000
SQL> select ename "Nome", sal "Salrio" from emp
2*
where sal < &&salario;
Nome
Salrio
---------- --------JAMES
950
SMITH
800

Structured Query Language - SQL*PLUS

113

Você também pode gostar