Você está na página 1de 38

1

Curso: Sistema de Informao


Fase: 3
Disciplina: Banco de dados II
Professor: Edson Thizon (ethizon@hotmail.com)

N de crditos: 04

Carga Horria: 68 horas/aula

BANCO DE DADOS II
1- NOES FUNDAMENTAIS
1.1. Transaes
Transao uma unidade atmica de trabalho que atua sobre um banco de dados. Uma transao pode
ser constituda por uma ou mais operaes de acesso base de dados. Todas as operaes devem ser bemsucedidas, caso contrrio os efeitos da transao devem ser revertidos.
Uma transao bem-sucedida termina quando um comando COMMIT executado. O comando
COMMIT finaliza e efetiva todas as alteraes feitas na base de dados durante a transao.

1.2. ROLLBACK
Se uma transao aborta antes de o comando COMMIT ser executado, a transao deve ser
desfeita, isto , todas as mudanas feitas durante a transao devem ser desconsideradas. O processo de
recuperao automtica que permite desfazer as alteraes feitas contra a base chamado ROLLBACK.
O ROLLBACK retorna a situao dos objetos da base alterados na transao mesma situao em que
se encontravam no incio da transao.
O ROLLBACK reverte os efeitos de uma transao como se ela nunca tivesse existido.
1.3. Locks
Quando um dado acessado por uma transao, o perigo de interferncia de outras transaes
acessarem o mesmo dado constante. O gerenciamento de LOCKS ajuda a prevenir isto.
Locks so recursos de compartilhamento de dados, que permitem que o dado seja atualizado e
pesquisados dentro de um ambiente multi-usurio de maneira segura e que lhes garante confiabilidade e
integridade.
Atravs dos locks possvel garantir que somente um usurio esteja atualizando o dado em um
determinado momento, que vrios usurios possam pesquisar o mesmo dado ao mesmo tempo, etc.
H, normalmente, independente da nomenclatura dada por fornecedores de SGBDs, dois nveis de locks
importantes:
- locks exclusivos: ou XLOCKS, usados para garantir o uso de um determinado dado por um nico
usurio. especialmente utilizado em casos de atualizaes.
- locks compartilhados: ou SLOCKS, usados para permitir que mais de um usurio acesse o mesmo
dado ao mesmo tempo. especialmente utilizado em casos de pesquisa em tela, por exemplo. Os

SLOCKS garantem que um usurio possa consultar (e somente consultar) um dado se houver outros
usurios acessando o mesmo dado para consulta.
Quando um usurio adquire um nvel de lock sobre um dado, ele pode requisitar outro nvel ao SGBD.
A este conceito damos o nome de promoo de nveis de LOCK.
Imagine um usurio em nvel SLOCK sobre um registro presente na tela. Para alterar o registro,
ser necessrio que adquira XLOCK, para depois poder alter-lo. Isto s ser possvel se mais nenhum
usurio estiver atuando sobre o mesmo registro, seja em SLOCK ou XLOCK. Isto se explica de
maneira muito simples:
- se fosse possvel a qualquer usurio alterar valores de registros em uso por parte de outros usurios, a
informao consultada nunca seria garantidamente segura, uma vez que a qualquer momento poderia ser
alterada, inclusive no exato momento de um processamento, quando iniciaria com um valor e terminaria
com outro valor, alterado por outro usurio.
A tabela abaixo mostra as transies de nveis de LOCK possveis:
Corrente

Requisitado
Slock
OK
OK

Slock
Xlock

Xlock
X
X

A Tabela a seguir mostra a compatibilidade de Locks entre transaes :


TX1

TX2
SLOCK
OK
OK
X

SLOCK
XLOCK

XLOCK
OK
X
X

1.4 Promoo de Locks por Objeto


A tabela abaixo mostra as transies de nveis de locks por objeto(tabela ou registro da base de
dados) possveis:

Corrente

Slock
Registro
Slock
Tabela
Xlock
registro
Xlock
Tabela

Slock
Registro
OK

Requisitado
Slock
Tabela
X

OK

OK

Ok

OK

OK

OK

OK

OK

Xlock
Registro
X

Xlock
Tabela
X

1.5 Gerenciadores de Banco de dados OLTP(On-line Transaction Processing)


Os Gerenciadores de banco de dados OLTP ou transacionais permitem que os dados
armazenados em um banco de dados permaneam disponveis 24 horas por dia. Estes Gerenciadores
possuem arquitetura complexa e bastante sofisticada que garante a integridade transacional das operaes
efetuadas contra a base de dados. Adotam a filosofia all-or-nothing pela qual uma transao s
efetivada contra a base ao se alcanar a instruo COMMIT.
Este procedimento garante que processos longos de modificao do estado da base jamais sejam
efetivados parcialmente.
Da mesma forma, este gerenciadores permitem que seja feito bachup do seu contedo de maneira
transparente para que est usando os dados armazenados, no sendo necessrio desativar o servidor de
dados.
1.6 Log de Transaes
O Log de transaes, embora possa ser encontrado tambm em SGBDs OLTP.
Normalmente trata-se de um arquivo que registra todo o desenvolvimento de cada transao
ocorrida ou em curso. Sua importncia est na capacitao de efetuao de rollcks e rollforwords, que
possibilitam desfazer e refazer transaes.
1.7 Falhas
Os bancos de dados esto sujeitos a diversas causas de falhas:
- queda do fornecimento de energia;
- falhas de hardware;
- falhas ou sabotagem de operao;
- etc.
Os backups e sua administrao so os mecanismo determinante da reversibilidade dos efeitos e danos
provocados por falhas. Da mesma forma, a capacitao para desfazer transaes incompletas, e refazer
transaes completas de fundamental importncia neste sentido.
Aps ocorrida uma falha, j na reinicializao do banco de dados, o SGBD deve possuir
ferramentas que possibilitem verificar que um encerramento anormal ocorreu e determinar as
providncias a se tomar:
- se o backup deve ser restaurado ou no;
- se ser necessrio rolar log de transaes;
- Quantas e quais transaes sero desfeitas
1.8 ROLLFORWORD
Quando da reinicializao de um banco de dados aps uma falha, algumas transaes podem ter
sido perdidas na memria, embora um comando Commit j tenha sido emitido. Isto quer dizer que no log
de transaes a transao considerada completa. No entanto, os efeitos no foram registrados em
definitivo na base de dados.
Isto quer dizer que esta transao deve ser completada novamente. Usando o log de transaes o
SGDB "sabe" que partes da transao ainda no foram gravados em definitivo. As etapas que ainda
faltam ser gravadas so ento executadas at ser encontrado o comando COMMIT gravado no log de
transaes. A este processo chamamos refazer a transao ou rollfoward.

