Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
SVL_UDF_LOG
Enregistre la génération des messages d’erreur et d’avertissement définis par le système au cours de l’exécution de la fonction définie par l’utilisateur (UDF).
SVL_UDF_LOG est visible par tous les utilisateurs. Les super-utilisateurs peuvent voir toutes les lignes, tandis que les utilisateurs standard peuvent voir uniquement leurs propres données. Pour de plus amples informations, veuillez consulter Visibilité des données dans les tables et vues système.
Tout ou partie des données de cette table sont également disponibles dans la vue de surveillance SYS SYS_UDF_LOG. Les données de la vue de surveillance SYS sont formatées pour être plus faciles à utiliser et à comprendre. Nous vous recommandons d’utiliser la vue de surveillance SYS pour vos requêtes.
Colonnes de la table
Nom de la colonne | Type de données | Description |
---|---|---|
query | bigint | ID de requête. Vous pouvez utiliser cet ID pour joindre d’autres vues et tables système. |
message | char(4096) | Message généré par la fonction. |
créé | timestamp | Heure à laquelle le journal a été créé. |
traceback | char(4096) | Si cette valeur est disponible, elle fournit un suivi de la pile pour l’UDF. Pour plus d’informations, consultez Suivi |
funcname | character(256) | Nom de la fonction UDF en cours d’exécution. |
node | entier | Le nœud sur lequel le message a été généré. |
slice | entier | La tranche sur laquelle le message a été généré. |
seq | entier | La séquence du message sur la tranche. |
Exemples de requêtes
L'exemple suivant montre comment UDFs gérer les erreurs définies par le système. Le premier bloc présente la définition d’une fonction UDF qui renvoie l’inverse d’un argument. Lorsque vous exécutez la fonction et fournissez un argument 0, comme le montre le deuxième bloc, la fonction renvoie une erreur. La troisième instruction lit le message d’erreur enregistré dans 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
L’exemple suivant ajoute un message de consignation et d’avertissement à la fonction UDF afin qu’une opération de division par zéro génère un message d’avertissement au lieu de s’arrêter avec un message d’erreur.
-- 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;
L’exemple suivant exécute la fonction, puis interroge SVL_UDF_LOG pour afficher le message.
-- 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.