0% acharam este documento útil (0 voto)
3 visualizações95 páginas

Comandos SQL e Banco de Dados Relacional

O documento é um guia abrangente sobre bancos de dados relacionais, abordando conceitos fundamentais como o comando INSERT, arquitetura de produtos Oracle, SQL e PL/SQL. Ele detalha a estrutura de dados, operações de manipulação, e a importância de um Sistema de Gerenciamento de Banco de Dados (DBMS). Além disso, discute a utilização de SQL para consultas e manipulação de dados, bem como as vantagens do uso de PL/SQL para aumentar a eficiência e produtividade.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações95 páginas

Comandos SQL e Banco de Dados Relacional

O documento é um guia abrangente sobre bancos de dados relacionais, abordando conceitos fundamentais como o comando INSERT, arquitetura de produtos Oracle, SQL e PL/SQL. Ele detalha a estrutura de dados, operações de manipulação, e a importância de um Sistema de Gerenciamento de Banco de Dados (DBMS). Além disso, discute a utilização de SQL para consultas e manipulação de dados, bem como as vantagens do uso de PL/SQL para aumentar a eficiência e produtividade.
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

4

Sumário
Unidade 1 .................................................................................................................................. 8
Comando INSERT ................................................................................................................... 8
OBJETIVOS........................................................................................................................... 8
O que é Banco de Dados? ...................................................................................................... 8
RDBMS (Relational Database Management System) ........................................................... 9
Modelo Relacional ............................................................................................................... 10
Propriedades de um Banco de Dados Relacional ................................................................. 11
Arquitetura de Produtos Oracle ............................................................................................ 12
SQL ...................................................................................................................................... 13
Características do SQL ......................................................................................................... 13
O que é SQL*Plus ................................................................................................................ 14
PL/SQL................................................................................................................................. 15
Conjunto de Comandos SQL................................................................................................ 16
Incluindo novas Linhas em uma Tabela ............................................................................... 17
Comando UPDATE ................................................................................................................ 18
OBJETIVOS......................................................................................................................... 18
Alterando Linhas de uma Tabela ......................................................................................... 18
Comando DELETE ................................................................................................................ 20
OBJETIVOS......................................................................................................................... 20
Removendo Linhas de uma Tabela ...................................................................................... 21
Comandos SQL*Plus ............................................................................................................. 22
OBJETIVOS......................................................................................................................... 22
Edição de Comandos ............................................................................................................ 22
Operadores e Substituição de Variáveis............................................................................... 25
OBJETIVOS......................................................................................................................... 25
Operadores Aritméticos........................................................................................................ 25
Operadores de Caracteres ..................................................................................................... 26
Operadores de Comparação ................................................................................................. 26
Operadores Lógicos.............................................................................................................. 28
Substituição de Variáveis ..................................................................................................... 28
Unidade 2 ................................................................................................................................ 30
Group by e Order by .............................................................................................................. 30
OBJETIVOS......................................................................................................................... 30
Ordenação de Resultados ..................................................................................................... 30
Cláusula Group By ............................................................................................................... 30
Cláusula HAVING ............................................................................................................... 31
Join e Outer join ..................................................................................................................... 31
OBJETIVOS......................................................................................................................... 31
Junção de Tabelas................................................................................................................. 32
Auto Relacionamento e Consulta Hierárquica .................................................................... 35
OBJETIVOS......................................................................................................................... 35
Auto Relacionamento ........................................................................................................... 35
Consultas Hierárquicas ......................................................................................................... 35
Subquery ................................................................................................................................. 38
OBJETIVOS......................................................................................................................... 38
Consultas Encaixadas ........................................................................................................... 38
5
Funções .................................................................................................................................... 39
OBJETIVOS......................................................................................................................... 39
Funções Numéricas .............................................................................................................. 39
Funções de Caracter ............................................................................................................. 42
Funções de Conversão .......................................................................................................... 45
Funções que aceitam qualquer tipo de Dado como Entrada ................................................ 47
Funções de Datas .................................................................................................................. 48
Unidade 3 ................................................................................................................................ 52
Estrutura de Dados ................................................................................................................ 52
OBJETIVOS......................................................................................................................... 52
Estrutura de Dados Oracle.................................................................................................... 52
Criando uma Tabela ............................................................................................................. 52
Tipos de Colunas .................................................................................................................. 53
A Opção NULL e NOT NULL ............................................................................................ 54
Cláusula CONSTRAINT...................................................................................................... 54
Parâmetros da CONSTRAINT ............................................................................................. 56
CREATE TABLE ................................................................................................................ 57
Views ........................................................................................................................................ 58
OBJETIVOS......................................................................................................................... 58
Manipulação de Visões ........................................................................................................ 58
PL/SQL .................................................................................................................................... 62
OBJETIVOS......................................................................................................................... 62
O QUE É PL/SQL? ............................................................................................................. 63
AS VANTAGENS DO PL/SQL .......................................................................................... 63
ESTRUTURA DO PL/SQL ................................................................................................. 65
DEFININDO UM BLOCO ANÔNIMO .............................................................................. 65
CARACTERÍSTICAS DO PL/SQL .................................................................................... 66
SINTAXE BÁSICA DO PL/SQL ........................................................................................ 66
DECLARANDO VARIÁVEIS E CONSTANTES ............................................................. 67
SENTENÇA IF .................................................................................................................... 67
SENTENÇA FOR ................................................................................................................ 68
SENTENÇA WHILE ........................................................................................................... 68
Herança de Variáveis ............................................................................................................. 69
OBJETIVOS......................................................................................................................... 69
O ATRIBUTO %TYPE ....................................................................................................... 69
O ATRIBUTO %ROWTYPE .............................................................................................. 69
Cursor ...................................................................................................................................... 71
OBJETIVOS......................................................................................................................... 71
O QUE É UM CURSOR? .................................................................................................... 71
CONTROLE SOBRE CURSORES EXPLÍCITOS ............................................................. 71
O COMANDO CURSOR .................................................................................................... 73
Unidade IV .............................................................................................................................. 74
Procedure ................................................................................................................................ 74
OBJETIVOS......................................................................................................................... 74
Procedures ............................................................................................................................ 74
Trocando Valores entre diferentes Ambientes através de Argumentos. .............................. 75
Função ..................................................................................................................................... 75
OBJETIVOS......................................................................................................................... 75
Funções................................................................................................................................. 75
Gerenciando Exceções............................................................................................................ 76

6
OBJETIVOS......................................................................................................................... 76
Gerenciando Exceções em Tempo de Execução .................................................................. 76
Executando Objetos ............................................................................................................... 77
OBJETIVOS......................................................................................................................... 77
Executando PROCEDURES ................................................................................................ 77
Executando FUNCTIONS.................................................................................................... 78
Benefícios das Procedures e Funções................................................................................... 78
Unidade V................................................................................................................................ 80
Gerenciando Procedures e Functions ................................................................................... 80
OBJETIVOS......................................................................................................................... 80
Gerenciando Procedures e Funções...................................................................................... 80
Documentando Procedures e Funções.................................................................................. 81
Gerenciando Procedures e Funções...................................................................................... 84
Gerenciando Dependências ................................................................................................... 84
OBJETIVOS......................................................................................................................... 84
Gerenciando as Dependências entre Procedures .................................................................. 84
Existem dois tipos distintos de dependência: Direta e Indireta ............................................ 85
Dependência remota ............................................................................................................ 85
Dependências Locais ............................................................................................................ 85
Gerenciando Dependências Locais ...................................................................................... 87
Mecanismo de Dependência Remota Automático ............................................................... 88
Package .................................................................................................................................... 89
..................................................................................................................................... O
BJETIVOS ............................................................................................................... 89
Desenvolvendo e Utilizando PACKAGES .......................................................................... 90
Especificação do Package e seu Corpo ................................................................................ 91
Criando PACKAGES ........................................................................................................... 93
Packages já fornecidas ......................................................................................................... 93
Benefícios do Package ......................................................................................................... 94
Trigger ..................................................................................................................................... 95
OBJETIVOS......................................................................................................................... 95
Desenvolver Triggers ( gatilhos ) do Banco de Dados......................................................... 95
Criando Comandos e Triggers de Linha .............................................................................. 96
Comando CREATE TRIGGER ........................................................................................... 96
Criando TRIGGERS de Linha ............................................................................................. 97
GERENCIANDO TRIGGERS ............................................................................................ 97
Executar Operações de Dados Válidos ................................................................................ 98

7
Unidade I

Comando INSERT
OBJETIVOS

 Identificar as variações do comando INSERT

O que é Banco de Dados?

 É um conjunto de informações armazenadas de forma


organizada. No tradicional sistema manual, as informações geralmente
são armazenadas em arquivos de papéis. Para recuperar as
informações armazenadas, algum tipo de procura manual é necessária.
Já nos sistemas de armazenamento digitalizados, os dados são
armazenados em fitas magnéticas ou discos rígidos e o acesso aos
dados é feito através de softwares de computador.

 Por que utilizar sistemas de computadores para armazenar


informações em Banco de Dados?

 Muitas vantagens surgem com a utilização de sistemas de


informações baseados em computadores como:

 Recuperação e atualização das informações;

 Armazenamento das informações em menor espaço do que


no sistema manual;

 Vários usuários podem compartilhar o mesmo dado e utilizá-


lo para diferentes tarefas;

 Controle de redundância das informações;

 Incompatibilidade de dados podem ser previstos;

 Forçar utilização de padronizações;

8
 Controle de acesso e integridade (segurança).

RDBMS (Relational Database Management System)

 Para controlar o acesso e armazenamento de informações é


necessária a utilização de um Sistema de Gerenciamento de Banco de
Dados (DBMS). Um DBMS é um software que gerencia os pedidos dos
usuários para acesso às informações, um DBMS também controla o
armazenamento, a recuperação e a modificação dos dados de interesse
dos usuários.

 O DBMS atua como “interface” entre o armazenamento físico


dos dados e os usuários. Quando um usuário efetua um pedido de
acesso, o DBMS intercepta este pedido e executa as operações
necessárias no Banco de Dados. Portanto, o DBMS “protege” os
usuários do Banco de Dados dos detalhes técnicos dos equipamentos,
da estrutura de armazenamento e da estratégia de acesso.

 Quando um usuário envia uma solicitação ao DBMS, este


intercepta a solicitação, interpreta e realiza as operações necessárias no
banco de dados.

 Várias alternativas existem para implementar um DBMS. Os


tipos mais utilizados são:

 Hierárquico.
 Lista invertida.
 Rede.
 Relacional.

 Os vários Bancos de Dados que têm sido desenvolvidos


recentemente são Relacionais. O Sistema de Gerenciamento de Banco

9
de Dados da ORACLE é relacional. Por essa razão, nós estaremos nos
concentrando unicamente no acesso relacional ao Gerenciador de
Banco de Dados.

Modelo Relacional

 O princípio do modelo relacional surgiu em junho de 1970 num


artigo publicado que se chamava “A Relational Model of Data for Large
Shared Data Banks”. Este artigo foi escrito por Dr. E.F. Codd.

 Para os usuários, o Banco de Dados Relacional é uma coleção


de tabelas bidimensionais as quais são de fácil compreensão. Existem
quatro conceitos que precisamos entender:

 Tabelas.
 Colunas.
 Linhas.
 Campos.

TABELA

Código Nome Endereço


1 Maria Rua 1
2 Pedro Rua 30 Linha

Campo

Coluna

 O Modelo Relacional imita uma parte da Matemática conhecida


como Álgebra Relacional. Esse processo envolve:

 Uma coleção de objetos conhecidos como Relacionamentos;

10
 Um conjunto de ações que agem no relacionamento
produzindo novos relacionamentos.

 Uma relação pode ser vista como uma tabela. A recuperação de


dados é feita através de operações relacionais sobre estas tabelas.

Propriedades de um Banco de Dados Relacional

 Um Banco de Dados Relacional apresenta-se como coleções


de relações (tabelas) ao usuário.

 O formato linha/coluna de uma tabela é a maneira usual de


visualizar os dados.

 Existe um conjunto de operadores para particionar e combinar


coleções de dados (seleção, projeção, produto, join, união, interseção,
diferença).

 A linguagem utilizada para pesquisa à base de dados é não-


procedural e parecida com o inglês.

 O usuário não precisa informar a rota de acesso ao dado e


também não precisa saber como os dados estão armazenados
fisicamente.

 Todos comandos para manuseio dos dados são contemplados


pela linguagem SQL.

11
Arquitetura de Produtos Oracle

 O RDBMS ORACLE é o produto principal da Oracle Corporation.


