本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
SVL_UDF_LOG
記錄使用者定義函數 (UDF) 執行期間產生的系統定義的錯誤和警告訊息。
所有使用者都可看見 SVL_UDF_LOG。超級使用者可以看見所有資料列;一般使用者只能看見自己的資料。如需詳細資訊,請參閱 系統資料表和檢視中資料的可見性。
此資料表中的部份或所有資料也會在 SYS 監控檢視 SYS_UDF_LOG 中找到。SYS 監視檢視中的資料會格式化為更易於使用和理解。我們建議您使用 SYS 監控檢視進行查詢。
資料表欄
欄名稱 | 資料類型 | 描述 |
---|---|---|
query | bigint | 查詢 ID。您可以使用此 ID 來聯結各種其他系統資料表與檢視。 |
message | char(4096) | 函數產生的訊息。 |
已建立 | timestamp | 日誌建立的時間。 |
回溯 | char(4096) | 若果可用,此值會提供 UDF 的堆疊回溯。如需詳細資訊,請參閱 Python Standard Library 的 traceback |
funcname | character(256) | 正在執行之 UDF 的名稱。 |
節點 | integer | 訊息產生的節點。 |
分割 | integer | 訊息產生的分割。 |
seq | integer | 分割上訊息的順序。 |
範例查詢
以下範例說明 UDF 如何處理系統定義的錯誤。第一個區塊顯示傳回引數反向之 UDF 函數的定義。執行函數並提供 0 引數時,如第二個區塊所示,函數會傳回錯誤。第三個陳述式會讀取在 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
下列範例會將記錄且警告訊息新增至 UDF,以至於除以零操作會導致警告訊息,而不是停止並出現錯誤訊息。
-- 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;
下列範例會執行函數,接著查詢 SVL_UDF_LOG,來檢視訊息。
-- 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.