Escolar Documentos
Profissional Documentos
Cultura Documentos
BANCO DE DADOS II
1- NOÇÕES FUNDAMENTAIS
1.1. Transações
Transação é uma unidade atômica de trabalho que atua sobre um banco de dados. Uma transação pode
ser constituída por uma ou mais operações de acesso à base de dados. Todas as operações devem ser bem-
sucedidas, caso contrário os efeitos da transação devem ser revertidos.
1.2. ROLLBACK
Se uma transação aborta antes de o comando COMMIT ser executado, a transação deve ser
desfeita, isto é, todas as mudanças feitas durante a transação devem ser desconsideradas. O processo de
recuperação automática que permite desfazer as alterações feitas contra a base é chamado ROLLBACK.
O ROLLBACK retorna a situação dos objetos da base alterados na transação à mesma situação em que
se encontravam no início da transação.
O ROLLBACK reverte os efeitos de uma transação como se ela nunca tivesse existido.
1.3. Locks
Quando um dado é acessado por uma transação, o perigo de interferência de outras transações
acessarem o mesmo dado é constante. O gerenciamento de LOCKS ajuda a prevenir isto.
Locks são recursos de compartilhamento de dados, que permitem que o dado seja atualizado e
pesquisados dentro de um ambiente multi-usuário de maneira segura e que lhes garante confiabilidade e
integridade.
Através dos locks é possível garantir que somente um usuário esteja atualizando o dado em um
determinado momento, que vários usuários possam pesquisar o mesmo dado ao mesmo tempo, etc.
Há, normalmente, independente da nomenclatura dada por fornecedores de SGBDs, dois níveis de locks
importantes:
- locks exclusivos: ou XLOCKS, usados para garantir o uso de um determinado dado por um único
usuário. É especialmente utilizado em casos de atualizações.
- locks compartilhados: ou SLOCKS, usados para permitir que mais de um usuário acesse o mesmo
dado ao mesmo tempo. É especialmente utilizado em casos de pesquisa em tela, por exemplo. Os
1
2
SLOCKS garantem que um usuário possa consultar (e somente consultar) um dado se houver outros
usuários acessando o mesmo dado para consulta.
Quando um usuário adquire um nível de lock sobre um dado, ele pode requisitar outro nível ao SGBD.
A este conceito damos o nome de promoção de níveis de LOCK.
Imagine um usuário em nível SLOCK sobre um registro presente na tela. Para alterar o registro,
será necessário que adquira XLOCK, para depois poder alterá-lo. Isto só será possível se mais nenhum
usuário estiver atuando sobre o mesmo registro, seja em SLOCK ou XLOCK. Isto se explica de
maneira muito simples:
- se fosse possível a qualquer usuário alterar valores de registros em uso por parte de outros usuários, a
informação 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 usuário.
Corrente Requisitado
Slock Xlock
Slock OK X
Xlock OK X
TX1 TX2
SLOCK XLOCK
- OK OK
SLOCK OK X
XLOCK X X
A tabela abaixo mostra as transições de níveis de locks por objeto(tabela ou registro da base de
dados) possíveis:
Corrente Requisitado
Slock Slock Xlock Xlock
Registro Tabela Registro Tabela
Slock OK X X X
Registro
Slock OK OK X X
Tabela
Xlock Ok X OK X
registro
Xlock OK OK OK OK
Tabela
2
3
1.7 Falhas
Os backups e sua administração são os mecanismo determinante da reversibilidade dos efeitos e danos
provocados por falhas. Da mesma forma, a capacitação para desfazer transações incompletas, e refazer
transações completas é de fundamental importância neste sentido.
Após ocorrida uma falha, já na reinicialização do banco de dados, o SGBD deve possuir
ferramentas que possibilitem verificar que um encerramento anormal ocorreu e determinar as
providências a se tomar:
1.8 ROLLFORWORD
Quando da reinicialização de um banco de dados após uma falha, algumas transações podem ter
sido perdidas na memória, embora um comando Commit já tenha sido emitido. Isto quer dizer que no log
de transações a transação é considerada completa. No entanto, os efeitos não foram registrados em
definitivo na base de dados.
Isto quer dizer que esta transação deve ser completada novamente. Usando o log de transações o
SGDB "sabe" que partes da transação ainda não foram gravados em definitivo. As etapas que ainda
faltam ser gravadas são então executadas até ser encontrado o comando COMMIT gravado no log de
transações. A este processo chamamos refazer a transação ou rollfoward.
3
4
Diferente do rollback, que pode ser executado por uma aplicação ou no processo de reinicialização do
banco de dados, o rollfoward pode ser apenas executado quando do processo de reinicialização do banco
de dados.
1.9 SYNCPOINT
Embora algumas SGDBs permitam que cada transação completada seja imediatamente gravada na base,
este não é sem dúvida o melhor meio de se efetivar transações, devido à sobrecarga de gravação contra o
banco, o que ocasiona uma queda de performance considerável.
Cada operação que constitui uma transação pode ser mantida em memória (gerenciada por
paginadores, cache managers, etc) e registrada contra o log de transações, sendo gravada contra a base
em intervalos de tempo pré-determinados. Quando terminado o intervalo, todos os efeitos da alterações
mantidos em memória são gravados efetivamente contra a base, sem prejuízo do gerenciamento de lock
em curso. A este "alarme" que permite disparar a efetivações contra a base chamamos syncpoint.
Os syncpoints sincronizam log de transações, base de dados e memória.
Há, na teoria, 2 arquiteturas básica de Bancos de Dados no que se refere à distribuição dos dados:
-Se uma agência precisa consultar, por exemplo, um dicionário master de toda a rede, para
descobrir que finalmente os dados que precisa são locais, este BD pode ser considerado distribuído,
especialmente se este master se encontra em outro equipamento à distância?
-Se o master vier a ter algum problema, todas as agências deixam de ter inclusive acesso a seus
próprios dados. Isto pode acontecer em um BD distribuído?
Estes são pontos cruciais sobre os quais se focalizam as querelas entre fornecedores de BD
centralizados e distribuídos. O fato é que, enquanto não há uma palavra final dos organismos
internacionais de padronização sobre o que é totalmente distribuído e o que não é, fornecedores diversos
têm adotado uma filosofia alternativa que se não atende a todas as necessidades da distribuição completa
dos dados, auxilia na obtenção de algumas vantagens que antes só eram alcançadas através desta
distribuição: o processamento distribuído sobre dados centralizados, mais presente hoje na forma client-
server ou cliente servidor.
Na forma tradicional de processamento à distância sobre dados distribuídos, todos os
equipamentos eram considerados terminais da máquina principal ou host. Isto, na maioria das vezes
queria dizer que remotamente, através de modem, linha privada ou discada, redes de pacotes, etc.,
4
5
obtinha-se um terminal a mais, ainda que funcionando a uma velocidade de comunicação inferior aos
terminais locais.
Tecnologicamente, as formas de comunicação de dados sofreram um avanço considerável pelo
uso de protocolos mais rápidos e confiáveis, bem como pela melhoria de equipamentos de comunicação e
meios de transmissão, especialmente a fibra óptica. Isto resolveu o problema da velocidade de
comunicação 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 distribuído, no qual ao invés 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 usuários dos terminais ligados a ele a impressão de
que os dados estão efetivamente armazenados nele. De fato, esta é a impressão que a máquina servidora
de processamento tem de si própria, 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 necessários ao processamento.
Reduz-se assim, a quantidade de canais de comunicação necessários entre o antigo host e os
terminais, passando a existir canais entre o host, agora chamado servidor, e as máquinas clientes.
Numa palavra final, permanecem centralizados os dados, mas distribui-se o processamento.
Uma das principais características, e também das que apresentam maior dificuldade de
implementação plena, para BD distribuídos é o COMMIT de duas fases ou two-phase commit (TPC).
Imagine uma transação sobre um banco de dados distribuído que atualize tabelas de 3 ou 4
máquinas. O que aconteceria à transação se uma das máquinas que teve alguma tabela já atualizada saísse
do ar enquanto a transação prosseguia até certo ponto quando então um rollfoward fosse solicitado por
qualquer razão?
Ao tentar desfazer a parte da transação ocorrida sobre o equipamento em falha poderia acontecer
de não serem revertidos os efeitos da transação sobre os dados daquele equipamento, mas dos demais sim.
Isto colocaria o banco numa situação de exceção, ou erro transacional, ou ainda de falha da integridade
transacional.
Para evitar este problema, e da mesma forma garantir que quando uma transação emita um
COMMIT, todos os gerenciadores envolvidos efetuem as partes da transação com que estão envolvidos,
faz-se necessário emitir um COMMIT para cada gerenciador. A transação só será efetivamente
"commitada" no caso de todos os gerenciadores envolvidos responderem OK à solicitação.
3.1 CONCEITO
Os dados armazenados em um banco de dados podem ser imaginados como uma população de
informação. Nesse caso, a população não representa apenas um grupo de pessoas que vive na mesma área
geográfica, mas qualquer grupo ou classe de itens ou objetos que podemos definir. Ao criarmos um
banco, a população na qual estamos interessados é aquela que precisamos rastear, e que se torna a base
dos dados.
5
6
Para armazenar os dados em disco, o DBMS tem de fornecer algum tipo de serviço de definição
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.
São programas que permite restaurar, visualizar e atualizar as informações armazenadas pelo
DBMS.
Domínio
Modelos de DBMS
4. SQL
4.1 Histórico
Entre 1974 e 1979, o San José Research Laboratory da IBM desenvolveu um SGDB relacional que ficou
conhecido como Sistema R.
Para a criação e acesso aos dados foi adotada uma linguagem chamada SEQUEL, mais tarde
rebatizada SQL (Structured Query Language).
Embora a query em sua definição, a SQL foi projetada de forma a permitir que além de consultas
(queries), inserções, alterações e deleções fossem feitas, além da própria criação das tabelas e campos.
Dividiu-se a SQL então em duas partes:
DDL
A DDL, uma parte muito pequena da SQL, permite a criação e manutenção do dicionário de
dados. O dicionário de dados contém a definição de cada tabela, de cada campo, enfim, contém a
definição da base de dados propriamente dita. Em outras palavras, o dicionário de dados guarda dados
sobre os dados.
Embora existam algumas outras construções, a mais importante das construções da DDL é a destinada a
criação de tabelas. Por exemplo, a sentença para a criação das tabelas funcionário, cidade, e setor, poderia
ser como segue:
Adotada como padrão mundial pela ISSO em 1987, é uma linguagem exclusiva de banco de
dados Cliente/Servidor;
6
7
Os Fabricantes de SGBD podem expandir a linguagem SQL padrão ANSI, desde que os
comandos básicos sejam aceitos.
DML
É a parte mais ampla da SQL. Permite pesquisar, alterar, incluir e deletar dados da base de dados.
São quatro as sentenças mais importantes da DML:
SELECT
From
- Lista de relação a serem usados na execução da expressão;
Where
- São definidos critérios de pesquisa envolvendo atributos das relações definidas na cláusula from ;
comando opcional;
Order By
7
8
Exemplos:
3- Selecionar os nomes de todos os funcionários da cidade de Tubarão e salários maior que R$ 500,00
SELECT nomefunc
FROM funcionário
Where cidafunc = “Tubarão” and salafunc > 500;
4- Selecionar o nome e rua onde moram os funcionários com matrícula maior que 100 e cidade igual a 25:
5- Selecionar o nome rua onde moram os funcionários com matrícula maior do que 100 e cidade igual a
25, ordenados por nome em ordem decrescente:
SELECT nomefunc,ruanofunc
FROM funcionário
WHERE cdcidfunc=25
AND matrfunc>100
ORDER BY nomefunc DESC;
Between
Faz uma pesquisa entre uma faixa de valores para um campo da tabela.
8
9
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
NOT IN
Exemplo:
Select *
from funcionario
where cdcidfunc in ( 10, 20, 30 ,35);
Like
Not Like
Exemplo
Select *
From funcionario
where nomefunc like ‘Rudiney%’
Esta consulta traz todos os funcionários com primeiro nome Rudiney não importa o resto do nome.
Select *
From funcionario
where nomefunc like ‘%da Silva’
9
10
Null
Not Null
Exemplo: Select *
From funcionario
Where endereco is null;
Exist
Verifica se o resultado do cálculo da subconsulta representada por “select * from “ Não é vazia.
Select x
from A
Where exists (select *
from B
where y=x)
Exemplo
Select *
from alunos
where exists
(select *
from alunos
where curso_alu=”CCP”);
Not Exists
FUNÇÕES
Exemplo
10
11
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 funcionários com idade acima da média.
GRUPO BY
Forma grupos com as tuplas da tabela especificada na cláusula from, que possuem o mesmo valor
no atributo especificado na cláusula grupo by;
Para ter resultado em ordem, deve ser especificado também a clausula order by(após a clausula
grupo by).
Exemplo
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
ITEM LIMITE
Tabela na Base de dados Não há limites.
Linhas por Tabelas Não há limites
Colunas por tabelas 254
Indices por tabelas Não há limites
Tabelas ou views joined em uma query Não há limites
Niveis de ninho de subqueries 30
Caracteres em um nome 255
Colunas por índices 16
CRIANDO TABELAS
Tipos de Dados(Datatypes)
12
13
JOB CHAR(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) NOT NULL);
13
14
FUNÇÕES ARITMÉTICAS
Funções
OPERADORES ARITMÉTICOS
+, -, *, /
14
15
CRIANDO VIEWS
DELETANDO VIEWS
15
16
ATUALIZANDO REGISTROS
UPDATE EMP
SET JOB='MANAGER'
WHERE ENAME='MARTIN';
UPDATE EMP
SET JOB='VENDEDOR'
WHERE JOB='SALESMAN';
UPDATE EMP
SET DEPTNO=40, JOB='SALESMAN'
WHERE JOB='VENDEDOR';
FUNÇÕES DE GRUPO
16
17
17
18
FUNÇÕES DE DATA
Funções de conversão
Usando o duplo &, você pode reusar uma variável sem colocar no prompt a cada vez.
Resultado:
18
19
5. INTEGRIDADE REFERENCIAL
PRIMARY KEY
INTREGRIDADE REFERENCIAL
INTEGRIDADE
No ORACLE 7 todas as regras de integridade de dados e entidade são definidos por objetos
chamados CONSTRAINT. Que podem ser definidos quando da criação da tabela ou posteriori via
camando ALTER TABLE.
* NOT NULL
* UNIQUE KEY
* PRIMARY KEY
* FOREIGN KEY
* CHECK
CONSTRAINTS IN-LINE
Exemplo:
CONSTRAINTS OUT-OF-LINE
Exemplo:
19
20
Nota : Quando o constraint for definido sem nome, o oracle define um nome para o mesmo - sys_c00n -
onde n é um número seqüencial crescente.
Exemplo:
CHECK CONSTRAINT
Exemplo:
20
21
* Deve estar associada a uma primary key ou unique key definida anteriormente.
Exemplo:
CONSTRAINT FK1_FILIAL
FOREIGN KEY (CD_EMPRESA)
REFERENCES EMPRESA (CD_EMPRESA)
OU
CONSTRAINT FK1_FILIAL
FOREIGN KEY (CD_EMPRESA)
REFERENCES EMPRESA
CHECK CONSTRAINT
Exemplo:
dt_cadastro date,
21
22
DEFAULT SPECIFICATION
Podemos atribuir valores default para colunas, visando facilitar a inserção de dados
OBS: para ativar a constraint : alter table filial enable constraint fk_filial;
Opção a ser utilizada quando da definição do constraint foreing key, para que quando deletamos
registros da tabela pai os registros da tabela filho sejam automaticamente deletados.
Exemplo
DELETANDO CONSTRAINT
22
23
6 PL/SQL
6.1. PORTABILIDADE
Aplicações escritas em PL/SQL são portáveis para qualquer Máquina que rode ORACLE
RDBMS com PL/SQL.
- Variáveis PL/SQL podem ser definidas a partir de definições das colunas das tabelas.
- Redução de manutenção das aplicações, pois estas adaptam-se as mudanças da Base de Dados.
6.4. PRODUTIVIDADE
- Desenvolvimento de Procedures e Triggers no Oracle Forms e Oracle Reports.
- Desenvolvimento de Database Triggers, Procedures e Functions a nível do Banco de Dados
ESTRUTURA DE BLOCO
DECLARE - Opcional
Variaveis, cursores, exceptions definidas pelo usuário
BEGIN - Obrigatório
- SQL
- PL/SQL
EXCEPTION – Opcional
Ações que são executadas quando ocorem os erros
END – obrigatório
DECLARE
DEFINIÇÃO DE VARIÁVEIS
BEGIN
COMANDOS
DECLARE
DEFINIÇÃO DE VARIÁVEIS
BEGIN
23
24
COMANDOS
EXCEPTION
TRATAMENTO DE ERROS
END;
Exemplo:
Declare
V_variavel varchar2(5);
Begin
Select nome_coluna
Into v_variável
From table_name;
Exeption
When exception_name Then
.....
End;
Tipos de Blocos
Anonymous Procedure Function
Declare
Procedure name is Function name return datatype is
Begin
....... Begin Begin
Execption ....... .......
Execption Return value;
Execption
End;
End;
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
Exemplo
V_ename emp.ename%Type;
V_balance number(7,2);
V_min_balance v_balance%Type :=10;
CONCEITO DE TRANSAÇÃO
1. COMMIT
2. ROLLBACK
3. SAVEPOINT nome-do-ponto
25
26
DECLARE
<definições de variáveis>
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;
Declare
Cargo_atual char(10);
Begin
Select upper(substr(cargo,1,10)) into cargo_atual
from funcionario
where cd_func = 2150;
End;
FUNÇÕES DE ERRO
sqlerrm, sqlcode
FUNÇÕES DE CARACTERES
ascii, chr, initcap, length, lower, lpad, rpad, ltrim, rtrim, substr, upper.
FUNÇÕES NUMÉRICAS
abs, ceil, floor,mod, power, round, sign, trunc, sqrt........
26
27
FUNÇÕES DE DATA
Add_months, lat_day, months_between, new_time, next_day, round......
CONTROLE DE FLUXO
COMANDO IF
1. IF <condição> THEN
<comandos>
END IF;
2. IF <condição> THEN
<comandos>
ELSE
<comandos>
END IF;
3. IF <condição> THEN
<comandos>
ELSIF <condição> THEN
<comandos>
END IF;
4. IF <condição> THEN
<comandos>
ELSIF <condição> THEN
<comandos>
ELSE
<comandos>
END IF;
5. IF <condição> THEN
IF <condição> 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
COMANDOS DE REPETIÇÃO
• LOOP
• FOR LOOPs
• WHILE 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;
/
DECLARE
A,B NUMBER(3):= 0;
BEGIN
28
29
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
EXEMPLO:
CURSOR MEU_CURSOR IS
SELECT ENAME, EMPNO, SAL FROM EMP
ORDER BY SAL DESC;
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
29
30
END LOOP;
CLOSE C1;
END;
EXCEÇÕES
SÃO USADAS NO PL/SQL PARA LIDAR COM QUAISQUER ERROS QUE OCORRAM DURANTE
A EXECUÇÃO DE UM BLOCO.
HÁ DOIS TIPOS DE EXECEÇÕES, AS DEFINIDAS INTERNAMENTE PELA PL/SQL E AS
DEFINIDAS PELO USUÁRIO.
SINTAXE:
EXCEPTION
EXEMPLO EXCEPTION
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);
30
31
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
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
■ Operação Ilegal com Cursor
■ INVALID_NUMBER
■ Conversão inválida p/numérico
■ LOGIN_DENIED
■ Usuário/Senha Inválida
■ NO_DATA_FOUND
■ Nenhuma linha retornada
■ NOT_LOGGED_ON
■ Usuário não conectado
■ OTHERS
Erro não declarado em exceptions
■ PROGRAM_ERROR
■ Problema Interno
■ STORAGE_ERROR
■ Falta de Memória
■ TIMEOUT_ON_RESOURCE
■ Tempo de espera
■ TOO_MANY_ROWS
■ Retorna Muitas Linhas
■ TRANSACTION_BACKED_OUT
■ Volta Atrás uma transação
■ VALUE_ERROR
■ Erro Conversão,Expressão
■ ZERO_DIVIDE
Divisão por zero
Exercício
Escreva um bloco PL/SQL para selecionar o nome do cliente tratando os erros de nenhum valor
encontrado e muitos valores enontrados. Adicione também uma exceção geral para cobrir outro erro que
venha a ocorrer.
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
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;
/
33
34
PACKAGE
• PROCEDURES
• FUNCTIONS
• CURSOR DEFINITIONS
• EXCEPTION DEFINITIONS
EXEMPLO PACKAGE
END EMP_ACTIONS;
/
DATABASE TRIGGER
São programas PL/SQL, utilizados para completar a integridade, segurança e regras de negócios retirando
estas tarefas dos programas. Eles estão ligados a uma tabela e associado a um Evento.
CARACTERÍSTICA
34
35
PARTE DESCRIÇÃO
• INSERTING
• UPDATING
• DELETING
35
36
Quando criamos um database trigger ele fica automaticamente ativado. As vezes temos necessidade de
desativá-los como por exemplo:
Podemos desativar/ativar um database trigger isoladamente ou todos relacionados a uma tabela específica.
EXEMPLO:
36
37
EXEMPLO:
EXEMPLO:
. USER_TRIGGERS
. DBA_TRIGGERS
37
38
BIBLIOGRAFIA
.KORTH, Henry F. & SILBERSCHATZ, Abraham. Sistemas de Bancos de Dados, São Paulo.
Ed. Makron Books, 1999.
.DATE, C.J., Introdução a Sistemas de Bancos de Dados, Rio de Janeiro. Ed. Campus, 1991.
ABBEY, Michael. Oracle: guia do usuário / Michael Abbey, Michael J. Corey; tradução João
Eduardo Nóbrega Tortello; revisão técnica Marcus Faversani Hermman. São Paulo: Markon
Books, 1997.
38