Documentação do PostgreSQL 7.4.1 | ||||
---|---|---|---|---|
Anterior | Início | Capítulo 37. PL/pgSQL - Linguagem procedural SQL | Fim | Próxima |
A instrução RAISE é utilizada para gerar mensagens informativas e causar erros.
RAISE nível 'formato' [, variável [, ...]];
Os níveis possíveis são DEBUG, LOG, INFO, NOTICE, WARNING, e EXCEPTION. O nível EXCEPTION causa um erro (que normalmente interrompe a transação corrente); os outros níveis apenas geram mensagens com diferentes níveis de prioridade. Se as mensagens de uma determinada prioridade são informadas ao cliente, escritas no log do servidor, ou as duas coisas, é controlado pelas variáveis de configuração log_min_messages e client_min_messages. Para obter mais informações deve ser vista a Seção 16.4 .
Dentro da cadeia de caracteres de formatação, o caractere % é substituído pela representação na forma de cadeia de caracteres do próximo argumento opcional. Deve ser escrito %% para produzir um % literal. Deve ser observado que atualmente os argumentos opcionais devem ser variáveis simples, e não expressões, e o formato deve ser um literal cadeia de caracteres simples.
Neste exemplo o valor de v_job_id substitui o caractere % na cadeia de caracteres:
RAISE NOTICE ''Chamando cs_create_job(%)'', v_job_id;
Este exemplo interrompe a transação com a mensagem de erro fornecida:
RAISE EXCEPTION ''ID inexistente --> %'', id_usuario;
O PostgreSQL não possui um modelo de tratamento de exceções muito aperfeiçoado. Quando o analisador, planejador/otimizador ou executor decide que a declaração não pode mais ser processada, toda a transação é interrompida e o sistema volta para o laço principal para esperar pelo próximo comando da aplicação cliente.
É possível se aprofundar no mecanismo de erro para ver o que acontece. Porém, atualmente não é possível informar o que realmente causou a interrupção (erro do formato do tipo de dado, erro de ponto flutuante, erro de análise, etc.). Também é possível que o servidor de banco de dados esteja em um estado inconsistente neste ponto, portanto retornar para o executor superior ou emitir mais comandos pode corromper todo o banco de dados.
Portanto, a única coisa que a linguagem PL/pgSQL faz atualmente, quando encontra uma interrupção durante a execução de um procedimento de função ou de gatilho, é adicionar alguns campos à mensagem informando em que função e onde (o número da linha e tipo da instrução) onde o erro ocorreu. O erro sempre termina a execução da função.