跳到主要内容

PREPARE

描述

该语句用于准备一个语句并为其指定一个名称,用于稍后引用该语句。可以使用 EXECUTE 执行 Prepared 语句,并使用 DEALLOCATE PREPARE 释放该语句。

信息
  • Prepared 语句仅在当前会话中生效,不适用于其他会话。当会话结束时,所创建的 Prepared 语句不再存在。
  • 在存储例程中创建的 Prepared 语句具有全局性,则在程序执行完毕后不会释放它。但是在存储程序上下文中的 Prepared 语句不能引用存储过程或函数的参数或局部变量,否则会导致该语句无法在程序外执行。

语法

PREPARE stmt_name FROM preparable_stmt

参数解释

参数描述
stmt_name指定准备语句的名称。语句名称不区分大小写。
preparable_stmt指定要准备执行的 SQL 语句。该参数是字符串字面量或包含 SQL 语句文本的用户变量,文本必须表示单个语句,而不是多个语句。该参数可以包含存储过程调用的字符串字面量或用户变量,但用户变量交互时,不能将出参直接赋给用户变量。

Prepared 语句中允许使用的 SQL 语法

以下 SQL 语句可用作 Prepared 语句:

ALTER TABLE
ALTER USER
ANALYZE TABLE
CACHE INDEX
CALL
CHANGE MASTER
COMMIT
{CREATE | DROP} INDEX
{CREATE | RENAME | DROP} DATABASE
{CREATE | DROP} TABLE
{CREATE | RENAME | DROP} USER
{CREATE | DROP} VIEW
DELETE
DO
FLUSH {TABLE | TABLES | TABLES WITH READ LOCK | HOSTS | PRIVILEGES
| LOGS | STATUS | DES_KEY_FILE | USER_RESOURCES}
GRANT
INSERT
INSTALL PLUGIN
KILL
LOAD INDEX INTO CACHE
OPTIMIZE TABLE
RENAME TABLE
REPAIR TABLE
REPLACE
RESET {QUERY CACHE}
REVOKE
SELECT
SET
SHOW BINLOG EVENTS
SHOW CREATE {PROCEDURE | FUNCTION | EVENT | TABLE | VIEW}
SHOW {MASTER | BINARY} LOGS
TRUNCATE TABLE
UNINSTALL PLUGIN
UPDATE
信息

PREPARE 语句与 CALL 语句使用时,当 EXECUTE ... USING ... 形式执行预处理的存储过程调用时,无法将存储过程的出参值反映到使用 USING 指定的变量上。

示例

/* 使用 SELECT 语句构成 Prepared 语句 */
PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
Query OK, 0 rows affected (0.001 sec)

/* 设置用户变量 a 和 b */
SET @a = 3;
Query OK, 0 rows affected (0.001 sec)

SET @b = 4;
Query OK, 0 rows affected (0.001 sec)

/* 应用用户变量的值执行 Prepared 语句 */
EXECUTE stmt1 USING @a, @b;
+------------+
| hypotenuse |
+------------+
| 5 |
+------------+
1 row in set (0.001 sec)
信息

seekdb 在当前版本暂不支持交互客户端显式结果。