EXECUTE¶
说明¶
执行一个查询计划
参数¶
plan_name
曾经用PREPARE定义的查询计划名。
Parameter
执行查询计划所需的参数。
LOCAL
指示执行结果放入本地临时表。
GLOBAL
指示执行结果放入全局临时表。
TEMPORARY | TEMP
指示是否是临时表。当不指定时表示非临时表。
table_name
执行查询计划的结果所要放入的表名。
注解
EXECUTE 是系统扩展。
EXECUTE 执行一个查询计划。关于查询计划的更多信息,请参考 PREPARE 语法。
执行查询计划时,可以指定参数(如果查询计划需要的话),各参数出现的顺序、类型等信息应该与 PREPARE 时一致。想获取参数信息,请参考 GET PARAMINFO FOR 语法。指定参数可以有两种方式,如上所示。
查询计划的执行结果可以放入一个表或临时表中。
可以使用GLOBAL TEMPORARY创建全局临时表,不支持ON COMMIT选项,只能创建会话级临时表,不支持创建事务级临时表。临时表的定义对所有有权限的会话可见,各个会话临时表中的数据是相互隔离的。临时表需要记录日志,以支持事务级临时表的回滚等操作。事务级临时表的数据在事务提交或回滚时会被截断,会话级临时表的数据在会话结束时会被截断。临时表不会自动删除,只能在没有其他会话绑定时使用 DROP TABLE 语句显示删除。
若通过EXECUTE INTO语句创建的表不是本地临时表,则不能与现有的非本地临时表重名;若创建的表是本地临时表,则可以与现有的非本地临时表重名,但不能与现有的本地临时表重名。
由于 EXECUTE 不能执行返回结果集的存储过程,因此 PREPARE 时不要使用返回结果集的存储过程。
示例¶
示例1: 执行查询计划
-- 清理环境
DEALLOCATE PREPARE pp1;
DROP TABLE tab1 CASCADE;
-- 创建表
CREATE TABLE tab1(a INT, b INT);
SELECT * FROM tab1 ORDER BY a;
A(int) |B(int) |
总数目:0
-- 创建一个查询计划
PREPARE pp1 AS INSERT INTO tab1 VALUES(?, ?);
SELECT * FROM tab1 ORDER BY a;
A(int) |B(int) |
总数目:0
-- 执行查询计划
EXECUTE pp1(1, 11);
SELECT * FROM tab1 ORDER BY a;
A(int) |B(int) |
------------------------
1 |11 |
总数目:1
-- 连续多次执行
EXECUTE pp1(2, 12);
EXECUTE pp1 USING 3, 13;
EXECUTE pp1 USING 4, 14;
SELECT * FROM tab1 ORDER BY a;
A(int) |B(int) |
------------------------
1 |11 |
------------------------
2 |12 |
------------------------
3 |13 |
------------------------
4 |14 |
总数目:4
-- 覆盖同名查询计划
-- 创建一个无参数的查询计划
PREPARE pp1 AS SELECT * FROM tab1 ORDER BY a;
-- 执行无参数查询计划
EXECUTE pp1;
-- 删除执行计划
DEALLOCATE PREPARE pp1;
-- 删除表
DROP TABLE tab1;