Ele inclui um gerenciador de banco de dados e diversas ferramentas
para auxiliar os usuários e o administrador do banco de dados -
gerentes de sistema - a manter, monitorar e utilizar os dados.

 O núcleo do RDBMS é o “kernel” o qual efetua as seguintes


tarefas:

 Gerenciar a armazenagem e definição dos dados;

 Controlar e restringir o acesso e concorrência aos dados;

 Permitir “back-up” e recuperação de dados;

 Interpretar SQL.

 Os comandos SQL são utilizados pelos programadores e


usuários para acessar os dados num Banco de Dados ORACLE. Os
programas aplicativos e as ferramentas ORACLE freqüentemente
permite aos usuários acessarem dados no banco de dados sem
diretamente utilizar SQL, mas essas aplicações devem também utilizar
SQL quando executar seus pedidos de acesso. Portanto o banco de
dados pode ser acessado unicamente utilizando SQL.

 Uma parte do Kernel é o otimizador. O otimizador examina rotas


de acesso para resolver e otimizar solicitações de um comando SQL.

 A ORACLE oferece uma variedade adicional de ferramentas


para acessar os dados no Banco de Dados.

12
SQL

 Um sistema gerenciador de banco de dados necessita de uma


linguagem de consulta para permitir que o usuário acesse os dados.
Structured Query Language (SQL - pronuncia-se “sequel”) é a
linguagem adotada pela maioria dos bancos relacionais.

 O SQL foi desenvolvido em um protótipo de sistema de banco


de dados relacionais - sistema R - da IBM no meio dos anos 70. Em
1979, a Oracle lançou o primeiro banco de dados relacional comercial
que se utilizava de SQL.

Características do SQL

 SQL é uma linguagem “English-like”. Ela utiliza palavras como


select, insert, delete como parte de seu conjunto de comandos.

 SQL não é uma linguagem procedural. Você identifica quais


informações você precisa e não como buscá-las. Em outras palavras, a
linguagem SQL não requer que você especifique o método de acesso
aos dados. Todos os comandos SQL utilizam o otimizador - parte do
“kernel” do RDBMS - para determinar a maneira mais rápida de
recuperar os dados.

 SQL processa conjuntos de registros ao invés de um único


registro por vez. A mais comum forma de conjunto é uma tabela.

 SQL pode ser usado por um conjunto de usuários incluindo


DBA´s, programadores, gerentes de pessoal e muitos outros grupos de
usuários.

 SQL contém comandos que efetuam uma variedade de tarefas


como:

13
 Consulta aos dados.
 Inserir, atualizar e remover linhas de uma tabela.
 Criar, modificar e remover objetos do Banco de Dados.
 Controlar o acesso ao Banco de Dados e seus objetos.
 Garantir a consistência do Banco de Dados.

O que é SQL*Plus

 SQL*PLUS é uma interface pela qual pode-se entrar e executar


comandos SQL. Existem vários comandos de SQL*PLUS os quais
podem facilitar processos e formatar resultados de comandos de SQL,
podendo editá-los e até gravá-los.

 É a interface básica para manipulações genéricas de um banco


de dados ORACLE.

SQL*PLUS
SQL + Parâmetros de DB
controle de ORACLE
comandos Formatação
de controle

 Características principais:

 Interpretador de comandos SQL;

 Possui extensões para formatação de relatórios.

14
PL/SQL

 Desde a versão 6 do ORACLE, foi introduzido uma opção no


RDBMS chamada PL/SQL (Procedural Language for SQL). PL/SQL
aumenta a capacidade do SQL oferecendo blocos de construtores
procedimentais combinados com a capacidade de manipulação de
dados de forma não procedimental do SQL. As principais características
do PL/SQL são:

 Declaração de variáveis.

 Atribuições ( X := Y + Z).

 Controles condicionais ( IF, THEN, ELSE, ELSIF, GO TO).

 Repetições de comandos - looping ( FOR, WHILE, EXIT,


WHEN).

 Gerenciamento de exceções.

 Aumenta a performance (operações processadas junto aos


dados).

 Aumenta produtividade.

 O PL/SQL oferece:

 Aumento de Performance

 Quando você utiliza SQL, seus comandos são enviados


e processados pelo RDBMS um por vez, enquanto um
bloco de comandos PL/SQL que contém um número de

15
comandos SQL combinados com construtores PL/SQL
são enviados e processados pelo RDBMS uma única
vez. Esta característica aumenta a performance
especialmente em sistemas cliente/servidor.

 Comandos PL/SQL são tratados pela “engine” PL/SQL


que faz parte do “Kernel”, ou parte das ferramentas
ORACLE. Comandos SQL são executados pelo
executor de SQL do “Kernel”.

 Aumento de Produtividade
 PL/SQL adiciona o poder do processamento procedural
no desenvolvimento de aplicativos. Adicionalmente
aplicativos escritos em PL/SQL são portáveis para
qualquer computador ou sistema operacional que
execute o ORACLE RDBMS.

 O PL/SQL deve ser visto como uma tecnologia e não


como um produto externo ao RDBMS.

Conjunto de Comandos SQL

SELECT Este é o comando mais utilizado, ele é


utilizado para recuperar dados do banco
de dados.

INSERT / UPDATE / Estes comandos são utilizados para


DELETE entrar com novas linhas, alterar as linhas
já existentes e removê-las das tabelas
em um específico Banco de Dados. São
também conhecidos como comandos
DML (Data Manipulation Language).

CREATE/ALTER/DROP Estes comandos são utilizados


dinamicamente
para configurar (criar, alterar e remover)

16
estrutura de dados. São também
conhecidos como comandos DDL (Data
Definition Language).

Nota : Existem mais comandos SQL os quais estão referenciados


no SQL*PLUS, Reference Guide.
Incluindo novas Linhas em uma Tabela

* O comando INSERT é usado para inserir linhas em uma tabela.

* Sintaxe:

INSERT INTO table


schema. View @dblink

,
VALUES ( expr )
,

( column ) subquery_2

Onde:

schema É o schema contendo a tabela ou visão. Se


você omitir o eschema, o Oracle assume a
tabela ou visão como seu próprio dono.
table, view É o nome da tabela no qual as linhas serão
inseridas. Se você especificar uma visão, o
Oracle insere linhas na tabela que a visão
baseia-se.
Dblink É o nome completo ou parcial de um link de
banco de dados para um banco de dados
remoto onde a tabela ou visão está
localizada. Se você omitir dblink, o Oracle
assume que a tabela ou visão está em um
banco de dados local.
Column É uma coluna da tabela ou visão. Na linha
inserida, cada coluna nesta lista está
atribuída a um valor na cláusula VALUES ou
a subconsulta.

17
VALUES Especifica uma linha de valores a serem
inseridos na tabela ou visão.
subsquery_2 É uma subconsulta que retorna linhas que
são inseridas na tabela. A lista selecionada
desta consulta tem que ter o mesmo número
de colunas da lista do comando INSERT.

* Caracteres e datas devem sempre estar entre aspas simples.

* Para você inserir linhas em uma tabela, a tabela tem que ser
sua ou você tem que ter privilégios sobre ela.

* O privilégio de sistema INSERT ANY TABLE também


permite a você inserir linhas em qualquer tabela de qualquer usuário.

Comando UPDATE

OBJETIVOS

 Identificar as variações do comando UPDATE

Alterando Linhas de uma Tabela

 O comando UPDATE é usado para alterar valores já


armazenados em tabelas.

 Para você atualizar linhas em uma tabela, a tabela tem que ser
sua ou você tem que ter privilégios sobre ela.

 O privilégio de sistema UPDATE ANY TABLE também permite


a você alterar linhas em qualquer tabela de qualquer usuário.

18
 Sintaxe:

UPDATE

,
table

schema. View @dblink t_alias

snapshot

( subquery_1 )

,
,

SET ( column ) = ( subquery_2 )

column = expr

( subquery_3 )

WHERE condição

Onde:

schema É o schema contendo a tabela ou visão. Se


você omitir o schema, o Oracle assume a
tabela ou visão como seu próprio dono.
table, view É o nome da tabela no qual está sendo
atualizada. Se você especificar uma visão, o
Oracle atualiza na tabela que a visão baseia-
se.
dblink É o nome completo ou parcial de um link de
banco de dados para um banco de dados
remoto onde a tabela ou visão está

19
localizada. Se você omitir dblink, o Oracle
assume que a tabela ou visão está em um
banco de dados local.
alias É um nome diferente para a tabela, visão ou
subconsulta para ser referenciada no
comando.
subquery_1 É uma subconsulta que o Oracle trata da
mesma maneira que uma visão.
column É o nome de uma coluna para a tabela ou
visão que está sendo atualizada. Se você
omitir a coluna da tabela na cláusula SET, o
valor da coluna permanece inalterado.
expr É o novo valor atribuído a coluna
correspondente.
subquery_2 É uma subconsulta que retorna novos valores
que são atribuídos para colunas
correspondentes.
subquery_3 É uma subconsulta que retorna um novo
valor que está atribuído a coluna
correspondente.
where Restrição para atualizar as linhas. Se essa
cláusula for omitida, o Oracle atualiza todas
as linhas na tabela ou visão.

Comando DELETE
OBJETIVOS

 Identificar as variações do comando DELETE

20
Removendo Linhas de uma Tabela

 O comando DELETE é usado para remover linhas de uma


tabela:

 Sintaxe:

DELETE table

FROM schema. View @dblink

( subquery )

WHERE condição

Onde:

schema É o schema contendo a tabela ou visão. Se você


omitir o schema, o Oracle assume a tabela ou
visão como seu próprio dono.
table, view É o nome da tabela no qual está sendo apagado
as linhas. Se você especificar uma visão, o Oracle
apaga linhas da tabela que a visão baseia-se.
dblink É o nome completo ou parcial de um link de banco
de dados com um banco de dados remoto onde a
tabela ou visão está localizada. Se você omitir o
dblink o Oracle7 assume que a tabela ou visão
está localizada em um banco de dados local.
subquery É uma subconsulta no qual os dados são
selecionados para serem apagados. O Oracle
executa uma subconsulta e usa o resultado das
linhas como uma tabela na cláusula FROM.
WHERE Apaga somente linhas que satisfaçam a condição.
A condição pode referenciar a tabela e pode conter
uma subconsulta.

 Para você apagar linhas em uma tabela, a tabela tem que ser
sua ou você tem que ter privilégios sobre ela.

 O privilégio de sistema DELETE ANY TABLE também permite a


você apagar linhas em qualquer tabela de qualquer usuário.
21
Comandos SQL*Plus
OBJETIVOS

 Identificar os comandos SQL*Plus mais utilizados.

Edição de Comandos

 O último comando SQL (não SQL*Plus) fica armazenado no


buffer de edição do SQL*Plus.

 Para listar o conteúdo do buffer:

SQL> list
qualquer um desses comandos
ou pode ser utilizado

SQL> l
1 SELECT
2 empno, ename
3 FROM emp
4* WHERE empno = 7902

“*” indica a linha corrente

 Para apagar a linha corrente

SQL> del
SQL> l
1 SELECT
2 empno, ename
3* FROM emp

 Para inserir linhas após a linha corrente:


SQL> list 2
2* empno, ename
SQL> imput

ou

22
SQL> list deixe um linha em branco
3 job, para terminar a inserção
4 sal
5
SQL> list
1 SELECT
2 empno, ename
3 job,
4 sal
5* FROM emp;

 Para acrescentar caracteres no fim da linha corrente:

SQL> list 2
2* empno, ename
SQL> append, mgr,
ou
SQL> a, mgr,
SQL> list
1 SELELCT
2 empno, ename, mgr,
3 job,
4 sal
5* FROM emp;

 Para substituir caracteres da linha corrente:

SQL> list 2
2* empno, ename, mgr,
SQL> change/mgr/sal/

ou

SQL> c/mgr/sal/
SQL> list
1 SELECT
2 empno, ename, sal,
3 job,
4 sal
5* FROM emp

 Para executar o comando existente no buffer:

SQL> run

ou

23
SQL> r

ou

SQL> /

 O SQL*Plus permite a utilização de outros buffers além do buffer


de comandos SQL.
 Para ativar um buffer chamado “TESTE”, por exemplo:

SQL> set buffer teste

 Para saber qual é o buffer corrente:

SQL> show buffer


buffer TESTE

 Para modificar o conteúdo do buffer corrente com um editor


externo:

SQL> edit

 Para salvar o buffer corrente num arquivo do Sistema


Operacional:

SQL> save arquivo

nome do arquivo; a extensão .sql é


acrescentada automaticamente

 Para recuperar um comando SQL armazenado num arquivo:

SQL> get arquivo

 Para remover o conteúdo do buffer corrente:

SQL> clear buffer

 Para executar uma sequência de comandos (SQL ou SQL*Plus)


armazenada num arquivo:

