EXECUTE

说明

执行一个查询计划

语法

execute ::=

params ::=

into ::=

参数

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;