complete guide pl sql exception handling with examples
Este tutorial explica o PL SQL Exception Handling e conceitos relacionados, como tipos de exceções, exceções definidas pelo usuário e pelo sistema, como levantar uma exceção, etc:
No Formato PL / SQL Datetime de PL / SQL series , aprendemos sobre algumas funções úteis sobre data e hora, carimbo de data / hora e intervalo
Neste artigo, discutiremos o tratamento de exceções no PL SQL. Além disso, exploraremos as vantagens das exceções e como aumentá-las.
Vamos começar com o aprendizado !!
O que você aprenderá:
Tratamento de exceções PL SQL
Um erro ou evento de aviso é chamado de exceção. Ele é encontrado durante a execução do tempo de execução do programa PL / SQL. A PL / SQL possui mecanismos para lidar com essas condições excepcionais com a ajuda do bloco de código EXCEPTION onde é definido como contrariar a condição de erro.
Existem dois tipos de exceções. Eles estão listados abaixo:
- Exceções definidas pelo usuário.
- Exceções definidas pelo sistema.
Algumas das exceções definidas pelo sistema populares são fora da memória e divisão por zero, com nomes como STORAGE_ERROR e ZERO_DIVIDE respectivamente. As exceções definidas pelo usuário são declaradas em um pacote, subprograma ou na seção de declaração do bloco de código PL / SQL e devem receber nomes.
Quando ocorre uma exceção, o fluxo natural de execução é interrompido e, em seguida, a execução aponta para a seção de exceção do código PL / SQL. Embora as exceções definidas pelo sistema sejam lançadas por padrão, as definidas pelo usuário devem ser lançadas explicitamente pela palavra-chave RAISE.
Assim, o tratamento de exceções ajuda a lidar com os erros encontrados durante a execução do tempo de execução e não durante a compilação do programa.
Vantagens do tratamento de exceções
As vantagens estão listadas abaixo:
- Se nosso código não possui uma manipulação de exceção, então cada vez que executamos uma instrução, devemos verificar os erros na execução.
- Se evitarmos o tratamento de exceções em nosso código, os erros reais serão perdidos, o que dá origem a alguns outros erros.
- O tratamento de exceções permite pular várias verificações no código.
- Ele fornece melhor legibilidade do código, isolando os manipuladores de erro no código.
Sintaxe de tratamento de exceções:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
A exceção padrão é realizada com QUANDO outros ENTÃO.
Vamos considerar uma mesa chamada CIDADÃO .
SELECT * FROM CITIZEN;
Criamos a tabela CITIZEN com a ajuda da instrução SQL fornecida a seguir.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
Insira valores nesta tabela com as instruções SQL fornecidas abaixo:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Implementação de codificação com tratamento de exceção:
DECLARE citizen_id citizen.id%type; citizen_name citizen.name%type; citizen_age citizen.age%type := 9; BEGIN SELECT id, name INTO citizen_id, citizen_name FROM citizen WHERE age = citizen_age; DBMS_OUTPUT.PUT_LINE ('Citizen id is: '|| citizen_id); DBMS_OUTPUT.PUT_LINE ('Citizen name is: '|| citizen_name); EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No citizen detail found'); WHEN others THEN dbms_output.put_line ('Errors'); END; /
A saída do código acima:
No código acima, como não há cidadãos com 9 anos de idade na tabela CITIZEN, uma exceção de tempo de execução é gerada.
Aumentar exceção em PL / SQL
Uma exceção pode ser levantada pelos desenvolvedores explicitamente com a ajuda da palavra-chave RAISE.
A sintaxe para levantamento de exceção:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Aqui, a exception_n é o nome da exceção que estamos levantando. Dessa forma, podemos levantar exceções definidas pelo usuário e pelo sistema.
Exceção definida pelo usuário
Os desenvolvedores podem construir suas próprias exceções e usá-las para lidar com erros. Eles podem ser criados na parte de declaração de um subprograma e podem ser acessados somente dentro desse subprograma.
Uma exceção criada no nível do pacote pode ser usada sempre que o pacote for acessado. Uma exceção definida pelo usuário pode ser gerada usando a palavra-chave RAISE.
A sintaxe para um erro definido pelo usuário é:
DECLARE exception_n EXCEPTION;
Aqui o exception_n é o nome da exceção que estamos levantando. Portanto, podemos declarar uma exceção fornecendo um nome seguido da palavra-chave EXCEPTION. Uma exceção pode ser declarada de maneira semelhante, como as variáveis são declaradas. No entanto, uma exceção é uma condição inesperada e não um item de dados.
Escopo de exceção em PL / SQL:
As regras de escopo para exceção PL / SQL estão listadas abaixo:
- Uma exceção não pode ser declarada mais de uma vez no mesmo bloco de código. Mas podemos declarar a mesma exceção em dois blocos de código diferentes.
- Uma exceção declarada dentro de um bloco de código é local dentro desse bloco e global para cada sub-bloco.
- Se declararmos novamente uma exceção global dentro de um sub-bloco, a declaração local será anulada.
Consideremos novamente uma mesa chamada CITIZEN.
Implementação de código com exceções definidas pelo usuário:
DECLARE firstexception EXCEPTION; j NUMBER; BEGIN FOR j IN (SELECT * FROM CITIZEN) LOOP IF j.ID = 8 THEN RAISE firstexception; END IF; END LOOP; EXCEPTION WHEN firstexception THEN dbms_output.put_line ('Citizen with ID 8 already exist in table.'); END; /
A saída do código acima:
Exceção pré-definida
Em violação das regras do banco de dados ou indo além do limite dependente do sistema, uma exceção interna é lançada automaticamente. Todos esses erros têm um número único e cada exceção é definida como um nome. Por exemplo, PL / SQL lança exceção predefinida NO_DATA_FOUND quando uma consulta SELECT não busca nenhuma linha.
Todas as exceções predefinidas do PL / SQL são declaradas no pacote STANDARD que trata do ambiente PL / SQL.
Exceção | Erro Oracle | CÓDIGO SQL | Descrição |
---|---|---|---|
NÚMERO INVÁLIDO | HORA - 01722 | -1722 | Esta exceção é levantada se a conversão de uma string de caracteres em um número não for aprovada, pois a string está representando um número inválido. |
ACCESS_INTO_NULL | AGORA - 06530 | -6530 | Essa exceção é gerada se um objeto nulo é naturalmente atribuído a um valor. |
CASE_NOT_FOUND | AGORA - 06592 | -6592 | Essa exceção é gerada se nenhuma das opções na cláusula WHEN for escolhida e não houver uma cláusula ELSE. |
COLLECTION_IS_NULL | AGORA - 06531 | -6531 | Essa exceção é gerada quando o código tenta aplicar métodos de coleta, exceto EXISTS, a uma tabela aninhada ou varray que não foi inicializado. Ele também pode ser gerado se nosso código tentar atribuir valores a uma tabela aninhada ou varray que não foi inicializado. |
DUP_VAL_ON_INDEX | HORA - 00001 | -1 | Essa exceção é gerada se valores duplicados são tentados para serem armazenados em uma coluna que é restrita por um índice exclusivo. |
CURSOR_ALREADY_OPEN | AGORA - 06511 | -6511 | Esta exceção é gerada se nosso código tentar abrir um cursor já aberto. |
INVALID_CURSOR | HORA - 01001 | -1001 | Esta exceção é gerada se tentarmos fazer algumas operações em cursores que não são permitidas. Por exemplo, tentar fechar um cursor já fechado. |
LOGIN_DENIED | HORA - 01017 | -1017 | Essa exceção é gerada se o programa tentou fazer logon no banco de dados com um nome de usuário e senha inadequados. |
NENHUM DADO ENCONTRADO | HORA - 01403 | 100 | Esta exceção é gerada se uma consulta SELECT não busca nenhuma linha. |
NOT_LOGGED_ON | HORA - 01012 | -1012 | Esta exceção é gerada se tentarmos fazer uma operação de banco de dados sem nos conectar a ele. |
PROGRAM_ERROR | HORA - 06501 | -6501 | Essa exceção é gerada se o programa PL / SQL encontrou um erro interno. |
ROWTYPE_MISMATCH | HORA - 06504 | -6504 | Essa exceção é gerada se um cursor tentar retornar valores para uma variável com tipo de dados incompatível. |
SELF_IS_NULL | AGORA - 30625 | -30625 | Essa exceção é gerada se um método de membro for chamado sem inicializar seu tipo de objeto. |
STORAGE_ERROR | AGORA - 06500 | -6500 | Essa exceção é gerada se o programa PL / SQL ficou sem memória ou sua memória foi corrompida durante a execução. |
TOO_MANY_ROWS | HORA - 01422 | -1422 | Esta exceção é gerada se uma consulta SELECT buscar várias linhas. |
SUBSCRIPT_BEYOND_COUNT | AGORA - 06533 | -6533 | Essa exceção é gerada se um subscrito for maior do que a contagem total do número de elementos na coleção. |
SUBSCRIPT_OUTSIDE_LIMIT | AGORA - 06532 | -6532 | Essa exceção é gerada se um subscrito estiver além do intervalo do limite. |
SYS_INVALID_ROWID | ORA-01410 | -1410 | Esta exceção é levantada se a conversão de uma string de caracteres para um id de linha universal não for aprovada, pois a string de caracteres está representando um id de linha inválido. |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Esta exceção é gerada se o Oracle estiver esperando por um recurso. |
VALUE_ERROR | ORA-06502 | -6502 | Essa exceção é gerada se um erro matemático de conversão e truncamento ocorrer em nosso programa. |
DIVISÃO POR ZERO | ORA-01476 | -1476 | Esta exceção é levantada se tentarmos dividir um número por 0. |
Perguntas e respostas mais frequentes
P # 1) O que é uma exceção predefinida em PL / SQL?
Responda: Uma exceção predefinida é lançada pelo PL / SQL automaticamente se houver uma violação das regras do banco de dados por um programa.
P # 2) O que é o tratamento de exceção PL / SQL e por que é necessário?
Responda: Um erro ou evento inesperado no programa é chamado de Exceção. Ele interrompe o fluxo normal de execução do programa. No PL / SQL, a exceção é tratada dentro de um bloco EXCEPTION no código e a ação apropriada contra a exceção é descrita dentro desse bloco.
P # 3) O que significa tratamento de exceção?
Responda: É o método de responder a eventos inesperados que podem ocorrer durante a execução do código.
dispositivos modelo osi usam cada camada
P # 4) Quais são as duas formas de tratamento de erros?
Responda: As duas formas de tratamento de erros incluem erro em tempo de compilação e erro de tempo de execução . O erro de tempo de execução ocorre durante a execução do programa devido a dados ou lógica inadequada. Os erros de tempo de compilação são detectados durante a compilação de nosso código.
P # 5) Qual é a diferença entre erro e exceção?
Responda: As exceções são incidentes que são tratados com a ajuda do bloco try / catch e podem ser encontrados tanto no tempo de compilação quanto no tempo de execução da execução do programa. Os erros, por outro lado, são encontrados apenas no tempo de execução.
Conclusão
Neste tutorial, discutimos em detalhes alguns conceitos básicos de PL / SQL que são essenciais para gerenciar as exceções em nossos programas.
Cobrimos os seguintes tópicos listados abaixo:
- Exceções.
- Tipos de exceções.
- Algumas exceções predefinidas.
No próximo tutorial, discutiremos as transações PL / SQL, os conceitos OOPS e muitos outros tópicos relacionados.
Leitura recomendada
- Tutorial de tratamento de exceções C # com exemplos de código
- Exceções Java e tratamento de exceções com exemplos
- Pacote PL SQL: Tutorial do pacote Oracle PL / SQL com exemplos
- Tratamento de exceções em C ++
- Tutorial PL SQL para iniciantes com exemplos | O que é PL / SQL
- Tutorial de registros PL SQL com exemplos