2025年9月25日: PostgreSQL 18 发布!
支持的版本:当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本:devel
不支持的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1

PREPARE

PREPARE — 准备一个用于执行的语句

概要

PREPARE prepared_name FROM string

描述

PREPARE 动态地将一个语句准备为一个字符串以供执行。这与直接的 SQL 语句 PREPARE 不同,后者也可以在嵌入式程序中使用。EXECUTE 命令用于执行这两种类型的准备好的语句。

参数

prepared_name #

准备好的查询的标识符。

string #

一个字面字符串或一个包含可准备的 SQL 语句(SELECT、INSERT、UPDATE 或 DELETE 之一)的主机变量。使用问号(?)表示将在执行时提供参数值。

注释

在典型用法中,string 是一个主机变量引用,指向一个包含动态构造的 SQL 语句的字符串。字面字符串的情况不太有用;你最好直接写一个 SQL PREPARE 语句。

如果你确实使用了字面字符串,请记住,你在 SQL 语句中可能想包含的任何双引号都必须写成八进制转义(\042),而不是 C 语言中的标准用法 \"。这是因为字符串位于 EXEC SQL 部分内,所以 ECPG 词法分析器会根据 SQL 规则而不是 C 规则来解析它。任何嵌入的反斜杠稍后都会根据 C 规则进行处理;但 \" 会导致立即的语法错误,因为它被视为结束了字面量。

示例

char *stmt = "SELECT * FROM test1 WHERE a = ? AND b = ?";

EXEC SQL ALLOCATE DESCRIPTOR outdesc;
EXEC SQL PREPARE foo FROM :stmt;

EXEC SQL EXECUTE foo USING SQL DESCRIPTOR indesc INTO SQL DESCRIPTOR outdesc;

兼容性

PREPARE 在 SQL 标准中进行了规定。

另请参阅

EXECUTE

提交更正

如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表格 来报告文档问题。