Você está na página 1de 113

ORACLE – SQLPLUS

_________________________________________________________________________________

ÍNDICE

ASSUNTO __________________ PÁGINA

INTRODUÇÃO AO ORACLE SQLPLUS..........................................................................4


BANCO DE DADOS RELACIONAL......................................................................................................... 4
SISTEMA GERENCIADOR DE BANCO DE DADOS RELACIONAIS (SGBDR)................................4
ALGEBRA RELACIONAL.......................................................................................................................... 6
PRIVILÉGIO............................................................................................................................................... 7
SEGURANÇA............................................................................................................................................. 7
AUDITORIA................................................................................................................................................ 7
PRINCIPAIS PRODUTOS ORACLE....................................................................................................... 8
CONJUNTO DE COMANDOS SQL........................................................................................................ 9
ACESSO AO SQL*PLUS........................................................................................................................ 10
D.M.L. (DATA MANIPULATION LANGUAGE).........................................................................................12
ESTRUTURA DO BANCO DE DADOS PARA TREINAMENTO.........................................................12
CONSULTAS............................................................................................................................................ 13
EXPRESSÕES ARITMÉTICAS.............................................................................................................. 13
EDIÇÃO DE COMANDOS SQL UTILIZANDO COMANDOS SQLPLUS........................................14
CONFIGURAÇÃO DO SQLPLUS.......................................................................................................... 15
FORMATANDO COLUNAS.................................................................................................................... 18
APELIDOS PARA AS COLUNAS........................................................................................................... 19
CONCATENAÇÃO................................................................................................................................... 19
TRATAMENTO DE VALORES NULOS................................................................................................. 19
ELIMINAR LINHAS DUPLICADAS NA CONSULTA.............................................................................20
CLASSIFICAR O RESULTADO DA CONSULTA..................................................................................20
CLAUSULA WHERE (ONDE) - RESTRICAO DE LINHAS.................................................................21
VARIAVEL SUBSTITUIVEL (&).............................................................................................................. 25
ACCEPT.................................................................................................................................................... 29
TRATAMENTO DE DATA E HORA ATRAVÉS DE VARIÁVEIS DO ORACLE..................................30
FUNÇÕES................................................................................................................................................ 41
PRIMEIRO E ULTIMO DIA DA SEMANA........................................................................................................... 46
FUNÇÕES DE GRUPO........................................................................................................................... 47
JUNÇÕES (JOIN).................................................................................................................................. 49
JUNÇÃO POR IQUALDADE (EQUI-JOIN)............................................................................................. 49
JUNÇÃO POR NÃO IQUALDADE (NON-EQUI-JOIN)..........................................................................49
JUNÇÃO EXTERNA (OUTER-JOIN)...................................................................................................... 49
AUTO-RELACIONAMENTO (SELF-JOIN)............................................................................................50
UNIÃO (UNION)............................................................................................................................ 50
INTERSECÇÃO (INTERSECT)........................................................................................................ 50
DIFERENÇA (MINUS)........................................................................................................................ 50
FULL OUTER JOIN................................................................................................................................... 51
UNION....................................................................................................................................................... 51
REGRAS PARA A UTILIZAÇÃO DA ALGEBRA RELACIONAL...........................................................51
SUB-SELECT........................................................................................................................................... 53
DICIONÁRIO DE DADOS....................................................................................................................... 54
CONCEITO................................................................................................................................................ 54
VISÕES MAIS FREQUENTES.................................................................................................................. 54
ALL_OBJECTS.......................................................................................................................................... 55
USER_OBJECTS....................................................................................................................................... 56
USER_TABLES......................................................................................................................................... 57
ALL_TABLES........................................................................................................................................... 59
USER_TAB_COMMENTS........................................................................................................................ 60
USER_COL_COMMENTS........................................................................................................................ 61
USER_CONSTRAINTS............................................................................................................................. 62
1
ORACLE – SQLPLUS
_________________________________________________________________________________

USER_CONS_COLUMNS......................................................................................................................... 63
OUTRAS VISÕES...................................................................................................................................... 64
PSEUDO-COLUNAS................................................................................................................................. 65
ROWNUM E ROWID............................................................................................................................. 66
INSERINDO, ALTERANDO E EXCLUINDO LINHAS.........................................................................67
CONTROLE DE TRANSAÇÕES............................................................................................................ 70
LOCK DE REGISTROS........................................................................................................................... 70
D.D.L. (DATA DEFINITION LANGUAGE).............................................................................................. 72
SCRIPT PARA CRIAÇÃO DE TABELAS E INCLUSÃO DE LINHAS...............................................72
TIPOS DE DADOS.................................................................................................................................... 74
DADOS DO TIPO CARACTER.......................................................................................................... 74
DADOS DO TIPO BINÁRIO............................................................................................................... 74
DADOS DO TIPO NUMÉRICO.......................................................................................................... 74
DADOS DO TIPO DATA..................................................................................................................... 74
CONSTRAINT NOT NULL................................................................................................................... 75
CONSTRAINT PRIMARY KEY............................................................................................................. 76
CONSTRAINT REFERENCES............................................................................................................. 77
CONSTRAINT UNIQUE........................................................................................................................ 78
CONSTRAINT CHECK.......................................................................................................................... 79
EXEMPLOS DE CRIAÇÃO E ALTERAÇÃO EM ESTRUTURA DE TABELAS..................................80
TROCAR NOME DE TABELAS............................................................................................................... 85
EXCLUIR TABELAS................................................................................................................................ 85
SEQUENCES........................................................................................................................................... 86
INDICES.................................................................................................................................................... 88
TRIGGERS............................................................................................................................................... 89
TESTE DE EFICIENCIA DA TRIGGER.................................................................................................. 94
HABILITANDO E DESABILITANDO CONSTRAINTS...........................................................................94
PROCEDURE E FUNCTIONS.............................................................................................................. 95
PACKAGES............................................................................................................................................... 95
CURSOR.................................................................................................................................................... 95
SQL LOADER........................................................................................................................................... 96
DATA BASE LINK......................................................................................................................................... 99
SNAPSHOTS........................................................................................................................................... 99
MASTER TABLE...................................................................................................................................... 99
SNAPSHOTS READ-ONLY.................................................................................................................... 99
SNAPSHOTS UPDATABLE.................................................................................................................... 99
D.C.L. (DATA CONTROL LANGUAGE)................................................................................................ 101
ROLES.................................................................................................................................................... 101
ADMINISTRAÇÃO DE DIREITO DE ACESSO À TABELAS................................................................101
ALTERAR SENHA................................................................................................................................ 102
CRIAR USUÁRIO................................................................................................................................... 102
VIEWS..................................................................................................................................................... 103
SINÔNIMOS (SYNONYM).......................................................................................................................... 104
EXEMPLO DE USO DE VIEW E SYNONYM......................................................................................106
PESQUISANDO AS VIEW S EXISTENTES........................................................................................110
REFERÊNCIAS BIBLIOGRAFICAS........................................................................................................... 111

2
ORACLE – SQLPLUS
_________________________________________________________________________________

INTRODUCAO AO ORACLE

SQL*PLUS

3
ORACLE – SQLPLUS
_________________________________________________________________________________

INTRODUÇÃO AO ORACLE SQLPLUS

BANCO DE DADOS RELACIONAL

Permite que tenhamos informações divididas entre diversas tabelas de dados. Certas
informações de uma tabela são obtidas a partir de outras.

Mostra-se ao usuário como uma coleção de tabelas relacionadas.

A visualização de dados é realizada através de linhas e colunas. (Formato de Tabelas)

SISTEMA GERENCIADOR DE BANCO DE DADOS RELACIONAIS (SGBDR)

Um Sistema Gerenciador de Banco de Dados Relacionais (SGBDR) consiste em uma


coleção de dados inter-relacionados e em um conjunto de programas para acessá-los.

O principal objetivo de um SGBDR é prover um ambiente que seja conveniente e eficiente


para recuperar e armazenar dados .

Um SGBDR fornece a interface entre os dados de baixo nível armazenados no Banco de


Dados e os programas aplicativos e de consulta submetido ao sistema. O SGBDR é
responsável pela integridade, segurança, cópias de segurança, pela recuperação e
controle de concorrência.

O SGBDR disponibiliza uma Linguagem de Manipulação de Dados (DML - Data


Manipulation Language) que permite aos usuários acessar ou manipular dados como
organizados pelo modelo de dados.
Existem 2 tipos de DMLs :
Procedurais: Qual dado é necessário e como obte-lo!
Não Procedurais: Qual dado é necessário sem especificar como obte-lo!

A manipulação de dados significa: recuperação, inserção, eliminação e modificação de


dados armazenados no Banco de Dados.

O Oracle é um Sistema Gerenciador de Banco de Dados Relacional (SGBDR), ou seja,


organiza todos os seus dados em tabelas, relacionando-as, de forma que permite analisar,
encontrar e recuperar dados com rapidez e segurança, evitando redundâncias.

PROPRIEDADES DOS RELACIONAMENTOS TABULARES

Uma tabela tem as seguintes propriedades:

- Não existem linhas duplicadas (Conceito de Chave)


- Não existem nomes duplicados de colunas
- A seqüência de linhas e colunas nas tabelas não é relevante

4
ORACLE – SQLPLUS
_________________________________________________________________________________

SQL (Structured Query Language)

É a linguagem padrão para execução de consultas baseadas em praticamente todos os


bancos de dados cliente-servidor e foi adotada tanto nos EUA pelo ANSI (American
National Standards Institute) quanto em âmbito internacional pela I.S.O. (Internacional
Standards Organization)

CLIENTE-SERVIDOR

O principio básico da operação de um SGBDR é que as consultas são executadas pela


aplicação de banco de dados que roda no servidor. A aplicação cliente transmite ao
servidor a instrução SQL pela rede; o servidor processa a instrução SQL e depois
transmite de volta ao cliente as linhas de dados que correspondem ao conjunto de
resultados da consulta.

Esse método minimiza a quantidade de processamento no lado do cliente e reduz o tráfego


através da rede. Os computadores nos quais o servidor de banco de dados é executado
tem quase sempre processadores de muito maior velocidade e memória; assim, as
consultas remotas são executadas mais rapidamente, mesmo levando em consideração o
tempo necessário para a transmissão dos dados pela rede.

ENTIDADE-RELACIONAMENTO (E-R)

O Modelo Entidade-Relacionamento (E-R) é baseado na percepção do mundo real que


consiste em um conjunto de objetos básicos chamados entidades e nos relacionamentos
entre esses objetos. (Exemplo: Clientes, Fornecedores, Pedidos )

5
ORACLE – SQLPLUS
_________________________________________________________________________________

O MODELO RELACIONAL

O modelo relacional representa dados e relacionamentos entre dados pôr um conjunto de


tabelas, cada uma tendo um número de colunas com nomes únicos.

A figura abaixo é uma amostra de banco de dados relacional exibindo clientes e as contas
que eles possuem . Ele mostra, pôr exemplo, que o cliente Maria vive em Wolthers em
Maua, e tem duas contas, uma numero 647 com um saldo de $105.366 e a outra número
801 com saldo de 10.533. Observe que os clientes Pedro e Maria dividem a conta 647
(talvez eles possam ser sócios num negócio).

NOME RUA CIDADE CONTA SALDO


João Bosque Santos 900 55.00
Pedro Jabaquara São Paulo 556 100000.80
Pedro Jabaquara São Paulo 647 105366.78
Maria Wolthers Maua 801 10533.53
Maria Wolthers Maua 647 105366.78


CPF CONTA SALDO
055098762390 900 55.00
065674306845 556 100000.80
006786785857 647 105366.78
006786785857 801 10533.53

CPF NOME RUA CIDADE


05509876239 João Bosque Santos
0
06567430684 Pedro Jabaquara São Paulo
5
00678678585 Maria Wolthers Maua
7

ALGEBRA RELACIONAL

Através da Álgebra relacional pode-se obter diferentes visões dos dados distribuídos nas
tabelas, particionando ou combinando-as.

- Seleção, Interseção, Diferença, União, Junção e Produto Cartesiano

6
ORACLE – SQLPLUS
_________________________________________________________________________________

PRIVILÉGIO

É um direito para executar determinado tipo de declaração SQL

- Conectar o Banco de Dados (Criar Sessão)


- Criar Tabela em seu esquema
- Selecionar, excluir, inserir ... linhas da tabela de outro usuário

Um privilégio pode ser concedido a um usuário ou a uma role, e a role atribuída a vários
usuários. Alterando a role todos os usuários sentem o reflexo.

SEGURANÇA

- Combinações válidas de nome e senha


- Espaço em disco para os objetos de esquema de um usuário
- Tipo de acesso (R/W ou R/O) que um usuário pode Ter a um objeto de esquema
- Controle arbitrário de acesso: usuários com privilégios podem concede-los a outros
- Limites de recurso de sistema do usuário (ex.: tempo de processamento de CPU)

AUDITORIA

Monitoramento registrado das ações do usuário.


Registra sucessos e fracassos de execução em tabelas.

7
ORACLE – SQLPLUS
_________________________________________________________________________________

PRINCIPAIS PRODUTOS ORACLE

SQL*Plus Interface iterativa guiada por comandos do SGBDR Oracle para


consultas, manutenção dos dados e geração de relatórios.

PL/SQL Linguagem procedural que implementa comandos de desvio


condicional e looping alem de possibilitar tratamento individual de
cada
linha da tabela

PROCEDURE BUILDER Ambiente Windows para se trabalhar com PL/SQL

FORMS Gerador de Aplicativos

REPORTS Gerador de relatórios que permite a criação de vários tipos de


relatórios através do preenchimento de telas amigáveis

DESIGNER Ferramenta CASE da Oracle para Criar Banco de Dados, Documentar


e desenvolver Sistemas

GRAPHICS Apresenta quaisquer dados em forma de Gráfico

DISCOVERER Produto destinado a usuário final para consulta e manipulação de


dados de forma iterativa.

8
ORACLE – SQLPLUS
_________________________________________________________________________________

CONJUNTO DE COMANDOS SQL

- DML (Data Manipulation Language)

SELECT (SELECIONAR)
INSERT (INCLUIR)
UPDATE (ATUALIZAR)
DELETE (EXCLUIR)

- DDL (Data Definition Language)

CREATE (CRIAR)
ALTER (ALTERAR)
DROP (EXCLUIR)

- DCL (Data Control Language)

GRANT (ASSEGURAR)
REVOKE (REVOGAR)

9
ORACLE – SQLPLUS
_________________________________________________________________________________

ACESSO AO SQL*PLUS

- Localize e click sobre o Icone de acesso ao Oracle SQL*Plus no Windows

- Informe seu Login, Senha e Banco conforme figura abaixo

Informe seu Login no Banco de Dados


(User ID: Identificação do usuário)

Informe sua Senha


(Senha do Login Acima)

Informe a String para conexão ao Banco


de Dados

- Para desconectar seu Login do Banco Oracle utilize o comando DISCO

- Para abandonar o SQL*Plus utilize o comando EXIT

- Para conectar outro Login utilize o comando CONNECT LOGIN/SENHA@BANCO ou

CONNECT LOGIN@BANCO e informe a senha quando solicitado

10
ORACLE – SQLPLUS
_________________________________________________________________________________

D.M.L.

(Data Manipulation Language)

11
ORACLE – SQLPLUS
_________________________________________________________________________________

D.M.L. (Data Manipulation Language)

ESTRUTURA DO BANCO DE DADOS PARA TREINAMENTO

EMP : Funcionários

SALGRADE : Faixas Salariais da Empresa

DEPT : Departamentos onde os Funcionários estão alocados

EMP
CAMPO TIPO / DESCRICAO
TAMANHO
EMPNO (PK) NUMBER(4) Numero de Matricula do Funcionário
ENAME VARCHAR2(10) Nome do Funcionário
JOB VARCHAR2(9) Cargo do Funcionário
MGR NUMBER(4) Numero de Matricula do Chefe
HIREDATE DATE Data de Admissão
SAL NUMBER(7,2) Salário
COMM NUMBER(7,2) Comissão
DEPTNO (FK) NUMBER(2) Numero do Departamento

DEPT
CAMPO TIPO / DESCRICAO
TAMANHO
DEPTNO (PK) NUMBER(2) Numero do Departamento
DNAME VARCHAR2(14) Nome do Departamento
LOC VARCHAR2(13) Localização (Cidade)

SALGRADE
CAMPO TIPO / DESCRICAO
TAMANHO
GRADE NUMBER Grade Salarial (1,2,3....)
LOSAL NUMBER Menor Salário da Faixa
HISAL NUMBER Maior Salário da Faixa

Para Criar esta estrutura de tabelas, com dados, verifique no capitulo sobre D.D.L. (DATA
DEFINITION LANGUAGE) o topico:

SCRIPT PARA CRIAÇÃO DE TABELAS E INCLUSÃO DE LINHAS

12
ORACLE – SQLPLUS
_________________________________________________________________________________

CONSULTAS

Extração de dados das tabelas que compõe o Banco de Dados

SELECT => Lista de colunas separadas por Virgulas ou * para selecionar todas as
colunas

FROM => Lista de Tabelas separadas por virgula

Exemplos:

(Seleciona todas as colunas da tabela EMP)


Select * from EMP;

(Seleciona as colunas deptno, ename e mgr da tabela emp)


Select deptno, ename, mgr
From emp;

EXPRESSÕES ARITMÉTICAS

É a combinação de um ou mais valores, operadores e funções que resultam num novo


valor

+ Adição
- Subtração
* Multiplicação
/ Divisão

A prioridade de execução das expressões ocorre de acordo com as normas da matemática

Exemplos:

Select ename, sal*12, comm from emp;

Select ename, sal*12 + 1000, comm from emp;

Select ename, (sal+1000) * 12 , comm from emp;

13
ORACLE – SQLPLUS
_________________________________________________________________________________

EDIÇÃO DE COMANDOS SQL UTILIZANDO COMANDOS SQLPLUS

- O comando SQL é armazenado em uma parte da memória conhecida como “SQL Buffer”
(Memória auxiliar), lá permanecendo até que um novo comando seja acionado.

- Ao se completar o comando pressione a tecla <ENTER> , o SQL*Plus exibirá uma nova


linha para a sua digitação

- Termina-se um comando SQL com ;

- Enquanto o comando SQL permanecer no buffer pode-se utilizar operações de edição


