

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 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>


| 欄名稱  | 資料類型  | Description  | 
| --- | --- | --- | 
| userid  | integer  | 使用者的 ID，該使用者的權限用於執行陳述式。如果此呼叫套疊於 SECURITY DEFINER 預存程序內，則此為該預存程序的擁有者的 userid。 | 
| session\_userid  | integer  | 使用者的 ID，該使用者建立工作階段，並且是最上層預存程序呼叫的叫用者。 | 
| pid | integer  | 程序 ID。 | 
| xid | bigint | 程序呼叫查詢的交易 ID。 | 
| query  | integer  | 程序呼叫的查詢 ID。 | 
| recordtime | timestamp | 引發訊息的 UTC 時間。 | 
| loglevel | integer | 引發訊息的日誌層級數值。可能的值：20 – 適用於 LOG 30 – 適用於 INFO 40 – 適用於 NOTICE 50 – 適用於 WARNING 60 – 適用於 EXCEPTION | 
| loglevel\_text | character(10)  | 對應到 loglevel 中數值的日誌層級。可能的值：LOG (記錄)、INFO (資訊)、NOTICE (通知)、WARNING (警告) 和 EXCEPTION (例外)。 | 
| message | character(1024) | 引發訊息的文字。 | 
| linenum | integer  | 引發陳述式的行號。 | 
| querytext | character(500)  | 程序呼叫查詢的實際文字。 | 
| label | character(320)  | 用於執行查詢的檔案名稱，或以 SET QUERY\_GROUP 命令定義的標籤。如果查詢不是檔案型，或未設定 QUERY\_GROUP 參數，則此欄位值為預設值。 | 
| aborted  | integer  | 如果預存程序已被系統停止或被使用者取消，則此欄包含 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)
```