SQL> start arquivo

24
ou

SQL> @arquivo

Operadores e Substituição de
Variáveis
OBJETIVOS

 Utilização de operadores de substituição de variáveis.

Operadores Aritméticos

Os operadores aritméticos são utilizados para somar, subtrair,


multiplicar e dividir valores numéricos. Os operadores de maior
precedência, os parênteses, conforme pode ser observado na tabela
seguinte, permite alterar a ordem de avaliação dos operadores das
expressões. Esta tabela lista os operadores aritméticos na ordem
decrescente de precedência:

( ) Alteram as regras de precedência dos operadores. Os


operadores entre os parênteses são avaliados em primeiro
lugar.

SELECT (2+2) / (2-1) from dual;

+ - Assinalam uma expressão como positiva ou negativa.

SELECT * FROM EMP WHERE COMM = -10


SELECT * FROM EMP WHERE SAL > 1000

* / Multiplicam e dividem valores numéricos.

25
SELECT 2*X+10
... WHERE X > Y / 2

+ - Somam e subtraem valores numéricos.

SELECT 2 * X + 1
... WHERE X > Y - Z

Operadores de Caracteres

 Os operadores de caracteres são usados em expressões para


manipular strings de caracter. A seguir o único tipo de operador de
caracter:

|| Faz a concatenação de strings de caracteres, ou seja,


encadeiam ou ligam duas strings.

SELECT ´O Nome é´ || ename from emp

 O resultado da concatenação é um valor caracter. As strings de


caracteres dos tipos de dados CHAR podem ter o máximo de 255
caracteres. Esta restrição aplica-se também às strings de caracteres
formadas pela concatenação de duas outras strings.

Operadores de Comparação

26
 Os operadores de comparação são usados em condições que
comparam duas expressões. Assim como as condições, os resultados
das comparações entre expressões podem ser verdadeiro ou falso. A
tabela a seguir lista os operadores de comparação:

() Alteram as regras de validação das precedências dos


operadores.

SELECT (SAL + COMM)/2 from emp;


= Testa a igualdade entre expressões.

SELECT * FROM EMP WHERE SAL = 1000;


!= ^= <> Testam a diferença entre expressões.

SELECT * FROM EMP WHERE SAL <> 1000;


> Testa se uma expressão é maior que outra.

SELECT * FROM EMP WHERE SAL > 1000


< Testa se uma expressão é menor que outra.

SELECT * FROM EMP WHERE SAL < 1000

>= Testa se uma expressão é maior ou igual a outra.

SELECT * FROM EMP WHERE SAL >= 1000

<= Testa se uma expressão é menor ou igual a outra.


SELECT * FROM EMP WHERE SAL <= 1000
IN Verifica se uma expressão existe em um dos membros
especificados entre parênteses logo após o operador.
Esses membros são strings de caracteres que devem
aparecer entre aspas simples e separados por vírgula.
O operador é equivalente ao operador “=ANY”.

SELECT * FROM EMP WHERE JOB IN


(´SALESMAN´,´CLERK´)
NOT IN Valida a expressão como falsa se algum membro que
segue o operador é nulo. Esses membros são os
valores retornados de uma pesquisa efetuada com
SELECT, por exemplo. É equivalente a “!= ALL”. Todas

27
as linhas serão avaliadas como falso se qualquer
membro da lista de valores referenciada pelo operador
NOT IN for nulo.

SELECT * FROM EMP WHERE JOB NOT IN


(´SALESMAN´,´CLERK´)
NOT Validam uma expressão como sendo maior ou igual ao
BETWEEN – valor que segue BETWEEN e menor ou igual ao valor
AND que segue AND.
NOT LIKE Este operador é usado para comparar duas strings de
caracteres e verificar se elas são parecidas.
 Podem ser utilizados caracteres % e _ . O caracter
percentual (%) é utilizado para comparar um ou
mesmo nenhum caracter, entretanto não pode
comparar um valor nulo. O caracter sublinhado (_) é
utilizado para comparar exatamente um caracter.
 Função UPPER: utilizada para fazer com que as
expressões sejam avaliadas corretamente
comparando letras minúsculas e maiúsculas.

... SELECT SAL


FROM EMP
IS NOT Este operador deve ser usado quando for necessário
NULL testar uma condição para verificar se ela é nula ou não.

... WHERE X IS NOT NULL

Operadores Lógicos

 Os operadores lógicos são usados para afetar o resultado de


múltiplas condições. O operador AND requer que a linha satisfaça todas
as duas condições comparadas. Pôr sua vez, o operador OR requer que
a linha satisfaça pelo menos uma das duas condições comparadas.

Substituição de Variáveis

 Você pode utilizar variáveis nos arquivos de comandos ou nos


comandos SQL para representar valores que serão entrados em tempo
de execução.

28
 Uma variável começa sempre com o caracter & e é sempre
temporária. Para definir uma variável permanente deve-se utilizar &&.

 Pegar o número do departamento em tempo de execução.

SELECT empno, ename, sal


FROM emp
WHERE deptno = &numero_departamento;

Enter value from numero_departamento:

 Se a variável for do tipo caracter, deve-se entrar com a


informação entre aspas simples.

29
Unidade II

Group by e Order by

OBJETIVOS

 Identificar as funcionalidades e variações do group by;

 Identificar as funcionalidades e variações do order by;

Ordenação de Resultados

 Normalmente a ordem das colunas resultantes de uma pesquisa


é indefinida. A cláusula ORDER BY pode ser utilizada para organizar as
linhas. Se usada, ela sempre deve ser a última cláusula da sentença do
SELECT.

ASC Parâmetro default, ordena o resultado da pesquisa pelas


colunas especificada na ordem ascendente.

DESC Ordena o resultado da pesquisa pelas colunas


especificada na ordem decrescente.

Cláusula Group By

 A cláusula GROUP BY pode ser usada para dividir as linhas de


uma tabela em pequenos grupos. Funções de grupos podem ser
utilizadas para retornar uma informação sumarizada de cada grupo.

coluna do agrupamento todas as linhas

30
SQL> SELECT deptno, count(*)
2 FROM emp função de grupo
3 GROUP BY deptno;

DEPTNO COUNT(*)
10 3
20 5
30 6

Cláusula HAVING

 Se quiser especificar quais grupos serão exibidos, utilize a


cláusula HAVING.

SELECT deptno, avg(sal)


FROM emp
GROUP BY deptno
HAVING count (*) > 3;

 É recomendado que a cláusula GROUP BY venha antes da


cláusula HAVING.

Join e Outer join


OBJETIVOS

 Entender a junção de tabelas em um comando SELECT;

 Identificar o uso do outer join.

31
Junção de Tabelas

 Um Join é uma consulta que combina linhas de duas ou mais


tabelas, visões ou snapshots. O Oracle7 executa um join quando
múltiplas tabelas aparecem na cláusula FROM.

 A lista selecionada da coluna pode conter qualquer coluna de


qualquer tabela. Caso haja colunas com o mesmo nome, você tem que
especificar de qual tabela é a determinada coluna.

 A junção de tabelas corresponde à operação de produto


cartesiano entre conjuntos:

A,
B, C X 1,2

(A,1), (A,2),

(B,1), (B,2),

(C,1), (C,2)

tab1 tab2
col1 col2 col3 col4 col5
A 3 B 2 E

select col1, col2, col3, col4, col5


from tab1, tab2;

col1 col2 col3 col4 col5


A 3 B 2 E

32
 Para saber o nome do departamento onde cada empregado
trabalha:

produto cartesiano

SQL> SELECT ename, dname


2 FROM emp, dept
3 WHRE [Link] = [Link]; critério de seleção da
junção

para diferenciar colunas de


mesmo nome usa-se o no-
me da tabela como prefixo

ENAME DNAME
SMITH RESEARCH
ALLEN SALES
WARD SALES
JONES RESEARCH
MARTIN SALES
BLAKE SALES
CLARK ACCOUNTING
SCOTT RESEARCH
KING ACCOUNTING
TURNER SALES
ADAMS RESEARCH
JAMES SALES
FORD RESEARCH
MILLER ACCOUNTING

ENAME DEPTNO [Link] [Link]


SMITH ACCOUNTING 20 10
ALLEN ACCOUNTING 30 10
WARD ACCOUNTING 30 10
JONES ACCOUNTING 20 10
MARTIN ACCOUNTING 30 10
BLAKE ACCOUNTING 30 10
CLARK ACCOUNTING 10 10
SCOTT ACCOUNTING 20 10
KING ACCOUNTING 10 10
TURNER ACCOUNTING 30 10
ADAMS ACCOUNTING 20 10
JAMES ACCOUNTING 30 10
FORD ACCOUNTING 20 10
MILLER ACCOUNTING 10 10
SMITH RESEARCH 20 20

33
ALLEN RESEARCH 30 20
WARD RESEARCH 30 20
JONES RESEARCH 20 20
MARTIN RESEARCH 30 20
BLAKE RESEARCH 30 20
CLARK RESEARCH 10 20
SCOTT RESEARCH 20 20
KING RESEARCH 10 20
TURNER RESEARCH 30 20
ADAMS RESEARCH 20 20
JAMES RESEARCH 30 20
FORD RESEARCH 20 20
MILLER RESEARCH 10 20
SMITH SALES 20 30
ALLEN SALES 30 30
WARD SALES 30 30
JONES SALES 20 30
MARTIN SALES 30 30
BLAKE SALES 30 30
CLARK SALES 10 30
SCOTT SALES 20 30
KING SALES 10 30
TURNER SALES 30 30
ADAMS SALES 20 30
JAMES SALES 30 30
FORD SALES 20 30
MILLER SALES 10 30
SMITH OPERATIONS 20 40
ALLEN OPERATIONS 30 40
WARD OPERATIONS 30 40
JONES OPERATIONS 20 40
MARTIN OPERATIONS 30 40
BLAKE OPERATIONS 30 40
CLARK OPERATIONS 10 40
SCOTT OPERATIONS 20 40
KING OPERATIONS 10 40
TURNER OPERATIONS 30 40
ADAMS OPERATIONS 20 40
JAMES OPERATIONS 30 40
FORD OPERATIONS 20 40
MILLER OPERATIONS 10 40

34
Auto Relacionamento e Consulta
Hierárquica

OBJETIVOS

 Descrever o uso do auto relacionamento e consulta


hierárquica em um comando SELECT.

Auto Relacionamento

 As tabelas envolvidas numa junção não precisam ser distintas.

 Para descobrir quais gerentes estão ganhando menos que o


dobro do maior salário de seus subordinados:

pseudônimos para tabelas

SQL> SELECT [Link] gerente, [Link], max(2*[Link])


2 FROM emp trab, emp ger
3 WHERE [Link] = [Link]
4 GROUP BY [Link], [Link]
5 HAVING max(2*[Link]) > [Link];

GERENTE SAL MAX(2*[Link])


BLAKE 2850 3200
CLARK 2450 2600
JONES 2975 6000
KING 5000 5950

Consultas Hierárquicas

 Oracle permite recuperar informações estruturadas de forma


hierárquica (“em árvore”):
35
 Você pode selecionar linhas em uma ordem hierárquica usando
as seguintes cláusulas

START WITH Você pode especificar linha(s) pai de uma hierarquia.


CONNECT BY Você pode especificar o relacionamento entre linhas
pais e linhas filhas de uma hierarquia.
WHERE Você pode restringir as linhas retornadas pela
consulta sem afetar outras linhas da hierarquia.

 A cláusula START WITH identifica a(s) linha(s) a ser(em)


usada(s) como raiz(es) de uma consulta hierárquica. Esta cláusula
especifica uma condição que a raiz tem que satisfazer. Se você omitir
essa cláusula, o Oracle7 usa todas as linhas na tabela como linhas raiz.

 A cláusula CONNECT BY especifica o relacionamento entre


linhas pais e filhas na consulta hierárquica. Esta cláusula contém uma
condição que define este relacionamento. Alguma parte da condição tem
que usar o operador PRIOR para se referir a linha pai.

 Para encontrar o filho de uma linha pai, o Oracle7 executa a


expressão PRIOR para a linha pai e a outra expressão para cada linha
na tabela. Linhas para o qual a condição é verdadeira são filhas.

 Se a cláusula CONNECT BY resultar em um loop na hierarquia,


o Oracle7 retorna um erro. Um loop ocorre se uma linha é pai e filha de
uma outra linha

 A seguinte cláusula CONNECT BY define um relacionamento


hierárquico no qual o valor EMPNO da linha pai seja igual ao valor do
MGR da linha filha.

CONNECT BY PRIOR empno = mgr

75 / PRESIDENTE

36
110 / DIRETOR 230 / SECRETÁRIA 189 / DIRETOR