que são executadas pelos comandos SQL*Plus.

- Os comandos SQL*Plus não são armazenados em buffer

COMANDO ABREVIAÇÃO DESCRIÇÃO


APPEND texto A texto Adiciona texto ao final da linha atual
CHANGE C/velho/Novo Muda na linha, velho texto por novo
CLEAR BUFFER CL BUFF Limpa o Buffer (Cancela os Comandos)
DEL DEL Elimina a linha atual
INPUT I Insere linhas (sem limite)
INPUT Texto I Texto Insere uma linha de texto
LIST L Lista as linhas do Buffer
LIST n L n Lista a linha especificada
LIST n m L n m Lista a faixa de linhas especificada
RUN R Exibe e executa os comandos do buffer
/ / Executa os comandos do Buffer
SAVE Arquivo Transfere o conteúdo do buffer para um arquivo
GET Arquivo Transfere ao buffer o conteúdo de um arquivo
START Arquivo Executa um arquivo de comandos salvo (@)
ED Permite editar o conteúdo de um arquivo salvo ou
buffer
SPOOL Arquivo Grava os comandos ou saída subsequente em um
arquivo. O arquivo gravado tem o sufixo “LIS” ou
“LST”
SPOLL OFF/OUT OFF=> Fecha o arquivo gerado
OUT=> Termina a gravação e envia o arquivo para
Impressora
DESCRIBE DESC Exibe a estrutura de qualquer tabela
HELP Traz a rotina Oracle de auxilio ao operador
HOST comando Conexão ao sistema operacional pelo SQL*Plus
CONNECT CONN Transfere a presente conexão para outro usuário
EXIT Saída do SQL*Plus
DISCONNECT DISCO Fecha a conexão com o Oracle mas não sai do PLUS
PROMPT Exibe o texto ao executar o arquivo de comando

14
ORACLE – SQLPLUS
_________________________________________________________________________________

CONFIGURAÇÃO DO SQLPLUS

SET PAGESIZE 60 (Quebra de Pagina a cada 60 linhas)

SET LINESIZE 300 (Limita o tamanho de uma linha em 300 colunas)

SET HEADING OFF / ON (Suprime Cabeçalho das colunas)

SET VERIFY OFF / ON (Suprime novo e antigo valor na substituição de parâmetros)

SET FEEDBACK OFF / ON (Suprime Status e mensagens internas do SQLPlus)

SET SERVEROUPUT OFF / ON (Suprime mensagens do comando DBMS_OUTPUT do


PL/SQL)

SET PAUSE OFF / ON (Aguarda confirmação para exibir a próxima página)

SET LONG 50000 (Permite visualizar conteudo de campos LONG)

Show user
user is "ADMSIM"

Show time
time OFF

Set time on;

Show time
time ON

Set time off;

Show time;
Time OFF

15
ORACLE – SQLPLUS
_________________________________________________________________________________

SHOW ALL;
Exibe todos os parametros SET

SQL> show all

appinfo is ON and set to "SQL*Plus"


arraysize 15
autocommit OFF
autoprint OFF
autotrace OFF
blockterminator "." (hex 2e)
btitle OFF and is the 1st few characters of the next SELECT statement
closecursor OFF
cmdsep OFF
colsep " "
compatibility NATIVE
concat "." (hex 2e)
copycommit 0
copytypecheck is ON
crt ""
define "&" (hex 26)
echo OFF
editfile "afiedt.buf"
embedded OFF
escape OFF
feedback ON for 6 or more rows
flagger OFF
flush ON
heading ON
headsep "|" (hex 7c)
linesize 1000
lno 25
long 80
longchunksize 80
maxdata 60000
newpage 1
non-blocking ON
null ""
numformat ""
numwidth 10
pagesize 50
pause is OFF
pno 16
recsep WRAP
recsepchar " " (hex 20)
release 801070000
repfooter OFF and is NULL
repheader OFF and is NULL
serveroutput ON size 2000 format WORD_WRAPPED
showmode OFF
spool OFF
sqlcase MIXED
16
ORACLE – SQLPLUS
_________________________________________________________________________________

sqlcode 0
sqlcontinue "> "
sqlnumber ON
sqlprefix "#" (hex 23)
sqlprompt "SQL> "
sqlterminator ";" (hex 3b)
suffix "SQL"
tab ON
termout ON
time ON
timing OFF
trimout ON
trimspool OFF
ttitle OFF and is the 1st few characters of the next SELECT statement
underline "-" (hex 2d)
user is "ADMSIM"
verify ON
shiftinout INVISIBLE
wrap : lines will be wrapped

17
ORACLE – SQLPLUS
_________________________________________________________________________________

FORMATANDO COLUNAS

COLUMN DEPTNO HEADING DEPARTAMENTO


COLUMN ENAME HEADING NOME
COLUMN EMPNO HEADING “COD. FUNCIONARIO”
COLUMN SAL HEADING SALARIO

SELECT DEPTNO, ENAME, EMPNO, SAL


FROM EMP

SET UNDERLINE =

DEPARTAMENTO DNAME
============== =======

COLUMN ENAME FORMAT A4


COLUMN SAL FORMAT $99.990

SELECT ENAME, SAL


FROM EMP

COLUMN COMM LIKE SAL


Aplica os atributos de formatação de uma coluna a outra

COLUMN SAL;
Exibe os atributos atuais da coluna

COLUMN SAL ON
FORMAT 99.999

COLUMN
Exibe atributos de todas as colunas

COLUMN ENAME CLEAR


Atribui valor padrão

CLEAR COLUMN
Exclui a definição de todas as colunas

COLUMN ENAME OFF


Desativa temporariamente os atributos da coluna

18
ORACLE – SQLPLUS
_________________________________________________________________________________

APELIDOS PARA AS COLUNAS

O Apelido da coluna deve ser colocado após o nome da coluna, conforme exemplo a
seguir:

Select ename “Nome do Funcionário” ,


Sal * 12 “Salário Anual” ,
Comm Comissão
From Emp;

CONCATENAÇÃO

Recurso normalmente empregado para exibir literais junto com o conteúdo de campos ou
ainda para formar um novo conteúdo a partir de partes dos dados dos campos. Exemplo:

Select empno||’-‘||ename “Nome Funcionário”,


‘Trabalha no Departamento’ ,
deptno Cod_Departamento
From Emp;

TRATAMENTO DE VALORES NULOS

Qualquer coluna de uma linha que não contenha dado tem portanto conteúdo nulo.
(Ausência de dado).

Qualquer operação aritmética que envolva campos nulos resulta em nulo.


Exemplo: 5 + Null = Null

Para resolver esse problema utiliza-se a função NVL que converte um valor nulo para um
valor valido. Exemplos: NVL( NULL,0) resulta 0.
NVL(1000,0) resulta 1000.

Valor Substituto caso o 1º argumento seja nulo

(Compare os resultados obtidos com e sem o uso da função NVL)


Select ename “Nome do Funcionário” ,
Sal * 12 “Salário Anual” ,
Comm Comissão ,
NVL(Sal,0) * 12 + NVL(comm,0) “Calculo com NVL” ,
Sal*12+comm “Calculo sem NVL”
From Emp;

19
ORACLE – SQLPLUS
_________________________________________________________________________________

ELIMINAR LINHAS DUPLICADAS NA CONSULTA

Compare os seguintes exemplos:

Select deptno (Seleciona todas as linhas)


From emp;

Select distinct deptno (Seleciona as linhas que apresentam o


resultado distinto.
From emp; Ou seja não seleciona nada repetido)

Select distinct deptno, Job


From emp;

CLASSIFICAR O RESULTADO DA CONSULTA

Para isso devemos utilizar a Clausula Order By

Select ename “Nome do Funcionário” ,


Job Cargo ,
Sal * 12 “Salário Anual” ,
deptno Cod_Departamento
From Emp
Order by Ename;

A pesquisa acima é exibida em ordem ascendente de nome (campo Ename)

Se alterarmos para:
Order by Ename DESC => Exibida em ordem descendente por Ename
Order by Deptno, Cargo => Exibida em ordem de departamento e Cargo (dentro do
Departamento)
Exemplo:

Select ename “Nome do Funcionário” ,


Job Cargo ,
Sal * 12 “Salário Anual” ,
deptno Cod_Departamento
From Emp
Order by 2;

20
ORACLE – SQLPLUS
_________________________________________________________________________________

CLAUSULA WHERE (ONDE) - RESTRICAO DE LINHAS

Compara valores em campos, expressões, funções ou literais. Contem a condição que as


linhas devem obedecer para que sejam selecionadas.

Operadores Lógicos

= IQUAL A

> MAIOR QUE

>= MAIOR OU IQUAL A

< MENOR QUE

<= MENOR OU IQUAL A

BETWEEN ENTRE DOIS VALORES (INCLUSIVE)

IN LISTA DE VALORES

LIKE PARTE DE UM DADO

IS NULL VALOR NULO

<> DIFERENTE

NOT CAMPO = DIFERENTE DO CAMPO

NOT CAMPO > NÃO MAIOR QUE

NOT BETWEEN NÃO ENTRE DOIS VALORES

NOT IN NÃO CONSTE NA LISTA DE VALORES

NOT LIKE DIFERENTE DO PADRAO DE CARACTERES INFORMADO

IS NOT NULL NÃO é UM VALOR VALIDO

AND E

OR OU

21
ORACLE – SQLPLUS
_________________________________________________________________________________

Exemplos de uso da clausula Where:

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Hiredate “Data Admissão”,
Deptno “Cod. Departamento”
From Emp
Where Job = ‘CLERK’
Order By deptno, hiredate desc;

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Hiredate “Data Admissão”,
Deptno “Cod. Departamento”
From Emp
Where deptno > 20
Order By deptno, hiredate desc;

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where comm > Sal
Order By deptno, hiredate desc;

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Nvl(Comm,0) “Comissão”
From Emp
Where Nvl(comm,0) > Sal
Order By deptno, hiredate desc;

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where Sal BETWEEN 1000 AND 2000

22
ORACLE – SQLPLUS
_________________________________________________________________________________

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where (Sal BETWEEN 1000 AND 2000) AND JOB = ‘CLERK’

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where (Sal >1500 AND JOB = ‘MANAGER’ ) OR JOB = ‘SALESMAN’

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where Sal >1500 AND (JOB = ‘MANAGER’ OR JOB = ‘SALESMAN’)

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where Mgr IN (7902, 7566, 7788);

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where Ename LIKE ‘S%’;

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where Ename LIKE ‘K _ _ _’ ;

23
ORACLE – SQLPLUS
_________________________________________________________________________________

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where Ename NOT LIKE ‘K _ _ _’ ;

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where Ename LIKE ‘_ _ _ _’ ;

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where Mgr IS NULL ;

Select Ename “Nome Funcionário” ,


Job “Cargo”,
Sal “Salário”,
Comm “Comissão”
From Emp
Where Mgr IS NOT NULL ;

24
ORACLE – SQLPLUS
_________________________________________________________________________________

VARIAVEL SUBSTITUIVEL (&)

SELECT PROD_GRCO_CD, PROD_CD


FROM GER_PRODUTO
WHERE PROD_GRCO_CD = &CÓDIGO_GRUPO_COMERCIAL;

Enter value for cÓdigo_grupo_comercial: 03


PRO PROD_CD
--- --------------------
03 PL-L55W/HF/4P/84
03 PL-T18W/2P/82
03 TLE22W+32W-54-IP

Enter value for cÓdigo_grupo_comercial: 67


old 3: WHERE PROD_GRCO_CD = &CÓDIGO_GRUPO_COMERCIAL
new 3: WHERE PROD_GRCO_CD = 67

no rows selected

SQL> SELECT PROD_CD FROM GER_PRODUTO


2 WHERE PROD_CD = '&CODIGO'
/
 Usar Apostrofes para conteúdo Alfanumérico
 Não usar para conteúdo Numérico

Enter value for codigo: PL-T18W/2P/82


old 2: WHERE PROD_CD = '&CODIGO'
new 2: WHERE PROD_CD = 'PL-T18W/2P/82'

PROD_CD
--------------------
PL-T18W/2P/82

SQL> l
1 SELECT PROD_CD FROM GER_PRODUTO
2* WHERE PROD_CD = '&CODIGO'
SQL> l1
1* SELECT PROD_CD FROM GER_PRODUTO
SQL> c/cd/cd &formula
1* SELECT PROD_cd &formula FROM GER_PRODUTO
SQL> l
1 SELECT PROD_cd &formula FROM GER_PRODUTO
2* WHERE PROD_CD = '&CODIGO'

25
ORACLE – SQLPLUS
_________________________________________________________________________________

l1
SELECT PROD_cd &formula FROM GER_PRODUTO
c/&/,&
SELECT PROD_cd ,&formula FROM GER_PRODUTO
l
SELECT PROD_cd ,&formula FROM GER_PRODUTO
WHERE PROD_CD = '&CODIGO'

SELECT PROD_cd ,&formula FROM GER_PRODUTO


WHERE PROD_CD = '&CODIGO'
/
Enter value for formula: 5*10/2-4+1
old 1: SELECT PROD_cd ,&formula FROM GER_PRODUTO
new 1: SELECT PROD_cd ,5*10/2-4+1 FROM GER_PRODUTO
Enter value for codigo: PL-T18W/2P/82
old 2: WHERE PROD_CD = '&CODIGO'
new 2: WHERE PROD_CD = 'PL-T18W/2P/82'

PROD_CD 5*10/2-4+1
-------------------- ----------
PL-T18W/2P/82 22

SELECT PROD_GRCO_CD, PROD_CD


FROM GER_PRODUTO
WHERE PROD_GRCO_CD = &&CÓDIGO_GRUPO_COMERCIAL

&& => A variável é solicitada apenas uma vez ficando válida durante toda a
sessão

SQL> select &&CÓDIGO_GRUPO_COMERCIAL from dual;


old 1: select &&CÓDIGO_GRUPO_COMERCIAL from dual
new 1: select 90 from dual

90
---------
90

26
ORACLE – SQLPLUS
_________________________________________________________________________________

DEFINE VAR1='TESTE' (Define a Variavel VAR1)

SELECT PROD_GRCO_CD, PROD_CD, '&VAR1'


FROM GER_PRODUTO
WHERE PROD_GRCO_CD = &&CÓDIGO_GRUPO_COMERCIAL AND
PROD_CD LIKE 'STD%'
SQL> /
old 1: SELECT PROD_GRCO_CD, PROD_CD, '&VAR1'
new 1: SELECT PROD_GRCO_CD, PROD_CD, 'TESTE'
old 3: WHERE PROD_GRCO_CD = &&CÓDIGO_GRUPO_COMERCIAL AND PROD_CD
LIKE 'STD%'
new 3: WHERE PROD_GRCO_CD = 03 AND PROD_CD LIKE 'STD%'

PRO PROD_CD 'TEST


--- -------------------- -----
03 STD-115-120V150 TESTE
03 STD-115V100 TESTE
03 STD-115V135 TESTE
03 STD-115V15 TESTE
03 STD-115V150 TESTE
03 STD-115V180 TESTE
03 STD-115V200 TESTE
03 STD-115V22 TESTE

UNDEFINE VAR1 (Cancela a Definição da variavel VAR1)

Enter value for var1: TESTE APOS UNDEFINE


old 1: SELECT PROD_GRCO_CD, PROD_CD, '&VAR1'
new 1: SELECT PROD_GRCO_CD, PROD_CD, 'TESTE APOS UNDEFINE'
old 3: WHERE PROD_GRCO_CD = &&CÓDIGO_GRUPO_COMERCIAL AND PROD_CD
LIKE 'STD%'
new 3: WHERE PROD_GRCO_CD = 03 AND PROD_CD LIKE 'STD%'

PRO PROD_CD 'TESTEAPOSUNDEFINE'


--- -------------------- -------------------
03 STD-115-120V150 TESTE APOS UNDEFINE
03 STD-115V100 TESTE APOS UNDEFINE
03 STD-115V135 TESTE APOS UNDEFINE
03 STD-115V15 TESTE APOS UNDEFINE

27
ORACLE – SQLPLUS
_________________________________________________________________________________

SQL> DEFINE VAR1=5*12/3+1 (Define a Variavel VAR1)


SQL> L
1 SELECT PROD_GRCO_CD, PROD_CD, '&VAR1'
2 FROM GER_PRODUTO
3* WHERE PROD_GRCO_CD = &&CÓDIGO_GRUPO_COMERCIAL AND PROD_CD LIKE
'STD%'
SQL> /
old 1: SELECT PROD_GRCO_CD, PROD_CD, '&VAR1'
new 1: SELECT PROD_GRCO_CD, PROD_CD, '5*12/3+1'
old 3: WHERE PROD_GRCO_CD = &&CÓDIGO_GRUPO_COMERCIAL AND PROD_CD
LIKE 'STD%'
new 3: WHERE PROD_GRCO_CD = 03 AND PROD_CD LIKE 'STD%'

PRO PROD_CD '5*12/3+


--- -------------------- --------
03 STD-115-120V150 5*12/3+1
03 STD-115V100 5*12/3+1
03 STD-115V135 5*12/3+1
03 STD-115V15 5*12/3+1

SELECT PROD_GRCO_CD, PROD_CD, &VAR1


FROM GER_PRODUTO
WHERE PROD_GRCO_CD = &&CÓDIGO_GRUPO_COMERCIAL AND
PROD_CD LIKE 'STD%'
SQL> /
old 1: SELECT PROD_GRCO_CD, PROD_CD, &VAR1
new 1: SELECT PROD_GRCO_CD, PROD_CD, 5*12/3+1
old 3: WHERE PROD_GRCO_CD = &&CÓDIGO_GRUPO_COMERCIAL AND PROD_CD
LIKE 'STD%'
new 3: WHERE PROD_GRCO_CD = 03 AND PROD_CD LIKE 'STD%'

PRO PROD_CD 5*12/3+1


--- -------------------- ---------
03 STD-115-120V150 21
03 STD-115V100 21
03 STD-115V135 21
03 STD-115V15 21
03 STD-115V150 21
03 STD-115V180 21
03 STD-115V200 21

UNDEFINE VAR1 (Cancela a Definição da variavel VAR1)

28
ORACLE – SQLPLUS
_________________________________________________________________________________

ACCEPT

