Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
SYS_UDF_LOG
Merekam pesan kesalahan dan peringatan yang ditentukan sistem yang dihasilkan selama eksekusi function () yang ditentukan pengguna. UDF
SYS_ UDF _ LOG hanya terlihat oleh pengguna super. Untuk informasi selengkapnya, lihat Visibilitas data dalam tabel dan tampilan sistem.
Kolom tabel
Nama kolom | Jenis data | Deskripsi |
---|---|---|
query_id | bigint | Pengidentifikasi kueri. |
function_name | text | Nama fungsi yang ditentukan pengguna. |
record_time | timestamp | Waktu rekaman itu dibuat. |
urutan | integer | Urutan pesan log tunggal. |
pesan | text | Teks pesan log. |
Kueri Sampel
Contoh berikut menunjukkan bagaimana UDFs menangani kesalahan yang ditentukan sistem. Blok pertama menunjukkan definisi untuk UDF fungsi yang mengembalikan kebalikan dari argumen. Ketika Anda menjalankan fungsi dan memberikan 0 sebagai argumen Anda, fungsi mengembalikan kesalahan. Pernyataan terakhir mengembalikan pesan kesalahan yang masuk SYS _ 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 0 to create an error. Select f_udf_inv(0); -- Query SYS_UDF_LOG to view the message. Select query_id, record_time, message::varchar from sys_udf_log;
query_id | record_time | message ----------+----------------------------+------------------------------------------------------- 2211 | 2023-08-23 15:53:11.360538 | ZeroDivisionError: integer division or modulo by zero line 2, in f_udf_inv\n return 1/a\n
Contoh berikut menambahkan logging dan pesan peringatan ke UDF sehingga operasi pembagian dengan nol menghasilkan pesan peringatan alih-alih berhenti dengan pesan kesalahan.
-- Create a function to find the inverse of a number and log a warning if you input 0. 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; -- Run the function with 0 to trigger the warning. Select f_udf_inv_log(0); -- Query SYS_UDF_LOG to view the message. Select query_id, record_time, message::varchar from sys_udf_log;
query_id | record_time | message ----------+----------------------------+------------------------------------------------------------------------------- 0 | 2023-08-23 16:10:48.833503 | WARNING: You attempted to divide by zero.\nReturning zero instead of error.\n