Você está na página 1de 20

Linguagem

Procedural
Tratamento de
Exceção

PROF. Ms. J FLÁVIO VASCONCELOS ALVES


ASSUNTOS AULA 6

1) Tratamento de Exceção

Obs: Efetuar cadastro em


https://livesql.oracle.com/

2
TRATAMENTO DE EXCEÇÃO

Uma exceção é uma ocorrência não


esperada, ou diferente daquela
programada para ser executada_ Em
outras palavras, uma exceção é um erro
que ocorre durante .a execução do
bloco PL /SQL.

(PUGA;FRANÇA; GOAYA, 2013)


TRATAMENTO DE EXCEÇÃO P2

Os erros de execução {run time) e tão


associados à utilização do programa .
Nesse caso quando as exceções não
são previstas e tratadas, o erro gerado
interrompe o processamento e uma
mensagem é devolvida para a
aplicação.

(PUGA;FRANÇA; GOAYA, 2013)


TRAT DE EXCEÇÃO estrutura

1 DECLARE
2 nome _ exceçao EXCEPTION;
3 BEGlN
4 RAISE exceçao;
5 EXCEPTION
6 WHEN nome_exceçao THEN
7 instruções para tratamento da exceçao;
8 WHEN OTHERS THEN
9 instruções para tratamento da exceçao;
10 END;

(PUGA;FRANÇA; GOAYA, 2013)


DECLARAÇÃO DE EXCEÇÃO

A declaração de uma exceção deve ser feita pelo


desenvolvedor na seção declarativa conforme
indicado na linha 2. A identificação de uma e
exceção segue as mesmas regra adotadas para
identificação de variáveis.
abe1tura da exceção pode ser indicada na área
de processamento (linha 4), ou seja ao ocorrer
uma exceção no fluxo do processamento o
programa é desviado para a seção de tratamento
de exceções iniciada na linha 5. Cada exceção
deverá ser indicada em um manipulador (handler)
para tratamento de exceções, indicado na linha 6
{WHEN nome_exceçao THEN) 6

(PUGA;FRANÇA; GOAYA, 2013)


DECLARAÇÃO DE EXCEÇÃO

A exceção será avaliada pelo nome e


direcionará a execução das instruções
a serem realizadas; caso não seja
encontrado o manipulador para a
exceção em questão serão
executadas as instruções do
manipulador WHEN OTHERS THEN
linha 8), utilizado para tratamento de
exceções genéricas.
7

(PUGA;FRANÇA; GOAYA, 2013)


EXCEÇÕES PREDEFINIDAS

O Oracle possui algumas exceções


predefinidas para situações comuns e
fazem parte do conjunto básico para
manipulação PL/SQL e não precisam
ser declaradas ou abertas
explicitamente no bloco.

(PUGA;FRANÇA; GOAYA, 2013)


EXCEÇÕES PREDEFINIDAS

(PUGA;FRANÇA; GOAYA, 2013)


EXCEÇÕES PREDEFINIDAS

Um exemplo de exceção é a divisão por


zero. Como não é possível dividir um
número por zero para realizar essa
operação aritmética, o divisor, deve ser
diferente de· 0, sendo assim, o valor
esperado para divisor não está adequado..
Nesse caso não existe erro de sin
taxe, mas o programa não funciona, por
tanto há uma exceção. Por ser um erro
bastante comum, a Oracle disponibiliza uma
exceção predefinida para ele.
10

(PUGA;FRANÇA; GOAYA, 2013)


Exemplo 1 DIVISÃO POR ZERO

