SVL_UDF_LOG
사용자 정의 함수(UDF)를 실행하는 중에 생성되는 시스템 정의 오류 및 경고 메시지를 기록합니다.
SVL_UDF_LOG는 모든 사용자에게 표시됩니다. 수퍼유저는 모든 행을 볼 수 있지만 일반 사용자는 자체 데이터만 볼 수 있습니다. 자세한 내용은 시스템 테이블 및 뷰에 있는 데이터의 가시성 단원을 참조하십시오.
이 테이블의 데이터 중 일부 또는 전부는 SYS 모니터링 뷰인 SYS_UDF_LOG에서도 찾아볼 수 있습니다. SYS 모니터링 뷰의 데이터는 사용 및 이해가 더 쉽도록 형식이 지정되어 있습니다. 쿼리에 SYS 모니터링 뷰를 사용하는 것이 좋습니다.
테이블 열
열 명칭 | 데이터 유형 | 설명 |
---|---|---|
쿼리 | bigint | 쿼리 ID. 이 ID를 사용하여 다양한 다른 시스템 테이블 및 보기를 조인할 수 있습니다. |
message | message | 함수에 의해 생성되는 메시지. |
생성 완료 | 타임스탬프 | 로그가 생성된 시간. |
traceback | char(4096) | 사용 가능한 경우, 이 값은 UDF에 대한 스택 트레이스백을 제공합니다. 자세한 내용을 보려면 Python Standard Library의 traceback |
funcname | character(256) | 실행 중인 UDF의 이름. |
노드 | 정수 | 메시지가 생성된 노드. |
slice | 정수 | 메시지가 생성된 조각. |
seq | 정수 | 조각에서의 메시지 시퀀스. |
샘플 쿼리
다음 예는 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에 로깅 및 경고 메시지를 추가하므로 0으로 나누기 연산은 오류 메시지와 함께 중단되는 대신 경고 메시지를 생성합니다.
-- 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.