EXPLAIN PLAN [ SET STATEMENT_NAME = ] FOR 为了提高支持性,SQLScript 现在提供了有关 EXPLAIN PLAN 中的 SQLScript 表用户定义函数 (TUDF) 本机运算符的更多详细信息。
TUDF 会在适用时自动展开。如果展开被阻止,原因将列在 EXPLAIN PLAN 中。在以下条件下,此功能自动应用于 EXPLAIN PLAN FOR select 语句:
SELECT 查询使用 TUDF
如果满足两个条件,则会自动生成 SQL PLAN 以及 TUDF 的 SQLScript 引擎计划。
SQLScript TUDF 本机运算符的 EXPLAIN PLAN 提供以下编译计划:
FOR select 语句。可以从表 EXPLAIN_PLAN_TABLE 中检索结果。
FOR CALL。可以从表 EXPLAIN_CALL_PLANS 中检索结果。
EXPLAIN_PLAN_TABLEEXPLAIN_CALL_PLANSOPERATOR_PROPERTIES 字段:列出 SQLScript TUDF 未展开的详细原因(请参阅下表)包含 TUDF 中使用的对象的逗号分隔列表解释最外层的 TUDF 的内部 SQLScript 计划。它与具有相同 STATEMENT_NAME 的 EXPLAIN_PLAN_TABLE 一起自动生成。 TUDF 未展开的可能原因清单原因解释由于功能框无法简化到单个语句,因此未实现TUDF 正文中的多个语句无法简化为单个 语句。因任何表未达标TUDF 使用 ANY TABLE 类型。由于二进制类型参数而未满足TUDF 具有二进制类型作为其参数。由于 DEV_NO_SQLSCRIPT_SCENARIO HINT 而未达标TUDF 的调用者禁止使用 DEV_NO_PREPARE_SQLSCRIPT_SCENARIO 提示进行展开。由于调试会话而未达标TUDF 在调试会话中执行。因输入程序或功能而未达标TUDF 是一个加密函数。因改进日志而未实现TUDF 具有命令逻辑,包括 SQLScript IF、FOR,WHILE 或 LOOP 语句。因内部 SQLSCRIPT 操作者而未达到TUDF 展开被内部 SQLScript 运算符阻止。由于输入参数类型 MISMATCH 而未满足输入参数的类型与 TUDF 输入参数的定义类型不匹配。由于 JSON 或系统功能而未满足TUDF 使用 JSON 或系统函数。由于 NATIVE SQLSCRIPT OPERATOR 未实现TUDF 具有 SQLScript 本机运算符,它没有相应的 SQL 对应运算符。由于不计算视图而未达标TUDF 的调用者禁用计算视图展开。由于主要键值检查而未达标TUDF 具有主键检查。由于范围限制而未达标具有 RANGE RESTRICTION 的表在 TUDF 中使用。因递归而未达标TUDF 具有递归调用。由于序列对象而未满足在 TUDF 中使用 SEQUENCE 变量。由于顺序执行而未达标TUDF 通过 SEQUENTIAL EXECUTION 子句执行。因SPATIAL TYPE 参数而未满足TUDF 具有空间类型作为其参数。由于时间差旅选项而未达到TUDF 使用历史记录表或使用时间旅行选项。因条款未达标TUDF 使用 WITH 子句。因带提示而未达标TUDF 使用无法展开的 WITH HINT 子句。因包含参数条款而未达标TUDF 使用 WITH PARAMETERS 子句。因 XML 条款而未达标TUDF 具有 XML 子句。
示例代码create function func() returns table (a int) as begindeclare k int = 0;declare x int = 0;for x in 1..4 do -- imperative logick := :k + :x;end for;return select :k as a from dummy;end; 示例代码explain plan set statement_name = 'TUDF_PLAN' for select * from func(); 您可以从 EXPLAIN_PLAN_TABLE 检索 SQL 计划。 示例代码select statement_name, operator_name, operator_details, operator_properties, schema_name, table_name from explain_plan_table where statement_name ='TUDF_ PLAN'; STATEMENT_NAMEOPERATOR_NAMEOPERATOR_DETAILSOPERATOR_PROPERTIESSCHEMA_NAMETABLE_NAMETUDF_PLAN列搜索FUNC.ALATE MATERIALIZATION,ENUM_BY: CS_TABLE????TUDF_PLAN表功能 因改进日志而未实现,ACCESSED_OBJECT_NAMES: SYS.DUMMY、PUBLIC.DUMMY系统FUNC 可以从表 EXPLAIN_CALL_PLANS 中检索 SQL 计划。 示例代码select statement_name, operator_name, operator_string, procedure_name, execution_engine from explain_call_plans where statement_name ='TUDF_PLAN'; STATEMENT_NAMEOPERATOR_NAMEOPERATOR_STRINGPROCEDURE_NAMEEXECUTION_ENGINETUDF_PLAN功能select * from func()FUNCSQLScriptTUDF_PLAN顺序操作 FUNCSQLScriptTUDF_PLAN初始操作 FUNCSQLScriptTUDF_PLAN表达式操作符 FUNCSQLScriptTUDF_PLAN范围运算符 FUNCSQLScriptTUDF_PLAN分配 FUNCSQLScriptTUDF_PLAN循环操作 FUNCSQLScriptTUDF_PLAN顺序操作 FUNCSQLScriptTUDF_PLAN范围运算符 FUNCSQLScriptTUDF_PLAN范围运算符 FUNCSQLScriptTUDF_PLAN表达式操作符 FUNCSQLScriptTUDF_PLAN分配 FUNCSQLScriptTUDF_PLAN继续 FUNCSQLScriptTUDF_PLAN分配select __typed_Integer__($1) as a from dummyFUNCSQLScript、EAPITUDF_PLAN退货 FUNCSQLScriptTUDF_PLAN终端操作 FUNCSQLScript
ALTER SYSTEM CLEAR SQL PLAN CACHE 清除 SQL PLAN CACHE。