declare
divisor number:=0;
dividendo number:=89;
result number;
begin
result := dividendo/divisor;
dbms_output.put_line('Divisao=' || result);
EXCEPTION
WHEN ZERO_DIVIDE THEN
dbms_output.put_line('Nao é possível
realizar divisão por zero ');
end; 11

(PUGA;FRANÇA; GOAYA, 2013)


DIVISÃO POR ZERO

Observe e, nas linhas 3 e 4, são, declaradas as


variáveis v_x e v_y, as quais , receberão os
valores por variáveis de substituição ( &divisor e
&dividendo respectivamente)_ a linha 7 a
variável v _resultado recebe o resultado da divisão
entre v_y e v_x. Caso o valor de v_x seja zero,
sera gerado um erro que acionar a exceção
ZERO_DlVlDE e o fluxo do processamenlo ser
desviado para dentro do tratamento de exceções
(linha 8). função disso, será realizado o
tratamento da exceção, que é a apresentação da
mensagem: ' Não é possível realizar divisao
por zero', vista na linha 9 . 12

(PUGA;FRANÇA; GOAYA, 2013)


EXCEÇÕES DEFINIDAS pelo USUARIO

Além das exceções predefinidas


, é possível criar exceções
personalizadas.
E o recurso permite a criação de
tratamentos de erros específicos
para um determinado fim.

13

(PUGA;FRANÇA; GOAYA, 2013)


PL/SQL – exemplo banco de dados

create table fatura(


nro_venda number(10)not null,
vlr_fatura number(10),
primary key (nro_venda))

SELECT * from fatura;


INSERT INTO fatura VALUES (1,1000);
INSERT INTO fatura VALUES (2,2000);
INSERT INTO fatura VALUES (3,3000);
SELECT * from fatura;
14

(PUGA;FRANÇA; GOAYA, 2013)


Exemplo 2 SQL%NOTFOUND

declare
nrovenda_invalido EXCEPTION;
v_nrovenda fatura.nro_venda%type := 10;
begin
UPDATE fatura SET vlr_fatura = 5000 WHERE
nro_venda = v_nrovenda;
IF sql%notfound THEN
RAISE nrovenda_invalido;
END IF;
EXCEPTION
WHEN nrovenda_invalido THEN
dbms_output.put_line('Nro da venda nao
existe. Nao foi possível atualizar a venda.'); 15

end; (PUGA;FRANÇA; GOAYA, 2013)


WHEN OTHERS

Também é possível criar um


tratamento para exceções não
previstas, comtratamentos
específicos. Para isso, pode-se
incluir a instrução WHEN
OTHERS.

16

(PUGA;FRANÇA; GOAYA, 2013)


Exemplo 3 WHEN OTHERS
declare
nrovenda_invalido EXCEPTION;
v_nrovenda fatura.nro_venda%type := 10;
v_codigo_erro varchar2(20);
v_mensagem_erro varchar2(255);
begin
DELETE FROM fatura WHERE nro_venda = v_nrovenda;
IF sql%notfound THEN
RAISE nrovenda_invalido;
END IF;
EXCEPTION
WHEN nrovenda_invalido THEN
dbms_output.put_line('Nro da venda nao existe. Nao foi possível
excluir a venda.');
WHEN others THEN
v_codigo_erro := SQLCODE;
v_mensagem_erro := SQLERRM;
dbms_output.put_line('Erro desconhecido ' || v_codigo_erro ||
v_mensagem_erro);
end;
17

(PUGA;FRANÇA; GOAYA, 2013)


RAISE APPLICATION ERROR

O procedimento
RAISE_APPLICATION_ERROR é
utilizado para comunicar uma
exceção definida interativamente,
retornando um código ou uma
mensagem de erro não
padronizada. Para aplicar a
instrução, utiliza-se a sintaxe:
18

(PUGA;FRANÇA; GOAYA, 2013)


Exemplo 4 RAISE APPLICATION ERROR

declare
nrovenda_invalido EXCEPTION;
v_nrovenda fatura.nro_venda%type := 10;
v_codigo_erro varchar2(20);
v_mensagem_erro varchar2(255);
begin
DELETE FROM fatura WHERE nro_venda =
v_nrovenda;
IF sql%notfound THEN
RAISE_APPLICATION_ERROR(-20201, 'Fatura
não encontrada');
END IF;
end; 19

(PUGA;FRANÇA; GOAYA, 2013)


MODIFICANDO DONO ou GRUPO

OBRIGADO !!!
ZAP 9750-2901
@profjsflavioalves

20

Você também pode gostar