13.5.1 PREPARE 语句

PREPARE stmt_name FROM preparable_stmt

PREPARE语句准备一个 SQL 语句并为其分配一个名称 , stmt_name稍后通过该名称引用该语句。准备好的语句用 执行 EXECUTE和释放 DEALLOCATE PREPARE。有关示例,请参阅第 13.5 节,“准备好的语句”

语句名称不区分大小写。 preparable_stmt是字符串文字或包含 SQL 语句文本的用户变量。文本必须代表单个语句,而不是多个语句。在语句中,? 字符可用作参数标记,以指示稍后执行查询时数据值将绑定到查询的位置。这些 ?字符不应包含在引号中,即使您打算将它们绑定到字符串值。参数标记只能用于数据值应该出现的地方,不能用于 SQL 关键字、标识符等。

如果具有给定名称的准备语句已经存在,则在准备新语句之前隐式释放它。这意味着如果新语句包含错误并且无法准备,则返回错误并且不存在具有给定名称的语句。

准备好的语句的范围是创建它的会话,这有几个含义:

  • 在一个会话中创建的准备好的语句对其他会话不可用。

  • 当会话结束时,无论是正常还是异常,其准备好的语句都不再存在。如果启用了自动重新连接,则不会通知客户端连接丢失。因此,客户端可能希望禁用自动重新连接。请参阅自动重新连接控制

  • 在存储程序中创建的准备好的语句在程序完成执行后继续存在,并且稍后可以在程序外部执行。

  • 在存储程序上下文中准备的语句不能引用存储过程或函数参数或局部变量,因为它们在程序结束时超出范围,并且如果语句稍后在程序外执行则不可用。作为一种解决方法,请改为引用用户定义的变量,这些变量也具有会话范围;参见 第 9.4 节,“用户定义的变量”