Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
SVL_UDF_LOG
Merekam kesalahan yang ditentukan sistem dan pesan peringatan yang dihasilkan selama eksekusi fungsi yang ditentukan pengguna (UDF).
SVL_UDF_LOG dapat dilihat oleh semua pengguna. Pengguna super dapat melihat semua baris; pengguna biasa hanya dapat melihat data mereka sendiri. Untuk informasi selengkapnya, lihat Visibilitas data dalam tabel dan tampilan sistem.
Beberapa atau semua data dalam tabel ini juga dapat ditemukan di tampilan SYS_UDF_LOG pemantauan SYS. Data dalam tampilan pemantauan SYS diformat agar lebih mudah digunakan dan dipahami. Kami menyarankan Anda menggunakan tampilan pemantauan SYS untuk pertanyaan Anda.
Kolom tabel
Nama kolom | Jenis data | Deskripsi |
---|---|---|
kueri | bigint | ID kueri. Anda dapat menggunakan ID ini untuk bergabung dengan berbagai tabel dan tampilan sistem lainnya. |
pesan | arang (4096) | Pesan yang dihasilkan oleh fungsi. |
dibuat | timestamp | Waktu log dibuat. |
traceback | arang (4096) | Jika tersedia, nilai ini menyediakan stack traceback untuk UDF. Untuk informasi selengkapnya, lihat traceback |
nama fungsi | karakter (256) | Nama UDF yang mengeksekusi. |
simpul | integer | Node tempat pesan dihasilkan. |
mengiris | integer | Irisan tempat pesan dihasilkan. |
seq | integer | Urutan pesan pada irisan. |
Kueri Sampel
Contoh berikut menunjukkan bagaimana UDFs menangani kesalahan yang ditentukan sistem. Blok pertama menunjukkan definisi untuk fungsi UDF yang mengembalikan kebalikan dari argumen. Ketika Anda menjalankan fungsi dan memberikan argumen 0, seperti yang ditunjukkan blok kedua, fungsi mengembalikan kesalahan. Pernyataan ketiga membaca pesan kesalahan yang dicatat di 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
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
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;
Contoh berikut menjalankan fungsi, kemudian query SVL_UDF_LOG untuk melihat pesan.
-- 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.