Exception Types and Scope

Podemos dividir em dois tipos de erros PL/SQL: erro de compilação e erro de tempo de execução ou runtime. Um erro de compilação acontece quando existe um erro na sintaxe do nosso código, algo como esquecer uma vírgula ou ponto e vírgula, ou esquecer de colocar uma palavra reservada. Erros de compilação são bem mais fáceis de achar, pois o Oracle mostra em qual linha aconteceu o erro, ou pelo menos uma linha antes ou depois, além do código do erro que foi gerado. Vejamos alguns casos de erros de compilação antes de falar sobre runtime erros.

Veja o bloco mais simples que podemos fazer em PL/SQL. Teve um erro proposital nesse código, mostrando um erro na linha 3 logo após informar o código do erro ORA-06550. Mas acontece que o erro não foi na linha 3 e sim na linha 2, onde esquecemos de colocar o “;”. Acontece que o erro PLS-00103 diz que algo esta faltando imediatamente antes da palavra reservada END e que na descrição do próprio erro ele informa que estava esperando um “;”. Bem simples não é? Então quando acontecer um erro devemos lembrar que a mensagem pode nos ajudar muito. Vejamos um outro caso agora.

Neste erro agora, o código PLS-00103 nos informa que algo está faltando antes de lv3 na linha 7 com erro ORA-06550. Podemos corrigir isso com algum operador aritmético, como uma soma por exemplo. Esse mesmo erro ocorreria se na atribuição fosse utilizado apenas o símbolo = sem o :.

Esse são exemplos bem comuns de erros de compilação, que são fáceis de corrigir e detectar. Os runtime erros são erros que ocorrem depois do parse(processo em que lê todo o arquivo de texto do código e verifica se todas as regras lexicais foram cumpridas) e que os valores são atribuídos a variáveis, um exemplo disso seria um erro ao atribuir um valor à uma variável através de ampersand substitution. Esses erros podem ocorrer nos 3 blocos, no bloco de declaração, execução e exceção. Os erros que ocorrem no bloco de execução são os mais fáceis de tratar, pois são pegos no bloco de exceção. Mas caso aconteça um erro no bloco de exceção ou no de declaração, eles só poderão ser pegos e tratados em um bloco externo. Caso um erro seja lançado e o bloco de exceção não pegue esse erro, ele será lançado para o programa que invocou aquele código, que pode ser o Oracle SQL Developer no caso ou um bloco externo.

No bloco acima tentamos colocar, no bloco de execução, em uma variável VARCHAR2(1) dois caracteres que resultou em um erro. Esse erro foi pego no bloco exception, imprimindo assim a mensagem ERRO!. Acontece que utilizamos o WHEN OTHERS, o que não é uma boa prática, mas utilizamos apenas para explicação como funciona o tratamento de erros. Quando utilizamos o OTHERS, ele pega todos os erros, mas ao invés disso, devemos utilizar um WHEN para cada erro que pode ocorrer no nosso bloco, e tratando cada uma da forma mais apropriada. Opcionalmente podemos ter por último um WHEN OTHERS, para outros erros que não sejam aqueles previstos. Então, refazendo o nosso bloco Exception, ele deveria ficar como na imagem abaixo.

Dessa maneira podemos tratar especificamente cada erro que pode ocorrer na nossa aplicação de maneira mais apropriada. Mas se um erro for lançado dentro de um bloco DECLARE ou até mesmo no bloco EXCEPTION eles não poderão ser tratados, mas serão lançados a quem invocou esse código, conforme foi dito, poderá ser o SQL Developer, que foi o caso das duas primeiras imagens desse post e na imagem a seguir.

Podemos contornar esse problema utilizando blocos aninhados como é demonstrado na próxima figura.

ERRO6

Percebam que na imagem acima foi utilizada a função FORMAT_ERROR_BACKTRACE do package DBMS_UTILITY. Além de informar o código do erro, a função informa também a linha em que aconteceu, que no caso foi a linha 3.

No próximo post irei falar mais sobre exceptions.

Anúncios

Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert e OCP PL/SQL, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

Marcado com: , , , ,
Publicado em PL/SQL

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

Esse Blog é reconhecido pela
Certificações
Sou articulista

Clique para seguir este blog e receber notificações via email de novos posts.

Tércio Costa

Tércio Costa

Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert e OCP PL/SQL, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

Links Pessoais

Serviços verificados

Visualizar Perfil Completo →

Total de Visualizações da Página
  • 138.077 Visualizações
%d blogueiros gostam disto: