

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 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/)。

# 使用预编译的语句支持
<a name="jdbc20-prepared-statement-support"></a>

Amazon Redshift JDBC 驱动程序支持预编译的语句。您可以使用预编译的语句来提高需要在同一连接过程中多次运行的参数化查询的性能。

*预编译的语句*是在服务器端编译但不立即运行的 SQL 语句。在关闭对象或连接之前，已编译的语句作为 PreparedStatement 对象存储在服务器上。当该对象存在时，您可以根据需要使用不同的参数值多次运行预编译的语句，而无需再次编译该语句。此操作降低了开销，可以更快地运行一组查询。

有关预编译语句的更多信息，请参阅[来自 Oracle 的 JDBC 基础知识教程](https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html)中的“使用预编译语句”。

您可以预编译包含多个查询的语句。例如，以下预编译语句包含两个 INSERT 查询：

```
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO
MyTable VALUES (1, 'abc'); INSERT INTO CompanyTable VALUES
(1, 'abc');");
```

请注意，这些查询不依赖于在同一预编译语句内指定的其他查询的结果。由于查询在预编译步骤期间未运行，因此尚未返回结果，并且不可用于同一预编译语句中的其他查询。

例如，不允许使用以下预编译语句，该语句将创建一个表，然后将值插入到该新创建的表中：

```
PreparedStatement pstmt = conn.prepareStatement("CREATE
TABLE MyTable(col1 int, col2 varchar); INSERT INTO myTable
VALUES (1, 'abc');");
```

如果您尝试预编译此语句，服务器将返回一个错误，指出目标表 (myTable) 尚不存在。必须先运行 CREATE 查询，然后才能预编译 INSERT 查询。