Registra mensagens de erro e aviso definidas pelo sistema geradas durante a execução da função definida pelo usuário (UDF).
SVL_UDF_LOG permanece visível para todos os usuários. Os superusuários podem ver todas as linhas; usuários regulares podem ver somente seus próprios dados. Para ter mais informações, consulte Visibilidade de dados em tabelas e visualizações de sistema.
Alguns ou todos os dados nessa tabela também podem ser encontrados na exibição de monitoramento SYS SYS_UDF_LOG. Os dados na exibição de monitoramento SYS são formatados para serem mais fáceis de usar e compreender. É recomendável usar a exibição de monitoramento SYS nas consultas.
Colunas da tabela
Nome da coluna | Tipo de dados | Descrição |
---|---|---|
consulta | bigint | O ID da consulta. Este ID pode ser usado para unir várias outras tabelas e exibições do sistema. |
message | char(4096) | A mensagem gerada pela função. |
created | timestamp | O horário em que o log foi criado. |
traceback | char(4096) | Se estiver disponível, esse valor fornece um rastreamento de pilha para a UDF. Para obter mais informações, consulte traceback |
funcname | character(256) | O nome da UDF que está em execução. |
nó | integer | O nó onde a mensagem foi gerada. |
slice | integer | A fatia onde a mensagem foi gerada. |
seq | integer | A sequência das mensagens na fatia. |
Consultas de exemplo
O exemplo a seguir mostra como as UDFs tratam os erros definidos pelo sistema. O primeiro bloco mostra a definição de uma função de UDF que retorna o inverso de um argumento. Quando você executa a função e fornece um argumento de valor 0, como mostra o segundo bloco, a função retorna um erro. A terceira instrução lê a mensagem de erro que é registrada em SVL_UDF_LOG
-- Create a function to find the inverse of a number
CREATE OR REPLACE FUNCTION f_udf_inv(a int)
RETURNS float IMMUTABLE
AS $$
return 1/a
$$ LANGUAGE plpythonu;
-- Run the function with a 0 argument to create an error
Select f_udf_inv(0) from sales;
-- Query SVL_UDF_LOG to view the message
Select query, created, message::varchar
from svl_udf_log;
query | created | message
-------+----------------------------+---------------------------------------------------------
2211 | 2015-08-22 00:11:12.04819 | ZeroDivisionError: long division or modulo by zero\nNone
O exemplo a seguir adiciona o registro em log e uma mensagem de aviso à UDF para que operações de divisão por zero gerem uma mensagem de aviso em vez de interromper o processamento com uma mensagem de erro.
-- Create a function to find the inverse of a number and log a warning
CREATE OR REPLACE FUNCTION f_udf_inv_log(a int)
RETURNS float IMMUTABLE
AS $$
import logging
logger = logging.getLogger() #get root logger
if a==0:
logger.warning('You attempted to divide by zero.\nReturning zero instead of error.\n')
return 0
else:
return 1/a
$$ LANGUAGE plpythonu;
O exemplo a seguir executa a função e, em seguida, consulta a exibição SVL_UDF_LOG para ver a mensagem.
-- Run the function with a 0 argument to trigger the warning
Select f_udf_inv_log(0) from sales;
-- Query SVL_UDF_LOG to view the message
Select query, created, message::varchar
from svl_udf_log;
query | created | message
------+----------------------------+----------------------------------
0 | 2015-08-22 00:11:12.04819 | You attempted to divide by zero.
Returning zero instead of error.