13.5.1 PREPARE 声明

PREPARE stmt_name FROM preparable_stmt

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

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

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

准备好的语句的范围是在其中创建它的会话,其含义如下:

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

  • 会话结束时,无论是正常会话还是异常会话,其准备好的语句都不再存在。如果启用了自动重新连接,则不会通知 Client 端连接丢失。因此,Client 端可能希望禁用自动重新连接。参见第 27.7.19 节“ C API 自动重新连接控制”

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

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