Diferente do rollback, que pode ser executado por uma aplicao ou no processo de reinicializao do
banco de dados, o rollfoward pode ser apenas executado quando do processo de reinicializao do banco
de dados.
1.9 SYNCPOINT
Embora algumas SGDBs permitam que cada transao completada seja imediatamente gravada na base,
este no sem dvida o melhor meio de se efetivar transaes, devido sobrecarga de gravao contra o
banco, o que ocasiona uma queda de performance considervel.
Cada operao que constitui uma transao pode ser mantida em memria (gerenciada por
paginadores, cache managers, etc) e registrada contra o log de transaes, sendo gravada contra a base
em intervalos de tempo pr-determinados. Quando terminado o intervalo, todos os efeitos da alteraes
mantidos em memria so gravados efetivamente contra a base, sem prejuzo do gerenciamento de lock
em curso. A este "alarme" que permite disparar a efetivaes contra a base chamamos syncpoint.
Os syncpoints sincronizam log de transaes, base de dados e memria.
2. ARQUITETURAS DE DISTRIBUIO DE DADOS
H, na teoria, 2 arquiteturas bsica de Bancos de Dados no que se refere distribuio dos dados:
-Centralizados: os dados encontram-se sob um nico gerenciamento, possivelmente no mesmo
equipamento, podendo ser acessados por equipamentos localizados distncia;
-Distribudos: Os dados encontram-se sob gerenciamento distribudo, possivelmente em equipamentos
separados por qualquer distncia, ligados por meios de comunicao de dados. Cada unidade autnoma
no que se refere a seus prprios dados, podendo acess-los independentemente de haver conexo ativa
com as demais. Isto , por exemplo, o caso de uma agncia bancria que armazena os dados de seus
clientes: para acess-los localmente ela no depende ( de fato, no pode depender) das demais agncias,
ou se a comunicao com a matriz est no ar ou no. A distribuio dos dados deve ser efetiva: acessar
os dados dos clientes locais no pode de forma alguma depender do acesso a outros equipamentos que
no sejam o servidor de dados local. No entanto, dados de outras agncias tambm devem estar
disponveis, sendo transparente para o usurio final onde efetivamente se encontra o dado requisitado.
Esta questo abre uma discusso sobre alguns aspectos:
-Se uma agncia precisa consultar, por exemplo, um dicionrio master de toda a rede, para
descobrir que finalmente os dados que precisa so locais, este BD pode ser considerado distribudo,
especialmente se este master se encontra em outro equipamento distncia?
-Se o master vier a ter algum problema, todas as agncias deixam de ter inclusive acesso a seus
prprios dados. Isto pode acontecer em um BD distribudo?
Estes so pontos cruciais sobre os quais se focalizam as querelas entre fornecedores de BD
centralizados e distribudos. O fato que, enquanto no h uma palavra final dos organismos
internacionais de padronizao sobre o que totalmente distribudo e o que no , fornecedores diversos
tm adotado uma filosofia alternativa que se no atende a todas as necessidades da distribuio completa
dos dados, auxilia na obteno de algumas vantagens que antes s eram alcanadas atravs desta
distribuio: o processamento distribudo sobre dados centralizados, mais presente hoje na forma clientserver ou cliente servidor.
Na forma tradicional de processamento distncia sobre dados distribudos, todos os
equipamentos eram considerados terminais da mquina principal ou host. Isto, na maioria das vezes
queria dizer que remotamente, atravs de modem, linha privada ou discada, redes de pacotes, etc.,

obtinha-se um terminal a mais, ainda que funcionando a uma velocidade de comunicao inferior aos
terminais locais.
Tecnologicamente, as formas de comunicao de dados sofreram um avano considervel pelo
uso de protocolos mais rpidos e confiveis, bem como pela melhoria de equipamentos de comunicao e
meios de transmisso, especialmente a fibra ptica. Isto resolveu o problema da velocidade de
comunicao host-terminal. Subsistia o problema da sobrecarga de processamento, cada terminal a mais
conectado ao host tendia a degradar a performance global do equipamento.
A filosofia cliente-servidor foi a alternativa encontrada para este problema. Passou-se a adotar
uma forma de processamento realmente distribudo, no qual ao invs de se ligar terminais diretamente
sobre o host, ligam-se a servidores de processamento, que conectados ao host, agora chamado servidor de
dados, tornam-se clientes de dados armazenados no servidor.
Assim, cada servidor de processamento d aos usurios dos terminais ligados a ele a impresso de
que os dados esto efetivamente armazenados nele. De fato, esta a impresso que a mquina servidora
de processamento tem de si prpria, embora ela seja um cliente dos dados do servidor de dados.
Como resultado, todo o processamento dos terminais feito pelo cliente, que requisita ao servidor
somente os dados necessrios ao processamento.
Reduz-se assim, a quantidade de canais de comunicao necessrios entre o antigo host e os
terminais, passando a existir canais entre o host, agora chamado servidor, e as mquinas clientes.
Numa palavra final, permanecem centralizados os dados, mas distribui-se o processamento.
2.1 TWO-PHASE COMMIT
Uma das principais caractersticas, e tambm das que apresentam maior dificuldade de
implementao plena, para BD distribudos o COMMIT de duas fases ou two-phase commit (TPC).
Imagine uma transao sobre um banco de dados distribudo que atualize tabelas de 3 ou 4
mquinas. O que aconteceria transao se uma das mquinas que teve alguma tabela j atualizada sasse
do ar enquanto a transao prosseguia at certo ponto quando ento um rollfoward fosse solicitado por
qualquer razo?
Ao tentar desfazer a parte da transao ocorrida sobre o equipamento em falha poderia acontecer
de no serem revertidos os efeitos da transao sobre os dados daquele equipamento, mas dos demais sim.
Isto colocaria o banco numa situao de exceo, ou erro transacional, ou ainda de falha da integridade
transacional.
Para evitar este problema, e da mesma forma garantir que quando uma transao emita um
COMMIT, todos os gerenciadores envolvidos efetuem as partes da transao com que esto envolvidos,
faz-se necessrio emitir um COMMIT para cada gerenciador. A transao s ser efetivamente
"commitada" no caso de todos os gerenciadores envolvidos responderem OK solicitao.

3 . SISTEMA GERENCIADOR DE BANCO DE DADOS (recapitulao BD)


