[ RDBMS ]
Porque o Agente de PL/SQL não lê a saída HTML para
determinar seu conteúdo, e o correto tratamento de exceções
geram as mensahem de erro HTML, o redirecionamento de exceções
são transparentes. O Agente PL/SQL está preocupado,
se o código de PL/SQL gera saída HTML, das operação
que tiveram êxito. O usuário pensará que todas as mensagens
de redirecionamento de exceções são geradas pelos
procedimentos do Agente PL/SQL.
Erros de sistemas
Erros de sistemas são descobertos pelo Agente Oracle PL/SQL.
Estes são erros que acontecem quando o Agente de PL/SQL está
impossibilitado de retornar o procedimento de PL/SQL ou quando uma exceção
de PL/SQL não é redirecionada para o procedimento armazenado
e causa a exceção a ser propagada atráves do Agente
PL/SQL como um erro de sistema. Isto causa um documento padrão de
HTML a ser devolvido ao browser.
Por exemplo, se o Agente do Oracle não pode fazer uma conexão
para o Oracle7 Server, o procedimento PL/SQL não pode rodar e um
erro de sistema acontece. O Agente PL/SQL então retorna uma mensagem
de erro padrão para o browser ou retorna uma página de erro
de HTML específica (se for configurado previamente como parte do
DCD que usa o parâmetro de OWA_ERR_PAGE).
Classes de Mensagens de Erro
CÓDIGO | DESCRIÇÃO |
00000 - 00099 | Servidor Oracle |
00200 - 00249 | Arquivos de controle |
00250 - 00299 | Arquivamento e recuperação |
00300 - 00379 | Arquivos de registro de redo |
00440 - 00485 | Processos de segundo plano |
00700 - 00709 | Cache de dicionario |
00900 - 00999 | Analise de declarações SQL |
01100 - 01250 | O banco de dados e seus arquivos de suporte |
01400 - 01489 | Erros de execução de SQL |
01500 - 01699 | Conjunto de comandos SQL de DBA |
02376 - 02399 | Recursos |
04030 - 04039 | Memória e o spool compartilhado |
04040 - 04069 | Procedimentos armazenados |
12100 - 12299 | SQL*Net |
12500 - 12699 | SQL*Net |
12700 - 12799 | Uso de opções de várias linguas |
ORA-00600 | Erro retornado quando o Oracle encontra alguma dificuldade interna. É uma mensagem generica seguida de até seis argumentos entre colchetes. |
Conclusão
Exceções é o método da PL/SQL de tratar
com condições de erro. Em um aplicativo real, você
pode não encontrar a informação que está procurando
ao tentar recuperar dados. O Oracle realiza processamento até terminar
com sucesso ou encontrar uma condição de erro, abaixo segue
a relação da exceções mais comuns na PL/SQL;
testando essas exceções, você pode detectar erros que
aparecem em seu programa PL/SQL.
Exceções | Explicação | Código / SQLCODE |
CURSOR_ALREADY_OPEN | Tentativa de abrir um cursor já aberto. | ORA-06511 / -6511 |
DUP_VAL_ON_INDEX | Essa exceção detecta uma tentativa de criar uma entrada em um índice cujos valores de coluna-chave já existem. Suponha, por exemplo, um aplicativo de cobrança controlado pelo número da fatura. Se um programa tentasse criar um número da fatura duplicado, essa exceção apareceria. | ORA-00001 / -1 |
INVALID_CURSOR | Referência a um cursor inválido ou tentativa de operação inválida de cursor. | ORA-01001 / -1001 |
INVALID_NUMBER | Tentativa de usar algo diferente de um número onde havia essa exigência. | ORA-01722 / -1722 |
LOGIN_DENIED | Solicitação de conexão negada. | ORA-01017 / -1017 |
NO_DATA_FOUND | Se uma declaração select tenta recuperar dados com base em suas condições, essa exceção aparece quando nenhuma linha satisfaz os critérios de seleção. | ORA-01403 / +100 |
NOT_LOGGED_ON | Ausência de conexão com o Oracle7. | ORA-01012 / -1012 |
PROGRAM_ERROR | Erro interno do PL/SQL. | ORA-06501 / -6501 |
STORAGE_ERROR | Erro de memória do PL/SQL. | ORA-06500 / -6504 |
TIMEOUT_ON_RESOURCE | Timeout atingido durante espera de um recurso do Oracle7. | ORA-00051 / -6500 |
TOO_MANY_ROWS | Como cada cursor implícito é capaz de recuperar apenas uma linha, essa exceção detecta a existência de mais de uma linha. | ORA-01422 / -1422 |
TRANSACTION_BACKED_OUT | Um servidor remoto desfez sua transação. | ORA- |
VALUE_ERROR | Essa exceção indica que houve uma operação de atribuição em que o campo de destino não é suficientemente grande para conter o valor que está sendo colocado. Por exemplo, se o texto VERDADE @BSOLUTA for atribuído a uma variável definida vomo "varchar2(6)", então essa exceção aparece. Pode indicar também um erro de aritmética, de conversão ou de restrição. | ORA-06502 / -6502 |
ZERO_DIVIDE | Tentativa de dividir um número por zero. | ORA-01476 / -1476 |
Exemplo
Vou montar um pequeno esquema para tratamento de exceções:
PROCEDURE teste
< declaração das variáveis
>.
BEGIN
< instruções
>
EXCEPTION
WHEN NO_DATA_FOUND
THEN
< função que trata o erro ou mensagem de erro >
WHEN TOO_MANY_ROWS
THEN
< função que trata o erro ou mensagem de erro >
WHEN OTHERS
THEN
< função que trata o erro ou mensagem de erro >
END;
Referência :
<= |