您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

调用的解释计划

语法

EXPLAIN PLAN [SET STATEMENT_NAME = ] FOR

语法元素

语法元素描述 ::= 为给定 SQL 语句指定输出表中特定执行计划的名称指定要解释的条目 ::= | SQL PLAN CACHE ENTRY ::= 指定要解释的 SQL 计划缓存中条目的标识符。请参阅 M_SQL_PLAN_CACHE 监控视图,找到所需缓存条目的 指定用于解释 计划的过程调用。有关子查询的详细信息,请参见 CALL 语句。  备注只有具有 OPTIMIZER_ADMIN 权限的用户才能运行 EXPLAIN PLAN [SET STATEMENT_NAME = ] FOR SQL PLAN CACHE ENTRY 命令。

描述

EXPLAIN PLAN 提供有关给定过程的编译计划的信息。编译计划结果保存在名为 EXPLAIN_CALL_PLANS 的表中。

EXPLAIN PLAN 通过使用给定的 SQLScript 引擎计划结构生成计划信息。它会遍历计划结构并记录与当前 SQLScript 引擎运算符对应的每个信息。

如果在过程内部调用另一个过程,EXPLAIN PLAN 将在调用运算符(调用程序)下插入调用过程 (callee) 的结果,尽管实际调用的过程是不位于调用运算符下的子计划。

另一种情况是 else 运算符。 EXPLAIN PLAN 生成虚拟 else 运算符来表示条件运算符中的替代运算符。

示例

CREATE PROCEDURE proc_p1(a int) as

begin

declare i int default 0;

create table tab1 (attr1 int);

if a > 0 then

select 5 from dummy;

else

select 10 from dummy;

end if;

while i < 10 do

insert into tab1 values (1);

i := i + 1;

end while;

drop table tab1;

end;

EXPLAIN PLAN SET STATEMENT_NAME = 'test' FOR CALL proc_p1(1);

可以通过从表 EXPLAIN_CALL_PLANS 中进行选择来检索结果。

SELECT * FROM EXPLAIN_CALL_PLANS WHERE STATEMENT_NAME = 'test';

Select 查询的 EXPLAIN PLAN 通过 HDB 客户端删除其临时表,但在 EXPLAIN PLAN FOR 调用的情况下,尚不支持。要删除表中的行,请从 EXPLAIN_CALL_PLANS 表中执行删除查询。

备注客户端集成尚不可用。您需要使用上述 SQL 语句检索计划信息。