Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem Procedural Tratamento de Exceção PROF. Ms. J FLÁVIO VASCONCELOS ALVES ASSUNTOS AULA 6 2 1)Tratamento de Exceção Obs: Efetuar cadastro em https://livesql.oracle.com/ 3 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) 4 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) 5 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) 6 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) (PUGA;FRANÇA; GOAYA, 2013) 7 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. (PUGA;FRANÇA; GOAYA, 2013) 8 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) 9 EXCEÇÕES PREDEFINIDAS (PUGA;FRANÇA; GOAYA, 2013) 10 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. (PUGA;FRANÇA; GOAYA, 2013) 11 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; (PUGA;FRANÇA; GOAYA, 2013) 12 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 ÷ndo 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 . (PUGA;FRANÇA; GOAYA, 2013) 13 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. (PUGA;FRANÇA; GOAYA, 2013) 14 PL/SQL – exemplo banco de dados (PUGA;FRANÇA; GOAYA, 2013) 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; 15 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.'); end; (PUGA;FRANÇA; GOAYA, 2013) 16 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. (PUGA;FRANÇA; GOAYA, 2013) 17 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; (PUGA;FRANÇA; GOAYA, 2013) 18 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: (PUGA;FRANÇA; GOAYA, 2013) 19 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; (PUGA;FRANÇA; GOAYA, 2013) MODIFICANDO DONO ou GRUPO 20 OBRIGADO !!! ZAP 9750-2901 @profjsflavioalves
Compartilhar