3.1 CONCEITO
(Sistema Gerenciador de Banco de Dados) - um programa que gerencia e mantm listas de
informaes.
Os dados armazenados em um banco de dados podem ser imaginados como uma populao de
informao. Nesse caso, a populao no representa apenas um grupo de pessoas que vive na mesma rea
geogrfica, mas qualquer grupo ou classe de itens ou objetos que podemos definir. Ao criarmos um
banco, a populao na qual estamos interessados aquela que precisamos rastear, e que se torna a base
dos dados.

Para armazenar os dados em disco, o DBMS tem de fornecer algum tipo de servio de definio
de dados, a fim de definir os registros e os campos. Precisa, ainda, de um mecanismo interno para manter
os dados no disco e para saber onde est cada elemento em particular.
3.2 Aplicativo de Banco de Dados
So programas que permite restaurar, visualizar e atualizar as informaes armazenadas pelo
DBMS.
Domnio
a categoria e o tipo dos elementos permitidos em um campo particular.
Ex: nome : A..Z, a..z
Modelos de DBMS
- Sistema de Gerenciamento de arquivos;
- Sistema de Banco e Dados Hierrquico
- Sistema de Banco de Dados de Rede;
- Banco de Dados Relacional;

4. SQL
4.1 Histrico
Entre 1974 e 1979, o San Jos Research Laboratory da IBM desenvolveu um SGDB relacional que ficou
conhecido como Sistema R.
Para a criao e acesso aos dados foi adotada uma linguagem chamada SEQUEL, mais tarde
rebatizada SQL (Structured Query Language).
Embora a query em sua definio, a SQL foi projetada de forma a permitir que alm de consultas
(queries), inseres, alteraes e delees fossem feitas, alm da prpria criao das tabelas e campos.
Dividiu-se a SQL ento em duas partes:
-DDL: Data Description Language (Linguagem de Descrio de Dados);
-DML: Data Manipulation Language (Linguagem de Manipulao de Dados).
DDL
A DDL, uma parte muito pequena da SQL, permite a criao e manuteno do dicionrio de
dados. O dicionrio de dados contm a definio de cada tabela, de cada campo, enfim, contm a
definio da base de dados propriamente dita. Em outras palavras, o dicionrio de dados guarda dados
sobre os dados.
Embora existam algumas outras construes, a mais importante das construes da DDL a destinada a
criao de tabelas. Por exemplo, a sentena para a criao das tabelas funcionrio, cidade, e setor, poderia
ser como segue:
Adotada como padro mundial pela ISSO em 1987, uma linguagem exclusiva de banco de
dados Cliente/Servidor;
6

No dispe dos seguinte recursos:


- Repetio e desvio;
- Comandos para manipulao de telas e impresso de relatrios;
Os Fabricantes de SGBD podem expandir a linguagem SQL padro ANSI, desde que os
comandos bsicos sejam aceitos.
CREATE TABLE funcionrio
(matrfunc NUMBER(5) NOT NULL,
nomefunc CHAR(40),
cdsetfunc NUMBER(3),
ruanofunc CHAR (40),
bairrofunc CHAR(15),
cdcidfunc NUMBER(5),
salrfunc NUMBER (11,2);
DML
a parte mais ampla da SQL. Permite pesquisar, alterar, incluir e deletar dados da base de dados.
So quatro as sentenas mais importantes da DML:
-SELECT: permite a pesquisa de dados;
-UPDATE: permite a atualizao de dados;
- DELETE: permite a deleo de dados;
- INSERT: permite a incluso de dados.
4.2 Comandos Bsicos
SELECT
- Lista os atributos desejados como resultados de uma consulta;
- Corresponde a operao de projeo da lgebra relacional;
- Lista de atributos pode ser substitudo por *;
From
- Lista de relao a serem usados na execuo da expresso;
Where
- So definidos critrios de pesquisa envolvendo atributos das relaes definidas na clusula from ;
comando opcional;
Order By
- Especifica a seqncia de ordenao da tabela criada pela consulta;
- Comando opcional;
- Qualificador opcional : asc / desc.
Select A1, A2,...,An
From r1,r2,...rm
Where P

Onde A so os campos a serem selecionados, R so as tabelas, e P uma condio.

Exemplos:
1- Selecionar todos os atributos de cada funcionrio:
SELECT *
FROM funcionrio;
2- Selecionar todos os atributos dos funcionrios da cidade de Tubaro:
SELECT *
FROM funcionrio
WHERE cidafunc = Tubaro;

3- Selecionar os nomes de todos os funcionrios da cidade de Tubaro e salrios maior que R$ 500,00
SELECT nomefunc
FROM funcionrio
Where cidafunc = Tubaro and salafunc > 500;
4- Selecionar o nome e rua onde moram os funcionrios com matrcula maior que 100 e cidade igual a 25:
SELECT nomefunc, ruanofunc
FROM funcionrio
WHERE cdcidfunc=25
AND matrfunc>100;

5- Selecionar o nome rua onde moram os funcionrios com matrcula maior do que 100 e cidade igual a
25, ordenados por nome em ordem decrescente:
SELECT nomefunc,ruanofunc
FROM funcionrio
WHERE cdcidfunc=25
AND matrfunc>100
ORDER BY nomefunc DESC;
6- Selecionar para cada funcionrio o seu nome e o de sua cidade:
SELECT nomefunc, nomecid
FROM funcionrio, cidade
WHERE cdcidfunc=cdcidade;

Comandos de Comparao de Valores


Between
Faz uma pesquisa entre uma faixa de valores para um campo da tabela.
8

Not Between
Faz uma pesquisa descartando uma faixa de valores.
Exemplo
Select *
from funcionario
where idadefunc between 18 and 30;
Select *
from funcionario
where idadefunc not between 18 and 30;

IN
Consulta a presena de um campo em um conjunto de valores
NOT IN
Consulta a no presena de um campo em um conjunto de valores
Exemplo:
Select *
from funcionario
where cdcidfunc in ( 10, 20, 30 ,35);
Like
Compara a existncia de uma caracter em uma determinada posio em uma string.
_ Testa a existncia de um caracter no nulo na posio;
% representa qualquer seqncia de n caracteres.
Not Like
Compara a no existncia de um caracter em uma determinada posio em uma string.
Exemplo
Select *
From funcionario
where nomefunc like Rudiney%
Esta consulta traz todos os funcionrios com primeiro nome Rudiney no importa o resto do nome.
Select *
From funcionario
where nomefunc like %da Silva
9

10

Neste caso localiza todos os funcionrios com sobrenome da Silva .


Null
Verifica se o valor do campo comparado zero ou vazio;
Not Null
Verifica se o valor do campo comparado no zero ou vazio;
Exemplo: Select *
From funcionario
Where endereco is null;
Exist
Verifica se o resultado do clculo da subconsulta representada por select * from No vazia.

Select x
from A
Where exists (select *
from B
where y=x)
O campo X da relao A ser selecionado, se existir um elemento y=x na relao B.
Exemplo
Select *
from alunos
where exists
(select *
from alunos
where curso_alu=CCP);
Not Exists
Verifica se o resultado do calculo da subconsulta representada por Select * from vazia.
FUNES
Count - Nmero de valores da coluna
Sum - Soma dos valores da Coluna
AVG - Mdia dos valores da Coluna
Max - Maior valor da coluna
Min - Menor valor da coluna
Exemplo
10

11

Select max(idade), nim(idade)


from alunos;
Select avg(salario)
From funcionario;
Select nome
From funcionario
Where idade > (select avg(idade)
From funcionario)
Neste exemplo o comando SQL vai selecionar o nome dos funcionrios com idade acima da mdia.

GRUPO BY
Forma grupos com as tuplas da tabela especificada na clusula from, que possuem o mesmo valor
no atributo especificado na clusula grupo by;
Para ter resultado em ordem, deve ser especificado tambm a clausula order by(aps a clausula
grupo by).
Exemplo
Select curso_alu, count(curso_alu)
from alunos
group by curso_alu;

HAVING
Having para os grupos o que where para as linhas. Em outras palavras, utilizado para eliminar
grupos, onde where utilizado para eliminar linhas.
Exemplo:
Select curso_alu, avg(idade)
from alunos
group by curso_alu
having avg(idade) > 18;

11

12

4.3 BANCO DE DADOS ORACLE - Conceitos Bsicos


LIMITES DO ORACLE RDBMS
ITEM
Tabela na Base de dados
Linhas por Tabelas
Colunas por tabelas
Indices por tabelas
Tabelas ou views joined em uma query
Niveis de ninho de subqueries
Caracteres em um nome
Colunas por ndices

LIMITE
No h limites.
No h limites
254
No h limites
No h limites
30
255
16

CRIANDO TABELAS
Tipos de Dados(Datatypes)
Char(n)
Varchar2(n)
Long
Number(p,s)
Raw
Long Raw
Date

Tamanho Fixo, pode conter uma seqncia de 1 a 255 bytes


alfanumricos;
Tamanho Varivel, pode conter uma seqncia de 1 a 2000 bytes
- alfanumricos.
Tamanho Varivel at 2 Gigabytes alfanumricos
nota : s pode existir uma coluna long em cada tabela
Numrico com sinal e ponto decimal,
sendo preciso de 1 a 38 dgitos
Binrio - Varivel at 255 bytes
Binrio - Varivel at 2 gigabytes - imagem
Data c/ hora, minuto e segundo

COMANDO CREATE TABLE


CREATE TABLE DEPT
(DEPTNO NUMBER(2) NOT NULL,
DNAME VARCHAR2(14),
LOC VARCHAR2(13));
CREATE TABLE EMP
(EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
12

13

JOB CHAR(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) NOT NULL);
INSERINDO DADOS EM TABELAS
DESC DEPT;

- lista os campos da tabela dept

INSERT INTO DEPT


VALUES (50, TESOURARIA', 'TUBARAO',1000);
INSERT INTO DEPT(DNAME,DEPTNO)
VALUES(CAIXA',60);

13

14

FUNES ARITMTICAS
Funes
Round

ROUND(SAL,2)

Trunc

TRUNC(SAL,2)

Mod

Mod(sal,comm)

Power

Power(sal,2)

Sign

Sign(sal)

SQRT

SQRT(25)

sal arredondado para 2 casas


apos o ponto decimal
Sal truncado para 2 dgitos
aps o ponto decimal.
Retorna o resto da diviso de
sal/comm
Retorna o sal elevado ao
quadrado.
Se SAL maior que O retorna
+1
Se SAL menor que 0 retorna 1
Se SaL igual a 0 retorna 0.
retorna a raiz quadrada de 25

OPERADORES ARITMTICOS
+, -, *, /

Select ename, sal, comm, sal+comm


from emp
where job = 'salesman';
Select ename, sal, comm
from emp
Where comm > 0.25 * sal
Select ename, comm/sal, comm,sal
from emp
where job = 'Salesman'
order by comm/sal asc;
Select ename, sal, comm,12*(sal+comm)
from emp
where job = 'Salesman';

Select ename, sal, sal/22, round(sal/22,0), round(sal/22,2)


from emp
where emp
where deptno = 30;
14

15

select ename, sal, sal/22, trunc(sal/22,0=, trunc(sal/22,2)


from emp
where deptno = 30;

INCLUINDO NOVA COLUNA NA TABELA


ALTER TABLE DEPT
ADD (CCUSTO NUMBER(6));
ALTERANDO O TAMANHO DE UMA COLUNA
ALTER TABLE DEPT
MODIFY DNAME CHAR(20);

CRIANDO VIEWS
CREATE VIEWS MANEGERS AS
SELECT ENAME, JOB, SAL
FROM EMP
WHERE JOB = 'MANAGER';

DELETANDO VIEWS
DROP VIEWS MANAGERS;

15

16

ATUALIZANDO REGISTROS
UPDATE EMP
SET JOB='MANAGER'
WHERE ENAME='MARTIN';

ATUALIZANDO VRIOS REGISTROS


UPDATE EMP
SET JOB='VENDEDOR'
WHERE JOB='SALESMAN';
UPDATE EMP
SET DEPTNO=40, JOB='SALESMAN'
WHERE JOB='VENDEDOR';
DELETANDO LINHAS DAS TABELAS
DELETE FROM EMP
WHERE ENAME='MARTINS';
DELETE FROM DEPT
WHERE DEPTNO=60;

FUNES DE GRUPO
AVG, COUNT, WHERE, MAX, MIN, SUM, STDDEV,VARIANCE
Funes
AVG
COUNT
WHERE
MAX
MIN
SUN
STDDEV
VARIANCE

Exemplo
AVG(SAL)
COUNT(COMM)
COUNT(*)
COUNT(*)
MAX(SAL)
MIN(SAL)
SUM(SAL)
STDDEV(SAL)
VARIANCE(SAL)

Resultado
MADIA DO VALOR DE SAL
CONTA NUMERO DE LINHAS COM COMM
CONTA O NUMERO DE LINHAS CFE.
MAIOR VALOR DE SAL.
MNIMO VALOR DE SAL.
SOMOTRIA DOS VALORES DE COMM
CLCULO DESVIO PADRO DA SAL.
CALCULA DA VARIANA DE SAL.

UTILIZANDO FUNES DE GRUPO


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

16

17

2) SELECT DEPTNO, SUM(SAL)


FROM EMP
GROUP BY DEPTNO;

17

18

FUNES DE DATA
FUNES
ADD_MONTHS
MONTHS_BETWEEN
NEXT_DAY
LAST_DAY
TRUNC

EXEMPLO
RESULTADO
ADD_MONTHS(HIREDATE ADICIONA 5 MESES NA
,5)
DATA HIREDATE
MONTHS_BETWEEN(HIRE CALCULA O NMERO DE
DATE,SYSDATE)
MESES BETWEEN ENTRE
AS DATAS
NEXT_DAY(HIREDATE,'FR PROCURA UMA SEXTAIDAY')
FEIRA APS HIREDATE
LAST_DAY(SYSDATE)
RETORNA
A
DATA
TOMANDO
COMO
PARAMETRO O 'FMT'
TRUNC(SYSDATE,FMT)
TRUNCA A DATA PARA A
PRIMEIRA DATA DO 'FMT'

Funes de converso
Funes
TO_CHAR

Exemplo
TO_CHAR(SYSDADE,YY)

TO_DATE

TO_DATE(15/05/90,DD/MM/YY)

TO_NUMBER

TO_NUMBER(SUBSTR($150,2,3))

Resultado
CONVERTE
COLUNAS
DO
TIPO
NUMBER E DATA PARA CHAR.
CONVERTE COLUNAS DO TIPO CHAR
PARA O FORMATO DE DATA.
CONVERTE AS 3 ULTIMAS (EM
FORMATO CHAR) PARA MUMBER.

Usando && para substituir variavel


Usando o duplo &, voc pode reusar uma varivel sem colocar no prompt a cada vez.
EX: Select empno, ename, job, &&_nome_da_coluna
From emp
Order by &column_name

Resultado:
Enter value for nome_da_coluna: deptno
EMPNO ENAME
JOB
----------- ------------------ -------------------------

DEPTONO
-------------------18

19

7839
7782

King
Clark

President
Manager

10
10

5. INTEGRIDADE REFERENCIAL

PRIMARY KEY
CREATE TABLE FILIAL
( CD_EMPRESA NUMBER(6,0),
CD_FILIAL
NUMBER(4,0),
CD_TIPO
VARCHAR2(20),
DT_CADASTRO DATE,
CONSTRAINT PK_FILIAL PRIMARY KEY(CD_EMPRESA,CD_FILIAL));
INTREGRIDADE REFERENCIAL
INTEGRIDADE
No ORACLE 7 todas as regras de integridade de dados e entidade so definidos por objetos
chamados CONSTRAINT. Que podem ser definidos quando da criao da tabela ou posteriori via
camando ALTER TABLE.
Os constraints suportados so :
* NOT NULL
* UNIQUE KEY
* PRIMARY KEY
* FOREIGN KEY
* CHECK
CONSTRAINTS IN-LINE
Exemplo:
CREATE TABLE EMPREGADO
( CD_EMPREGADO NUMBER (6,0) PRIMARY KEY,
...............................................................................
............................................................................... );

CONSTRAINTS OUT-OF-LINE
Exemplo:
19

20

CREATE TABBLE EMPREGADO


( CD_EMPREGADO NUMBER (6,0) NOT NULL,
.....................................................................
.....................................................................
CONSTRAINT PK_EMPREGADO PRIMARY KEY (CD_EMPREGADO) );

Nota : Quando o constraint for definido sem nome, o oracle define um nome para o mesmo - sys_c00n onde n um nmero seqencial crescente.

PRIMARY KEY CONSTRAINT


Valor nico que identifica cada linha da tabela.
Exemplo:
CREATE TABLE EMPRESA
( ..........................................................................................................
CONSTRAINT PK_EMPRESA PRIMARY KEY (CD_EMPRESA);

CHECK CONSTRAINT
As validaes de colunas so feitas utilizando o CHECK CONSTRAINT.
Exemplo:
CREATE TABLE FILIAL
( CD_EMPRESA NUMBER (6,0) CONSTRAINT FK1_FILIAL
REFERENCE EMPRESA (CD_EMPRESA),
CD_FILIAL NUMBER (4,0) CONSTRAINT CK_FILIAL
CHECK (CD_FILIAL BETWEEN 1 AND 9999) DISABLE,
CD_TIPO VARCHAR2 (20) CONSTRAINT CK_TIPO_FILIAL
CHECK (CD_TIPO IN ('MATRIZ', 'FILIAL', 'FABRICA')),
DT_CADASTRO DATE,
CONSTRAINT PK_FILIAL PRIMARY KEY (CD_EMPRESA, CD_FILIAL));

20

21

FOREIGN KEY CONSTRAINT


* Deve estar associada a uma primary key ou unique key definida anteriormente.
* Pode assumir valor nulo ou igual ao da chave referenciada.
* No existe limite para um nmero de foreign keys.
* Garante a consistncia com a primary key referenciada.
* Pode fazer referncia a prpria tabela.
* No pode ser criada para views, synonyns e remote table

Exemplo:
CONSTRAINT FK1_FILIAL
FOREIGN KEY (CD_EMPRESA)
REFERENCES EMPRESA (CD_EMPRESA)
OU
CONSTRAINT FK1_FILIAL
FOREIGN KEY (CD_EMPRESA)
REFERENCES EMPRESA

CHECK CONSTRAINT
As validaes de colunas so feitas utilizando o CHECK CONSTAINT.
Exemplo:
Create table filial
(
cd_empresa number(6,0) constraint fk1_filial
references empresa (cd_empresa),
cd_filial number(4,0) constraint ck_filial
check (cd_filial between 1 and 9999) disable,
cd_tipo varchar2(20) constraint ck_tipo_filial
check (cd_tipo in (matriz, filial,fabrica, )),
dt_cadastro date,

21

22

constraint pk_filial primary key (cd_empresa, cd_filial));

DEFAULT SPECIFICATION
Podemos atribuir valores default para colunas, visando facilitar a insero de dados
Create table filial
(
cd_empresa number(6,0) constraint fk1_filial
references empresa (cd_empresa),
cd_filial number(4,0) constraint ck_filial
check (cd_filial between 1 and 9999) disable,
cd_tipo varchar2(20) constraint ck_tipo_filial
check (cd_tipo in (matriz, filial,fabrica, )),
dt_cadastro date default sysdate,
constraint pk_filial primary key (cd_empresa, cd_filial));

OBS: para ativar a constraint : alter table filial enable constraint fk_filial;

DELETE CASCADE ACTION


Opo a ser utilizada quando da definio do constraint foreing key, para que quando deletamos
registros da tabela pai os registros da tabela filho sejam automaticamente deletados.
Exemplo
create table empregado
(................................
cd_depto number(2)
constraint fk1_emp_dept
references departamento
on delete cascade
..........................);

DELETANDO CONSTRAINT
alter table filial drop constraint fk_filial;

22

23

6 PL/SQL
6.1. PORTABILIDADE
Aplicaes escritas em PL/SQL so portveis para qualquer Mquina que rode ORACLE
RDBMS com PL/SQL.
6.2. INTEGRAO COM RDBMS
- Variveis PL/SQL podem ser definidas a partir de definies das colunas das tabelas.
- Reduo de manuteno das aplicaes, pois estas adaptam-se as mudanas da Base de Dados.
6.3. CAPACIDADE PROCEDURAL
- Comandos de controle de fluxo, comandos de repeties e tratamentos de erros;
6.4. PRODUTIVIDADE
- Desenvolvimento de Procedures e Triggers no Oracle Forms e Oracle Reports.
- Desenvolvimento de Database Triggers, Procedures e Functions a nvel do Banco de Dados

6.5 PRINCIPAIS CARACTERSTICAS- PL/SQL

ESTRUTURA DE BLOCO
DECLARE - Opcional
Variaveis, cursores, exceptions definidas pelo usurio
BEGIN - Obrigatrio
- SQL
- PL/SQL
EXCEPTION Opcional
Aes que so executadas quando ocorem os erros
END obrigatrio

BLOCO PL/SQL COM SUB-BLOCO


DECLARE
DEFINIO DE VARIVEIS
BEGIN
COMANDOS
DECLARE
DEFINIO DE VARIVEIS
BEGIN
23

24

COMANDOS
EXCEPTION
TRATAMENTO DE ERROS
END;

Exemplo:
Declare
V_variavel varchar2(5);
Begin
Select nome_coluna
Into v_varivel
From table_name;
Exeption
When exception_name Then
.....
End;
Obs: Sempre coloque um (;) no fim de SQL ou um PL/SQL.

Tipos de Blocos
Anonymous
Declare
Begin
.......
Execption

Procedure

Function

Procedure name is

Function name return datatype is

Begin
.......
Execption

Begin
.......
Return value;
Execption

End;
End;
UTILIZA COMANDOS SQL
SELECT, INSERT, UPDADE, DELETE, ROLLBACK, COMMIT, SAVAPOINT

DECLARAO DE VARIVEIS E CONSTANTES


DATATYPES MAIS UTILIZADOS
CHAR
VARCHAR2
INTERGER
24

25

NUMBER
DATE
BOOLEAN

Declare
V_data
date;
V_deptno
number(2) := 10;
V_location varchar2(13) := Atlanta;
V_comm
contant number :=1400;

EXEMPLO
DECLARE
NOME
CHAR(30);
SALARIO
NUMBER(11,2);
DEPART
NUNBER(4);
DTNASC
DATE;
SIM
BOOLEAN;
CONT
NUMBER(6) :=0;
PERC
CONSTANT NUMBER(4,2):= 36.00;

O atributo %TYPE
Declara a varivel de acordo com uma coluna definida no Banco de Dados;
Exemplo
V_ename
emp.ename%Type;
V_balance
number(7,2);
V_min_balance v_balance%Type :=10;

CONCEITO DE TRANSAO
UMA SEQUENCIA DE COMANDOS SQL DELIMITADOS POR COMANDOS CONNECT,
DISCONECT OU AINDA POR COMANDOS COMMIT.
COMANDOS A SEREM UTILIZADOS EM PL/SQL
1. COMMIT
2. ROLLBACK
3. SAVEPOINT nome-do-ponto
4.ROLLBACK TO SAVEPOINT nome-do-ponto
25

26

EXEMPLO DE CONTROLE DE TRANSAO


DECLARE
<definies de variveis>
BEGIN
INSERT INTO TEMP VALUE (null,1,linha 1);
SAVEPOINT PONTOUM;
INSERT INTO TEMP VALUE (null,2,linha 2);
SAVEPOINT PONTODOIS;
INSERT INTO TEMP VALUE (null,3,linha 3);
SAVEPOINT PONTOTRES;
<COMANDOS>
ROLLBACK SAVEPOINT PONTODOIS;
<COMANDOS>
COMMIT;
END;

FUNES UTILIZADAS EM PL/SQL


Podemos contar com o uso de funes de Caracteres, Numricas, Data, Converso, dentre outras.
Exemplo:

Declare
Cargo_atual char(10);
Begin
Select upper(substr(cargo,1,10)) into cargo_atual
from funcionario
where cd_func = 2150;
End;

EM COMANDOS PL/SQL PODEMOS UTILIZAR AS SEGUINTES FUNES:


FUNES DE ERRO
sqlerrm, sqlcode
FUNES DE CARACTERES
ascii, chr, initcap, length, lower, lpad, rpad, ltrim, rtrim, substr, upper.
FUNES NUMRICAS
abs, ceil, floor,mod, power, round, sign, trunc, sqrt........

26

27

FUNES DE DATA
Add_months, lat_day, months_between, new_time, next_day, round......
CONTROLE DE FLUXO
COMANDO IF
1. IF <condio> THEN
<comandos>
END IF;
2. IF <condio> THEN
<comandos>
ELSE
<comandos>
END IF;
3. IF <condio> THEN
<comandos>
ELSIF <condio> THEN
<comandos>
END IF;
4. IF <condio> THEN
<comandos>
ELSIF <condio> THEN
<comandos>
ELSE
<comandos>
END IF;
5. IF <condio> THEN
IF <condio> THEN
<comandos>
END IF;
END IF;

EXEMPLO
DECLARE
QUANT NUMBER(3);
BEGIN
SELECT ES.NR_QTD INTO QUANT
FROM ESTOQUE ES
WHERE CD_PROD = 30;
IF QUANT > 0 AND QUANT < 3000 THEN
UPDATE ESTOQUE SET NR_QTD = QUANT + 1
WHERE CD_PROD = 30;
27

28

ELSIF QUANT >= 3000 THEN


INSERT INTO ALERTA(PROD,ERRO) VALUES(30,MXIMO);
ELSE INSERT INTO ALERTA(PROD,ERRO) VALUES(30,MNIMO);
END IF;
END;

COMANDOS DE REPETIO
SO UTILIZADOS PARA EXECUTAR REPETIDAMENTE O CDIGO ESCRITO DENTRO
DELES.

LOOP

FOR LOOPs

WHILE LOOP

CURSOR FOR LOOPs

EXEMPLO COMANDO LOOP


DECLARE
X
NUMBER := 0;
COUNTER NUMBER := 0;
BEGIN
LOOP
X := X + 1000;
COUNTER := COUNTER + 1;
IF COUNTER > 4 THEN EXIT;
END IF;
DBMS_OUPUT.PUT_LINE (X || || COUNTER || LOOP);
END LOOP;
END;
/
EXEMPLO COMANDO FOR .. LOOP
DECLARE
A,B
NUMBER(3):= 0;
BEGIN
28

29

FOR A IN 1..25 LOOP


B:= B + 1;
DBMS_OUTPUT.PUT_LINE(LOOP1 - ||B);
END LOOP;
END;
EXEMPLO COMANDO WHILE .. LOOP
DECLARE
X NUMBER(3);
Y VARCHAR2(30);
K DATE;
J NUMBER(3);
BEGIN
X:= 0;
WHILE X<= 100 LOOP
K:= SYSDATE-X;
Y := 30;
INSERT INTO TESTE VALUES
(X,Y,K);
X := X + 1;
END LOOP;
COMMIT;
END;
CURSOR
CURSOR < nome-cursor > [parmetro tipo,...] IS
< comando select >
EXEMPLO:
CURSOR MEU_CURSOR IS
SELECT ENAME, EMPNO, SAL FROM EMP
ORDER BY SAL DESC;
EXEMPLO DE PL/SQL UTILIZANDO CURSOR
DECLARE
CURSOR C1 IS
SELECT ENAME, EMPNO, SAL FROM EMP
ORDER BY SAL DESC;
MY_ENAME CHAR(10);
MY_EMPNO NUMBER (4);
MY_SAL NUMBER (7,2);
BEGIN
OPEN C1;
FOR I IN 1..100 LOOP
FETCH C1 INTO MY_ENAME, MY_EMPNO, MY_SAL;
EXIT WHEN C1%NOTFOUND;
29

30

DBMS_OUPUT.PUT_LINE (MY_SAL || || MY_EMPNO || || MY_ENAME);


END LOOP;
CLOSE C1;
END;

EXCEES
SO USADAS NO PL/SQL PARA LIDAR COM QUAISQUER ERROS QUE OCORRAM DURANTE
A EXECUO DE UM BLOCO.
H DOIS TIPOS DE EXECEES, AS DEFINIDAS INTERNAMENTE PELA PL/SQL E AS
DEFINIDAS PELO USURIO.
NESTA PARTE VEREMOS APENAS ALGUMAS DELAS

SINTAXE:
EXCEPTION
WHEN <nome-exeception> THEN
<comandos>;
WHEN <nome-execetion> THEN
<comandos>;
EXEMPLO EXCEPTION
NO_DATA_FOUND -

Quando um select no retorna nenhuma linha

TOO_MANY_ROWS - Quando um select retorna mais de uma linha


OTHERS - Qualquer tipo de erro
DECLARE
NOME CHAR(15);
CARGO
CHAR(10);
BEGIN
SELECT ENAME, JOB INTO NOME, CARGO
FROM EMP
WHERE EMPNO = 1111;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO PROBLEMA (ERRO,DTERRO)
VALUES (REGISTRO INEXISTENTE,SYSDATE);
WHEN TOO_MANY_ROWS THEN
INSERT INTO PROBLEMA (ERRO,DTERRO)
30

31

VALUES (MUITOS REGISTROS,SYSDATE);


WHEN OTHERS THEN
INSERT INTO PROBLEMA (ERRO,DTERRO)
VALUES (OUTRO ERRO QUALQUER,SYSDATE);
END;
OUTRO EXEMPLO
DECLARE
NM VARCHAR2(30);
BEGIN
SELECT NOME INTO NM
FROM TESTE
WHERE IDADE=30;
DBMS_OUTPUT.PUT_LINE(NM);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('IDADE INEXISTENTE');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('MULTIPLAS LINHAS');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('OUTRA SAIDA');
END;

RETORNANDO ERROS
SQLERR - Retorna o nmero do erro
SQLERRM Retorna o nmero e a descrio do erro
Exemplo
BEGIN
INSERT INTO TESTE VALUES
(50,45,SYSDATE);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('ERRO - '||SQLERRM);
END;

EXCEPTION

DUP_VAL_ON_INDEX
Chave Duplicada
31

32

INVALID_CURSOR
Operao Ilegal com Cursor

INVALID_NUMBER
Converso invlida p/numrico

LOGIN_DENIED
Usurio/Senha Invlida

NO_DATA_FOUND
Nenhuma linha retornada

NOT_LOGGED_ON
Usurio no conectado

OTHERS
Erro no declarado em exceptions

PROGRAM_ERROR
Problema Interno

STORAGE_ERROR
Falta de Memria

TIMEOUT_ON_RESOURCE
Tempo de espera

TOO_MANY_ROWS
Retorna Muitas Linhas

TRANSACTION_BACKED_OUT
Volta Atrs uma transao

VALUE_ERROR
Erro Converso,Expresso

ZERO_DIVIDE
Diviso por zero

Exerccio
Escreva um bloco PL/SQL para selecionar o nome do cliente tratando os erros de nenhum valor
encontrado e muitos valores enontrados. Adicione tambm uma exceo geral para cobrir outro erro que
venha a ocorrer.
Exceptions Definidas Pelo Usurio
Exemplo:
DECLARE
X NUMBER := 0;
Y NUMBER := 0;
ESTOURO EXCEPTION;
BEGIN
FOR X IN 1..1000 LOOP
Y:= X + (X/2);
IF Y > 1000 THEN
RAISE ESTOURO;
END IF;
32

33

END LOOP;
EXCEPTION
WHEN ESTOURO THEN
DBMS_OUTPUT.PUT_LINE('ESTOURO DE CAPACIDADE');
END;

PROCEDURE
SINTAXE:
PROCEDURE nome_procedure IS
variable1 datatype;
...
BEGIN
comandos;
...
EXCEPTION
when ...
END nome_procedure;

EXEMPLO PROCEDURE
CREATE OR REPLACE PROCEDURE CHECK_SALARY
(EMP_ID INTEGER, INCREASE REAL) IS
CURRENT_SALARY
REAL;
SALARY_MISSING
EXCEPTION;
BEGIN
SELECT SAL INTO CURRENT_SALARY FROM EMP
WHERE EMPNO = EMP_ID;
IF CURRENT_SALARY IS NULL THEN
RAISE SALARY_MISSING;
ELSE
UPDATE EMP SET SAL = SAL + INCREASE
WHERE EMPNO = EMP_ID;
EXCEPTION
WHERE NO_DATA_FOUND THEN
INSERT INTO EMP_AUDIT VALUES
(EMP_ID, NO SUCH NUMBER);
WHEN SALARY_MISSING THEN
(EMP_ID, SALARY IS NULL);
END CHECK-SALARY;
/
FORMA DE CHAMADA CHECK_SALARY(EMP_NUM,AMOUNT);

33

34

PACKAGE
UM OBJETO DO DATABASE QUE CONTM UM GRUPO DE FUNES RELACIONADAS.
UM PACKAGE PODE CONTER:

PROCEDURES

FUNCTIONS

CURSOR DEFINITIONS

VARIABLES AND CONTANTS

EXCEPTION DEFINITIONS

EXEMPLO PACKAGE
CREATE REPLACE PACKAGE EMP_ACTION IS
PROCEDURE HIRE_EMPLOYEE (EMPNO NUMBER, ENAME CHAR, .....);
PROCEDURE FIRE_EMPLOYEE (EMP_ID NUMBER);
END EMP_ACTIONS;
/
CREATE OR REPLACE PACKAGE BODY EMP_ACTIONS IS
PROCEDURE HIRE_EMPLOYEE (EMPNO NUMBER, ENAME CHAR, .....); IS
BEGIN
INSERT INTO EMP VALUES (EMPNO, ENAME, .....);
END HIRE_EMPLOYEE;
PROCEDURE FIRE_EMPLOYEE(EMP_ID NUMBER) IS
BEGIN
DELETE FROM EMP WHERE EMPNO = EMP_ID;
END FIRE_EMPLOYEE;
END EMP_ACTIONS;
/
DATABASE TRIGGER

So programas PL/SQL, utilizados para completar a integridade, segurana e regras de negcios retirando
estas tarefas dos programas. Eles esto ligados a uma tabela e associado a um Evento.

CARACTERSTICA
34

35

. Disparado automaticamente quando a ocorrncia do Evento

PARTES DE UM DATABASE TRIGGER


PARTE

DESCRIO

TRIGGER TYPE

BEFORE / AFTER (comando, linha)

TRIGGERING EVENT

INSERT / UPDATE / DELETE

TRIGGER RESTRICTION

WHEN (clause opcional)

TRIGGER ACTION

PL/SQL BLOCK

UTILIZAO DATABASE TRIGGERS


TRIGGER TYPE

EXEMPLO DE UTILIZAO

BEFORE STATEMENT

Garantir segurana e integridade

BEFORE ROW

Calcular campos derivados para nova linha

AFTER ROW

Auditoria a nvel de valor ou linha

AFTER STATEMENT

Auditoria em geral

PREDICADOS CONDICIONAIS EM DATABASE TRIGGERS

INSERTING

UPDATING

DELETING

35

36

EXEMPLO DATABASE TRIGGER COM PREDICADO CONDICIONAL

CREATE TRIGGER TOTAL_SALARY


AFTER DELETE OR INSERT OR UPDATE OF DEPTNO,SAL
ON EMP
FOR EACH ROW
BEGIN
IF DELETING THEN
UPDATE DEPT_BUDGET
SET TOTAL_SAL = TOTAL_SAL - : OLD.SAL
WHERE DEPTNO =:OLD.DEPTNO;
END IF;
IF INSERTING THEN
UPDATE DEPT_BUDGET
SET TOTAL_SAL = TOTAL_SAL + :NEW.SAL
WHERE DEPTNO =:NEW.DEPTNO;
END IF;
IF UPDATING THEN
UPDATE DEPT_BUDGET
SET TOTAL_SAL = TOTAL_SAL + (:NEW.SAL -:OLD.SAL);
WHERE DEPTNO =:OLD.DEPTNO;
END IF;
END;
ATIVANDO E DESATIVANDO DATABASE TRIGGER
Quando criamos um database trigger ele fica automaticamente ativado. As vezes temos necessidade de
desativ-los como por exemplo:
. Os objetos referenciados pelo database trigger no esto disponveis;
. Vamos recuperar dados da Tabela
Podemos desativar/ativar um database trigger isoladamente ou todos relacionados a uma tabela especfica.

ALTER TRIGGER [schema.] trigger_name {ENABLE | DISABLE }


EXEMPLO:
ALTER TRIGGER TRG_EMPRESA DISABLE;
ALTER TRIGGER TRG_EMPRESA ENABLE;
ALTER TABLE [schema.] table_name { ENABLE | DISABLE } ALL TRIGGERS

36

37

EXEMPLO:
ALTER TABLE EMPRESA DISABLE ALL TRIGGERS;
ALTER TABLE EMPRESA ENABLE ALL TRIGGERS;
ELIMINANDO UM DATABASE TRIGGER
DROP TRIGGER [ schema.] trigger_name
EXEMPLO:
DROP TRIGGER TRG_EMPRESA;
VIEW DO DIOCIONRIOS COM INFORMAES DE DATABASE TRIGGERS
. USER_TRIGGERS
. DBA_TRIGGERS

37

38

DATABASE TRIGGER REPLICAO DE TABELA

CREATE TRIGGER REP_EMPRESA


BEFORE INSERT OR UPDATE OR DELETE
ON EMPRESA
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO EMPRESA@SPAULO
VALUES (:NEW.CD_EMPRESA,:NEW.NM_RAZAO_SOCIAL);
ELSIF UPDATING THEN
UPDATE EMPRESA@SPAULO
SET NM_RAZAO_SOCIAL =:NEW.NM_RAZAO_SOCIAL;
WHERE CD_EMPRESA =:OLD.CD_EMPRESA
ELSE
DELETE FROM EMPRESA@SPAULO
WHERE CD_EMPRESA =:OLD.CD_EMPRESA;
END IF;
END;

BIBLIOGRAFIA
.ELMASRI, Ramez e NAVATHE, ShamKant B. Sistemas de Banco de Dados - Fundamentos e
Aplicaes. Ed. LTC. Rio de Janeiro, 2000.
.KORTH, Henry F. & SILBERSCHATZ, Abraham. Sistemas de Bancos de Dados, So Paulo.
Ed. Makron Books, 1999.
.DATE, C.J., Introduo a Sistemas de Bancos de Dados, Rio de Janeiro. Ed. Campus, 1991.
ABBEY, Michael. Oracle: guia do usurio / Michael Abbey, Michael J. Corey; traduo Joo
Eduardo Nbrega Tortello; reviso tcnica Marcus Faversani Hermman. So Paulo: Markon
Books, 1997.
SARAIVA, Armando. Programando em Oracle. Rio de Janeiro: Infobook, 1999.

38

Você também pode gostar