Escolar Documentos
Profissional Documentos
Cultura Documentos
Dicas SQL Plus
Dicas 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;
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;
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>
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*
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*
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
SQL> List
1
2
3
4
5
6
7*
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*
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
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.
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 .
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
/* ....... */
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.
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.
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
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
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)
15
Captulo 3
INTEGRIDADE DE DADOS E REFERENCIAL
Restries / Constraints
date
number(12,2)
number(5,2),
number(2)
16
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),
....);
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)
...);
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.
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)
Check
Define um domnio de valores permitidos para uma coluna.
Exemplo 1:
SQL> Create table Emp
(.....,
sal
number(12,2)
.....);
Exemplo 2:
SQL> Create table Cadastro
(.....,
id_sexo
varchar2(1) constraint ck_sexo
check (id_sexo in ( M , F )),
.....);
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)
nr_pedido e nr_item
20
21
22
Exerccios - 03
1. Incluir na tabela grade_salarial a coluna:
Observao
long.
date
c(20)
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.
24
25
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;
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.
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.
29
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.
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
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.
32
33
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)
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
--------- ---------- --------- ---------
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;
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
37
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
DNAME
-------------ACCOUNTING
RESEARCH
SALES
OPERATIONS
LOC
------------NEW YORK
DALLAS
CHICAGO
BOSTON
SQL>
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
JOCKSPORTS
TKB SPORT SHOP
VOLLYRITE
JUST TENNIS
EVERY MOUNTAIN
39
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
....
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)
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
Dia de Admisso
-----------------------------------------------seventeen
one
nine
two
twenty-eight
twenty
eight
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
44
=
!= ou ^= ou <>
DNAME
-------------ACCOUNTING
SALES
OPERATIONS
LOC
-------NEW YORK
CHICAGO
BOSTON
3 rows selected.
45
Maior que
Menor que
>
<
e
e
Maior ou Igual a
Menor ou Igual a
>=
<=
DNAME
-------------RESEARCH
SALES
OPERATIONS
LOC
------------DALLAS
CHICAGO
BOSTON
3 rows selected.
Testa contedo nulo
is null
is not null
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
46
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
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.
48
ENAME
---------ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
ENAME
---------MILLER
FORD
JAMES
ADAMS
TURNER
KING
SCOTT
CLARK
49
A restrio pode ser composta por uma ou mais comparaes, estas devem ser
combinadas usando operadores lgicos AND, OR e NOT
Comparao1 ou Comparao 2
OR
50
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);
51
ENAME
DEPTNO
---------- --------KING
10
CLARK
10
JONES
20
FORD
20
SMITH
20
SCOTT
20
ADAMS
20
MILLER
10
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).
53
FUNES
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:
54
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
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****
56
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(
---------KING
BLAKE
PLARK
ALLEN
JAMES
JOB
--------PRESIDENT
MANAGER
MANAGER
SALESMAN
CLERK
TRANSLATE
--------PTESIDENT
MINIGET
MINIGET
SILESMIN
CLETK
58
Exerccios - 08
Descricao
-----------------------------ACE
ACE
ACE
ACE
ACE
SP
RH: "GUIDE TO
59
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
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;
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
62
Exerccios - 09
1. Selecionar os Pedidos e data do pedido da tabela Ord que foram realizados em dias
pares (orderdate).
63
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
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.
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
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.
67
68
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.
69
70
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.
72
Exerccios - 11
2. Selecione o cdigo e a mdia salarial dos departamentos que possuem mais de trs
funcionrios.
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;
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.
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
76
UID
Retorna um nmero inteiro que identifica o usurio ORACLE corrente
Exemplo:
SQL> select UID from dual;
UID
---------5645
77
Exerccios - 12
1. Selecionar nome, cargo e salrio aumentado de acordo coma tabela:
Analista
Atendente
Gerente
- ANALYST 10%
- CLERK
15%
- MANAGER 20%
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 ...]
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;
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.
81
NOME
-------------ACCOUNTING
ADAMS
ALLEN
BLAKE
CLARK
FORD
JAMES
JONES
KING
MARTIN
MILLER
OPERATIONS
RESEARCH
SALES
SCOTT
SMITH
TURNER
WARD
18 rows selected.
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.
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
84
Exerccios - 13
3. Selecionar o codigo, nome dos cliente que possuem mais de 3 pedidos, classificando
pela qtde de pedidos .
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)
86
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;
and
88
Exerccios - 14
1. Aumentar o valor
possuem comisso.
2. Alterar a data de envio (shipdate) da tabela ord para 30 dias depois da data do
pedido (orderdate).
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
90
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.
92
Type
---VARCHAR2(10)
VARCHAR2(14)
NUMBER
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.
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:
Exemplo:
SQL> select seq_pedido.nextval
2*
from dual;
NEXTVAL
--------8000
95
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.
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;
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).
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.
100
Exemplo1: Permitindo que o usurio curso1 possa acessar a tabela emp fazendo
consultas, inseres , delees e alteraes em algumas coluna.
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>
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
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
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
104
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
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
106
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
=============================================
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
SKIP nmero
A posio possveis:
CENTER, RIGHT, LEFT
SQL> btitle center '------------------------ Confidencial ----------------------------'
SQL> /
Fri Sep 06
page 1
Confidencial -------------------
108
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
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
Nome
Salrio
---------- --------MARTIN
1250
110
ALLEN
TURNER
WARD
1600
1500
1250.
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)
Nome
Salrio
---------- ---------
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
Nome
Salrio
---------- --------MARTIN
1250
JAMES
950
WARD
1250
SMITH
800
ADAMS
1100
MILLER
1300
6 rows selected.
SQL> /
old
new
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.
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
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
113