

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# SVL\_STATEMENTTEXT
<a name="r_SVL_STATEMENTTEXT"></a>

使用 SVL\_STATEMENTTEXT 视图获取已在系统上运行的所有 SQL 命令的完整记录。

SVL\_STATEMENTTEXT 视图包含 [STL\_DDLTEXT](r_STL_DDLTEXT.md)、[STL\_QUERYTEXT](r_STL_QUERYTEXT.md)、[STL\_UTILITYTEXT](r_STL_UTILITYTEXT.md) 表中所有行的联合。此外，此视图还包含到 STL\_QUERY 表的联接。

SVL\_STATEMENTTEXT 对所有用户可见。超级用户可以查看所有行；普通用户只能查看其自己的数据。有关更多信息，请参阅 [系统表和视图中的数据可见性](cm_chap_system-tables.md#c_visibility-of-data)。

此表中的部分或全部数据也可以在 SYS 监控视图 [SYS\_QUERY\_HISTORY](SYS_QUERY_HISTORY.md) 中找到。SYS 监控视图中的数据经过格式化处理，便于使用和理解。我们建议您使用 SYS 监控视图进行查询。

## 表列
<a name="r_SVL_STATEMENTTEXT-table-columns"></a>


| 列名称  | 数据类型  | 描述  | 
| --- | --- | --- | 
| userid  | integer  | 生成条目的用户的 ID。 | 
| xid  | bigint  | 与语句关联的事务 ID。 | 
| pid  | integer  | 语句的进程 ID。 | 
| label  | character(320)  | 用于运行查询的文件的名称或使用 SET QUERY\_GROUP 命令定义的标签。如果查询并非基于文件或未设置 QUERY\_GROUP 参数，则此字段为空。 | 
| starttime  | timestamp | 开始执行语句的确切时间，秒的小数部分以 6 位精度表示。例如：2009-06-12 11:29:19.131358 | 
| endtime  | timestamp | 语句执行完成的确切时间，秒的小数部分以 6 位精度表示。例如：2009-06-12 11:29:19.193640 | 
| sequence  | integer  | 当一个语句包含 200 多个字符时，将为该语句记录额外的行。序列 0 是第一行，1 是第二行，依此类推。 | 
| type  | varchar(10)  | SQL 语句的类型：QUERY、DDL 或 UTILITY。 | 
| text  | character(200)  | SQL 文本，以 200 个字符递增。此字段可能包含反斜杠 (\\\\) 和换行符 (\\n) 等特殊字符。 | 

## 示例查询
<a name="r_SVL_STATEMENTTEXT-sample-query"></a>

下面的查询返回在 2009 年 6 月 16 日运行的 DDL 语句：

```
select starttime, type, rtrim(text) from svl_statementtext
where starttime like '2009-06-16%' and type='DDL' order by starttime asc;

starttime                  | type |              rtrim
---------------------------|------|--------------------------------
2009-06-16 10:36:50.625097 | DDL  | create table ddltest(c1 int);
2009-06-16 15:02:16.006341 | DDL  | drop view alltickitjoin;
2009-06-16 15:02:23.65285  | DDL  | drop table sales;
2009-06-16 15:02:24.548928 | DDL  | drop table listing;
2009-06-16 15:02:25.536655 | DDL  | drop table event;
...
```

### 重新构造存储的 SQL
<a name="r_SVL_STATEMENTTEXT-reconstruct-sql"></a>

要重新构造存储在 SVL\_STATEMENTTEXT 的 `text` 列中的 SQL，请运行 SELECT 语句，以从 `text` 列中的一个或多个部分创建 SQL。在运行重新构造的 SQL 之前，将任何 (`\n`) 特殊字符替换为新行。以下 SELECT 语句的结果是 `query_statement` 字段中重新构造的 SQL 的行。

```
select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS query_statement 
from SVL_STATEMENTTEXT where pid=pg_backend_pid();
```

例如，以下查询选择 3 列。查询本身超过 200 个字符，并存储在 SVL\_STATEMENTTEXT 中的多个部分内。

```
select
1 AS a0123456789012345678901234567890123456789012345678901234567890,
2 AS b0123456789012345678901234567890123456789012345678901234567890,
3 AS b012345678901234567890123456789012345678901234
FROM stl_querytext;
```

在此示例中，查询存储在 SVL\_STATEMENTTEXT 的 `text` 列的 2 个部分（行）中。

```
select sequence, text from SVL_STATEMENTTEXT where pid = pg_backend_pid() order by starttime, sequence;
```

```
 sequence |                                                                                             text                                                                                                   
----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
        0 | select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234
        1 | \nFROM stl_querytext;
```

要重新构造存储在 STL\_STATEMENTTEXT 中的 SQL，请运行以下 SQL。

```
select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS text 
from SVL_STATEMENTTEXT where pid=pg_backend_pid();
```

要在客户端中使用生成的重新构造的 SQL，需将任何 (`\n`) 特殊字符替换为新行。

```
                                                                                                             text                                                                                                             
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234\nFROM stl_querytext;
```