103 / ANALISTA 276 / ANALISTA 201 / VENDEDOR 208/VENDEDOR

EMP ENAME JOB MGR HIREDATE SAL COMM DEPTNO


7369 SMITH CLERK 7902 17-DEC-80 800 20
7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10

 Para saber todos os superiores do SCOTT:

SQL> SELECT empno, ename, job


2 FROM emp indica o sentido da consulta:
3 WHERE ename <> ‘SCOTT’ do empregado para o chefe
4 CONNECT BY empno = PRIOR mgr
5 START WITH ename = ‘SCOTT’;

especifica a conexão da indica o começo da


coluna consulta

37
Subquery
OBJETIVOS

 Descrever o uso e aplicação de uma subquery.

Consultas Encaixadas

 Uma subquery é um comando SELECT que está contido em um


outro comando SELECT.

 O comando que contém a subconsulta é chamado de comando


pai. As linhas retornadas pela subconsulta são usadas pelo comando
pai.

 Subqueries podem:

 Retornar uma ou mais linhas.

 Retornar uma ou mais colunas.

 Utilizar funções de grupos ou GROUP BY.

 Agrupar tabelas.

 Uma subconsulta pode fazer referências a colunas do comando


no qual ela está encaixada.

SELECT coluna1, coluna2,...


FROM tabela
WHERE coluna = ( SELECT coluna
FROM tabela
WHERE condicao )

38
 Para saber quais empregados ganham mais que a média dos
salários:

SQL> SELECT empno, ename, sal parênteses delimitam a


2 FROM emp subconsulta
3 WHERE sal > (select avg(sal) from emp);

resultado desta subconsulta


é um único valor

Funções
OBJETIVOS

 Identificar as principais funções Oracle.

Funções Numéricas
 As funções numéricas recebem um número como parâmetro e
retornam outro valor numérico.

Função ABS

Retorna o valor absoluto do número.

ABS (numero)

SELECT ABS(-10) FROM DUAL;

Função FLOOR

Retorna o menor número inteiro da expressão.

FLOOR(expr)

39
SELECT FLOOR(10.7) FROM DUAL;

Função CEIL

Retorna o maior número inteiro da expressão.

CEIL(expr)

SELECT CEIL(10.7) FROM DUAL;

Função MOD

Retorna o resto da divisão do primeiro pelo segundo número.

MOD(numero1, numero2)

SELECT MOD(7,5) FROM DUAL;

Função POWER

Retorna o valor do primeiro número elevado ao segundo número


(potência). Se o segundo número não for um inteiro, um erro é
retornado.

POWER(numero1,numero2)

SELECT POWER(3,2) FROM DUAL;

Função ROUND

40
Retorna o valor do primeiro número arredondado para o segundo
número de casas a direita do ponto decimal. Se o segundo número for
omitido, arredonda o primeiro número sem casas decimais. O segundo
número pode assumir valores negativos, sendo que nesse caso o
primeiro número será arredondado à esquerda do ponto decimal. O
segundo número deve ser um inteiro.

ROUND(numero1,numero2)

SELECT ROUND(15.193,1) FROM DUAL

Função SQRT

Retorna a raiz quadrada do número. No caso do número ser


negativo, a função SQRT retornará um valor nulo. Nas outras vezes,
retornará sempre um resultado real.

SQRT(numero)

SELECT SQRT(36) FROM DUAL;

Função TRUNC

Retorna o primeiro número truncado de tantas casas decimais


quando forem especificadas pelo segundo número. Se o segundo
número for omitido, trunca o primeiro número no ponto decimal. Se o
segundo número for negativo, trunca o primeiro número à esquerda do
ponto decimal. O segundo número precisa ser inteiro.

TRUNC(numero1,numero2)

41
SELECT TRUNC(15.79,1) FROM DUAL;
Funções de Caracter

 As funções caracter recebem um parâmetro caracter e retornam


um valor caracter ou um valor numérico.

Função INITICAP

Retorna a string de caracteres char com as primeiras letras de


cada uma das palavras que forma em maiúscula e todas as outras em
minúsculas. As palavras são delimitadas por espaços.

INITICAP(CHAR)

SELECT INITCAP (‘WENDEL BRUSTOLIN’) FROM DUAL;

Função INSTR

Retorna a posição da ocorrência de char2 na string de caracteres


char1. A pesquisa inicia-se na posição num1 e, caso num1 seja omitido,
é assumido o início da string. O número num2 especifica qual a
ocorrência que deverá ser pesquisada. Por exemplo, se num2 for 1 será
pesquisada a primeira ocorrência; se num2 for 2, a segunda; se num2
for 3, a terceira ocorrência será pesquisada e daí por diante. No caso de
num2 ser omitido, é assumida a primeira ocorrência de char2.

INSTR(CHAR1,CHAR2,NUM1,NUM2)

SELECT INSTR(‘LEVEL X EBN’,’E’,3,2) FROM DUAL;

Função LENGTH

Retorna o tamanho da string.


42
LENGTH(CHAR)

SELECT LENGTH(‘REPUBLICA’) FROM DUAL;

Função LOWER

Transforma todos os caracteres da string char em letras


minúsculas.

LOWER(CHAR)

SELECT LOWER(‘DBS INFORMATICA’) FROM DUAL;

Função LPAD

Insere os caracteres de char2 no início da string char1 e os repete


até que a string char1 fique com um tamanho em caracteres
especificado por num.

LPAD(CHAR1,NUM,CHAR2)

SELECT LPAD(‘Banco’,20, ‘X’) FROM DUAL;

Função RPAD

Inclui char2 no final da string de caracteres char1 até que char1


fique com o tamanho em caracteres especificado por num.

RPAD(CHAR1,NUM,CHAR2)

SELECT RPAD(‘RAZAO’,10,’x’) FROM DUAL;

Função LTRIM
43
Remove todos os caracteres especificados em char2 que
constarem à esquerda da string de caracteres char1, até que um dos
caracteres seja diferente dos especificados. Esta função é semelhante à
função RTRIM.

LTRIM(CHAR1,CHAR2)

SELECT LTRIM(‘xxxXxxxLTRIM’,’x’) FROM DUAL;

Função RTRIM

Remove todos os caracteres à direita de char1 que sejam iguais


aos caracteres especificados em char2, até que um dos caracteres de
char1 seja diferente. Esta função é semelhante à função LTRIM.

RTRIM(CHAR1,CHAR2)

SELECT RTRIM(‘LEVELxxXxxxx’,’x’) FROM DUAL;

Função SUBSTR

Retorna uma parte da string de caracteres char que se inicia na


posição num1 com num2 posições.

SUBSTR(CHAR,NUM1,NUM2)

SELECT SUBSTR('DSFEMDC39DKDBS3EID39DKW',12,3)
FROM DUAL

Função UPPER

44
Transforma a string de caracteres char em letras maiúsculas.

UPPER(CHAR)

SELECT UPPER(‘Wendel Brustolin’) FROM DUAL;

Função REPLACE

Esta função é utilizada para substituir caracteres.

REPLACE (coluna/valor,string,string_substituto)

SELECT ename, REPLACE (ename,’C’, ‘P’), job,


REPLACE(job,’SALESMAN’,’AGENTE_DE_VENDAS’)
FROM emp
WHERE deptno = 10;

nome REPLACE(ename,’P’,’C’) Cargo REPLACE(job,’Salesman’,’Agente’)


Pedro Cedro Salesman Agente
Carlos Carlos Gerente Gerente

Funções de Conversão

 As funções de conversão são usadas para converter valores de


tipos de dados diferentes.

Função TO_CHAR

Converte um valor do tipo NUMBER ou DATE para uma string de


caracteres formatada segundo a caracterização especificada em
formato, opcionalmente. Os formatos são discutidos mais tarde neste
capítulo. Se o formato for omitido, num é convertido para uma string de
caracteres do mesmo tamanho dos números significativos de num, se
for número.

45
TO_CHAR(NUM | DATE, FORMATO)

SELECT TO_CHAR(SYSDATE, ‘DD/MM/YYYY HH24:MI:SS’) FROM DUAL;

Função TO_DATE

Converte uma string de caracteres especificando uma data em um


valor do tipo DATE. A data do dia é usada para providenciar
informações adicionais na conversão de caracteres para data.

TO_DATE(CHAR, FORMATO)

SELECT TO_DATE(‘December 11, 1969’, ‘Month DD,YYYY’) FROM DUAL;

Função TO_NUMBER

Converte a string de caracteres char, contendo um número, para o


tipo de dados NUMBER.

TO_NUMBER(CHAR)

UPDATE emp
SET SAL = SAL + TO_NUMBER(‘250’);

FORMATOS:

SCC ou CC Século, o prefixo S substitui data AC por ‘-’.

YYYY ou SYYYY Ano, o prefixo S substitui data AC por ‘-’.

YYY ou YY ou Y Últimos 3,2 ou 1 dígitos do ano.

Y,YYY Ano com uma vírgula nesta posição.

SYEAR ou YEAR Ano por extenso, o prefixo S substitui data AC por ‘-’.

BC ou AD Indicadores AC(BC) e DC(AD).

B.C. ou A.D. Indicadores AC(BC) e DC(AD) com períodos.

Q Trimestre.

46
MM Mês.

MONTH Nome do mês ( 9 caracteres).

MON Nome do mês abreviado nas três primeiras letras.

WW ou W Semana do ano ou mês.

DDD ou DD ou D Dia do ano, mês ou semana.

DAY Nome do dia ( 9 caracteres ).

DY Nome do dia abreviado nas três primeiras letras.

J Data Juliana.

AM ou PM Indicador Meridiano.

A.M. ou P.M. Indicador Meridiano com períodos.

HH ou HH12 Horas do dia ( 1-12 ).

HH24 Horas do dia ( 0-23 ).

MI Minutos.

SS Segundos.

SSSSS Segundos passados da meia-noite.

Funções que aceitam qualquer tipo de Dado como


Entrada

Função DECODE

DECODE é uma das mais poderosas funções do SQL. Esta função


facilita requisições condicionais fazem o papel de um comando CASE ou
IF-THEN ELSE.

DECODE (coluna/expressão,
escolha1, resultado1, escolha2, resultado2, ..., default )

A coluna/expressão entrada é comparada com cada escolha e


retorna o resultado correspondente. Se não for encontrado nenhuma
47
escolha igual coluna/expressão, a função DECODE retornará o valor
default.

SELECT job, sal, DECODE ( job, ‘SALESMAN’, sal*1.1,


‘MANAGER’,sal*0.95,sal)
FROM emp;

Função GREATEST

Retorna a maior lista dos valores entrados.

GREATEST (coluna/valor1,coluna/valor2,...)

SELECT GREATEST (1000,2000), GREATEST (sal, comm)


FROM emp;

Função LEAST

Retorna o menor valor da lista de valores.

LEAST (coluna/valor1,coluna/valor2,...)

SELECT LEAST (1000,2000), LEAST (sal, comm)


FROM emp;
Funções de Datas

 As funções data são utilizadas para operar com os tipos de


dados DATE do ORACLE. Sempre retornam um valor do tipo DATE,
exceto a função MONTHS_BETWEEN que retorna um valor numérico.

Função ADD_MONTHS

Retorna a data dat adicionada de num meses. Se o número num


for negativo, os meses serão subtraídos. O número num sempre deve
ser um inteiro.

ADD_MONTHS(DAT,NUM)

48
SELECT HIREDATE, ADD_MONTHS(HIREDATE, 12) FROM emp;

Função NEXT_DAY

Retornar a data no próximo dia da semana especificado no char1


depois do dia dat1.

NEXT_DAY(dat1,char1)

SELECT hiredate, NEXT_DAY(hiredate,’FRIDAY’),


NEXT_DAY(hiredate,6)
FROM emp
WHERE deptno = 10;
Função LAST_DAY

Retorna a data do último dia do mês da data dat1.

LAST_DAY(dat1)

SELECT sysdate, last_day(sysdate), LAST_DAY(‘25-FEB-1984’)


FROM DUAL;

Função ROUND

Quando utilizado com o parâmetro MONTH retorna o primeiro dia


do mês da quinzena da data referente, se esta estiver na primeira
quinzena, caso contrário, retornará o primeiro dia do próximo mês.
Quando utilizado com o parâmetro YEAR retorna o primeiro dia do ano
da data referente se esta estiver no primeiro semestre, caso contrário
retornará o primeiro dia do próximo ano. Quando utilizado sem
parâmetro, retorna a data com a hora igual a 12:00AM.

ROUND (dat1,’MONTH’/’YEAR’)

SELECT sysdate, ROUND(sysdate,’MONTH’), ROUND(sysdate,’YEAR’)


FROM DUAL;

49
Função TRUNC

