Exceptions PL-SQL Oracle
Exceptions são nada mais nada menos que exceções que podem ocorrer durante a execucação de blocos PL-SQL. Se comportante semelhantemente ao bloco Try/Catch/Finally do Java e C# ou um On Error GoTo.
Sintaxe:
FUNCTION fnc_teste() AS
BEGIN
–bloco pl-sql
EXCEPTION WHEN {exceção} THEN
–bloco exception
END;
Algumas exceções (mais comuns):
NO_DATA_FOUND – uma instrução SELECT INTO não retorna linhas, ou seu programa referencia um elemento deletado na tabela ou então um elemento não inicializado em um índice por tabela.
ZERO_DIVIDE - uma operação matemática no bloco executou uma divisão por zero.
INVALID_NUMBER – falha na conversão de um caracter string para um numero (numa instrução SQL) porque a string não representa um número válido, numa instrução procedural VALUE_ERROR é chamada.
TOO_MANY_ROWS - uma instrução SELECT INTO retorna mais de uma linha.
ACCESS_INTO_NULL – tentativa de passar valores para atributos de um objeto não inicializado.
CURSOR_ALREADY_OPEN – tentativa de abrir um cursor já aberto.
DUP_VAL_ON_INDEX – tentativa de inserir um valor duplicado na tabela numa coluna com UNIQUE KEY.
INVALID_CURSOR - tentativa de realizar uma operação com um cursor inexistente ou fechado.
LOGIN_DENIED - tentativa de logar no Oracle com um usuário ou senha inválidos.
NOT_LOGGED_ON - tentativa de fazer uma chamada ao banco sem estar conectado ao Oracle.
PROGRAM_ERROR – erro interno do PL/SQL.
ROWTYPE_MISMATCH – o host da variável de cursor e a variável de cursor do PL/SQL envolvidos são incompatíveis com os tipos retornados.
STORAGE_ERROR – falha ao armazenar os dados na memória, tanto por falta como por estar corrompida.
TIMEOUT_ON_RESOURCE – ocorreu um time-out enquanto o Oracle aguarda por um recurso.
VALUE_ERROR – uma conta, conversão, truncamento ou tamanho de constraint com formato numérico inválido. Numa instrução procedural VALUE_ERROR é retornada se uma conversão de caracter ou string em número falha. Numa instrução SQL esse mesmo erro é retornado como INVALID_NUMBER.
OTHERS – outro erro que não esteja sendo tratado.
Criando uma exception e chamando-a manualmente:
DECLARE
sem_comissao EXCEPTION; –declara uma exception
BEGIN
IF comissao IS NULL THEN
RAISE sem_comissao; –chama a exception
END IF;
bonus := (salario * 0.10) + (comissao * 0.15);
EXCEPTION
WHEN sem_comissao THEN –bloco da exception criada
RAISE_APPLICATION_ERROR(-21000,’Não há comissão!’);
END;
\
Bom, nota-se que temos um RAISE_APPLICATION_ERROR com o código 21000, porém os códigos de erro do Oracle vão de -20000 à -20999, portanto a mensagem de erro do Oracle será nula e aparecerá somente a mensagem definida pelo programador.
Sintaxe:
RAISE_APPLICATION_ERROR(no_erro, mensagem);
‘no_erro’ é um inteiro negativo entre -20000 à -20999 e ‘mensagem’ é uma string de até 2048 bytes. Uma aplicação pode chamar o RAISE_APPLICATION_ERROR somente de um subprograma (ou método) que está sendo executado. Quando startado, encerra o subprograma e retorna a mensagem e o número do erro definidos pelo programador para a aplicação.
E isso é tudo pessoal! Abraços!


muito util para mim, que estou começando! obrigado
Oi Ivens gatinho…
Nossa..como vc é inteligente…
me liga qlq dia
bjos