Páginas

segunda-feira, 4 de abril de 2016

Tratamento de Exceções - Oracle


•Exceções
 Erros e imprevistos que podem ocorrer durante a execução de um bloco PL/SQL

 •SGBD
Ao encontrar um erro ou um imprevisto,aborta a execução e procura por uma área
de exceções

•Tipos
Predefinidas ou definidas pelo usuário

Comando
EXCEPTION
WHEN nome_da_exceção
THEN relação de comandos; 

Exemplo
set serveroutput on; 
DECLARE
   nome aluno.nome_aluno%Type;
   sexo aluno.sexo_aluno%Type;
BEGIN 
   nome := 'Pedro';  sexo := 'm';
   INSERT INTO aluno VALUES (1, nome, sexo);
   dbms_output.put_line ('Inserção executada com sucesso.');
EXCEPTION
WHEN
 Dup_Val_On_Index 
THEN
 dbms_output.put_line ('Aluno já cadastrado.' );
WHEN
 Others 
THEN
 dbms_output.put_line ('Erro no cadastramento.' );
END;

•CURSOR_ALREADY_OPEN
Ocorre quando se tenta abrir um cursor que já está aberto

•DUP_VAL_ON_INDEX
Ocorre quando se tenta armazenar um valor duplicado em uma coluna de uma tabela que possui chave única ou primária

•INVALID_CURSOR 
Ocorre quando se tenta realizar uma operação ilegal em um cursor

•INVALID_NUMBER
Ocorre na tentativa de converter uma stringpara um número, quando a string não representa um número válido

•LOGIN_DENIED
Ocorre na tentativa de conexão com o BD com um usuário/senha inválido

•NO_DATA_FOUND
Ocorre quando o comando SELECT ... INTO não retorna nenhuma linha

•NO_LOGGED_ON
Ocorre na tentativa de acessar o banco de dados sem que se esteja conectado a ele

•PROGRAM_ERROR
Ocorre em caso de problemas internos do PL/SQL

•ROWTYPE_MISMATCH
Ocorre se o retorno do cursor e a variável PL/SQL para retorno do cursor forem de tipos incompatíveis 

•STORAGE_ERROR
Ocorre se não houver memória suficiente para a execução de um bloco PL/SQL ou caso a memória esteja com problemas

•TIMEOUT_ON_RESOURCE
Ocorre quando acontecer um timeout enquanto aguarda-se um recurso

•TOO_MANY_ROWS
Ocorre quando um comando SELECT ... INTO retornar mais de uma linha

•VALUE_ERROR
ocorre quando houver um erro aritmético, de conversão, truncagem ou tamanho

•ZERO_DIVIDE
Ocorre na tentativa de dividir qualquer número por zero

•OTHERS
“Look up an error message” Trata outros erros, usando as funções
SQL_CODE (número do erro) e
SQLERRM (texto do erro)

Exemplo (2/2)
EXCEPTION
WHEN obrigatorio
THEN
 dbms_output.put_line ('Preencher todos os campos.');
        WHEN Dup_Val_On_Index
           THEN dbms_output.put_line ('Aluno já cadastrado.' );
        WHEN Others 
                THEN dbms_output.put_line ('Erro no cadastramento.' );
END;

Nenhum comentário:

Postar um comentário