Retorna o primeiro dia do mês da data referente se utilizado com o


parâmetro MONTH. Se utilizado com o parâmetro YEAR, retornará o
primeiro dia do ano da data referente.

TRUNC(dat1,’MONTH’/’YEAR’)

SELECT TRUNC(sysdate), TRUNC(sysdate,’MM’), TRUNC(sysdate,’YYYY’)


FROM DUAL;

Função MONTHS_BETWEEN

Retorna o número de meses entre as datas dat1 e dat2. Se dat1


for posterior a dat2, o valor retornado é positivo. Se dat2 for maior que
dat1, então o valor retornado é negativo.

MONTHS_BETWEEN (DAT1,DAT2)

SELECT MONTHS_BETWEEN(‘02-FEB-1986’,’01-JAN-1986’) FROM DUAL;

Função SYSDATE

Retorna a data e hora atual do sistema. Não requer argumentos.

SYSDATE

SELECT SYSDATE FROM DUAL;

50
51
Unidade III

Estrutura de Dados
OBJETIVOS

 Criar tabelas Oracle;

Estrutura de Dados Oracle

 Tabelas podem ser criadas a qualquer hora, mesmo que o


Banco de Dados esteja sendo utilizado.

 O tamanho dos dados são variáveis, somente são armazenados


os caracteres e números. Os espaços em branco não são armazenados.

 Não há necessidade de especificar o tamanho de alguma tabela.


Isto é definido pelo espaço determinado para o Banco de Dados. Mas é
importante sempre verificar o tamanho das tabelas.

 As estruturas das tabelas podem ser modificas quando estão em


uso.

Criando uma Tabela


 O nome escolhido para a tabela deve sempre seguir as regras
básicas de nomenclatura dos objetos do Banco de Dados ORACLE.

1. O nome sempre deve começar com letra (A - Z).

2. Pode-se utilizar letras, números e caracteres especiais.

3. O nome da tabela não é sensível a letras maiúsculas e


minúsculas.

52
4. Deve ter no máximo 30 caracteres.

5. Não pode existir duas tabelas, visões ou sinônimos para um


mesmo usuário com o mesmo nome.

Diretrizes para Criação de Nomes de Tabelas

 Utilize nomes auto-descritivos para tabelas, colunas, índices ou


outros objetos.

 Cuidado com as abreviações e o uso de singular e plural nos


nomes das tabelas.

 Crie padrões para nomear os objetos. Ex.: tabela de notas


fiscais - nota_fiscal.

 Utilize os mesmos nomes definidos para as entidade-atributos


para descreverem a tabela-coluna relacionada.

Tipos de Colunas
 Quando criar uma tabela, você deve especificar os tipos das
colunas. Os mais utilizados são:

CHAR (n) Valores tipo CHAR consistem em palavras


compostas por letras minúsculas e maiúsculas,
números e caracteres especiais. O número de
caracteres é especificado por n e não pode ser
maior que 255. Não usa armazenamento dinâmico.

VARCHAR2(n) São valores tipo CHAR com no máximo 4000


posições. Usa armazenamento dinâmico.

NUMBER (n,m) São valores numéricos (0 - 9) e caracteres de sinal


(+ -) e ponto decimal. n - m são números inteiros e
m são decimais. Usa armazenamento dinâmico.

53
DATE São valores tipo data. Ex.: December 31, 4712
BC. Usa 7 bytes.

LONG Similar ao tipo VARCHAR2, mas aceita a


quantidade de caracteres acima de 65.535. Só
pode ser definida uma coluna LONG por tabela.

A Opção NULL e NOT NULL

NULL Esta opção define que a coluna pode possuir


valores nulos. Esta opção é default e pode ser
omitida.

NOT NULL Esta opção assegura que a coluna sempre tenha


valores diferentes de nulo. Se tentar incluir uma
linha com a coluna que tem essa opção sem valor, o
ORACLE enviará uma mensagem de erro.

Cláusula CONSTRAINT
 O Banco de Dados Oracle suporta documentação para
integridade armazenando informações sobre verificação de integridade
no dicionário de dados. Uma Constraint de integridade é uma regra que
define um relacionamento entre tabelas de um banco de dados. Por
exemplo, uma constraint de integridade pode definir que um funcionário
não esteja contido em dois ou mais departamentos.

 Uma constraint pode ser definida para tabelas e colunas e são


definidas no comando CREATE ou ALTER TABLE.

54
 O objetivo de uma constraint é definir um intervalo de valores
válidos. Para que os comandos INSERT, UPDATE e DELETE sejam
executados com sucesso, devem obedecer as regras de constraint
estabelecidas.

 A constraint é definir um intervalo de valores válidos. Para que


os comandos INSERT, UPDATE e DELETE sejam executados com
sucesso, devem obedecer as regras de constraint estabelecidas.

 A utilização de constraint possibilita definir as seguintes regras


para uma ou mais colunas:

 Restringir uma coluna ou mais a valores diferentes de nulo


(NOT NULL).

 Definir que o valor da coluna seja único na tabela (UNIQUE).

 Identificar a coluna como coluna chave da tabela (PRIMARY


KEY).

 Estabelecer restrições a chaves estrangeiras (FOREIGN


KEY).

 Verificar se o valor de uma ou mais colunas estão de acordo


com uma expressão (CHECK).

 Existem dois tipos de constraints:

* Constraints de tabela
* Constraints de coluna

 Estes tipos são idênticos, a não ser que as constraint de coluna


referenciem a uma coluna enquanto a de tabela referenciem a uma ou
mais colunas da tabela.

 Definição da constraint da tabela:

CREATE TABLE assignment


