

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# SVL\_STORED\_PROC\_MESSAGES
<a name="r_SVL_STORED_PROC_MESSAGES"></a>

시스템 뷰 SVL\_STORED\_PROC\_MESSAGES를 쿼리하여 저장 프로시저 메시지에 대한 정보를 가져올 수 있습니다. 저장 프로시저 호출이 취소된 경우에도 발생한 메시지가 기록됩니다. 각 저장 프로시저 호출은 쿼리 ID를 수신합니다. 기록된 메시지의 최소 수준을 설정하는 방법에 대한 자세한 내용은 stored\_proc\_log\_min\_messages를 참조하세요.

SVL\_STORED\_PROC\_MESSAGES는 모든 사용자에게 표시됩니다. 수퍼유저는 모든 행을 볼 수 있지만 일반 사용자는 자체 데이터만 볼 수 있습니다. 자세한 내용은 [시스템 테이블 및 뷰에 있는 데이터의 가시성](cm_chap_system-tables.md#c_visibility-of-data) 섹션을 참조하세요.

이 테이블의 데이터 중 일부 또는 전부는 SYS 모니터링 뷰인 [SYS\_PROCEDURE\_MESSAGES](SYS_PROCEDURE_MESSAGES.md)에서도 찾아볼 수 있습니다. SYS 모니터링 뷰의 데이터는 사용 및 이해가 더 쉽도록 형식이 지정되어 있습니다. 쿼리에 SYS 모니터링 뷰를 사용하는 것이 좋습니다.

## 테이블 열
<a name="r_SVL_STORED_PROC_MESSAGES-table-columns"></a>


| 열 이름  | 데이터 유형  | 설명  | 
| --- | --- | --- | 
| userid  | 정수  | 문을 실행하는 데 사용된 권한을 소유한 사용자의 ID입니다. 이 호출이 SECURITY DEFINER 저장 프로시저 내에서 중첩된 경우, 이는 해당 저장 프로시저 소유자의 userid입니다. | 
| session\_userid  | 정수  | 세션 생성자이자 최상위 저장 프로시저 호출의 호출자인 사용자의 ID입니다. | 
| pid | 정수  | 프로세스 ID. | 
| xid | bigint | 프로시저 호출 쿼리의 트랜잭션 ID입니다. | 
| 쿼리  | 정수  | 프로시저 호출의 쿼리 ID입니다. | 
| recordtime | timestamp | 메시지가 발생한 시간(UTC)입니다. | 
| loglevel | 정수 | 발생한 메시지의 로그 수준의 숫자 값입니다. 가능한 값: 20 – LOG 30의 경우 – INFO 40의 경우 – NOTICE 50의 경우 – WARNING 60의 경우 – EXCEPTION의 경우 | 
| loglevel\_text | character(10)  | loglevel의 숫자 값에 해당하는 로그 수준입니다. 가능한 값: LOG, INFO, NOTICE, WARNING, EXCEPTION. | 
| message | character(1024) | 발생한 메시지의 텍스트입니다. | 
| linenum | 정수  | 발생한 문의 행 번호입니다. | 
| querytext | 문자(500)  | 프로시저 호출 쿼리의 실제 텍스트입니다. | 
| 레이블 | character(320)  | 쿼리 실행에 사용되는 파일의 이름 또는 SET QUERY\_GROUP 명령을 사용하여 정의되는 레이블. 쿼리가 파일 기반이 아니거나 QUERY\_GROUP 파라미터가 설정되지 않은 경우, 이 필드의 값은 기본값입니다. | 
| aborted  | 정수  | 저장 프로시저가 시스템에 의해 중지되거나 사용자에 의해 취소되는 경우, 이 열에 1이 포함됩니다. 호출이 실행되어 완료되면 이 열에 0이 포함됩니다. | 
| message\_xid | bigint | 발생한 메시지의 트랜잭션 ID입니다. | 

## 샘플 쿼리
<a name="r_SVL_STORED_PROC_MESSAGES-sample-query"></a>

다음 SQL 문은 SVL\_STORED\_PROC\_MESSAGES를 사용하여 발생한 메시지를 검토하는 방법을 보여 줍니다.

```
-- Create and run a stored procedure
CREATE OR REPLACE PROCEDURE test_proc1(f1 int) AS
$$
BEGIN
    RAISE INFO 'Log Level: Input f1 is %',f1;
    RAISE NOTICE 'Notice Level: Input f1 is %',f1;
    EXECUTE 'select invalid';
    RAISE NOTICE 'Should not print this';

EXCEPTION WHEN OTHERS THEN
     raise exception 'EXCEPTION level: Exception Handling';
END;
$$ LANGUAGE plpgsql;

-- Call this stored procedure
CALL test_proc1(2);

-- Show raised messages with level higher than INFO
SELECT query, recordtime, loglevel, loglevel_text, trim(message) as message, aborted FROM svl_stored_proc_messages 
  WHERE loglevel > 30 AND query = 193 ORDER BY recordtime;

 query |         recordtime         | loglevel | loglevel_text |               message               | aborted
-------+----------------------------+----------+---------------+-------------------------------------+---------
   193 | 2020-03-17 23:57:18.277196 |       40 | NOTICE        | Notice Level: Input f1 is 2         |       1
   193 | 2020-03-17 23:57:18.277987 |       60 | EXCEPTION     | EXCEPTION level: Exception Handling |       1
(2 rows)

-- Show raised messages at EXCEPTION level
SELECT query, recordtime, loglevel, loglevel_text, trim(message) as message, aborted FROM svl_stored_proc_messages 
  WHERE loglevel_text = 'EXCEPTION' AND query = 193 ORDER BY recordtime;
        
 query |         recordtime         | loglevel | loglevel_text |               message               | aborted
-------+----------------------------+----------+---------------+-------------------------------------+---------
   193 | 2020-03-17 23:57:18.277987 |       60 | EXCEPTION     | EXCEPTION level: Exception Handling |       1
```

다음 SQL 문은 SVL\_STORED\_PROC\_MESSAGES를 사용하여 저장 프로시저를 생성할 때 SET 옵션을 사용하여 발생한 메시지를 검토하는 방법을 보여줍니다. test\_proc()의 최소 로그 수준은 NOTICE이므로 NOTICE, WARNING, EXCEPTION 수준 메시지만 SVL\_STORED\_PROC\_MESSAGES에 기록됩니다.

```
-- Create a stored procedure with minimum log level of NOTICE 
CREATE OR REPLACE PROCEDURE test_proc() AS
$$
BEGIN
    RAISE LOG 'Raise LOG messages';
    RAISE INFO 'Raise INFO messages';
    RAISE NOTICE 'Raise NOTICE messages';
    RAISE WARNING 'Raise WARNING messages';
    RAISE EXCEPTION 'Raise EXCEPTION messages';
    RAISE WARNING 'Raise WARNING messages again'; -- not reachable
END;
$$ LANGUAGE plpgsql SET stored_proc_log_min_messages = NOTICE; 

-- Call this stored procedure
CALL test_proc();

-- Show the raised messages
SELECT query, recordtime, loglevel_text, trim(message) as message, aborted FROM svl_stored_proc_messages 
  WHERE query = 149 ORDER BY recordtime;
  
 query |         recordtime         | loglevel_text |          message         | aborted
-------+----------------------------+---------------+--------------------------+---------
   149 | 2020-03-16 21:51:54.847627 | NOTICE        | Raise NOTICE messages    |       1
   149 | 2020-03-16 21:51:54.84766  | WARNING       | Raise WARNING messages   |       1
   149 | 2020-03-16 21:51:54.847668 | EXCEPTION     | Raise EXCEPTION messages |       1
(3 rows)
```