SQL> ACCEPT SENHA CHAR PROMPT 'Digite sua Senha' HIDE;


Digite sua Senha****
SQL> l
No lines in SQL buffer.

SQL> accept comm number noprompt


25

SQL> accept salario number prompt "valor do salario"


valor do salario1000

29
ORACLE – SQLPLUS
_________________________________________________________________________________

TRATAMENTO DE DATA E HORA ATRAVÉS DE VARIÁVEIS DO ORACLE

O Banco Oracle possui uma variável SYSDATE que contem a data e hora corrente, bem
como a variável USER que contem o usuário que esta conectado e uma tabela DUAL que
contem apenas uma linha.

- Exemplos para obtenção da data e hora atual, exibindo-as em


vários formatos:

SELECT SYSDATE FROM DUAL;


SYSDATE
---------
09-FEB-00

Select sysdate "Data Corrente" From Dual;


Data Corr
---------
09-FEB-00

Select lpad(to_char(sysdate),15) "Data Corrente" from Dual;


Data Corrente
---------------
09-FEB-00

SELECT TO_CHAR(SYSDATE,'DD-MON-YYYY') FROM DUAL;


TO_CHAR(SYS
-----------
08-FEB-2000

SELECT TO_CHAR(SYSDATE,'DD-MM-YYYY') FROM DUAL;


TO_CHAR(SY
----------
08-02-2000

Select to_char(sysdate, 'Month dd,yyyy') from dual


TO_CHAR(SYSDATE,'
-----------------
February 11,2000

30
ORACLE – SQLPLUS
_________________________________________________________________________________

Select to_char(sysdate, 'Day dd Month yyyy') from dual


TO_CHAR(SYSDATE,'DAYDDMONTH
---------------------------
Friday 11 February 2000

Select to_char(sysdate, 'fmMonth, Ddspth yyyy') from dual


TO_CHAR(SYSDATE,'FMMONTH,DDSPTH
-------------------------------
February, Eleventh 2000

Select to_char(sysdate, 'scc fmMonth, Ddspth yyyy') from dual


TO_CHAR(SYSDATE,'SCCFMMONTH,DDSPTHY
-----------------------------------
20 February, Eleventh 2000

Select to_char(sysdate, 'AM HH:MM:SS') from dual


TO_CHAR(SYS
-----------
PM 04:02:09

(Quarto do ano)
Select to_char(sysdate, 'day q dd/mm/yyyy ') from dual
TO_CHAR(SYSDATE,'DAYQDD
-----------------------
friday 1 11/02/2000

select to_char(sysdate, 'ddth ddTh day month MONTH q dd/mm/yyyy ') from dual
TO_CHAR(SYSDATE,'DDTHDDTHDAYMONTHMONTHQDD/MM/YYYY')
----------------------------------------------------
11th 11th friday february FEBRUARY 1 11/02/2000

SELECT TO_CHAR(SYSDATE,'HH:MM:SS') FROM DUAL


TO_CHAR(
--------
09:02:43

31
ORACLE – SQLPLUS
_________________________________________________________________________________

SQL> SELECT TO_CHAR(SYSDATE,'HH:MM:SS') Hora from Dual;


HORA
--------
09:02:13

SQL> SELECT TO_CHAR(SYSDATE,'HH:MM:SS') "Hora Certa" from Dual;


Hora Cer
--------
09:02:16

SELECT TO_CHAR(SYSDATE,'HH:MM:SS') Hora Certa from Dual


ERROR at line 1:
ORA-00923: FROM keyword not found where expected

SELECT USER FROM DUAL;


USER
------------------------------
ILUPAULO

SQL> DESC INV_INVENTARIO;


Name Null? Type
------------------------------- -------- ----
INVE_TICX_CD NOT NULL VARCHAR2(3)
INVE_ID NOT NULL NUMBER(9)
INVE_MARCA VARCHAR2(10)
INVE_MODELO VARCHAR2(10)
INVE_VERSAO VARCHAR2(10)
INVE_NR_SERIE NOT NULL VARCHAR2(20)
INVE_NR_NF VARCHAR2(20)
INVE_DT_COMPRA NOT NULL DATE
INVE_DT_GARANTIA DATE
INVE_DT_DEPRECIACAO DATE
INVE_QT_LICENCAS NUMBER(4)
INVE_TICR_CD NOT NULL VARCHAR2(3)
INVE_FORN_CD NOT NULL VARCHAR2(10)
INVE_TIIN_TICL_CD NOT NULL NUMBER(3)
INVE_TIIN_TICL_TINA_CD NOT NULL NUMBER(2)
INVE_TPIN_CD NOT NULL NUMBER(4)

32
ORACLE – SQLPLUS
_________________________________________________________________________________

SELECT INVE_NR_SERIE,INVE_DT_COMPRA FROM INV_INVENTARIO

INVE_NR_SERIE INVE_DT_C
-------------------- ---------
SIMULADOR 01-JAN-93
SH_PRECOS 01-JAN-97
PREVISAO_VENDA 01-JAN-98
CREPI 01-JAN-92
CALCULO_CUSTO 01-JAN-93
REL_ORACLE 01-JAN-94
SIST_EXPORTACAO 01-JAN-98
IFIS(MULTI) 01-JAN-98
CARPI 01-MAR-00
EASY 01-JAN-96
TRITON 01-JAN-95
GAT-LINK 01-JAN-96
PONTO_RH 01-JAN-95
IED-SERVIDOR 01-JAN-96
IC400 01-JAN-96
REG_COM 01-JAN-98
BNC 01-JAN-95
B.O. 01-JAN-98
PLANO_EXP 01-JAN-97
SAM_USUARIO 01-JAN-97
SAM_24HS 01-JAN-97

SELECT INVE_NR_SERIE,INVE_DT_COMPRA
FROM INV_INVENTARIO WHERE INVE_DT_COMPRA LIKE '%99%'

INVE_NR_SERIE INVE_DT_C
-------------------- ---------
AVALIACAO_DESEMPENHO 01-JAN-99
CODIGO_BARRAS 01-JAN-99
DOCUM_ISO9000 01-JAN-99
TOOL MANAGER 01-JAN-99
TECNICA 01-JAN-99
DIRETRIZES ADMINISTR 01-JAN-99
CALL MANAGER 01-JAN-99
12NC ORDER BOOK 01-JAN-99
RECEX 01-JAN-99

33
ORACLE – SQLPLUS
_________________________________________________________________________________

SELECT INVE_NR_SERIE,INVE_DT_COMPRA
FROM INV_INVENTARIO
WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MON-YYYY') LIKE '%1999%'

INVE_NR_SERIE INVE_DT_C
-------------------- ---------
AVALIACAO_DESEMPENHO 01-JAN-99
CODIGO_BARRAS 01-JAN-99
DOCUM_ISO9000 01-JAN-99
TOOL MANAGER 01-JAN-99
TECNICA 01-JAN-99
DIRETRIZES ADMINISTR 01-JAN-99
CALL MANAGER 01-JAN-99
12NC ORDER BOOK 01-JAN-99
RECEX 01-JAN-99

9 rows selected.

SELECT INVE_NR_SERIE,INVE_DT_COMPRA
FROM INV_INVENTARIO
WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MON-YYYY') LIKE '%'||&ANO||'%'

SQL> /

Enter value for ano: 1999


old 3: WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MON-YYYY') LIKE '%'||&ANO||'%'
new 3: WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MON-YYYY') LIKE '%'||1999||'%'

INVE_NR_SERIE INVE_DT_C
-------------------- ---------
AVALIACAO_DESEMPENHO 01-JAN-99
CODIGO_BARRAS 01-JAN-99
DOCUM_ISO9000 01-JAN-99
TOOL MANAGER 01-JAN-99
TECNICA 01-JAN-99
DIRETRIZES ADMINISTR 01-JAN-99
CALL MANAGER 01-JAN-99
12NC ORDER BOOK 01-JAN-99
RECEX 01-JAN-99

9 rows selected.

34
ORACLE – SQLPLUS
_________________________________________________________________________________

SELECT INVE_NR_SERIE "APLICACAO" ,


INVE_DT_COMPRA "DATA IMPLANTAÇÃO"
FROM INV_INVENTARIO
WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MON-YYYY') LIKE '%'||&ANO||'%'

SQL> /
Enter value for ano: 1997
old 3: WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MON-YYYY') LIKE '%'||&ANO||'%'
new 3: WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MON-YYYY') LIKE '%'||1997||'%'

APLICACAO DATA IMPL


-------------------- ---------
SH_PRECOS 01-JAN-97
PLANO_EXP 01-JAN-97
SAM_USUARIO 01-JAN-97
SAM_24HS 01-JAN-97
IZFM-INTERN Z.FRANCA 01-JAN-97
INDICADORES ECONOMIC 01-JAN-97
PEDIDO_APROVACAO 01-JAN-97
NIELSEN (INF*ACT W,) 01-JAN-97
CEN 01-JAN-97
CEP 01-JAN-97
RR 01-JAN-97
SOFTCONF 01-JAN-97
METROLOGIA 01-JAN-97
LOJA VIP 01-JAN-97
OCCO 01-JAN-97
SISCOMEX 01-JAN-97

16 rows selected.

35
ORACLE – SQLPLUS
_________________________________________________________________________________

SQL> RUN
SELECT INVE_NR_SERIE "APLICACAO" ,
INVE_DT_COMPRA "DATA IMPLANTAÇÃO"
FROM INV_INVENTARIO
WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') =
'&INFORME_DATA_DD_MM_AAAA'
Enter value for informe_data_dd_mm_aaaa: 01-01-1998
old 3: WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') =
'&INFORME_DATA_DD_MM_AAAA'
new 3: WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') = '01-01-1998'

APLICACAO DATA IMPL


-------------------- ---------
PREVISAO_VENDA 01-JAN-98
SIST_EXPORTACAO 01-JAN-98
IFIS(MULTI) 01-JAN-98
REG_COM 01-JAN-98
B.O. 01-JAN-98
CISP 01-JAN-98
ETIQUETA_LUMINARIAS 01-JAN-98
TENDERS 01-JAN-98
CURRICULO 01-JAN-98
CPBL 01-JAN-98
COMAR 01-JAN-98
ORCO 01-JAN-98
SBC 01-JAN-98
CAPS 01-JAN-98
LISA 01-JAN-98
PHIGERS 01-JAN-98

16 rows selected.

36
ORACLE – SQLPLUS
_________________________________________________________________________________

SELECT INVE_NR_SERIE "APLICACAO",


TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') "DATA IMPLANTACAO"
FROM INV_INVENTARIO
WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') =
'&INFORME_DATA_DD_MM_AAAA'

SQL> /
Enter value for informe_data_dd_mm_aaaa: 01-01-1999
old 3: WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') =
'&INFORME_DATA_DD_MM_AAAA'
new 3: WHERE TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') = '01-01-1999'

APLICACAO DATA IMPLANTACAO


-------------------- -------------------
AVALIACAO_DESEMPENHO 01-01-1999
CODIGO_BARRAS 01-01-1999
DOCUM_ISO9000 01-01-1999
TOOL MANAGER 01-01-1999
TECNICA 01-01-1999
DIRETRIZES ADMINISTR 01-01-1999
CALL MANAGER 01-01-1999
12NC ORDER BOOK 01-01-1999
RECEX 01-01-1999

9 rows selected.

SQL> RUN
SELECT INVE_NR_SERIE "APLICACAO",
TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') "DATA IMPLANTACAO"
FROM INV_INVENTARIO
WHERE TO_CHAR(INVE_DT_COMPRA,'YYYY') = '&INFORME_ANO_AAAA'
Enter value for informe_ano_aaaa: 1999
old 4: WHERE TO_CHAR(INVE_DT_COMPRA,'YYYY') = '&INFORME_ANO_AAAA'
new 4: WHERE TO_CHAR(INVE_DT_COMPRA,'YYYY') = '1999'

APLICACAO DATA IMPLANTACAO


-------------------- -------------------
AVALIACAO_DESEMPENHO 01-01-1999
CODIGO_BARRAS 01-01-1999
DOCUM_ISO9000 01-01-1999
TOOL MANAGER 01-01-1999
TECNICA 01-01-1999
DIRETRIZES ADMINISTR 01-01-1999
CALL MANAGER 01-01-1999
12NC ORDER BOOK 01-01-1999
RECEX 01-01-1999

9 rows selected.

37
ORACLE – SQLPLUS
_________________________________________________________________________________

SELECT INVE_NR_SERIE "APLICACAO",


TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') "DATA IMPLANTACAO"
FROM INV_INVENTARIO
WHERE INVE_DT_COMPRA =
TO_DATE('&INFORME_MONTH_DD_YYYY','MM DD,YYYY')

SQL> /
Enter value for informe_month_dd_yyyy: 01 01,1999
old 4: WHERE INVE_DT_COMPRA = TO_DATE('&INFORME_MONTH_DD_YYYY','MM
DD,YYYY')
new 4: WHERE INVE_DT_COMPRA = TO_DATE('01 01,1999','MM DD,YYYY')

APLICACAO DATA IMPLANTACAO


-------------------- -------------------
AVALIACAO_DESEMPENHO 01-01-1999
CODIGO_BARRAS 01-01-1999
DOCUM_ISO9000 01-01-1999
TOOL MANAGER 01-01-1999
TECNICA 01-01-1999
DIRETRIZES ADMINISTR 01-01-1999
CALL MANAGER 01-01-1999
12NC ORDER BOOK 01-01-1999
RECEX 01-01-1999

9 rows selected.

SELECT INVE_NR_SERIE "APLICACAO",


TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') "DATA IMPLANTACAO"
FROM INV_INVENTARIO
WHERE INVE_DT_COMPRA = TO_DATE('01 01,1999' ,'MM DD,YYYY')

SQL> /

APLICACAO DATA IMPLANTACAO


-------------------- -------------------
AVALIACAO_DESEMPENHO 01-01-1999
CODIGO_BARRAS 01-01-1999
DOCUM_ISO9000 01-01-1999
TOOL MANAGER 01-01-1999
TECNICA 01-01-1999
DIRETRIZES ADMINISTR 01-01-1999
CALL MANAGER 01-01-1999
12NC ORDER BOOK 01-01-1999
RECEX 01-01-1999

9 rows selected.

38
ORACLE – SQLPLUS
_________________________________________________________________________________

SQL> RUN
SELECT INVE_NR_SERIE "APLICACAO",
TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') "DATA IMPLANTACAO"
FROM INV_INVENTARIO
WHERE TO_CHAR(INVE_DT_COMPRA,'MM') = '&INFORME_MES_MM'

Enter value for informe_mes_mm: 03


old 4: WHERE TO_CHAR(INVE_DT_COMPRA,'MM') = '&INFORME_MES_MM'
new 4: WHERE TO_CHAR(INVE_DT_COMPRA,'MM') = '03'

APLICACAO DATA IMPLANTACAO


-------------------- -------------------
CARPI 01-03-2000

SELECT INVE_NR_SERIE "APLICACAO",


TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') "DATA IMPLANTACAO"
FROM INV_INVENTARIO
WHERE TO_CHAR(INVE_DT_COMPRA,'MM.YY') = '&INFORME_MES_YY'

SQL> /

Enter value for informe_mes_yy: 03.00


old 4: WHERE TO_CHAR(INVE_DT_COMPRA,'MM.YY') = '&INFORME_MES_YY'
new 4: WHERE TO_CHAR(INVE_DT_COMPRA,'MM.YY') = '03.00'

APLICACAO DATA IMPLANTACAO


-------------------- -------------------
CARPI 01-03-2000

SELECT INVE_NR_SERIE "APLICACAO",


TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') "DATA IMPLANTACAO"
FROM INV_INVENTARIO
WHERE TO_CHAR(INVE_DT_COMPRA,'MM/YY') = '&INFORME_MES_YY'
SQL> /
Enter value for informe_mes_yy: 03/00
old 4: WHERE TO_CHAR(INVE_DT_COMPRA,'MM/YY') = '&INFORME_MES_YY'
new 4: WHERE TO_CHAR(INVE_DT_COMPRA,'MM/YY') = '03/00'

APLICACAO DATA IMPLANTACAO


-------------------- -------------------
CARPI 01-03-2000

39
ORACLE – SQLPLUS
_________________________________________________________________________________

SELECT INVE_NR_SERIE "APLICACAO",


TO_CHAR(INVE_DT_COMPRA,'DD-MM-YYYY') "DATA IMPLANTACAO"
FROM INV_INVENTARIO
WHERE TO_CHAR(INVE_DT_COMPRA,'MMYY') = '&INFORME_MMYY'

SQL> /
Enter value for informe_mmyy: 0300
old 4: WHERE TO_CHAR(INVE_DT_COMPRA,'MMYY') = '&INFORME_MMYY'
new 4: WHERE TO_CHAR(INVE_DT_COMPRA,'MMYY') = '0300'

APLICACAO DATA IMPLANTACAO


-------------------- -------------------
CARPI 01-03-2000

40
ORACLE – SQLPLUS
_________________________________________________________________________________

FUNÇÕES

Recebem um ou mais argumentos e retornam um valor.

Executam cálculos, alteram dados, convertem tipos de dados, manipulam e alteram


formatos de dados.

LOWER ( dado) => Converte todos os caracteres para MINUSCULO

SELECT LOWER(DNAME), LOWER(`TESTE`) FROM DEPT;

UPPER ( dado) => Converte todos os caracteres para MAIUSCULO

SELECT UPPER(DNAME), UPPER(‘Teste’) FROM DEPT;

INITCAP ( dado) => Converte o primeiro caracter para MAIUSCULO e os demais


caracteres para MINUSCULO

SELECT INITCAP(DNAME), INITCAP(‘TESTE’), INITCAP(‘SÃO PAULO’) FROM DEPT;

SELECT ENAME, LOWER(ENAME), UPPER(ENAME), INITCAP(ENAME)


FROM EMP
ORDER BY ENAME;

LPAD( Dado, n, ‘String’) => Completa espaços, a partir da esquerda, de forma a


completar n posições. Para isso utiliza a String (se não
informada utiliza espaço em branco)

SELECT LPAD(DNAME,20,’*’), LPAD(DNAME,20), LPAD(DNAME,20,’.’)


FROM DEPT;

RPAD( Dado, n, ‘String’) => Completa espaços, a partir da direita, de forma a completar
n posições. Para isso utiliza a String (se não informada
utiliza espaço em branco)

SELECT RPAD(DNAME,20,’*’), RPAD(DNAME,20), RPAD(DNAME,20,’.’)


FROM DEPT;

41
ORACLE – SQLPLUS
_________________________________________________________________________________

SUBSTR ( Dado, posição, n) => Extrai um conjunto de n caracteres a partir da


posição inicial.

SELECT SUBSTR(‘TESTE’,3,2), SUBSTR(ENAME,3,2), ENAME


FROM EMP
ORDER BY ENAME

LTRIM (Dado , ‘string’) => Elimina da esquerda as ocorrências da string. Se nenhuma


string for informada elimina os espaços em branco.

SELECT DNAME, LTRIM(DNAME,’A’), LTRIM (DNAME,’AS’), LTRIM(DNAME,’ASOP’)


FROM DEPT;

RTRIM (Dado , ‘string’) => Elimina da direita as ocorrências da string. Se nenhuma string
for informada elimina os espaços em branco.

SELECT DNAME, RTRIM(DNAME,’G’), RTRIM (DNAME,’GHS’), RTRIM(DNAME,’ ’)


FROM DEPT;

TRANSLATE (Dado , atual , novo) => Traduz de string Atual para Novo. Se faltar
caracter em Novo o atual correspondente é
eliminado.

SELECT ENAME, TRANSLATE(ENAME,’C’,’P’) , JOB , TRANSLATE (JOB,’AR’,’IT’)


FROM EMP
ORDER BY ENAME;

REPLACE (Dado , Conjunto Atual , Conjunto Novo) =>

Substitui todo o Conjunto Atual por todo o Conjunto Novo. Se Conjunto Novo for omitido
o Conjunto Atual é eliminado.

SELECT JOB, REPLACE(JOB,’SALESMAN’,’VENDEDOR’) , ENAME ,


REPLACE(ENAME,’CO’,’PX’)
FROM EMP

42
ORACLE – SQLPLUS
_________________________________________________________________________________

LENGTH (Dado) => Fornece o numero de caracteres do Dado

SELECT ENAME, LENGTH(ENAME)


FROM EMP
ORDER BY ENAME

ROUND (Numero , n) => Arredonda o Numero com n casas decimais

SELECT ENAME, SAL, ROUND(SAL / 12 , 1), ROUND(9.943,2), ROUND(9.943)


FROM EMP
ORDER BY SAL

TRUNC (Numero , n) => Trunca o Numero com n casas decimais

SELECT ENAME, SAL, TRUNC(SAL / 12 , 1), TRUNC(9.943,2), TRUNC(9.943)


FROM EMP
ORDER BY SAL

CEIL (Numero) => Exibe o próximo Inteiro (TETO)

SELECT SAL, CEIL (SAL), CEIL(100.99), CEIL(-5.3), CEIL(12.66)


FROM EMP

FLOOR (numero) => Exibe o Inteiro Anterior ao Numero (PISO)

SELECT SAL, FLOOR (SAL), FLOOR(100.99), FLOOR(-5.3), FLOOR(12.66)


FROM EMP

POWER (Numero , potência) => Eleva um numero a uma potência

SELECT SAL, POWER(SAL,2), POWER(2 , 3)


FROM EMP

SQRT (Numero) => Extrai a Raiz Quadrada de um numero

SELECT SAL, SQRT(SAL), SQRT(4)


FROM EMP

SIGN (Numero) => Resulta: –1 se Numero < 0 , 0 se Numero = 0 e 1 se o numero > 0

SELECT SAL, COMM, SAL-NVL(COMM,0),


SIGN(SAL - NVL(COMM,0)) , SIGN(NVL(COMM,0) - SAL)

43
ORACLE – SQLPLUS
_________________________________________________________________________________

ABS (Numero) => Exibe o valor absoluto do Numero

SELECT SAL, COMM, SAL-NVL(COMM,0), ABS(-10), ABS(10),


ABS(SAL - NVL(COMM,0)) , ABS(NVL(COMM,0) - SAL)

MOD (Num1,Num2) => Exibe o valor do resto da divisão: Num1 / Num2

SELECT SAL, COMM, SAL / NVL(COMM,0), MOD(4,3)


MOD(SAL / NVL(COMM,0)) , MOD(NVL(COMM,0) / SAL)

MONTHS_BETWEEN (Data1,Data2) => Exibe a diferença em meses entre duas datas

SELECT MONTHS_BETWEEN (SYSDATE, HIREDATE),


MONTHS_BETWEEN(‘01-JAN-84’ , ‘05-NOV-98’)
FROM EMP

ADD_MONTHS (Data,n) => Adiciona meses a uma Data (-n subtrai)

SELECT HIREDATE, ADD_MONTHS (SYSDATE, 1),


ADD_MONTHS ( ‘05-NOV-98’, 1) ,
ADD_MONTHS (SYSDATE, -2)
FROM EMP

DATA + NUMERO => ADICIONA DIAS A DATA


DATA – NUMERO => SUBTRAI DIAS DA DATA
DATA1 - DATA2 => DIFERENÇA EXIBIDA EM DIAS
DATA + DIAS / 24 => ADICIONA HORAS A DATA

SELECT HIREDATE, HIREDATE+5, HIREDATE – 5, SYSDATE-HIREDATE


FROM EMP

LAST_DAY (Data) => Exibe o último dia do mês da Data

SELECT SYSDATE, LAST_DAY (SYSDATE),


LAST_DAY ( ‘05-NOV-98’) ,
HIREDATE, LAST_DAY (HIREDATE)
FROM EMP

44
ORACLE – SQLPLUS
_________________________________________________________________________________

TO_CHAR( Dado , ‘formato’) => Converte um numero ou Data para Caracter no formato

SELECT TO_CHAR(SYSDATE, ‘DAY, DDTH MONTH YYYY’)


FROM DUAL;

SELECT TO_CHAR(SYSDATE, ‘HH:MI:SS’)


FROM DUAL;

SELECT TO_CHAR(SAL, ’$99.999’)


FROM EMP;

TO_NUMBER( string ) => Converte dados do tipo caracter para um número

SELECT EMPNO, ENAME, JOB, SAL


FROM EMP
WHERE SAL > TO_NUMBER(‘1500’)

TO_DATE( ‘string’ , ‘formato’) => Converte a string que representa uma data para um
valor
tipo data, de acordo com o formato.

SELECT EMPNO, ENAME, HIREDATE


FROM EMP
WHERE HIREDATE = TO_DATE(‘JUNE 4, 1984’,’Month dd,yyyy’);

DECODE (CAMPO, VALOR, VERDADE, FALSO)


Converte o conteúdo do campo para VERDADE caso campo = valor ;
Ou converte para FALSO caso campo < > valor

SELECT DECODE(DEPTNO,10,’VERDADEIRO’,’FALSO’)
FROM EMP

LN (N) Retorna o logaritmo natural de N

LOG (M,N) Retorna o logaritmo de base M de N

SIN (N) Retorna o Seno de N

TAN (N) Retorna a Tangente de N

45
ORACLE – SQLPLUS
_________________________________________________________________________________

Primeiro e Ultimo dia da semana

SELECT TRUNC(sysdate,'D')+1 FROM DUAL

TRUNC(SYS
---------
24-JUN-02

SELECT TRUNC(sysdate,'D')+5 FROM DUAL


/

TRUNC(SYS
---------
28-JUN-02 (Sexta-feira)

SELECT TRUNC(to_date('26/06/2002','dd/mm/yyyy'),'D')+5 FROM DUAL


/

TRUNC(TO_
---------
28-JUN-02

SELECT TRUNC(to_date('26/06/2002','dd/mm/yyyy'),'D')+1 FROM DUAL


/

TRUNC(TO_
---------
24-JUN-02 (Segunda-feira)

46
ORACLE – SQLPLUS
_________________________________________________________________________________

FUNÇÕES DE GRUPO

Estas funções retornam resultados sobre grupos de linhas.

AVG (CAMPO) => Retorna a média do valor

SELECT AVG(SAL) FROM EMP

SELECT JOB, AVG(SAL) FROM EMP


GROUP BY JOB

SELECT JOB, AVG(SAL) FROM EMP


WHERE JOB < > ‘MANAGER’
GROUP BY JOB

SELECT DEPTNO, JOB, AVG(SAL)


FROM EMP
WHERE JOB < > ‘MANAGER’
GROUP BY DEPTNO, JOB

COUNT (*) => Conta o Numero de Ocorrências (linhas selecionadas para o grupo)

SELECT COUNT(*) FROM EMP

SELECT COUNT(*) FROM EMP WHERE DEPTN0 = 20

MAX (CAMPO) => Retorna o maior valor do campo

SELECT MAX(SAL), JOB


FROM EMP
GROUP BY JOB;

MIN (CAMPO) => Retorna o menor valor do campo

SELECT MIN(SAL) FROM EMP WHERE JOB=’CLERK’

SELECT MIN(SAL), JOB


FROM EMP
GROUP BY JOB;

SUM (CAMPO) => Retorna a soma dos valores do campo

SELECT SUM(SAL), COUNT(*), SUM(SAL)/COUNT(*), AVG(SAL)


FROM EMP;

47
ORACLE – SQLPLUS
_________________________________________________________________________________

STDDEV (CAMPO) => Retorna o desvio padrão

SELECT DEPTNO, STDDEV(SAL)


FROM EMP
GROUP BY DEPTNO;

VARIANCE(CAMPO) => Retorna a variância

SELECT DEPTNO, VARIANCE(SAL)


FROM EMP
GROUP BY DEPTNO;

HAVING
Utilize Having para especificar quais grupos devem ser exibidos.

Por exemplo, para exibir a média salarial dos departamentos com mais do que 3
funcionários:
SELECT DEPTNO, AVG(SAL)
FROM EMP
GROUP BY DEPTNO
HAVING COUNT(*) > 3

Outros Exemplos:

SELECT SUM(SAL), COUNT(*), SUM(SAL)/COUNT(*), JOB


FROM EMP
GROUP BY JOB
HAVING COUNT(*) > 3 AND AVG(SAL) > 1200;

SELECT JOB, MAX(SAL)


FROM EMP
GROUP BY JOB
HAVING MAX(SAL) >=3000

ATENÇÃO: WHERE ATUA SOBRE LINHAS


HAVING ATUA SOBRE GRUPOS DE LINHAS
(RESULTADO DE FUNÇÕES DE GRUPO)

SELECT JOB, AVG(SAL)


FROM EMP
WHERE JOB < > ‘MANAGER’
GROUP BY JOB;

SEQUÊNCIA DAS CLÁUSULAS QUANDO USAMOS SELECT

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

48
ORACLE – SQLPLUS
_________________________________________________________________________________

JUNÇÕES (JOIN)

JUNÇÃO POR IQUALDADE (EQUI-JOIN)

O relacionamento entre as tabelas ocorre por intermedio de colunas idênticas em ambas


as tabelas.

Exemplo:

- DEPTNO tem o mesmo valor em ambas as tabelas

SELECT DEPT.DEPTNO, EMP.ENAME, EMP.JOB, DEPT.DNAME


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

- Se remover o WHERE ocorre PRODUTO CARTESIANO

- Número mínimo de condições de junção = número de tabelas – 1

JUNÇÃO POR NÃO IQUALDADE (NON-EQUI-JOIN)

Ocorre quando o relacionamento entre as tabelas ocorre apesar de não existir campos em
comum entre elas.

SELECT E.ENAME, E.SAL, S.GRADE


FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;
(As tabelas não tem campo em comum mas pela faixa salarial foi possível a amarração)

JUNÇÃO EXTERNA (OUTER-JOIN)

Quando realizamos o EQUI-JOIN as linhas sem junção não foram exibidas

Para se resolver essa situação (Exibir linhas sem junção) coloca-se o sinal (+) a direita da
coluna da tabela que não contenha valor correspondente na coluna da outra tabela.
Uma linha null é inserida para compor o resultado do select

SELECT E.ENAME, D.DEPTNO, D.DNAME


FROM EMP E, DEPT D
WHERE E.DEPTNO (+) = D.DEPTNO

49
ORACLE – SQLPLUS
_________________________________________________________________________________

AUTO-RELACIONAMENTO (SELF-JOIN)

Quando juntamos uma tabela a ela mesma com a utilização de apelidos, permitindo juntar
linhas da tabela a outras linhas da mesma tabela.

SELECT E.ENAME “NOME FUNCIONARIO” ,


E.SAL “SALARIO FUNCIONARIO” ,
C.ENAME “NOME CHEFE” ,
C.SAL “SALARIO CHEFE”
FROM EMP E, EMP C
WHERE E.MGR = C.EMPNO AND E.SAL < C.SAL;

UNIÃO (UNION)

SELECT DEPTNO FROM EMP


UNION
SELECT DEPTNO FROM DEPT
(Não exibe repetição de departamentos)

SELECT DEPTNO FROM EMP


UNION ALL
SELECT DEPTNO FROM DEPT
(Exibe repetição de departamentos)

INTERSECÇÃO (INTERSECT)

SELECT DEPTNO FROM EMP (Ocorrências do primeiro select que


existam
INTERSECT também no segundo select)
SELECT DEPTNO FROM DEPT

DIFERENÇA (MINUS)

SELECT DEPTNO FROM EMP (Ocorrências do primeiro select menos


MINUS (as mesmas ocorrências no segundo
select)
SELECT DEPTNO FROM DEPT

SELECT DEPTNO FROM DEPT


MINUS
SELECT DEPTNO FROM EMP

50
ORACLE – SQLPLUS
_________________________________________________________________________________

FULL OUTER JOIN

BREAK ON D.DNAME
SELECT D.DNAME, E.EMPNO
FROM DEPT D, EMP E
WHERE D.DEPTNO = E.DEPTNO(+)
ORDER BY 1,2

UNION

SELECT D.DNAME, E.EMPNO


FROM DEPT D, EMP E
WHERE D.DEPTNO(+) = E.DEPTNO
ORDER BY 1,2

REGRAS PARA A UTILIZAÇÃO DA ALGEBRA RELACIONAL

 SELECIONAR O MESMO NUMERO DE COLUNAS


 COLUNAS COM O MESMO TIPO DE DADO
 LINHAS DUPLICADAS SÃO ELIMINADAS
 OS NOMES DAS COLUNAS DO 1. SELECT APARECEM NO RESULTADO
 ORDER BY PODE SER USADO NO ULTIMO SELECT

Union

Importante: Se houver linhas iguais o Union retornará somente uma linha. Se desejar que
retorne todas acrescentar o comando all (Union All).

Intersection

Difference (SQL - Minus)

51
ORACLE – SQLPLUS
_________________________________________________________________________________

52
ORACLE – SQLPLUS
_________________________________________________________________________________

SUB-SELECT

Uma Sub_Consulta é um comando select aninhado dentro de outro comando select

SELECT ENAME FROM EMP


WHERE SAL = (SELECT MAX(SAL) FROM EMP);

(Utilizamos = portanto pressupomos que retornará apenas uma linha)

SELECT ENAME FROM EMP


WHERE SAL IN (SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO);

(Utilizamos IN portanto pressupomos que retornará várias linhas)

É muito útil quando se necessita selecionar linhas de uma tabela com uma condição que
depende de dados da própria tabela.

SELECT ENAME, SAL, DEPTNO FROM EMP


WHERE (SAL, DEPTNO) IN
(SELECT MAX(SAL), DEPTNO FROM EMP GROUP BY DEPTNO);

(Retorna os Funcionários que detém o menor salário e seus respectivos departamentos)

SELECT DEPTNO, AVG(SAL) FROM EMP


HAVING AVG(SAL) > (SELECT AVG(SAL) FROM EMP WHERE DEPTNO=30)

53
ORACLE – SQLPLUS
_________________________________________________________________________________

DICIONÁRIO DE DADOS

CONCEITO

O dicionário de dados é um conjunto de tabelas que o usuário pode consultar através de


visões. Nele são contidos todos os dados sobre o banco de dados.

Conjunto de Tabelas e visões R/O.


Informações sobre estrutura lógica e física do BD
Usuários válidos, restrições de integridade, espaço alocado e livre para cada objeto.

USER => Referente ao OWNER (Dono) do objeto


ALL => Objetos que o usuário possui acesso independente de ser o dono

VISÕES MAIS FREQUENTES

- DICTIONARY
(Descreve o conteúdo de cada tabela do dicionário de dados)

- DICT_COLUMNS
(Descreve o conteúdo de cada campo de cada tabela do dicionário de dados)

- USER_OBJECTS
(Contem nome, tipo, status (Ativo ou não ativo) e outras informações dos objetos criados
pelo usuário)

- USER_CONSTRAINTS
(Contem informações sobre as constraints criadas pelo usuário)

- USER_TABLES
(Contem nome e outras informações sobre Tabelas Criadas pelo usuário)

- USER_CONS_COLUMNS
(Informação sobre quais campos de quais tabelas possuem quais
constraints)

- USER_TAB_COMMENTS
(Contem comentários / descrição referente ao conteúdo das tabelas)

- USER_COL_COMMENTS
(Contem comentários / descrição referente ao conteúdo dos campos das tabelas )

- USER_TRIGGERS
(Contem nome, codigo e outras informações sobre as Triggers criadas pelo usuário)

- USER_VIEWS
(Contem nome, codigo e outras informações sobre as visões criadas pelo usuário)

54
ORACLE – SQLPLUS
_________________________________________________________________________________

ALL_OBJECTS

Objetos do Banco Oracle que podem ser acessados pelo usuário


(Visões, Sinonimos, Sequencias, Procedures, Funções, Pacotes, Indices, Gatilhos e
Tabelas)

SELECT OBJECT_NAME, OBJECT_TYPE, OWNER FROM ALL_OBJECTS


WHERE OWNER = 'ADMCASE'

OBJECT_NAME OBJECT_TYPE OWNER


------------------------------ --------------- ------------
RM_PROPERTY_EXTENSIONS VIEW ADMCASE
RM_PROPERTY_MAPS TABLE ADMCASE
RM_PROPERTY_RANGES VIEW ADMCASE
RM_REPOSITORIES VIEW ADMCASE
RM_SQL_COLUMNS TABLE ADMCASE
RM_SQL_ROW_TYPES TABLE ADMCASE
RM_SQL_TABLES TABLE ADMCASE
RM_TEXT_LINES VIEW ADMCASE
SDD_DIAGRAM_SEGMENTS TABLE ADMCASE
SDD_ELEMENTS TABLE ADMCASE
SDD_EL_SEQ SEQUENCE ADMCASE
XTNV_SDDV_STRUCTURE_ELEMENTS TABLE ADMCASE

SQL> DESC ALL_OBJECTS;


Name Null? Type
------------------------------- -------- ----
OWNER NOT NULL VARCHAR2(30)
OBJECT_NAME NOT NULL VARCHAR2(30)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NOT NULL NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE NOT NULL VARCHAR2(15)
CREATED NOT NULL DATE
LAST_DDL_TIME NOT NULL DATE
TIMESTAMP NOT NULL VARCHAR2(19)
STATUS NOT NULL VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)

55
ORACLE – SQLPLUS
_________________________________________________________________________________

SQL> select distinct OBJECT_TYPE from all_objects;

OBJECT_TYPE
------------------
FUNCTION
INDEX
PACKAGE
PACKAGE BODY
PROCEDURE
SEQUENCE
SYNONYM
TABLE
TRIGGER
VIEW

USER_OBJECTS

Objetos do Banco Oracle que foram criados pelo usuário


(Visões, Sinonimos, Sequencias, Procedures, Funções, Pacotes, Indices, Gatilhos e
Tabelas)

SQL> desc user_objects;


Name Null? Type
------------------------------- -------- ----
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(18)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)

SQL> select distinct OBJECT_TYPE from user_objects;

OBJECT_TYPE
------------------
INDEX
PACKAGE
PACKAGE BODY
SEQUENCE
SYNONYM
TABLE
TRIGGER
56
ORACLE – SQLPLUS
_________________________________________________________________________________

7 rows selected.

57
ORACLE – SQLPLUS
_________________________________________________________________________________

USER_TABLES

Tabelas do Usuário (Criadas pelo usuário)

SELECT TABLE_NAME FROM USER_TABLES


/
TABLE_NAME
------------------------------
ANO_INP
BG
CAB_ESP_TIPO
CAB_PED
CAD_ACE
CAD_REG2
CAD_REG7
CAD_REJ
CALENDAR
CARGA
CHECK_PROC_REGI
DESCONTO

SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME LIKE '%GER%';


TABLE_NAME
------------------------------
LOGERRO

58
ORACLE – SQLPLUS
_________________________________________________________________________________

(A única constraint que pode ser observada no DESCRIBE é NOT NULL)

SQL> DESC USER_TABLES


Name Null? Type
------------------------------- -------- ----
TABLE_NAME NOT NULL VARCHAR2(30)
TABLESPACE_NAME VARCHAR2(30)
CLUSTER_NAME VARCHAR2(30)
IOT_NAME VARCHAR2(30)
PCT_FREE NUMBER
PCT_USED NUMBER
INI_TRANS NUMBER
MAX_TRANS NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
PCT_INCREASE NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
LOGGING VARCHAR2(3)
BACKED_UP VARCHAR2(1)
NUM_ROWS NUMBER
BLOCKS NUMBER
EMPTY_BLOCKS NUMBER
AVG_SPACE NUMBER
CHAIN_CNT NUMBER
AVG_ROW_LEN NUMBER
AVG_SPACE_FREELIST_BLOCKS NUMBER
NUM_FREELIST_BLOCKS NUMBER
DEGREE VARCHAR2(10)
INSTANCES VARCHAR2(10)
CACHE VARCHAR2(5)
TABLE_LOCK VARCHAR2(8)
SAMPLE_SIZE NUMBER
LAST_ANALYZED DATE
PARTITIONED VARCHAR2(3)
IOT_TYPE VARCHAR2(12)
TEMPORARY VARCHAR2(1)
NESTED VARCHAR2(3)
BUFFER_POOL VARCHAR2(7)

59
ORACLE – SQLPLUS
_________________________________________________________________________________

ALL_TABLES

Tabelas do Banco Oracle que podem ser acessadas pelo usuário

SQL> DESC ALL_TABLES;


Name Null? Type
------------------------------- -------- ----
OWNER NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
TABLESPACE_NAME NOT NULL VARCHAR2(30)
CLUSTER_NAME NOT NULL VARCHAR2(30)
IOT_NAME NOT NULL VARCHAR2(30)
PCT_FREE NOT NULL NUMBER
PCT_USED NOT NULL NUMBER
INI_TRANS NOT NULL NUMBER
MAX_TRANS NOT NULL NUMBER
INITIAL_EXTENT NUMBER
NEXT_EXTENT NUMBER
MIN_EXTENTS NUMBER
MAX_EXTENTS NUMBER
PCT_INCREASE NUMBER
FREELISTS NUMBER
FREELIST_GROUPS NUMBER
LOGGING NOT NULL VARCHAR2(3)
BACKED_UP NOT NULL VARCHAR2(1)
NUM_ROWS NUMBER
BLOCKS NUMBER
EMPTY_BLOCKS NUMBER
AVG_SPACE NUMBER
CHAIN_CNT NUMBER
AVG_ROW_LEN NUMBER
AVG_SPACE_FREELIST_BLOCKS NUMBER
NUM_FREELIST_BLOCKS NUMBER
DEGREE VARCHAR2(10)
INSTANCES VARCHAR2(10)
CACHE NOT NULL VARCHAR2(5)
TABLE_LOCK NOT NULL VARCHAR2(8)
SAMPLE_SIZE NUMBER
LAST_ANALYZED DATE
PARTITIONED NOT NULL VARCHAR2(3)
IOT_TYPE NOT NULL VARCHAR2(12)
TEMPORARY VARCHAR2(1)
NESTED NOT NULL VARCHAR2(3)
BUFFER_POOL VARCHAR2(7)

60
ORACLE – SQLPLUS
_________________________________________________________________________________

USER_TAB_COMMENTS

Contem comentários / descrição referente ao conteúdo das tabelas

SQL> DESC USER_TAB_COMMENTS


Name Null? Type
------------------------------- -------------- --------------------
TABLE_NAME NOT NULL VARCHAR2(30)
TABLE_TYPE VARCHAR2(11)
COMMENTS VARCHAR2(4000)

SELECT DISTINCT TABLE_TYPE FROM USER_TAB_COMMENTS;

TABLE_TYPE
-----------
TABLE
VIEW

Para consultar, basta um simples select:

 SELECT TABLE_NAME, SUBSTR(COMMENTS,1,200)


FROM USER_TAB_COMMENTS

TABLE_NAME SUBSTR(COMMENTS,1,200)
--------------------------- --------------------------------------------------------------------------------------
MLOG$_GER_CLIE snapshot log for master table ADMGER.GER_CLIENTE_ENTREGA
MLOG$_GER_CLIE snapshot log for master table ADMGER.GER_CLIENTE_GRUPO
MLOG$_GER_MUNI snapshot log for master table ADMGER.GER_MUNICIPIO

Para inserir comentários, nas tabelas, utilize o comando:

 COMMENT ON TABLE ADMLOG.TAB1 IS ‘Comentario a ser associado a tabela’

61
ORACLE – SQLPLUS
_________________________________________________________________________________

USER_COL_COMMENTS

Contem comentários / descrição referente ao conteúdo dos campos das tabelas

SQL> DESC USER_COL_COMMENTS


Name Null? Type
------------------------------- -------- ------------------------
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME NOT NULL VARCHAR2(30)
COMMENTS VARCHAR2(4000)

Para consultar, basta um simples select:

 SELECT TABLE_NAME, COLUMN_NAME, SUBSTR(COMMENTS,1,200)


FROM USER_COL_COMMENTS

TABLE_NAME COLUMN_NAME SUBSTR(COMMENTS,1,200)


--------------------- ------------------------------ -------------------------------------
GER_CLIENTE CLIE_NR_DDDFAX Codigo DDD do Fax
GER_CLIENTE CLIE_NR_FAX Numero do Fax
GER_CLIENTE CLIE_BAIRRO Bairro
GER_CLIENTE CLIE_CIDADE Cidade
GER_CLIENTE CLIE_CEP CEP
GER_CLIENTE CLIE_NR_IE Numero da Inscricao Estadual
GER_CLIENTE CLIE_QTD_FUNC Quantidade de Funcionarios
GER_CLIENTE CLIE_NOM_APELIDO Nome Apelido
GER_CLIENTE CLIE_CLASSE_ABC Classe ABC
GER_CLIENTE CLIE_NOM_CONTATO Nome do Contato Comercial
GER_CLIENTE CLIE_CLGR_APELIDO Apelido do Cliente
GER_CLIENTE CLIE_ID_IE Numero da Inscricao Estadual

Para inserir comentários, nos campos da tabela, utilize o comando:

 COMMENT ON COLUMN ADMLOG.TAB1.CAMPO1


IS ‘Comentario a ser associado ao campo da tabela’
campo

Schema (login) tabela

62
ORACLE – SQLPLUS
_________________________________________________________________________________

USER_CONSTRAINTS

Contem informações sobre as constraints criadas pelo usuário

SQL> DESC USER_CONSTRAINTS;


Name Null? Type
------------------------------- -------- ----
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
CONSTRAINT_TYPE VARCHAR2(1)
TABLE_NAME NOT NULL VARCHAR2(30)
SEARCH_CONDITION LONG
R_OWNER VARCHAR2(30)
R_CONSTRAINT_NAME VARCHAR2(30)
DELETE_RULE VARCHAR2(9)
STATUS VARCHAR2(8)
DEFERRABLE VARCHAR2(14)
DEFERRED VARCHAR2(9)
VALIDATED VARCHAR2(13)
GENERATED VARCHAR2(14)
BAD VARCHAR2(3)
LAST_CHANGE DATE

COLUMN TABLE_NAME FORMAT A14


COLUMN CONSTRAINT_NAME FORMAT A24
COLUMN SEARCH_CONDITION FORMAT A30
SET WRAP OFF (trunca o conteudo não quebra p/ a linha seguinte)

SELECT CONSTRAINT_NAME, SEARCH_CONDITION, status


FROM USER_CONSTRAINTS
WHERE TABLE_NAME ='GER_PRODUTO'
SQL> /

CONSTRAINT_NAME SEARCH_CONDITION STATUS


------------------------ ------------------------------ -------
SYS_C0010239 "PROD_CD" IS NOT NULL ENABLED
SYS_C0010240 "PROD_GRCO_CD" IS NOT NULL ENABLED
SYS_C0010241 "PROD_CD_12NC" IS NOT NULL ENABLED
AVCON_56581_PROD__001 PROD_ID_PREVISAO IN ('S', 'N') ENABLED
AVCON_56581_PROD__000 PROD_ID_ATIVO IN ('S', 'N') ENABLED
SYS_C0010244 prod_id_ativo BETWEEN 'S' AND ENABLED
PROD_PK ENABLED
SYS_C0010246 prod_id_ativo BETWEEN 'S' AND ENABLED
SYS_C0010247 prod_id_ativo BETWEEN 'S' AND ENABLED
PROD_DEPO_FK ENABLED
PROD_GRCO_FK ENABLED
PROD_PRCL_FK ENABLED
PROD_PRSU_FK ENABLED
SYS_C0024498 "PROD_EAN13_CD" IS NOT NULL ENABLED
63
ORACLE – SQLPLUS
_________________________________________________________________________________

SYS_C0024499 "PROD_DUN14_CD" IS NOT NULL ENABLED

15 rows selected.

64
ORACLE – SQLPLUS
_________________________________________________________________________________

USER_CONS_COLUMNS

Informação sobre constraints associadas a campos de tabelas

SQL> desc user_cons_columns


Name Null? Type
------------------------------- -------- ----
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
POSITION NUMBER

SELECT SUBSTR(OWNER,1,10) OWNER,


SUBSTR(CONSTRAINT_NAME,1,20) CONSTRAINT_NAME,
SUBSTR(TABLE_NAME,1,15) TABLE_NAME,
SUBSTR(COLUMN_NAME,1,20) COLUMN_NAME
FROM USER_CONS_COLUMNS

OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME


---------- ------------------------ -------------- -------------
ADMGER EMPR_PAIS_FK GER_EMPRESA EMPR_PAIS_CD
ADMGER EMPR_PK GER_EMPRESA EMPR_CD
ADMGER ESTO_DEPO_FK GER_ESTOQUE ESTO_DEPO_CD
ADMGER ESTO_PK GER_ESTOQUE ESTO_PROD_CD
ADMGER ESTO_PK GER_ESTOQUE ESTO_DEPO_CD
ADMGER ESTO_PK GER_ESTOQUE ESTO_DT
ADMGER ESTO_PROC_FK GER_ESTOQUE ESTO_PROC_CD
ADMGER ESTO_PROD_FK GER_ESTOQUE ESTO_PROD_CD
ADMGER FILI_PK GER_FILIAL FILI_CD
ADMGER FILI_REGI_FK GER_FILIAL FILI_REGI_CD
ADMGER FK_ESTO_DEPO GER_ESTOQUE_NO ESTO_DEPO_CD
ADMGER FK_ESTO_PROC GER_ESTOQUE_NO ESTO_PROC_CD
ADMGER FK_ESTO_PROD GER_ESTOQUE_NO ESTO_PROD_CD

SELECT * FROM USER_CONS_COLUMNS


WHERE CONSTRAINT_NAME = 'PECO_PK'
/

65
ORACLE – SQLPLUS
_________________________________________________________________________________

OUTRAS VISÕES

 SELECT INDEX_NAME, TABLE_OWNER, TABLE_NAME, STATUS


FROM USER_INDEXES;

INDEX_NAME TABLE_OWNER TABLE_NAME STATUS


---------------------------- -------------------------- -------------- -----------
ARQU_PK ADMGER INT_ARQUIVO VALID
CANA_PK ADMGER GER_CANAL VALID
CLIE_CLGR_FK_I ADMGER GER_CLIENTE VALID
CLIE_COPA_FK_I ADMGER GER_CLIENTE VALID
CLIE_COVE_FK_I ADMGER GER_CLIENTE VALID
CLIE_FILI_FK_I ADMGER GER_CLIENTE VALID
CLIE_MUNI_FK_I ADMGER GER_CLIENTE VALID
CLIE_PAIS_FK_I ADMGER GER_CLIENTE VALID
CLIE_PK ADMGER GER_CLIENTE VALID

 SELECT USERNAME, USER_ID, CREATED, DEFAULT_TABLESPACE


FROM USER_USERS;

USERNAME USER_ID CREATED DEFAULT_TABLESPACE


--------------------- ------------- -------------- ----------------------------------
ADMABC 35 07-APR-01 TSDGER01

 SELECT USERNAME , PASSWORD FROM DBA_USERS;

USERNAME PASSWORD
------------------------------ ---------------------------
ABC 6A3BA23E07892D81
DEF A033D214D2321CED

select view_name, text from user_views


where view_name LIKE '%PEN%'
/

66
ORACLE – SQLPLUS
_________________________________________________________________________________

PSEUDO-COLUNAS

NOMESEQUENCE.NEXTVAL => Próximo número da Sequence


NOMESEQUENCE.CURRVAL => Número atual da Sequence
NULL => Nulo
ROWID => Identificador da Linha
ROWNUM => Numero de cada linha conforme selecionada
UID => Identificação do Usuário
USER => Identificação do Usuário

SELECT UID, USER FROM DUAL;

329 ADMSIM

1 row selected.

67
ORACLE – SQLPLUS
_________________________________________________________________________________

ROWNUM e ROWID

1* select rownum,veND_NR_PEDIDO from ord_venda


SQL> /

ROWNUM VEND_NR_PEDIDO
--------- --------------
1 3
2 4
3 5
4 6
5 7
6 8
7 9
8 10
9 11
10 12
11 13

11 rows selected.

SQL> l
1* select rownum,veND_NR_PEDIDO from ord_venda
SQL> i where rownum <3;
SQL> /

ROWNUM VEND_NR_PEDIDO
--------- --------------
1 3
2 4

SQL> select rowid from ord_venda;


ROWID
------------------
AAAD4oAAFAAAWORAAD
AAAD4oAAFAAAWORAAE
AAAD4oAAFAAAWORAAF
AAAD4oAAFAAAWORAAG
AAAD4oAAFAAAWORAAH
AAAD4oAAFAAAWORAAJ
AAAD4oAAFAAAWORAAK
AAAD4oAAFAAAWORAAA
AAAD4oAAFAAAWORAAB
AAAD4oAAFAAAWORAAC
AAAD4oAAFAAAWORAAI

11 rows selected.

68
ORACLE – SQLPLUS
_________________________________________________________________________________

INSERINDO, ALTERANDO E EXCLUINDO LINHAS

Inserindo Registros na Tabela de ESTADOS

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('AC','ACRE');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('AL','ALAGOAS');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('AM','AMAZONAS');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('AP','AMAPA');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('BA','BAHIA');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('CE','CEARA');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('DF','DISTRITO FEDERAL');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('ES','ESPIRITO SANTO');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('FN','FERNANDO DE NORONHA');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('GO','GOIAS');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('MA','MARANHAO');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('MG','MINAS GERAIS');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('MS','MATO GROSSO DO SUL');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('MT','MATO GROSSO');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('PA','PARA');

69
ORACLE – SQLPLUS
_________________________________________________________________________________

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('PB','PARAIBA');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('PE','PERNAMBUCO');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('PI','PIAUI');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('PR','PARANA');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('RJ','RIO DE JANEIRO');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('RN','RIO GRANDE DO NORTE');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('RO','RONDONIA');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('RR','RORAIMA');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('RS','RIO GRANDE DO SUL');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('SC','SANTA CATARINA');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('SE','SERGIPE');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('SP','SAO PAULO');

INSERT INTO EXP_ESTADOS(CD_UF,DS_UF)


VALUES('TO','TOCANTINS');

insert into admgerlum.ger_produto


select * from produto_adicional_lum

insert into lixo


select prod_cd from produto

insert into lixo


select cove_cd from ger_consultor_venda

select ‘’’’ || ‘ ” ’ || ‘Teste’ || ‘’’’ || ‘ ” ’ from dual

70
ORACLE – SQLPLUS
_________________________________________________________________________________

UPDATE TESTE
SET CP1 = NULL,
CP2 = 1,
CP3 = 2
WHERE CITY = ‘SAO PAULO’

UPDATE TESTE
SET CP1 = NULL,
(CP2,CP3) = (SELECT TEMP, TEMP-10
FROM TESTE2
WHERE CITY = `SANTOS`)
WHERE CITY = ‘SAO PAULO’

UPDATE DEPTO
SET DT_STATUS = SYSDATE
WHERE DT_STATUS IS NULL;

UPDATE EMP
SET SAL = SAL * 1.1
WHERE SAL < 900

DELETE FROM EMP


WHERE DEPTNO = 10

DELETE FROM EMP

DELETE GER_ORCAMENTO_VENDA
WHERE
ORVE_FILI_CD IN (1,2,6,10,25,30,50,75) AND
-- ORVE_CANA_CD = REG_ORVE_CANA_CD AND
-- ORVE_COVE_CD = REG_ORVE_COVE_CD AND
-- ORVE_APELIDO = REG_ORVE_APELIDO AND
-- ORVE_CLGR_APELIDO = REG_ORVE_APELIDO AND
ORVE_VERSAO = 'ATU1' AND
ORVE_ANO = '2000' AND
ORVE_MES = '11' AND
ORVE_PROD_CD IN
(SELECT PROD_CD FROM GER_PRODUTO WHERE PROD_GRCO_CD IN('03') )

71
ORACLE – SQLPLUS
_________________________________________________________________________________

CONTROLE DE TRANSAÇÕES

(GRAVAÇÃO DAS MANUTENÇÕES REALIZADAS NOS DADOS DAS TABELAS)

COMMIT => Confirma as manutenções (grava)


ROLLBACK => Desfaz as ultimas alterações (até ultimo COMMIT)
SAVEPOINT => Coloca uma marca para possível ROLLBACK até aquele
ponto.
ROLLBACK TO => Desfaz até o ponto especificado

Exemplos:

DELETE TESTE1
SELECT * FROM TESTE1

ROLLBACK
SELECT * FROM TESTE1

DELETE TESTE1
SELECT * FROM TESTE1

COMMIT
SELECT * FROM TESTE1

INSERT INTO TESTE1 (CP1)


VALUES (10);
SAVEPOINT A
SELECT * FROM TESTE1

DELETE TESTE1
SELECT * FROM TESTE1

ROLLBACK TO A
SELECT * FROM TESTE1

ROLLBACK
SELECT * FROM TESTE1

COMMIT;

LOCK DE REGISTROS

Quando uma linha da tabela está sofrendo manutenção por um usuário, ela fica disponível
apenas para leitura para outros usuários, com seu valor antigo, até que seja realizado
rollback ou commit. Caso outro usuário também altere seu conteúdo e de commit, esse
comando ficará em WAIT até que o 1° usuário conclua a transação

72
ORACLE – SQLPLUS
_________________________________________________________________________________

D.D.L.

(Data Definition Language)

73
ORACLE – SQLPLUS
_________________________________________________________________________________

D.D.L. (DATA DEFINITION LANGUAGE)

SCRIPT PARA CRIAÇÃO DE TABELAS E INCLUSÃO DE LINHAS

DROP TABLE DEPT;


CREATE TABLE DEPT
(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14) ,
LOC VARCHAR2(13) ) ;

INSERT INTO DEPT VALUES


(10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES
(30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES
(40,'OPERATIONS','BOSTON');

DROP TABLE EMP;


CREATE TABLE EMP
(EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);

INSERT INTO EMP VALUES


(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-
yyyy'),1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-
yyyy'),1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-
yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-
yyyy'),1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-
yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-
yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87')-85,3000,NULL,20);
INSERT INTO EMP VALUES

74
ORACLE – SQLPLUS
_________________________________________________________________________________

(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-
yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-JUL-87')-51,1100,NULL,20);

INSERT INTO EMP VALUES


(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-
yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-
yyyy'),1300,NULL,10);

DROP TABLE BONUS;

CREATE TABLE BONUS


(
ENAME VARCHAR2(10) ,
JOB VARCHAR2(9) ,
SAL NUMBER,
COMM NUMBER
) ;

DROP TABLE SALGRADE;

CREATE TABLE SALGRADE


( GRADE NUMBER,
LOSAL NUMBER,
HISAL NUMBER );

INSERT INTO SALGRADE VALUES (1,700,1200);


INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);

COMMIT;

75
ORACLE – SQLPLUS
_________________________________________________________________________________

TIPOS DE DADOS

DADOS DO TIPO CARACTER

CHAR : De 1 a 255 caracteres. Usado quando um campo de tamanho fixo é apropriado

VARCHAR2 : De 1 a 2000 caracteres. Usado para tamanho variável

LONG : Até 2GBYTES. Similar a Varchar2.


- Apenas uma coluna por tabela é permitida
- Não pode ser indexado
- Não pode ser passado como argumento de funções ou procedures
- Não pode ser usado em where, order by ou group by

DADOS DO TIPO BINÁRIO

Armazena imagens ou sons

RAW : Armazena até 2000 Bytes

LONG RAW : Armazena até 2GBytes

DADOS DO TIPO NUMÉRICO

Armazena números inteiros ou com várias decimais

NUMBER : Armazena numeros

DADOS DO TIPO DATA

Armazena data

NUMBER : Armazena datas que podem ser exibidas em varios formatos

76
ORACLE – SQLPLUS
_________________________________________________________________________________

CONSTRAINT NOT NULL

Coluna não pode Ter valor Nulo

CREATE TABLE TESTE1


( CP1 NUMBER(6) ,
CP2 VARCHAR2(10) );

Execute a Seqüência de teste para constraint not null e analise os resultados obtidos.

CREATE TABLE TESTE1


( CP1 NUMBER(6) NOT NULL ,
CP2 VARCHAR2(10) );

Execute a Seqüência de teste para constraint not null e analise os resultados obtidos.

CREATE TABLE TESTE1


( CP1 NUMBER(6) CONSTRAINT NN_TESTE1 NOT NULL,
CP2 VARCHAR2(10) );

Execute a Seqüência de teste para constraint not null e analise os resultados obtidos.

Seqüência de teste para a CONSTRAINT NOT NULL :

INSERT INTO TESTE1 (CP1,CP2)


VALUES (1,” TESTE ”)

INSERT INTO TESTE1 (CP1,CP2)


VALUES ( NULL ,” TESTE ”)

COMMIT

SELECT * FROM TESTE1

DROP TABLE TESTE1

77
ORACLE – SQLPLUS
_________________________________________________________________________________

CONSTRAINT PRIMARY KEY

Cada linha é Única

CREATE TABLE TESTE2


( CP1 NUMBER(6) ,
CP2 VARCHAR2(10) );

Execute a Seqüência de teste para constraint Primary Key e analise os resultados obtidos.

CREATE TABLE TESTE2


( CP1 NUMBER(6) PRIMARY KEY,
CP2 VARCHAR2(10) );

Execute a Seqüência de teste para constraint Primary Key e analise os resultados obtidos.

CREATE TABLE TESTE2


( CP1 NUMBER(6) CONSTRAINT PK_TESTE2 PRIMARY KEY,
CP2 VARCHAR2(10) );

Execute a Seqüência de teste para constraint Primary Key e analise os resultados obtidos.

Sequência de teste para a CONSTRAINT PRIMARY KEY:

INSERT INTO TESTE2 (CP1,CP2)


VALUES (1,” TESTE ”)

INSERT INTO TESTE2 (CP1,CP2)


VALUES (1,” TESTE ”)

INSERT INTO TESTE2 (CP1,CP2)


VALUES (2,” TESTE ”)

INSERT INTO TESTE2 (CP1,CP2)


VALUES ( NULL ,” TESTE ”)

COMMIT

SELECT * FROM TESTE2

DROP TABLE TESTE2

78
ORACLE – SQLPLUS
_________________________________________________________________________________

CONSTRAINT REFERENCES

Indica a chave estrangeira

CREATE TABLE ALUNOS


( MATRICULA NUMBER(6) PRIMARY KEY ,
NOME VARCHAR2(30) NOT NULL ,
UF VARCHAR2(02) );

Execute a Seqüência de teste para constraint References e analise os resultados obtidos.

CREATE TABLE ALUNOS


( MATRICULA NUMBER(6) PRIMARY KEY ,
NOME VARCHAR2(30) NOT NULL ,
UF VARCHAR2(02) REFERENCES ESTADOS (CD_UF) );

Execute a Seqüência de teste para constraint References e analise os resultados obtidos.

CREATE TABLE ALUNOS


( MATRICULA NUMBER(6) PRIMARY KEY ,
NOME VARCHAR2(30) NOT NULL ,
UF VARCHAR2(02) CONSTRAINT R_ALUNOS
REFERENCES ESTADOS (CD_UF) );

Execute a Seqüência de teste para constraint References e analise os resultados obtidos.

Sequência de teste para a CONSTRAINT REFERENCES:

INSERT INTO ALUNOS (MATRICULA,NOME,UF)


VALUES (1,” JOAO”, “SP”)

INSERT INTO ALUNOS (MATRICULA,NOME,UF)


VALUES (2,” MARIA”, “SP”)

INSERT INTO ALUNOS (MATRICULA,NOME,UF)


VALUES (1,” JOAO”, “RJ”)

INSERT INTO ALUNOS (MATRICULA,NOME,UF)


VALUES (3,” JOAO”, “SP”)

INSERT INTO ALUNOS (MATRICULA,NOME,UF)


VALUES (4,” JOAO”, “XX”)

COMMIT

SELECT * FROM TESTE2


DROP TABLE TESTE2

79
ORACLE – SQLPLUS
_________________________________________________________________________________

CONSTRAINT UNIQUE

Os valores devem ser Únicos

CREATE TABLE DEPTO


( NRO_DEPTO NUMBER(4) PRIMARY KEY ,
DESC_DEPTO VARCHAR2(30) );

Execute a Seqüência de teste para constraint Unique e analise os resultados obtidos.

CREATE TABLE DEPTO


( NRO_DEPTO NUMBER(4) PRIMARY KEY ,
DESC_DEPTO VARCHAR2(30) UNIQUE );

Execute a Seqüência de teste para constraint Unique e analise os resultados obtidos.

CREATE TABLE DEPTO


( NRO_DEPTO NUMBER(4) CONSTRAINT PK_NRO_DEPTO PRIMARY
KEY ,
DESC_DEPTO VARCHAR2(30) CONSTRAINT UN_DESC_DEPTO UNIQUE );

Execute a Seqüência de teste para constraint References e analise os resultados obtidos.

Sequência de teste para a CONSTRAINT UNIQUE:

INSERT INTO DEPTO (NRO_DEPTO, DESC_DEPTO)


VALUES (10, ‘MARKETING`)

INSERT INTO DEPTO (NRO_DEPTO, DESC_DEPTO)


VALUES (10, ‘MARKETING`)

INSERT INTO DEPTO (NRO_DEPTO, DESC_DEPTO)


VALUES (20, ‘MARKETING`)

INSERT INTO DEPTO (NRO_DEPTO, DESC_DEPTO)


VALUES (20, ‘INFORMATICA`)

COMMIT

SELECT * FROM DEPTO


DROP TABLE DEPTO

80
ORACLE – SQLPLUS
_________________________________________________________________________________

CONSTRAINT CHECK

Estabelece uma condição de deve ser satisfeita

CREATE TABLE FUNCIONARIOS


( NRO_FUNC NUMBER(4) ,
NOME_FUNC VARCHAR2(30) NOT NULL ,
NRO_DEPTO NUMBER(04) REFERENCES DEPTO (NRO_DEPTO)
);

Execute a Seqüência de teste para constraint References e analise os resultados obtidos.

CREATE TABLE FUNCIONARIOS


( NRO_FUNC NUMBER(4) CHECK( NRO_FUNC > 1000) ,
NOME_FUNC VARCHAR2(30) NOT NULL ,
NRO_DEPTO NUMBER(04) REFERENCES DEPTO (NRO_DEPTO)
);

Execute a Seqüência de teste para constraint References e analise os resultados obtidos.

CREATE TABLE FUNCIONARIOS


( NRO_FUNC NUMBER(4) CONSTRAINT CK_NRO_FUNC CHECK( NRO_FUNC >
1000) ,
NOME_FUNC VARCHAR2(30) NOT NULL ,
NRO_DEPTO NUMBER(04) REFERENCES DEPTO (NRO_DEPTO)
);

Execute a Seqüência de teste para constraint References e analise os resultados obtidos.

Sequência de teste para a CONSTRAINT CHECK:

INSERT INTO FUNCIONARIOS (NRO_FUNC,NOME_FUNC,NRO_DEPTO)


VALUES (1001,’JOAO’,NULL)

INSERT INTO FUNCIONARIOS (NRO_FUNC,NOME_FUNC,NRO_DEPTO)


VALUES (NULL,’JOAO’,10)

INSERT INTO FUNCIONARIOS (NRO_FUNC,NOME_FUNC,NRO_DEPTO)


VALUES (999,’JOAO’,20)

COMMIT

SELECT * FROM FUNCIONARIOS

DROP TABLE FUNCIONARIOS

81
ORACLE – SQLPLUS
_________________________________________________________________________________

EXEMPLOS DE CRIAÇÃO E ALTERAÇÃO EM ESTRUTURA DE TABELAS

create table a1 (descricao varchar2(30) not null constraint desc_aa unique)


/

CREATE TABLE LEDA.EMP AS


SELECT *
FROM SCOTT.EMP;

CREATE TABLE TESTE1


( CP1 NUMBER ( 3,0 ) ,
CP2 NUMBER ( 3,1 ) ,
CP3 NUMBER ( 3,2 ) ,
CP4 NUMBER ( 3,3 ) )

INSERT INTO TESTE1


VALUES (1 , 11.1 , 1.11 , 0.111)

INSERT INTO TESTE1


VALUES (1.1 , 11.1 , 1.11 , 0.111)

ALTER TABLE TESTE1 ADD


( CP5 VARCHAR2(10) );

ALTER TABLE TESTE1 MODIFY


(CP5 VARCHAR2(10) NOT NULL);

ALTER TABLE TESTE1 ADD


( CP6 VARCHAR2(10) NOT NULL );

CREATE TABLE TESTE2 AS


SELECT * FROM TESTE1
WHERE 1 = 2;
(CRIA A TABELA COM 0 LINHAS, OU SEJA CRIA APENAS A ESTRUTURA DA TABELA)

CREATE TABLE WORKER (


NAME VARCHAR2(25) PRIMARY KEY ,
AGE NUMBER(10) CHECK (AGE BETWEEN 18 AND 65);

CREATE TABLE ALUNOS (


MATRICULA VARCHAR2 (6) PRIMARY KEY ,
NOME VARCHAR2(30) UNIQUE ,
FONE VARCHAR2(10) );

ALTER TABLE ALUNOS MODIFY (


NOME VARCHAR2 (30) NOT NULL );

82
ORACLE – SQLPLUS
_________________________________________________________________________________

CREATE TABLE TESTE (


CP1 NUMBER( 8,2 ) ,
CP2 NUMBER( 5,1) ,
CP3 VARCHAR2( 10 ) ,
CP4 VARCHAR2 ( 10 ) ,
CONSTRAINT UN_TESTE UNIQUE (CP3 , CP4 ) );

ALTER TABLE DEPT DISABLE CONSTRAINT PK_DEPT ;

ALTER TABLE DEPT ENABLE CONSTRAINT PK_DEPT ;

ALTER TABLE DEPT DROP CONSTRAINT PK_DEPT ;

ALTER TABLE EMP_SERVICE ADD CONSTRAINT PK_EMP_SERVICE


PRIMARY KEY (EMP_ID,CUST_ID)

ALTER TABLE EM_SERVICE ADD UNITS VARCHAR2(6)


CONSTRAINT CK_EMP_SERVICE CHECK (UNITS IS (`FEET`, `METER`) );

CREATE TABLE ORD_PRECO_CLIENTE (


PRCL_APELIDO VARCHAR2(16),
PRCL_CGC8 NUMBER(8),
PRCL_PROD_CD VARCHAR2(20) ,
PRCL_PRECO NUMBER(15,5) )
/

alter table ger_produto ADD


(constraint PROD_PROD_VALUE_FK
FOREIGN KEY (PROD_VALUE)
REFERENCES ger_produto_value (POVA_CD) )
/
alter table ger_produto ADD
(constraint PROD_PROD_AGE_FK
FOREIGN KEY (PROD_AGE)
REFERENCES ger_produto_AGE (POAG_CD) )
/

alter table ADMCTM.PROMOTIONAL_ACTIONS_LAY_OUTS drop constraint


SYS_C0014272;
alter table ADMCTM.TMP_ORDER_HEADER drop constraint TMP_ORHE_PK;

alter table ger_produto MODIFY ( PROD_VALUE VARCHAR2(6) NOT NULL)

83
ORACLE – SQLPLUS
_________________________________________________________________________________

-- C:\ger_fornecedor.tab
--
-- Generated for Oracle 8 on Fri Mar 22 18:52:33 2002 by Server Generator 6.0.3.3.0

PROMPT Creating Table 'GER_FORNECEDOR'


CREATE TABLE GER_FORNECEDOR
(FORN_APELIDO VARCHAR2(14) NOT NULL
,FORN_CD VARCHAR2(15)
,FORN_RAZ_SOC VARCHAR2(32)
,FORN_PAIS VARCHAR2(3)
)
/

COMMENT ON COLUMN GER_FORNECEDOR.FORN_APELIDO IS 'Apelido'


/

COMMENT ON COLUMN GER_FORNECEDOR.FORN_CD IS 'CGC do Fornecedor'


/

COMMENT ON COLUMN GER_FORNECEDOR.FORN_RAZ_SOC IS 'Razão Social do


Fornecedor'
/

COMMENT ON COLUMN GER_FORNECEDOR.FORN_PAIS IS 'Pais do Fornecedor'


/

-- C:\ger_fornecedor.con
--
-- Generated for Oracle 8 on Fri Mar 22 18:52:33 2002 by Server Generator 6.0.3.3.0

PROMPT Creating Primary Key on 'GER_FORNECEDOR'


ALTER TABLE GER_FORNECEDOR
ADD CONSTRAINT FORN_PK PRIMARY KEY
(FORN_APELIDO)
/

ALTER TABLE GER_PEDIDO_COMPRA DROP PRIMARY KEY

ALTER TABLE GER_PEDIDO_COMPRA ADD


CONSTRAINT PECO_PK PRIMARY KEY
(PECO_ANO,PECO_MES,PECO_NR_PED,PECO_NR_ITEM,PECO_DT_PED)
/

84
ORACLE – SQLPLUS
_________________________________________________________________________________

-- C:\ger_.tab
--
-- Generated for Oracle 8 on Fri Mar 22 20:58:36 2002 by Server Generator 6.0.3.3.0

PROMPT Creating Table 'GER_PEDIDO_COMPRA'


CREATE TABLE GER_PEDIDO_COMPRA
(PECO_ANO NUMBER(4) NOT NULL
,PECO_MES NUMBER(2) NOT NULL
,PECO_NR_PED NUMBER(6) NOT NULL
,PECO_NR_ITEM NUMBER(3) NOT NULL
,PECO_DT_PED DATE NOT NULL
,PECO_DT_ENT DATE NOT NULL
,PECO_DT_PAGTO DATE
,PECO_DT_EMB DATE
,PECO_COPC_CD VARCHAR2(3)
,PECO_PZ_COML NUMBER(8)
,PECO_PROD_CD VARCHAR2(20) NOT NULL
,PECO_QTD_SALDO NUMBER(11)
,PECO_QTD_ENTR NUMBER(11)
,PECO_VL_UNIT NUMBER(14,2)
,PECO_DECO_CD VARCHAR2(3)
,PECO_VL_PMI NUMBER(14,4)
,PECO_TX_CONV NUMBER(9,6)
,PECO_MOEDA_CD VARCHAR2(3)
,PECO_FORN_APELIDO VARCHAR2(14) NOT NULL
)
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_ANO IS 'Ano do envio do


pedido ao Oracle (Processamento)'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_MES IS 'Mes do envio do


pedido ao Oracle (Processamento)'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_NR_PED IS 'Numero do


Pedido'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_NR_ITEM IS 'Numero do Item


(Linha do Pedido)'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_DT_PED IS 'Data do Pedido'


/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_DT_ENT IS 'Data da Entrega'


/

85
ORACLE – SQLPLUS
_________________________________________________________________________________

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_DT_PAGTO IS 'Data prevista


para pagamento'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_DT_EMB IS 'Data prevista


para embarque'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_COPC_CD IS 'Condição de


Pagamento de Compra'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_PZ_COML IS 'Prazo Comercial


em Dias'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_PROD_CD IS 'Codigo do


Produto'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_QTD_SALDO IS 'Quantidade


do Saldo do Pedido (Qtd_Pedida - Qtd_Entregue)'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_QTD_ENTR IS 'Quantidade


Entregue'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_VL_UNIT IS 'Valor Unitário em


R$ (com os juros da condição de pagamento de compra)'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_DECO_CD IS 'Código do


Deposito (de compras) de saida'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_VL_PMI IS 'Preço Médio


calculado conforme a média do custo de entrada em R$'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_TX_CONV IS 'Valor da taxa da


moeda usada no pedido'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_MOEDA_CD IS 'Código da


Moeda'
/

COMMENT ON COLUMN GER_PEDIDO_COMPRA.PECO_FORN_APELIDO IS 'Apelido'


/

86
ORACLE – SQLPLUS
_________________________________________________________________________________

-- C:\ger_.con
--
-- Generated for Oracle 8 on Fri Mar 22 20:58:36 2002 by Server Generator 6.0.3.3.0

PROMPT Creating Primary Key on 'GER_PEDIDO_COMPRA'


ALTER TABLE GER_PEDIDO_COMPRA
ADD CONSTRAINT PECO_PK PRIMARY KEY
(PECO_NR_PED
,PECO_NR_ITEM
,PECO_ANO
,PECO_DT_PED)
/

PROMPT Creating Foreign Keys on 'GER_PEDIDO_COMPRA'


ALTER TABLE GER_PEDIDO_COMPRA

ADD CONSTRAINT PECO_FORN_FK FOREIGN KEY (PECO_FORN_APELIDO)


REFERENCES GER_FORNECEDOR (FORN_APELIDO)

ADD CONSTRAINT PECO_PROD_FK FOREIGN KEY (PECO_PROD_CD)


REFERENCES GER_PRODUTO (PROD_CD)
/

alter table ord_preco_cliente modify (PRCL_CGC8 varchar2(8) )

CREATE TABLE MY_DATE ( DAY DATE);


INSERT INTO MY_DATE VALUES (SYSDATE)
SELECT * FROM MY_DATE WHERE DAY = SYSDATE

TROCAR NOME DE TABELAS

RENAME TESTE5 TO TESTE5_OLD

EXCLUIR TABELAS

SPOOL C:\ORACLE\SQLPLUS\DROP0002.SQL ;
select 'DROP TABLE ' || tname || ' ;' from user_tables;
SPOOL OFF;

DROP TABLE ANO_INP ;


DROP TABLE ANUALSGA ;
DROP TABLE BG ;
DROP TABLE CAB_ESP_TIPO ;

87
ORACLE – SQLPLUS
_________________________________________________________________________________

SEQUENCES

Estrutura para geração de numeração sequencial. Gera uma lista serial de números
exclusivos para as colunas das tabelas.

create sequence seq1


increment by 1
start with 1
maxvalue 99999
cycle
/

SELECT SEQ1.NEXTVAL, SEQ1.CURRVAL FROM DUAL;

ALTER SEQUENCE USUARIO.SEQ1

INCREMENT BY 1 (DEFAULT = 1 => VALOR NEGATIVO DECREMENTA)

MAXVALUE 1000 (OPCAO USAR NO MAXVALUE)

MINVALUE 1 (OPCAO USAR NO MINVALUE)

CYCLE (OPCAO USAR NO CYCLE)

CACHE 20 (OPCAO USAR NO CACHE)


Seqüência de Números mantidos na memória)

ORDER (OPCAO USAR NO ORDER)


Garante que os vários usuários que acessam recebem os números na ordem de requisição

START WITH => Não disponível na opção ALTER SEQUENCE

CREATE SEQUENCE SEQ1;

select * from user_sequences


where SEQUENCE_NAME = 'SEQ1';

88
ORACLE – SQLPLUS
_________________________________________________________________________________

CREATE SEQUENCE SEQ1


MINVALUE 1
MAXVALUE 2000
INCREMENT BY 1
START WITH 1
CYCLE
/

SELECT SEQ1.NEXTVAL FROM DUAL;

CREATE TABLE A (
CP1 VARCHAR2(20) ,
CP2 NUMBER( 10),
CP3 DATE ,
CP4 NUMBER( 10));

INSERT INTO A
VALUES (USER, SEQ1.NEXTVAL, SYSDATE, SEQ1.CURRVAL)

DROP SEQUENCE SEQ1

Desc user_sequences

Name Null? Type


------------------------------- -------- ----
SEQUENCE_NAME NOT NULL VARCHAR2(30)
MIN_VALUE NUMBER
MAX_VALUE NUMBER
INCREMENT_BY NOT NULL NUMBER
CYCLE_FLAG VARCHAR2(1)
ORDER_FLAG VARCHAR2(1)
CACHE_SIZE NOT NULL NUMBER
LAST_NUMBER NOT NULL NUMBER

89
ORACLE – SQLPLUS
_________________________________________________________________________________

INDICES

São estruturas opcionais associadas às tabelas, as quais aumentam o desempenho da


recuperação de dados. (Aceleram o processo de pesquisa aos registros)

São estruturas formadas por um ou mais campos de uma tabela.

Embora o Oracle crie um índice sobre a chave primária, você pode criar índices sobre
outros campos da tabela.

Operações de insert , delete e update podem se tornar mais lentas se existem muitos índices
associados à tabela

CREATE INDEX USER.NOME_INDICE ON USER.NOME_TABELA (CP1 ASC ,CP2 DESC )

90
ORACLE – SQLPLUS
_________________________________________________________________________________

TRIGGERS

Procedimentos que são executados automaticamente como resultado de operações de


inserção, atualização ou exclusão em uma tabela.

Exemplos: Auditoria de Modificações e Geração de dados automática

Um Trigger pode conter comandos SQL e PL/SQL ou pode chamar Stored Procedures

A diferença principal entre um Trigger e uma procedure é que a primeira é acionada pelo
Banco de Dados e a segunda é chamada pelo usuário.

ALTER TRIGGER TGR_TRAN_02 COMPILE

91
ORACLE – SQLPLUS
_________________________________________________________________________________

TRIGGER EXEMPLO 01:

create or replace trigger TGR_CLGR_01


Before Insert or Delete or Update on GER_CLIENTE_GRUPO
For Each Row

Begin
If INSERTING Then
Add_Log_Transacao('GER_CLIENTE_GRUPO','INSERT',:new.CLGR_APELIDO);
End if;
If DELETING Then
Add_Log_Transacao('GER_CLIENTE_GRUPO','DELETE',:OLD.CLGR_APELIDO);
End if;
if UPDATING Then
Begin
if (:Old.CLGR_APELIDO <> :New.CLGR_APELIDO OR
:Old.CLGR_RAZ_SOC <> :New.CLGR_RAZ_SOC OR
:Old.CLGR_CD_END_ENTREGA <> :New.CLGR_CD_END_ENTREGA OR
:Old.CLGR_CONTR_VEND <> :New.CLGR_CONTR_VEND OR
:Old.CLGR_PRAZO_VEND <> :New.CLGR_PRAZO_VEND OR
:Old.CLGR_TAXA_VEND <> :New.CLGR_TAXA_VEND OR
:Old.CLGR_PRAZO_REPC <> :New.CLGR_PRAZO_REPC OR
:Old.CLGR_PERC_PLUS <> :New.CLGR_PERC_PLUS OR
:Old.CLGR_PRAZO_TVEN <> :New.CLGR_PRAZO_TVEN OR
:Old.CLGR_GR_FIS_ICM <> :New.CLGR_GR_FIS_ICM OR
:Old.CLGR_GR_FIS_IPI <> :New.CLGR_GR_FIS_IPI OR
:Old.CLGR_CONTRIB <> :New.CLGR_CONTRIB OR
:Old.CLGR_MOED_CD <> :New.CLGR_MOED_CD OR
:Old.CLGR_CLCL_CD <> :New.CLGR_CLCL_CD OR
:Old.CLGR_TTRI_CD <> :New.CLGR_TTRI_CD OR
:Old.CLGR_TTII_CD <> :New.CLGR_TTII_CD
OR
:Old.CLGR_TRAN_CD <> :New.CLGR_TRAN_CD)
then
Add_Log_Transacao('GER_CLIENTE_GRUPO','UPDATE',:new.CLGR_APELIDO
);
Else
Raise_Application_Error(-20000,'Trigger Failure');
end if;
End;
End If;
End;

92
ORACLE – SQLPLUS
_________________________________________________________________________________

TRIGGER EXEMPLO 02:

Create or replace trigger TGR_PROD_01


Before Insert or Delete or Update on GER_PRODUTO
For Each Row
Begin
If INSERTING Then
Add_Log_Transacao('GER_PRODUTO','INSERT',:new.PROD_CD);
End if;
If DELETING Then
Add_Log_Transacao('GER_PRODUTO','DELETE',:OLD.PROD_CD);
End if;
if UPDATING Then
Begin
if ( :Old.PROD_CD <> :New.PROD_CD OR
NVL(:Old.PROD_PRSU_CD,' ') <> NVL(:New.PROD_PRSU_CD,' ')
OR
:Old.PROD_GRCO_CD <> :New.PROD_GRCO_CD
OR
:Old.PROD_CD_12NC <> :New.PROD_CD_12NC
OR
NVL(:Old.PROD_UNI_MED,' ') <> NVL(:New.PROD_UNI_MED,' ')
OR
NVL(:Old.PROD_CLAS_FISCAL,0) <> NVL(:New.PROD_CLAS_FISCAL,0)
OR
NVL(:Old.PROD_VL_CUST_PAD,0) <> NVL(:New.PROD_VL_CUST_PAD,0)
OR NVL(:Old.PROD_VL_ANT,0) <> NVL(:New.PROD_VL_ANT,0)
OR
NVL(:Old.PROD_VL_ATU,0) <> NVL(:New.PROD_VL_ATU,0)
OR
NVL(:Old.PROD_QTD_MULT,0) <> NVL(:New.PROD_QTD_MULT,0)
OR
NVL(:Old.PROD_METR_CUB,0) <> NVL(:New.PROD_METR_CUB,0)
OR
NVL(:Old.PROD_ID_ATIVO,' ') <> NVL(:New.PROD_ID_ATIVO,' ')
OR
NVL(:Old.PROD_CLASSE,' ') <> NVL(:New.PROD_CLASSE,' ')
OR
NVL(:Old.PROD_VL_PMI,0) <> NVL(:New.PROD_VL_PMI,0)
OR
NVL(:Old.PROD_VL_PMI_BR,0) <> NVL(:New.PROD_VL_PMI_BR,0) OR
NVL(:Old.PROD_PRCL_CD,' ') <> NVL(:New.PROD_PRCL_CD,' ') OR
NVL(:Old.PROD_ORIGEM,' ') <> NVL(:New.PROD_ORIGEM,' ') OR
NVL(:Old.PROD_FAT_LISTA,0) <> NVL(:New.PROD_FAT_LISTA,0) OR
NVL(:Old.PROD_GRPR_CD,' ') <> NVL(:New.PROD_GRPR_CD,' ') OR
NVL(:Old.PROD_IPI,0) <>NVL( :New.PROD_IPI,0) OR
NVL(:Old.PROD_QTD_PALLET,0) <> NVL(:New.PROD_QTD_PALLET,0) OR
NVL(:Old.PROD_PESO_BRUTO,0) <> NVL(:New.PROD_PESO_BRUTO,0)
OR
nvl(:Old.PROD_DEPO_CD,' ') <> nvl(:New.PROD_DEPO_CD,' ')
OR
NVL(:Old.PROD_INFI_CD,' ') <> NVL(:New.PROD_INFI_CD,' ') OR
NVL(:Old.PROD_MALU_CD,0) <> NVL(:New.PROD_MALU_CD,0) OR
93
ORACLE – SQLPLUS
_________________________________________________________________________________

NVL(:Old.PROD_TTII_CD,0) <> NVL(:New.PROD_TTII_CD,0) OR


NVL(:OLD.PROD_ID_PREVISAO,' ') <> NVL(:NEW.PROD_ID_PREVISAO,' ')
OR
:OLD.PROD_EAN13_CD <> :New.PROD_EAN13_CD
OR
:OLD.PROD_DUN14_CD <> :New.PROD_DUN14_CD )
then
Add_Log_Transacao('GER_PRODUTO','UPDATE',:new.PROD_CD);
Else
Raise_Application_Error(-20000,'Trigger Failure');
end if;
End;
End If;
End;
/

TRIGGER EXEMPLO 03:

create or replace trigger TGR_MUNI_01


Before Insert or Delete on GER_MUNICIPIO
For Each Row
Begin
if INSERTING then
Add_Log_Transacao('GER_MUNICIPIO','INSERT',:new.MUNI_CD);
end if;
if DELETING then
Add_Log_Transacao('GER_MUNICIPIO','DELETE',:OLD.MUNI_CD);
end if;
End;
/

create or replace trigger TGR_Muni_02


Before update on GER_MUNICIPIO
For Each Row
Begin
if (:Old.MUNI_UNFE_CD <> :New.MUNI_UNFE_CD OR :Old.MUNI_CD
<> :New.MUNI_CD OR :OLD.MUNI_DESC <> :NEW.MUNI_DESC) then
Add_Log_Transacao('GER_MUNICIPIO','UPDATE',:new.MUNI_CD);
Else
Raise_Application_Error(-20000,'Trigger Failure');
end if;
End;
/

94
ORACLE – SQLPLUS
_________________________________________________________________________________

ADD_LOG_TRANSACAO

CREATE TABLE GER_LOG_TRANSACAO (


LOTR_ID NUMBER CONSTRAINT LOTR_PK PRIMARY KEY,
LOTR_TABELA VARCHAR2(30) ,
LOTR_USER VARCHAR2(30) ,
LOTR_DT DATE ,
LOTR_TRANSACAO VARCHAR2(30) ,
LOTR_KEY VARCHAR2(100) )
/

CREATE SEQUENCE SEQ_LOTR


/

PROCEDURE ADD_LOG_TRANSACAO(VTable_Name Varchar2, VTransaction Varchar2,


VKey Varchar2 ) IS
BEGIN
INSERT INTO GER_LOG_TRANSACAO (LOTR_ID, LOTR_TABELA,
LOTR_USER, LOTR_DT, LOTR_TRANSACAO, LOTR_KEY)
VALUES (SEQ_LOTR.NEXTVAL, VTable_Name, USER, SysDate, VTransaction,
VKey);
EXCEPTION
When Others Then
Null;
END;

CREATE SYNONYM ADD_LOG_TRANSACAO FOR ADMGER.ADD_LOG_TRANSACAO


/

GRANT EXECUTE ON ADMGER.ADD_LOG_TRANSACAO TO ADMSIM


/

95
ORACLE – SQLPLUS
_________________________________________________________________________________

TESTE DE EFICIENCIA DA TRIGGER

insert into GER_MUNICIPIO VALUES ('SP',-4,'TESTE - ELIMINAR') ;

DECLARE
BEGIN
UPDATE GER_MUNICIPIO
SET MUNI_DESC = 'TESTE - ELIMINOR'
WHERE MUNI_CD = -4 ;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE <> -20000 THEN
DBMS_OUTPUT.PUT_LINE('ALTERACAO NAO AUTORIZADA');
END IF;
END;
/

HABILITANDO e DESABILITANDO CONSTRAINTS

ALTER TABLE GER_MOVIMENTO_ITEM enABLE CONSTRAINT MOIT_MOVI_FK ;

ALTER TABLE GER_MOVIMENTO_ITEM DISABLE CONSTRAINT MOIT_MOVI_FK ;

96
ORACLE – SQLPLUS
_________________________________________________________________________________

PROCEDURE e FUNCTIONS

Conjunto de declarações SQL e PL/SQL agrupadas como uma unidade executável. (Para
executar uma tarefa específica)

Uma procedure pode ser executada a partir do SQL*PLUS ou aplicação Oracle

PROCEDURE => Não Retorna Valor


FUNCTION => Retorna Valor

PACKAGES

Método para armazenar procedimentos e funções relacionados.


É um gupo de procedures e funções armazenadas junto com cursores e variáveis

EXECUTE NOMEPACKAGE.NOMEFUNCAO (‘SMITH’,1030) ;

CURSOR

O Oracle utiliza áreas de trabalho destinadas a executar comandos SQL

É um produto da linguagem PL/SQL. É possível dar nome para uma dessas areas de
trabalho e acessar sua informação

97
ORACLE – SQLPLUS
_________________________________________________________________________________

SQL LOADER

P/ RODAR (DOS):

sqlldr80 usuario/senha@CCAP arquivo.ctl

Arquivo: CARREGA.CTL

OPTIONS ( FILE='C:/COMPRAS/CARREGA.ctl')
LOAD DATA
INFILE 'C:/COMPRAS/COM_COMPRA.TXT'
BADFILE 'C:/COMPRAS/CARGA_COM_COMPRA.bad'
DISCARDFILE 'C:/COMPRAS/COM_COMPRA.dsc'
INTO TABLE "TA_COM_COMPRA"
APPEND

FIELDS

(
"RAZAO" POSITION (01:53) CHAR,
"END" POSITION (54:99) CHAR,
"COMPLEMENTO" POSITION (100:123) CHAR,
"CIDADE" POSITION (124:143) CHAR,
"UF" POSITION (144:145) CHAR,
"CEP" POSITION (150:160) CHAR,
"IE" POSITION (162:182) CHAR,
"CGC" POSITION (183:196) CHAR,
"DATA_CHAR" POSITION (202:210) CHAR
)

98
ORACLE – SQLPLUS
_________________________________________________________________________________

Arquivo: CARREGA.log

Vai criar um carrega.log com o historico da carga

Exemplo:
SQL*Loader: Release 8.0.5.0.0 - Production on Wed Apr 24 10:7:23 2002

(c) Copyright 1998 Oracle Corporation. All rights reserved.

Control File: carga_itens.ctl


Data File: C:/KARINA/ITENS.TXT
Bad File: C:/KARINA/ITENS.bad
Discard File: C:/KARINA/ITENS.dsc
(Allow all discards)

Number to load: ALL


Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 65536 bytes
Continuation: none specified
Path used: Conventional

Table "WK_ITENS", loaded from every logical record.


Insert option in effect for this table: APPEND

Column Name Position Len Term Encl Datatype


------------------------------ ---------- ----- ---- ---- ---------------------
"PROD_VALUE" 64:68 5 CHARACTER
"PROD_AGE" 54:61 8 CHARACTER
"PROD_CD" 73:88 16 CHARACTER

Record 1: Rejected - Error on table "WK_ITENS".


ORA-01401: inserted value too large for column

Record 5: Rejected - Error on table "WK_ITENS".


ORA-01401: inserted value too large for column

Record 6: Rejected - Error on table "WK_ITENS".


ORA-01401: inserted value too large for column

Record 64: Rejected - Error on table "WK_ITENS".


ORA-01401: inserted value too large for column

MAXIMUM ERROR COUNT EXCEEDED - Above statistics reflect partial run.

Table "WK_ITENS":
13 Rows successfully loaded.
51 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.

99
ORACLE – SQLPLUS
_________________________________________________________________________________

Space allocated for bind array: 2304 bytes(64 rows)


Space allocated for memory besides bind array: 0 bytes

Total logical records skipped: 0


Total logical records read: 64
Total logical records rejected: 51
Total logical records discarded: 0

Run began on Wed Apr 24 10:07:23 2002


Run ended on Wed Apr 24 10:07:26 2002

Elapsed time was: 00:00:02.29


CPU time was: 00:00:00.11

Arquivo: CARREGA.bad

Relação de linhas que não foram carregadas


1INCANDESCENTE 11INC ESPECIAIS Clean up AVP FAZ-12V40-ARG
1INCANDESCENTE 11INC ESPECIAIS Clean up AVP FAZENDA-12V40
1INCANDESCENTE 11INC ESPECIAIS Clean up AVP FAZENDA-12V60
1INCANDESCENTE 11INC ESPECIAIS Clean up AVP FIL-REF-120V100

100
ORACLE – SQLPLUS
_________________________________________________________________________________

Data Base Link

É um objeto de esquema que descreve um caminho de um banco de dados para outro.

(Requer que o programa SQL*Net esteja sendo executado em cada uma das máquinas)

Exemplo:

SELECT * FROM EMP@SALES


Nome do Banco
de Dados
Remoto

SNAPSHOTS

Chamado de materialized view, é uma cópia de uma parte ou de toda uma tabela

MASTER TABLE

Tabela de Origem

SNAPSHOTS READ-ONLY

Não permite alterações. Apenas recebe dados da master table

SNAPSHOTS UPDATABLE

Podem ser feitas alterações na cópia local e que periodicamente atualiza a master table
(Atualiza a master table mas também é atualizada por ela no momento do sincronismo)

101
ORACLE – SQLPLUS
_________________________________________________________________________________

D.C.L.

(Data Control Language)

102
ORACLE – SQLPLUS
_________________________________________________________________________________

D.C.L. (DATA CONTROL LANGUAGE)

ROLES
(CONNECT, RESOURCE E DBA)

Regras do Oracle para segregação da informação (direito de acesso) e permissões para


operar com os diversos objetos

Método para distribuir privilégios

Se uma Role é atribuida a um usuário, este obtem todos os privilégios associados a Role

DBA : Todos os direiros (Visões do DBA (V$... etc) , Export, Import


RESOURCE : Criar Objetos inclusive procedures, functions, packages e triggers
CONNECT : Permissão para criar e alterar SESSION, conectar o Banco de Dados

Exemplos:

GRANT CONNECT , RESOURCE TO BOB


GRANT CONNECT TO “LEDA”

ADMINISTRAÇÃO DE DIREITO DE ACESSO À TABELAS

grant select, insert on ger_deposito to admger ;


grant select, insert on ger_consultor_venda to admger;
grant select, insert on ger_condicao_pagamento to admger;
/

GRANT SELECT , UPDATE ON TABELA_TESTE TO LEDA WITH GRANT OPTION;


(Permite que LEDA passe adiante o grant se quiser)

GRANT INSERT , DELETE ON TABELA_TESTE TO LEDA;

GRANT INSERT , DELETE ON TABELA_TESTE TO PUBLIC;

GRANT SELECT, UPDATE, INSERT, DELETE ON VIEW_TESTE5 TO LEDA


WITH GRANT OPTIONS;

REVOKE ALL ON USER.OBJECT FROM USER


ALTER PUBLIC
DELETE
INSERT
SELECT
UPDATE

CREATE PUBLIC SYNONYM EMPREGADOS FOR SCOTT

DROP SYNONYM EMPREGADOS;


103
ORACLE – SQLPLUS
_________________________________________________________________________________

GRANT SELECT ON EMP TO LEDA

GRANT SELECT ON EMP TO PUBLIC

GRANT UPDATE ON EMP TO LEDA

GRANT UPDATE (SAL,COMM) ON EMP TO LEDA

REVOKE SELECT ON EMP FROM LEDA

REVOKE UPDATE ON EMP FROM LEDA

REVOKE ALL ON EMP FROM LEDA

CREATE SYNONYM LEDA.EMPREGADOS FOR SCOTT.EMP

CREATE PUBLIC SYNONYM LEDA.EMPREGADOS FOR SCOTT.EMP

ALTERAR SENHA

ALTER USER LEDA IDENTIFIED BY SENHALEDA

CRIAR USUÁRIO

CREATE USER “LEDA” IDENTIFIED BY “LEDA”


DEFAULT TABLESPACE “CCAP”
TEMPORARY TABLESPACE “CCAP”;

ATRIBUIR DIREITOS DE ACESSO AO USUÁRIO

GRANT CONNECT TO “LEDA”


GRANT RESOURCE TO “LEDA”

CONEXÃO AO ORACLE

CONNECT LEDA@CCAP;

104
ORACLE – SQLPLUS
_________________________________________________________________________________

VIEWs

- Visões de Tabelas, permitem que os dados mantidos em uma tabela possam ser
disponibilizados para diversos usuários conforme os direitos de acesso a informação de
cada usuário especifico.

- É uma apresentação personalizada dos dados de uma ou mais tabelas. As visões não
contém ou armazenam realmente os dados, mas elas os retiram das tabelas nas quais se
baseiam. As operações executadas em uma visão afetam as tabelas base dessa visão.

CREATE VIEW EMP_10 AS


SELECT * FROM EMP
WHERE DEPTNO = 10
(WITH CHECK OPTION)

CREATE VIEW V_TESTE5 AS


SELECT CP1,CP4
FROM TESTE5;

DROP TABLE TESTE5

SELECT * FROM V_TESTE5


(ERROR AT LINE 1: ORA-0942: TABLE OR VIEW DOES NOT EXIST)

CREATE VIEW V2_TESTE5 AS


SELECT *
FROM TESTE5;

ALTER TABLE TESTE5 ADD (CP6 VARCHAR2(10) );

SELECT * FROM V2_TESTE5


(ERROR AT LINE 1: ORA-1730: INVALID NUMBER OF COLUMN NAMES SPECIFIED)

ALTER VIEW LEDA.V2_TESTE5 COMPILE


(Recompila a View)

105
ORACLE – SQLPLUS
_________________________________________________________________________________

Sinônimos (Synonym)

É um alias de uma tabela, visão, seqüência ou unidade de programa. Não é um objeto de


esquema, mas sim uma referencia direta a ele

Utilidade:
- Mascara o nome real e o proprietário de um objeto de esquema
- Fornece acesso público a um objeto de esquema
- Fornece transparência a localização para os objetos
- Simplifica as declarações SQL para os usuários do Banco de Dados

Exemplo:

No OWNER
create table a (cp1 number );
Table created.

grant select on a to admsim


Grant succeeded.

No ADMSIM
desc a
ERROR:
ORA-04043: object a does not exist

desc admger.a
Name Null? Type
------------------------------- -------- ----
CP1 NUMBER

create synonym joao for admger.a;


Synonym created.

desc joao
Name Null? Type
------------------------------- -------- ----
CP1 NUMBER

No OWNER
revoke select on a from admsim;
Revoke succeeded.

106
ORACLE – SQLPLUS
_________________________________________________________________________________

No ADMSIM
desc joao;
ERROR:
ORA-04043: object ADMGER.A does not exist

desc admger.aa
Name Null? Type
------------------------------- -------- ----
CP1 NUMBER
drop synonym joao;
Synonym dropped.

No OWNER
drop table a

Table dropped.

drop view aa

View dropped.

107
ORACLE – SQLPLUS
_________________________________________________________________________________

EXEMPLO DE USO DE VIEW E SYNONYM

- O Usuário BRC00166 enxerga a tabela GER_RESUMO_PEDIDO


Mas deve estar restrito a esta seleção:

SELECT count(*)
FROM GER_RESUMO_PEDIDO O
WHERE O.REPE_FILI_CD IN (1,2,6,10,25,30,50,75) AND
O.REPE_PROD_CD IN (SELECT PROD_CD FROM GER_PRODUTO
WHERE PROD_GRCO_CD IN ('03','07') )
/
COUNT(*)
----------
2067

- Hoje ele enxerga sem restrições:

SELECT count(*)
FROM GER_RESUMO_PEDIDO ;

COUNT(*)
----------
3174

- A visão abaixo é elaborada para restringir o acesso aos dados

1 CREATE OR REPLACE VIEW GER_REPE_VW_BG0307 AS


2 SELECT O.*
3 FROM GER_RESUMO_PEDIDO O
4 WHERE O.REPE_FILI_CD IN (1,2,6,10,25,30,50,75) AND
5 O.REPE_PROD_CD IN (SELECT PROD_CD FROM GER_PRODUTO
6* WHERE PROD_GRCO_CD IN ('03','07') )
/
View created.

drop view GER_REPE_VW_BG0307;

View dropped.

connect admger@ccap;
Enter password: ******
Connected.
CREATE OR REPLACE VIEW GER_REPE_VW_BG0307 AS
SELECT O.*
FROM GER_RESUMO_PEDIDO O
WHERE O.REPE_FILI_CD IN (1,2,6,10,25,30,50,75) AND
O.REPE_PROD_CD IN (SELECT PROD_CD FROM GER_PRODUTO
WHERE PROD_GRCO_CD IN ('03','07') )
/

View created.

108
ORACLE – SQLPLUS
_________________________________________________________________________________

- É dada autorização de acesso ao usuário BRC00166 sobre a visão criada

grant select on GER_REPE_VW_BG0307 to brc00166;

Grant succeeded.

- O usuário BRC00166 necessita mencionar o OWNER para acessar a View

connect brc00166/xxxxxxxx@ccap;
Connected.
select * from GER_REPE_VW_BG0307
*
ERROR at line 1:
ORA-00942: table or view does not exist

select * from admger. GER_REPE_VW_BG0307;

1 2000 05 31911548004880 SENDAS 2 830520

- O usuário BRC00166 procura criar um sinônimo para poder acessar a tabela pelo
seu nome e não pelo nome da visão. Mas não possui privilégios para isso.

create synonym brc00166.GER_RESUMO_PEDIDO for


admger.GER_REPE_VW_BG0307
*
ERROR at line 1:
ORA-01031: insufficient privileges

109
ORACLE – SQLPLUS
_________________________________________________________________________________

- O usuário entra no Oracle com seu próprio login para eliminar o antigo
sinônimo

connect brc00166/XXXXXXXX@ccap;
Connected.

desc all_objects;
Name Null? Type
------------------------------- -------- ----
OWNER NOT NULL VARCHAR2(30)
OBJECT_NAME NOT NULL VARCHAR2(30)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NOT NULL NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE NOT NULL VARCHAR2(15)
CREATED NOT NULL DATE
LAST_DDL_TIME NOT NULL DATE
TIMESTAMP NOT NULL VARCHAR2(19)
STATUS NOT NULL VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)

select OWNER , OBJECT_NAME, OBJECT_TYPE


from all_objects
where OBJECT_NAME like 'GER_RESUMO_PEDIDO';

OWNER OBJECT_NAME OBJECT_TYPE


------------------------------ ------------------------------ ---------------
ADMGER GER_RESUMO_PEDIDO TABLE
BRC00166 GER_RESUMO_PEDIDO SYNONYM

drop synonym ger_resumo_pedido;

Synonym dropped.

select OWNER , OBJECT_NAME, OBJECT_TYPE


from all_objects
where OBJECT_NAME like 'GER_RESUMO_PEDIDO';

OWNER OBJECT_NAME OBJECT_TYPE


------------------------------ ------------------------------ ---------------
ADMGER GER_RESUMO_PEDIDO TABLE

- Finalmente ele enxerga a tabela com as restrições impostas pela View.

connect brc00166/XXXXXX@ccap;
Connected.
select count(*) from GER_RESUMO_PEDIDO;

COUNT(*)
----------
110
ORACLE – SQLPLUS
_________________________________________________________________________________

2067

- Para compilar a View devemos estar no Login do Owner

alter view admger.GER_REPE_VW_BG0307 compile;


alter view admger.GER_REPE_VW_BG0307 compile
*
ERROR at line 1:
ORA-01031: insufficient privileges

connect admger@ccap;
Enter password: ******
Connected.
alter view admger.GER_REPE_VW_BG0307 compile;

View altered.

111
ORACLE – SQLPLUS
_________________________________________________________________________________

PESQUISANDO AS VIEWs EXISTENTES

desc all_views

Name Null? Type


------------------------------- -------- ----
OWNER NOT NULL VARCHAR2(30)
VIEW_NAME NOT NULL VARCHAR2(30)
TEXT_LENGTH NUMBER
TEXT LONG
TYPE_TEXT_LENGTH NUMBER
TYPE_TEXT VARCHAR2(4000)
OID_TEXT_LENGTH NUMBER
OID_TEXT VARCHAR2(4000)
VIEW_TYPE_OWNER VARCHAR2(30)
VIEW_TYPE VARCHAR2(30)

SELECT SUBSTR(OWNER,1,12), SUBSTR(VIEW_NAME,1,20), TEXT


FROM ALL_VIEWS
WHERE VIEW_NAME LIKE '%0307%' ;

SUBSTR(OWNER SUBSTR(VIEW_NAME,1,2 TEXT


------------ -------------------- ------------------------------------------------------------
ADMGER GER_ORVE_VW_BG0307 SELECT O.*
FROM GER_ORCAMENTO_VENDA O
WHERE O.ORVE_VERSAO = 'ATU1' AND
O.ORVE_ANO = TO_CHAR(SYSDATE,'YYYY') AND
O.ORVE_FILI_CD IN (1,2,6,10,25,30,50,75) AND
O.ORVE_PROD_CD IN (SELECT PROD_CD FROM GER_PRODUTO
WHERE PROD_GRCO_CD IN ('03','07') )

ADMGER GER_REMO_VW_BG0307 SELECT O.*


FROM GER_RESUMO_MOVIMENTO O
WHERE O.REMO_ANO = TO_CHAR(SYSDATE,'YYYY') AND
O.REMO_FILI_CD IN (1,2,6,10,25,30,50,75) AND
O.REMO_PROD_CD IN (SELECT PROD_CD FROM GER_PRODUTO
WHERE PROD_GRCO_CD IN ('03','07') )

ADMGER GER_REPE_VW_BG0307 SELECT O.*


FROM GER_RESUMO_PEDIDO O
WHERE O.REPE_FILI_CD IN (1,2,6,10,25,30,50,75) AND
O.REPE_PROD_CD IN (SELECT PROD_CD FROM GER_PRODUTO
WHERE PROD_GRCO_CD IN ('03','07') )

112
ORACLE – SQLPLUS
_________________________________________________________________________________

REFERÊNCIAS BIBLIOGRAFICAS

- ORACLE 7 The Complete Reference


Mc Graw Hill , George Koch e Robert Muller

- Apostilas de curso e manuais que acompanham o produto

- Analise Estruturada Moderna


Editora Campus, Serie YOURDON PRESS , Edward Yourdon

- Ramalho, José Antonio – Oracle 8i


Editora Berkeley 1999

- Fanderuff, Damaris; Oracle 8i – Utilizando SQL*Plus e PL/SQL


São Paulo, Makron Books, 2000

113

Você também pode gostar