( projeto number (4) ,
funcionario number(4),

55
PRYMARY KEY ( projeto, funcionario);

 Definição da constraint da coluna:

CREATE TABLE emp (


EMPNO NUMBER (4) NOT NULL CONSTRAINT EMPNO
PRIMARY KEY,
ENAME VARCHAR(10) CHECK (ENAME = UPPER (ENAME) ) ,
JOB VARCHAR(10) ,
MGR NUMBER (4) CONSTRAINT EMP_MGR
REFERENCES EMP (EMPNO),
HIREDATE DATE CHECK (HIREDATE <= SYSDATE),
SEG_NUM VARCHAR(12) UNIQUE CONTRAINT EMP_SEG ,
SAL NUMBER (7,2) ,
COMM NUMBER (7,2) ,
DEPTNO NUMBER (2) NOT NULL CONSTRAINT EMP_DEPT
REFERENCES DEPT(DEPTNO)
);

Parâmetros da CONSTRAINT
CONSTRAINT Define o nome da constraint. Este parâmetro é
nome_da_constraint
opcional. Se não definir o nome da constraint,
ela receberá um nome default no formato
SYS_Cn, onde n é um inteiro e único
identificador da constraint.

NULL/NOT NULL Define se a coluna pode ou não conter valores


nulos. O default é que pode conter ( NULL).

UNIQUE Certifica que cada linha da tabela terá um valor


diferente para a coluna. Esta coluna pode ser
definida como NULL e não pode ser a chave
primária.

PRIMARY KEY Define que a coluna é a única identificação de


cada linha. Esta coluna tem que ser NOT
NULL e não pode ter o UNIQUE constraint.

56
FOREIGN KEY Identifica que essa é uma chave estrangeira da
tabela do usuário definida. Deve sempre estar
referenciada a uma tabela e não a uma visão.

CHECK Define a condição que deve ser satisfeita para


que a coluna possa ser incluída ou alterada
numa linha da tabela.

CREATE TABLE
 O comando CREATE TABLE é usado para criar novas tabelas
no banco de dados.

 Sintaxe:

CREATE TABLE table


schema.

( coluna tipo )

DEFAULT expr column_constraint

table_constraint

AS subquery

Obs: Sintaxe abreviada.

Onde:

Schema É o schema contendo a tabela. Se você


omitir o schema, o Oracle cria a tabela como
seu próprio dono.
Table É o nome da tabela a ser criada.
Coluna Especifica o nome de uma coluna da tabela.
Uma tabela não pode ter mais do que 254
colunas.

57
Tipo É o tipo da coluna.
Default Especifica um valor a ser atribuído para a
coluna se um comando INSERT subsequente
for omitido para o valor da coluna. O tipo da
expressão tem que ser o mesmo tipo da
coluna.
Column_constraint Define uma integridade de constraint como
parte da definição da coluna.
Table_constraint Define uma integridade de constraint como
parte da definição da tabela.
As subquery Insere as linhas retornadas por uma
subconsulta na tabela que será criada.

Views
OBJETIVOS

 Criar e manipular Views Oracle;

Manipulação de Visões
 Uma visão é como uma janela que permite visualizar ou
modificar seletivamente informações armazenadas em tabelas.

 Visões são utilizadas por:

 Segurança: Pode-se restringir o acesso a informações


contidas em tabelas.

Tabela Emp

EMPNO ENAME …DEPTNO


7369 SMITH …20
7499 ALLEN …30
7521 WARD …30
7566 JONES …20
7654 MARTIN …30
7698 BLAKE …30
7782 CLARK …10

58
7788 SCOTT …20
7839 KING …10
7844 TURNER …30
7876 ADAMS …20
7900 JAMES …30
7902 FORD …20
7934 MILLER …10

Visão Emp_10
EMPNO ENAME …DEPTNO
7521 WARD …30
7782 CLARK …10

as colunas (nome e definição são


herdadas da tabela origem)

SQL> CREATE VIEW emp_10 as


2 SELECT * FROM emp
3 WHERE deptno = 10;

 Conveniência: Consultas complexas podem ser


simplificadas com a criação de visões
Emp
EMPN ENAME …DEPTN Dept
O O
7369 SMITH …20 DEPTN DNAME
O
7499 ALLEN …30 10 ACCOUNTING
7521 WARD …30 20 RESEARCH
7566 JONES …20 30 SALES
7654 MARTIN …30 40 OPERATIONS
7698 BLAKE …30
7782 CLARK …10
7788 SCOTT …20
7839 KING …10
7844 TURNER …30
7876 ADAMS …20
7900 JAMES …30
7902 FORD …20
7934 MILLER …10
Indicações para dep.
20 apenas,dep.
por motivo
de clareza por

59
Emp_Dept NOME NUM NUM_DEPT NOME_DEPTO
O
SMITH 7369 20 RESEARCH
ALLEN 7499 30 SALES
WARD 7521 30 SALES
JONES 7566 20 RESEARCH
MARTIN 7654 30 SALES
BLAKE 7698 30 SALES
CLARK 7782 10 ACCOUNTING
SCOTT 7788 20 RESEARCH
KING 7839 10 ACCOUNTING
TURNER 7844 30 SALES
ADAMS 7876 20 RESEARCH
JAMES 7900 30 SALES
FORD 7902 20 RESEARCH
MILLER 7934 10 ACCOUNTING

o nome das colunas pode ser modificado

SQL>CREATE VIEW emp_dept ( nome, num, num_depto, nome_depto)


2 AS SELECT ename, empno, [Link], dname
3 FROM emp, dept
4 WHERE [Link] = [Link];
 Uma visão é considerada uma tabela virtual, isto é, funciona
como uma tabela mas não contém dados. Os dados de uma visão são
calculados a partir de outras tabelas (ou visões)

 Para descrever a estrutura de uma visão:

SQL> desc emp_dept

Name Null ? Type


NOME CHAR(10)
NUM NOT NULL NUMBER(4)
NUM_DEPTO NOT NULL NUMBER(2)
NOME_DEPTO CHAR(14)

Para Criar uma View

CREATE VIEW `view


OR REPLACE FORCE schema.

NO FORCE

60
AS subquery

( alias )

WITH

READ ONLY

CHECK OPTION

CONSTRAINT constraint

 Onde:

OR REPLACE Cria novamente uma visão. Você pode


usar esta opção para mudar a definição
de uma visão existente sem apagar a
visão.
FORCE Cria a visão sem considerar que a
tabela que a visão se baseia exista.
NOFORCE Cria a visão somente se a tabela que a
visão se baseia exista. O default é
NOFORCE.
Schema É o schema que contém a visão. Se
você omitir o schema, o Oracle cria a
visão em seu próprio schema.
View É o nome da visão.
Alias Especifica nomes para as expressões
selecionadas pela consulta. O número
de apelidos tem que ser igual ao
número de expressões selecionadas
pela visão.
AS subquery Identifica colunas e linhas da(s)

61
tabela(s) que a visão está baseada. A
consulta da visão pode ser qualquer
comando SELECT sem a cláusula
ORDER BY ou FOR UPDATE. A lista
selecionada pode ter no máximo 254
expressões.
WITH READ ONLY Especifica que apagar, inserir ou
atualizar não pode ser executado pela
visão
WITH CHECK OPTION Especifica que não será permitido a
execução de um INSERT ou UPDATE
através da VIEW a não ser que uma
específica constraint seja definida.
CONSTRAINT É o nome atribuído para a constraint
CHECK OPTION. Se você omitir este
identificador, o Oracle automaticamente
atribui a constraint um nome desta
forma: SYS_Cn. Onde n é um número
inteiro.

PL/SQL
OBJETIVOS

 Identificar e criar blocos PL/SQL;

62
O QUE É PL/SQL?

 Uma Linguagem Procedural.

 É um veículo para o processamento de transações.

 Uma tecnologia disponível na maioria das ferramentas ORACLE.

 Uma extensão do SQL.

 PL/SQL (Procedural Language/SQL) é uma extensão para o SQL,


incorporando várias facilidades das linguagens de programação existentes. O
PL/SQL permite utilizar comandos para manipulação de dados e consultas em
blocos de programação estruturados, fazendo do PL/SQL uma poderosa linguagem
de processamento de transações.
AS VANTAGENS DO PL/SQL

Estrutura de Bloco PL/SQL é uma linguagem estruturada em blocos,


onde cada bloco lógico contém recursos de linguagem
requeridos pelo bloco. As variáveis podem ser
definidas localmente nos blocos onde serão utilizadas
e uma condição de erro pode ser tratada dentro deste
mesmo bloco.

63
Controle de Fluxo Parâmetros condicionais (IF-THEN-ELSE-ELSIF),
repetições de grupo de comandos e desvios podem
ser empregados para controlar o fluxo de um
programa.
Portabilidade O PL/SQL é nativo do ORACLE, portanto os
programas PL/SQL podem ser transportados para
qualquer ambiente que suportem o ORACLE.
Integração Pode-se utilizar blocos PL/SQL desenvolvidos para
uma ferramenta ORACLE e também para o ORACLE
RDBMS.
Performance O uso do PL/SQL pode ajudar a melhorar a
performance de uma aplicação. Os benefícios diferem
dependendo do ambiente utilizado.

64
ESTRUTURA DO PL/SQL
 Toda unidade do PL/SQL é compreendida em um ou mais blocos. Estes
blocos podem estar completamente separados ou próximos. No entanto, um bloco
pode representar uma pequena parte de um outro bloco.

DECLARE
.... declaracoes
BEGIN
.... sentenças
EXCEPTION
.... manusear excessoes
END;

 No geral, um bloco pode ser anônimo ou um sub-programa.

 Blocos anônimos - Basicamente, são blocos sem nome. Estes blocos


são declarados em um ponto numa aplicação onde deverão ser
executados e passados para o PL/SQL Engine na hora de sua
execução. Blocos anônimos podem ser manuseados dentro de um
programa pré-compilado, dentro do SQL*PLUS ou SQL*DBA. Trigggers
no SQL*Forms consistem em blocos também.

 Sub-Programas - São blocos nomeados. Esles podem ser declarados


como uma Procedure ou Função. Em alguns casos, pode retornar
valores quando executados.

DEFININDO UM BLOCO ANÔNIMO

DECLARE
... definição dos objetos PL/SQL que serão utilizados neste bloco
BEGIN
.... ações executáveis
EXCEPTION
.... o que fazer se um ação executada causar um erro
END;

 Os comandos BEGIN e END são obrigatórios, e entre eles ficará a


estrutura de comandos da aplicação para serem processados.

 A sessão DECLARE é opcional e utilizada para definir os objetos PL/SQL,


como as variáveis, que serão referenciados no bloco ou nos blocos contidos nele.

 A sessão EXCEPTION é utilizada para manusear condições de erro


predefinidas e as ações a serem tomadas na sua ocorrência, esta sessão deve ser a
última no bloco antes do END.

65
CARACTERÍSTICAS DO PL/SQL

Variáveis e Constantes Para armazenar e manipular valores. Os tipos


incluem NUMBER, VARCHAR e DATE.
Suporte ao SQL SELECT, INSERT, UPDATE, DELETE, COMMIT,
SAVEPOINT e ROLLBACK são comandos que
são suportados pelo PL/SQL.
Controle de Fluxo Sentenças IF, repetições, desvios e nomes de
parágrafos prevêem ações de condição, testes
complexos, desvios e controles no fluxo dos
programas.
Funções A maioria das funções de manipulação de dados
do SQL estão disponíveis para manipular variáveis
e valores.
Gerenciamento de Cursores Definição de cursores explícitos na memória
permitindo o processamento de dados resultantes
de consultas a várias linhas. Um grupo de
atributos PL/SQL permitem que se teste o estado
dos cursores implícitos e explícitos.
Gerenciando Exceções Condições de erros podem ser tratadas em cada
bloco.

SINTAXE BÁSICA DO PL/SQL

 Sabendo que o PL/SQL é uma extensão do SQL, geralmente as regras de


sintaxe que são aplicadas no SQL são aplicadas no PL/SQL. Aqui estão algumas
regras:

 As sentenças de comandos podem ser divididas entre linhas, mas


palavras-chave não podem ser divididas

 Palavras reservadas não devem ser utilizadas como identificadores, ao


menos que estejam entre aspas duplas (“UPDATE”)

 Os identificadores devem começar com caracteres alfabéticos, e


podem contar até trinta caracteres

 Literais do tipo data ou caracter devem estar dentro de aspas simples


(‘)

 Literais numéricas podem ser representadas por valores (25,4) ou


notação científica (2e5 = 2 X 10 elevado a 5 = 200000)

66
 Comentários podem estar entre /* e */ que pode se estender por muitas
linhas ou utilizar ‘-’ para comentar uma linha.

DECLARANDO VARIÁVEIS E CONSTANTES

 PL/SQL suporta uma variedade de tipos de dados, os quais podem ser


utilizados para definir Variáveis e Constantes. É opcional atribuir valores para
variáveis, e esses valores podem ser modificados dentro de um bloco PL/SQL.
Constantes são identificadores que contém um valor fixo e deve ser atribuído
quando a constante for definida.

 O PL/SQL suporta os tipos de valores correspondentes aos tipos das


colunas em uma tabela Oracle como NUMBER, DATE, CHAR e BOOLEAN.

 Atribuição de Valores

 O PL/SQL permite que se atribua ou redefina valores a variáveis numa


seção DECLARATION de um bloco. A variável que receberá o novo valor deve
sempre estar à esquerda do operador.

identificador := expressão;

contador := contador + 1;
salario_anual := salario * 13 + NVL(comissao,0);
nivel := 6;
cargo := ‘JOGADOR’;
data_de_hoje := SYSDATE;

SENTENÇA IF

 O comando IF permite que se execute ações de forma seletiva, baseado


em condições.

IF condicao THEN
acoes
ELSIF condicao THEN
acao
ELSE
acao
END IF;

 Exemplo:

declare

67
v_sal number(10,2);
v_ename varchar2(20);
begin
select ename,sal into v_ename,v_sal from emp
where empno = 7369;
if v_sal < 5000 then
dbms_output.put_line('O '||v_ename||' recebe um salário razoável !!!');
elsif v_sal = 5000 then
dbms_output.put_line('O '||v_ename||' recebe um bom salário!!!');
else
dbms_output.put_line('O '||v_ename||' recebe um salário ótimo !!!');
end if;
end;

SENTENÇA FOR

 O comando FOR permite que controle o número de vezes que as ações


foram repetidas e define quando termina essa repetição.

FOR variavel_de_controle IN REVERSE ( menor_valor .. maior_valor );

declare
x number;
begin
for x in 1..10
loop
dbms_output.put_line(x);
end loop;
end;

SENTENÇA WHILE

 O comando WHILE permite que se verifica uma condição a cada início de


execução de um grupo de ações.

WHILE condicao

68
declare
x number := 0;
begin
while x < 10
loop
dbms_output.put_line(x);
x := x + 1;
end loop;
end;

Herança de Variáveis
OBJETIVOS

 Declarar variáveis utilizando herança.

O ATRIBUTO %TYPE
 O atributo %TYPE é utilizado para declarar um registro baseado numa
coluna de uma tabela ou visão.

 Os registros são definidos na sessão DECLARE.

identificador tabela_de_referencia.campo%TYPE;

DECLARE
v_ename [Link]%TYPE;
BEGIN
SELECT ename INTO v_ename FROM emp WHERE empno = 1234;
...
END;
O ATRIBUTO %ROWTYPE

 O atributo %ROWTYPE é utilizado para declarar um registro baseado


numa coleção de colunas de uma tabela ou visão. Os campos dentro dos registros
receberão seus tipos de dados das colunas referenciadas.

69
 Os registros são definidos na sessão DECLARE.

identificador tabela_de_referencia%ROWTYPE;

DECLARE
reg_fun emp%ROWTYPE;
BEGIN
SELECT * INTO reg_fun FROM emp WHERE num_func = 1234;
...
END;

70
Cursor
OBJETIVOS

 Aprender a criar e trabalhar com cursores.

O QUE É UM CURSOR?

 O Oracle utiliza uma área de trabalho chamada ‘Private SQL Area’ (Área
Privativa do SQL) para executar comandos SQL e armazenar informações
de processamento. Um cursor é uma construção PL/SQL que permite dar
nomes a essas áreas de trabalho e acessar as informações armazenadas
nela.

 Existem dois tipos de cursores:

 Cursores Implícitos - Declarados pelo PL/SQL implicitamente para


todos os comandos DMLs e para consultas que retornarão apenas uma
linha.

 Cursores explícitos - Declarados explicitamente, juntamente com


outros identificadores utilizados em um bloco, e manipulado através de
comandos específicos dentro de um bloco. Esse tipo de cursor permite
que se manipule várias linhas resultantes de uma consulta.

 Como temos vistos, os comandos SELECT que ocorrem como uma


cláusula separada dentro de um PL/SQL podem retornar apenas uma linha. Isto
significa que PL/SQL executou duas procuras na tabela utilizando um cursor
implícito: um satisfez a consulta e o outro não retornou nenhuma linha.

 Cursores explícitos permitem a execução desta segunda pesquisa


melhorando a eficiência. Esses cursores podem ser utilizados para executar várias
consultas simples ou reexecutá-las.

CONTROLE SOBRE CURSORES EXPLÍCITOS

DECLARE Define nomes de cursores e definições de estrutura


de pesquisa a serem executadas. Neste momento a
consulta é definida mas não é executada.
OPEN Executa a pesquisa, populando as variáveis
referenciadas. Linhas retornadas pela pesquisa,

71
chamadas de “active set”, estão disponíveis para
serem pesquisadas.
FETCH Faz a leitura dos valores da linha corrente colocando
o resultado dentro das variáveis. A linha corrente é a
linha que o cursor está apontando. Cada FETCH
causa a movimentação do cursor para a próxima
linha no “active set” .
CLOSE Libera a área de trabalho que as linhas produziram
pela última execução do comando OPEN.

72
O COMANDO CURSOR
 O comando CURSOR é utilizado para definir um cursor explícito.
Parâmetros podem ser definidos para permitir a substituição de valores dentro de
uma pesquisa quando o cursor é inicializado (OPEN).

CURSOR identificador (detalhes sobre parametros) IS


sentença_de_consulta;

73
Unidade IV

Procedure
OBJETIVOS

 Criar e armazenar procedures em banco de dados Oracle;

Procedures
Criar uma nova procedure com o comando CREATE PROCEDURE. Com
uma lista de argumentos, são definidas as ações que serão executadas por um
bloco PL/SQL.

Sintaxe:

CREATE OR REPLACE PROCEDURE nome_da_procedure( argumento mode


tipo_do_argumento) IS/AS
bloco_PL/SQL;

Argumento  É o nome de uma variável PL/SQL passada para


a procedure.

Mode  Identifica o tipo de argumento ( IN/OUT/IN OUT).

Tipo do  Tipo do dado ( datatype).


argumento

Bloco PL/SQL  É o corpo da procedure que define as ações que


serão executadas quando a procedure for
executada.

IS ou AS  Essas cláusulas são equivalentes, pode-se


utilizar tanto uma quanto outra.

74
Obs.: A cláusula REPLACE é utilizada quando a procedure já existe. Nunca
utilize a cláusula DECLARE no início do bloco PL/SQL.

Trocando Valores entre diferentes Ambientes através de


Argumentos.
Somente um dos três modos pode ser escolhido para cada argumento
(IN,OUT,IN OUT).

IN argumento  Passa o valor do ambiente chamador para a


procedure(default).

OUT  Retorna um valor da procedure para o ambiente


argumento chamador.

IN OUT  Passa um valor do ambiente chamador para a


argumento procedure, e a procedure retorna um valor para
o ambiente chamador.

Como em qualquer bloco PL/SQL, armazene valores para as procedure em


variáveis locais.

Função
OBJETIVOS

 Descrever as funções e criação no banco de dados.

Funções

Para criar uma função ou procedure dependerá de que forma será chamada e
de que forma espera-se os valores.

Criar uma nova função com o comando CREATE FUNCTION, a qual declara
uma lista de argumentos, declara o argumento que irá retornar e define as ações
que serão realizadas utilizando blocos PL/SQL.

Sintaxe:

75
CREATE OR REPLACE FUNCTION nome_da_funcao
( argumento mode tipo_do_argumento)
RETURN tipo_do_dado
IS/AS
bloco_pl/sql

RETURN Identifica o tipo do dado que a função irá retornar.

Gerenciando Exceções
OBJETIVOS

 Descrever como gerenciar e tratar os problemas nos códigos


PL/SQL.

Gerenciando Exceções em Tempo de Execução

Pode-se gerenciar qualquer tipo de exceção em tempo de execução


permitindo propagar para o ambiente chamador ou tomar ações quando essas
acontecerem.

RAISE_APPLICATION_ERROR(numero_erro, texto_erro)

Numero_erro  É o número do erro definido pelo usuário. Deve


estar entre -20000 e -20999.

Texto_erro  É a mensagem definida pelo usuário.

CREATE OR REPLACE PROCEDURE exclui_funcionario (v_emp_no IN


[Link]%TYPE) IS
BEGIN
DELETE FROM EMP
WHERE empno = v_emp_no;
IF SQL%NOTFOUND THEN
RAISE_APPLICATION_ERROR(-20200, ‘Funcionario nao existe’);

76
END IF;
COMMIT;
END exclui_funcionario;

Executando Objetos
OBJETIVOS

 Mostrar como executar objetos no banco de dados Oracle;

Executando PROCEDURES
De qualquer ambiente PL/SQL, basta simplesmente chamar a procedure com
uma chamada direta.

DECLARE
v_empno NUMBER := 7654;
BEGIN
...
exclui_funcionario (v_empno);
...
END;

Executando de outra procedure.

CREATE PROCEDURE processa_funcionario


(v_emp_no IN [Link]%TYPE)
IS
BEGIN
...
exclui_funcionario (v_empno);
...
END;

De acordo com o ambiente chamador, pode-se executar procedures de um outro


usuário (schema) ou de um outro banco de dados.

77
Exemplo: Executando uma procedure de outro usuário.

SQL> EXECUTE wendel.exclui_funcionario (7654);

Exemplo: Executando uma procedure de outro banco de dados.

SQL> EXECUTE wendel.exclui_funcionario (7654)@pr;

Para uma procedure que contenha vários argumentos, existe três métodos
para especificar seus valores :

As maneiras de executar uma função são as mesmas utilizadas para executar


uma procedure. Mas lembre-se que uma função retorna um único valor.
Executando FUNCTIONS

Executando uma Função de um Bloco PL/SQL

DECLARE
v_empno NUMBER := 7654;
v_sal NUMBER;
BEGIN
...
v_sal := pesquisa_salario(v_emp_no);
...
END;

Executando uma Função de uma Procedure

CREATE PROCEDURE processa_emp (v_emp_no IN [Link]%TYPE) IS


v_sal NUMBER;
BEGIN
...
v_sal := pesquisa_salario(v_emp_no);
...
END;

Benefícios das Procedures e Funções

Adicionando benefícios de modularização das aplicações, e muitos outros


benefícios de poder armazená-las no banco de dados estão os benefícios abaixo:

Melhorar a segurança e integridade dos dados

78
 Controle sobre acessos indiretos aos objetos de banco de dados
executados por funcionários sem privilégios.
 Assegurar que ações relacionadas sejam executadas conjuntamente.

Melhorar Performance

 Reduzir o número de chamadas ao banco de dados e diminuir o tráfico


na rede.
 Compartilhar execuções SQL por vários usuários.

Conservar a Memória

 Armazenar uma única cópia do fonte no banco de dados ao invés de


várias cópias espalhadas em diferentes aplicações.
 Compartilhar SQL ao invés de vários cursores para diferentes
aplicações.

Melhorar Manutenções

 Modificar rotinas online sem interferir com outros usuários.


 Modificar uma rotina que afetará várias aplicações.

79
Unidade V

Gerenciando Procedures e
Functions
OBJETIVOS

 Gerenciar objetos de banco de dados;

Gerenciando Procedures e Funções

Uma procedure ou função armazenada em qualquer estágio do


desenvolvimento pode ser revisada.

Obter informações sobre documentação e erros de compilação de várias


visões do dicionário de dados e comandos interativos. Obter informações em tempo
de execução sobre o processo utilizando procedures fornecidas pela Oracle.

Obter informações Descrição Método de Acesso


sobre documentação e
erros de compilação de
várias visões do dicionário
de dados e comandos
interativos. Obter
informações em tempo de
execução sobre o
processo utilizando
procedures fornecidas
pela Oracle.

Informações
Código Fonte Texto da Procedure Visão do dicionário de dados
USER_SOURCE ou pelo
comando DECRIBE.
Código Objeto Código compilado Não há.
Erro Compilação Erros de sintaxe Visão de dicionário de dados
USER_ERRORS ou pelo
comando SHOW ERRORS.
Informações Mensagens sobre Procedures DBMS_OUTPUT

80
execução variáveis especificadas pelo
usuário.

Para permitir que os usuários possam executar uma procedure ou função,


deve ser alterado o privilégio de segurança.

Documentando Procedures e Funções

Obtém-se os nomes das procedures e funções armazenadas de um usuário


através da visão do dicionário de dados USER_OBJECTS.

Coluna Descrição
OBJECT_NAME Nome do objeto.
OBJECT_ID Identificador interno do objeto.
OBJECT_TYPE Tipo do objeto (PROCEDURE, FUNCTION, PACKAGE ou
PACKAGE BODY).
CREATED Data da criação do objeto.
LAST_DDL_TIME Data de modificação do objeto.
TIMESTAMP Data de recompilação do objeto.
STATUS VALID ou INVALID.

Para saber algumas informações adicionais, como quem é o proprietário do


objeto, pesquise as visões do banco de dados ALL_OBJECTS e DBA_OBJECTS.

Exemplo : Exibir todas as procedure e funções.

SELECT object_name, object_type


FROM user_objects
WHERE object_type IN (‘PROCEDURE’, ‘FUNCTION’)
ORDER BY object_name;

Obtendo o texto das procedures e funções armazenadas através da visão do


dicionário de dados USER_SOURCE.

Coluna Descrição
NAME Nome do objeto.
TYPE Tipo do objeto (PROCEDURE, FUNCTION, PACKAGE ou
PACKAGE BODY).
LINE Número de linha do código fonte.
TEXT Texto da linha do código fonte.

81
Para saber algumas informações adicionais, como quem é o proprietário do
objeto, pesquise as visões do banco de dados ALL_SOURCE e DBA_SOURCE.

EXEMPLO : Documentando uma procedure armazenada.

SELECT text
FROM user_source
WHERE type = ‘PROCEDURE’
AND name = ‘EXCLUI_FUNCIONARIO’
ORDER BY line;

Obtendo os erros de compilação através da visão do dicionário de dados


USER_ERRORS

Coluna Descrição
NAME Nome do objeto.
TYPE Tipo do objeto (PROCEDURE,
FUNCTION, PACKAGE ou PACKAGE
BODY).
LINE Número de linha do código fonte onde
ocorreu o erro.
POSITION Posição da linha que o erro ocorreu.
TEXT Texto da mensagem de erro.

Para saber algumas informações adicionais, como quem é o proprietário do


objeto, pesquise as visões do banco de dados ALL_ERRORS e DBA_ERRORS.

Exemplo : Exibir os erros de sintaxe.

COL pos FORMAT a4


COL text FORMAT a60 TRUNC
SET SPACE 2
SELECT line || ‘/’ || position POS, text
FROM user_errors
WHERE type = ‘PROCEDURE’
AND name = ‘LOG_EXECUTION’
ORDER BY line;

Exibir os erros de compilação interativamente utilizando o comando SHOW


ERRORS através do SQL*Plus ou SQL*DBA.

82
SHOW ERRORS PROCEDURE log_execucao

Disponibilizando as Procedures DBMS_OUTPUT do SQL*Plus ou


SQL*DBA com a opção SERVEROUTPUT

Saída de valores e mensagens dentro do SQL*Plus:

1. Habilite a opção SERVEROUTPUT:

SET serveroutput ON

2. Prepare o texto da mensagem de saída com a procedure PUT:

DBMS_OUTPUT.PUT_LINE(‘texto’);

83
Gerenciando Procedures e Funções

Para gerenciar as procedures ou funções armazenadas durante o ciclo de


desenvolvimento, utilize as visões do dicionário de dados, os comandos SQL e as
procedures fornecidas pela Oracle.

Tarefa Estratégia
Obter documentação. Exibir as visões do dicionário de dados
USER_OBJECTS e USER_SOURCE.
Eliminar erros de compilação. Pesquisar a visão do dicionário de dados
USER_ERRORS.
Gerenciando problemas. Explorar as rotinas DBMS_OUTPUT privadas pela
execução Oracle.
Facilitar o desenvolvimento. Produzir scripts SQL*Plus.
Controlar a segurança. Definir privilégios para o proprietário e usuários,

Gerenciando Dependências
OBJETIVOS

 Descrever como gerenciar dependências entre objetos.

Gerenciando as Dependências entre Procedures

Entendendo as dependências que existem quanto as alterações nas


definições dos objetos de banco de dados.

Procedure View

Tabela
INVALID INVALID

Procedure Procedure

Alterações na
definição

84
INVALID INVALID

Para validar uma procedure ou função deve-se recompilar as mesmas.

Existem dois tipos distintos de dependência: Direta e Indireta

Uma procedure ou função depende diretamente de um objeto de banco de


dados se este está sendo referenciado dentro do corpo da procedure ou função.

Objeto Dependente Objeto Referenciado Diretamente


Procedure ou função Tabela
Procedure ou função Visão
Procedure ou função Sequência
Procedure ou função Procedure ou função

Uma procedure ou função depende indiretamente de um objeto de banco de


dados se este é referenciado por um objeto intermediário.

Objeto Dependente Objeto Intermediário Objeto Referenciado


Indiretamente
Procedure ou função Visão Tabela
Procedure ou função Visão Visão
Procedure ou função Procedure ou função Veja a tabela de
referência direta.

Dependência remota

Tipo da dependência Descrição

Local Os objetos que estão no mesmo node, o Oracle


examina as dependências e recompila
automaticamente os objetos dependentes

Remoto Os objetos estão em nodes diferentes, o Oracle


não consegue examinar as dependências

Dependências Locais

Determinar quais objetos de banco de dados devem ser recompilados


manualmente através da visão do dicionário de dados USER_DEPENDENCIES

85
Coluna Descrição
NAME Nome do objeto dependente.
TYPE Tipo do objeto dependente (PROCEDURE,
FUNCTION, PACKAGE ou PACKAGE BODY).
REFERENCED_OWNER Usuário do objeto referenciado.
REFERENCED_NAME Nome do objeto referenciado.
REFERENCED_TYPE Tipo do objeto referenciado.

Também examina as visões ALL_DEPENDENCIES e


DBA_DEPENDENCIES para saber quem é o proprietário do objeto.

Exemplo : Exibindo dependências diretas:

SELECT name, type, referenced_name, referenced_type


FROM user_dependencies
WHERE referenced_name = ‘EMP’;

Exemplo : Exibir a árvore das dependências diretas e indiretas:

Após alterar um objeto o banco de dados, recompile todas as suas funções e


procedures dependentes.

Sintaxe : Recompilando uma procedure:

ALTER PROCEDURE nome_da_procedure COMPILE

ALTER FUNCTION nome_da_função COMPILE

Para recompilar uma procedure, o usuário deve ser dono da procedure ou ter
o privilégio ALTER ANY PROCEDURE.

Objeto Referenciado Exemplo de Resultado da Compilação


Alteração
Tabela Tabela removida. Erros.
Tabela Tabela renomeada. Erros.
Tabela Coluna adicionada. Sem erros.
Tabela Tipo da coluna. Sem erros se a coluna está
referenciada por %ROWTYPE
ou %TYPE.

86
Procedure Lista de argumento. Erros.
Procedure PL/SQL Sem erros.
Visão Nome das colunas. Erros.

Verificar se a Recompilação foi bem sucedida através da Visão do


Dicionário de Dados USER_OBJECTS, Coluna STATUS.

SQL> SELECT object_name, object_type, status


2 FROM user_objects
3 WHERE object_type = ‘PROCEDURE’;

Note que uma alteração de segurança também marca objetos dependentes


como inválidos.

Objeto Referenciado Exemplo de Resultado da Compilação


Alteração
Tabela Relevante privilégio Erros.
removido.
Tabela Não relevante privilégio Sem erros.
removido.

Gerenciando Dependências Locais

O Oracle recompila objetos invalidados automaticamente quando eles são


chamados e antes de serem executados.

Mecanismo de Dependência Local Automático.

1. O Oracle examina dentro do dicionário de dados os relacionamentos de


dependência de todos os objetos, tanto diretos quanto indiretos.

2. O Oracle registra dentro do dicionário de dados a situação de cada objeto (VALID


ou INVALID)

 VALID indica que o objeto foi compilado com sucesso e está pronto
para ser executado.

 INVALID indica que o objeto precisa ser recompilado antes de ser


executado.

87
3. Se a existência ou especificação de um objeto de banco de dados alterar, o
Oracle marca todos os objetos dependentes como INVALID.

4. Quando uma procedure inválida é chamada em tempo de execução, o Oracle


tenta recompilá-lo primeiramente.

 Se a procedure compilar com sucesso, o Oracle altera a situação para


VALID e executa a procedure.
 Se a recompilação falhar, o Oracle não altera a situação da procedure
e mostra um erro de execução.

5. O Oracle valida os objeto do banco de dados recursivamente

É recomendado recompilar as dependências locais manualmente, ao invés de


deixar que o Oracle faça a recompilação automática. Assim diminuindo os riscos de
interrupções no processo em produção.

Quando um objeto de banco de dados é dependente de objetos em diferentes


bancos de dados, certifique-se em avisar aos proprietários quando ocorrerem
alterações. O Oracle não pode examinar relacionamentos de dependências remotas.

O usuário notificado das alterações ocorridas deve recompilar os objetos


dependentes manualmente, em alguns casos, esperar pelo mecanismo de
dependência remota automático.

Referência Remota Recompilação Recompilação Automática


Manual
Procedure ou função Disponível Disponível
Tabela, visão ou Disponível Não disponível
sequência

É recomendado recompilar as dependências remotas manualmente, ao invés


de deixar que o Oracle faça a recompilação automática. Assim diminuindo os riscos
de interrupções no processo em produção. Os mecanismos automáticos remotos e
locais são diferentes.

Quando uma procedure local referencia uma procedure remota ou função, o


Oracle invalida a procedure local se o Oracle detecta que a procedure remota foi
recompilada recentemente.

Mecanismo de Dependência Remota Automático

88
1. O Oracle registra o ‘timestamp’ dentro do código objeto de todas as procedures
quando compilada.

 Quando a procedure remota é recompilada, o Oracle registra o


timestamp dentro do código objeto da procedure remota.

 Quando a procedure local é recompilada, o Oracle coloca no código


objeto o timestamp da procedure remota.

2. Quando uma procedure local é chamada em tempo de execução, o Oracle


compara os timestamps.

 Se os timestamps são iguais, indicando que a procedure remota não


foi recompilada e executa a procedure.

 Se os timestamps não são iguais, indicando que a procedure remota


foi recompilada, o Oracle invalida a procedure local e retorna uma erro
em tempo de execução.

3. Se a procedure local, que está marcada como INVALID, é chamada pela segunda
vez, o Oracle recompilará a procedure antes de executá-la de acordo com o
mecanismo de dependência local automático.

 Assumindo que não há outros erros de compilação, o Oracle insere o


novo timestamp no código objeto da procedure local e executa-a.

 Se existirem outros erros de compilação, a situação da procedure


permanece inalterado (INVALID) e o Oracle retorna um erro.

Desenvolva uma estratégia para chamar novamente uma procedure local se


na primeira vez retornou um erro indicando que os timestamps não estão
compatíveis.

Package
OBJETIVOS

 Criar packages públicas e privadas.

89
Desenvolvendo e Utilizando PACKAGES

PACKAGE

Variáveis Cursor

Constante Excessões

PROCEDURE FUNÇÃO

Grupo de Identificadores de Programação e Rotinas armazenadas


juntas como um Pacote ( Package ).

Construção Descrição
Variáveis Identificador que armazena valores atualizáveis.
Cursor Identificador associado a comandos SQL.
Constantes Identificador que armazena valores fixos.
Exceções Identificador de uma condição anormal.
Procedure Rotina de argumentos.
Função Rotina com argumentos que retorna somente um valor.

90
Especificação do Package e seu Corpo

PACKAGE

Variável
Pública

Procedure A Procedure
DeclaraçãoPública
Especificação PACKAGE

Variável
Privada

Procedure B Procedure
Definição Privada

Procedure A Procedure
Definição Pública

Variável
Local Corpo do Package

91
Criar um Package em duas partes : a especificação do package e o seu
corpo. Faça algumas construções de packages públicas declarando-as dentro da
especificação do package; faça outra construção privada declarando somente dentro
do corpo do package.

Escopo da Descrição Dentro do Package


Construção
Pública Disponibiliza as Declarada dentro da
procedures e funções especificação do package
para fora do package. e definida no corpo do
package.

Privada Não disponibiliza as Declarada e definida


procedures e funções dentro do corpo do
para fora do package package.

Os Passos Básicos para desenvolver um Package são similares


aos de desenvolver uma Procedure “stand-alone”.

Desenvolvendo um Package

1. Escreva o texto do comando CREATE PACKAGE dentro de um arquivo texto para


criar a especificação do package.

2. Escreva o texto do comando CREATE PACKAGE BODY dentro de um arquivo


texto para criar o corpo do package.

3. Execute os dois comandos, o qual compilará o código fonte em objeto e


armazenará dentro do banco de dados, do SQL*Plus ou SQL*DBA.

4. Chame qualquer construção pública dentro do package de um ambiente Oracle.

É recomendado que salve o texto do comando CREATE PACKAGE e do


CREATE PACKAGE BODY em dois diferentes arquivos para facilitar posteriores
modificações.

92
Criando PACKAGES

Declarando Construções Públicas dentro da Especificação do


Package.

Sintaxe:

CREATE OR REPLACE PACKAGE nome_do_package IS/AS


-- declaracao_de_variaveis --
-- declaracao_de_cursores --
-- declaracao_de_excessoes --
-- declaracao_de_procedures --
-- declaracao_de_funcoes --
END nome_do_package

Especifique a opção REPLACE quando a especificação do package já existir.

Definir todas Construções Públicas e Privadas, dentro do Corpo do


Package.
Sintaxe :

CREATE OR REPLACE PACKAGE BODY nome_do_package IS/AS


-- declaracao_de_variaveis --
-- declaracao_de_cursores --
-- declaracao_de_excessoes --
-- declaracao_de_procedures --
-- declaracao_de_funcoes --
END nome_do_package

Especifique a opção REPLACE quando o corpo do package já existir.

Packages já fornecidas

Utilize os packages já fornecidas pela Oracle.

Package Funcionalidade
DBMS_OUTPUT Saída de informações de procedures armazenadas.
DBMS_DDL Compila procedures, funções e packages e obtém uma
estatística de performance através do comando ANALYZE.
DBMS_SESSION Altera a sessão do usuário, define a regra para o usuário e

93
reinicializa o estado do package.
DBMS_TRANSACTION Controla transações lógicas e melhora a performance.
DBMS_MAIL Liga o ORACLE Server diretamente com Oracle*Mail.
DBMS_PIPE Envia mensagem do banco de dados para a aplicação.
DBMS_ALERT Envia um sinal se um evento ocorrer no banco de dados.
DBMS_LOCK Efetua a sincronização dos locks.

Benefícios do Package

 Melhorar a organização de armazenamento de procedures e funções.

- Agrupar as procedures e funções relacionadas.

- Resolução de conflitos de nomes de um mesmo usuário .

 Melhorar o gerenciamento de procedures e funções armazenadas.

- Alterar o corpo do package sem ter que alterar a especificação.

- Limitar as dependências procedurais.

 Melhorar a segurança de procedures e funções armazenadas.

- Permitir acesso no package inteira.

- Esconder o código fonte dos usuários.

 Prover identificadores para sessões de usuários.

- Identificadores de referência globalizados no ambiente ou procedure.

- Reter o estado dos identificadores durante a sessão.

 Melhorar performance.

- Carrega o package na memória na primeira chamada.

- Reduz o acesso ao disco nas próximas chamadas.

94
Trigger
OBJETIVOS

 Criar e gerenciar triggers.

Desenvolver Triggers ( gatilhos ) do Banco de Dados

SQL> INSERT INTO emp


2 ...

Aplicação

Tabela EMP CKECK_SAL


trigger

EMPNO ENAME JOB SAL

7654 PAULO ANALISTA 6.555,00

BEFORE
INSERT
row

BANCO DE DADOS

95
Desenvolver um trigger de banco de dados pedindo para executar um bloco
PL/SQL somente quando um comando de manipulação especifica e executado em
uma certa tabela.

Decida qual momento e em qual evento o trigger deve ser executado antes de
codificá-lo.

Parte Descrição Valores Possíveis


Momento de Execução Quando o trigger é disparado BEFORE
em relação a um evento. AFTER
Evento Qual operação de manipulação INSERT
dos dados na tabela causará o UPDATE
disparo do trigger. DELETE
Tipo Quantas vezes o corpo do Comandos
trigger será executado. Linha
Corpo Quais as ações que o trigger Bloco PL/SQL
executará.

Criando Comandos e Triggers de Linha


Sequência de disparo dos triggers de banco de dados numa linha.

Tabela DEPT

DEPTNO DNAME LOC

10 CONTABILIDADE CAMPINAS BEFORE TRIGGER


20 VENDAS SAO PAULO BEFORE ROW TRIGGER
30 ADMINISTRACAO SAO PAULO AFTER ROW TRIGGER
40 COMPRAS SANTOS AFTER TRIGGER

Comando CREATE TRIGGER

Sintaxe:

CREATE OR REPLACE TRIGGER nome_do_trigger


BEFORE/AFTER evento ON nome_da_tabela
bloco PL/SQL

onde,

evento indica qual é a manipulação do dado que irá disparar o


trigger ( INSERT/UPDATE/DELETE )

96
Criando TRIGGERS de Linha

Este trigger dispara quando um evento de manipulação de dados afetando


linhas em uma tabela. Para se criar esse trigger, basta apenas acrescentar FOR
EACH ROW no comando CREATE TRIGGER.

GERENCIANDO TRIGGERS

Gerenciando o desenvolvimento de uma trigger com comandos e estratégias


diferentes às empregadas pelas procedures.

Tarefas Triggers
Documentação Examine a visão do dicionário de dados
USER_TRIGGERS.
Erros Explore a procedure DBMS_OUTPUT.
Segurança para o desenvolvedor Obter privilégios para criar triggers, para
acessar os objetos referenciados pela
trigger e alterar as tabelas associadas.
Segurança para o usuário Não precisa de privilégio especial.

Não é possível compilar triggers manualmente.

Descrição da visão do dicionário de dados USER_TRIGGERS.

Coluna Descrição
TRIGGER_NAME O nome da trigger.
TRIGGER_TYPE O momento em que o trigger será executado
(BEFORE/AFTER).
TRIGGERIMG_EVENT O comando de manipulação de dado que causa a
execução do trigger (INSERT, UPDATE ou DELETE).
TABLE_OWNER O dono da tabela associada ao trigger.
TABLE_NAME Nome da tabela associada ao trigger.
WHEN Condição de restrição.
STATUS Disponibilidade do trigger (ENABLED/DISABLED).
TRIGGER_BODY Texto do bloco PL/SQL.

97
Executar Operações de Dados Válidos

Regras para ler e escrever dados nos triggers.

1. Não altere as chaves primárias, chaves estrangeiras ou chaves únicas


de uma tabela.

2. Não leia dados de uma tabela mutante.

Desenvolver triggers de banco de dados dentro de uma aplicação para


adicionar melhorias ao Oracle Server.

Melhoria Implementação do Servidor Implementação do


Trigger
Segurança Permitir acesso para um Permitir acesso a tabelas
usuário ou grupo de usuários. baseado em valores de
dados.
Auditoria Monitorar operações aos Monitorar valores para
dados nas tabelas. operações aos dados nas
tabelas.
Integridade de dados Declaração de integridade via Implementação de regras
constraints. complexas de integridade.
Integridade Implementar funcionalidade Implementar
padrão. funcionalidade não-padrão.
Replicação de tabela Cópia de tabelas de forma Cópia de tabelas de forma
assíncrona nos snapshots. síncrona nos ‘replicas’.
Dados derivados Calcular valores derivados Calcular valores derivados
manualmente. automaticamente.
Gravando eventos Executa operações Executa operações
(logs) explicitamente. transparentemente.

98

Você também pode gostar