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!

~ por Bogos em Novembro 18, 2008.

2 Respostas to “Exceptions PL-SQL Oracle”

  1. muito util para mim, que estou começando! obrigado

  2. Oi Ivens gatinho…
    Nossa..como vc é inteligente…
    me liga qlq dia

    bjos

Deixe uma resposta