REPARE stmt_name FROM preparable_stmt
PREPARE语句准备一个SQL语句,并为其分配名称, stmt_name以便稍后引用该语句。准备好的语句用执行, EXECUTE并用释放 DEALLOCATE PREPARE。
语句名称不区分大小写。 preparable_stmt是字符串文字或包含SQL语句文本的用户变量。文本必须表示单个语句,而不是多个语句。在语句中,? 字符可以用作参数标记,以指示稍后在执行查询时将数据值绑定到查询的位置。该 ?字符不应内引号括起来,即使你打算将它们绑定到字符串值。参数标记只能用于应该显示数据值的位置,而不能用于SQL关键字,标识符等。
如果已经存在具有给定名称的已准备好的语句,则在准备新语句之前将其隐式释放。这意味着,如果新语句包含错误并且无法准备,则会返回错误,并且不存在具有给定名称的语句。
准备好的语句的范围是在其中创建该语句的会话,其含义如下:
1、在一个会话中创建的准备好的语句不适用于其他会话。
2、会话结束时,无论是正常会话还是异常会话,其准备好的语句都不再存在。如果启用了自动重新连接,则不会通知客户端连接丢失。因此,客户端可能希望禁用自动重新连接。请参见第28.7.27节“ C API自动重新连接控制”。
3、在程序完成执行之后,在存储的程序中创建的准备好的语句将继续存在,并且可以稍后在程序外部执行。
4、在存储程序上下文中准备的语句不能引用存储过程或函数参数或局部变量,因为它们在程序结束时超出范围,并且如果该语句稍后在程序外部执行则将不可用。作为解决方法,请参考用户定义的变量,该变量也具有会话范围;