SET CURRENT EXPLAIN SNAPSHOT 语句

SET CURRENT EXPLAIN SNAPSHOT 语句更改 CURRENT EXPLAIN SNAPSHOT 专用寄存器的值。

此语句不受事务控制。

调用

此语句可嵌入应用程序中或者以交互方式发出。 它是可动态准备的可执行语句。

授权

不需要执行任何操作。

语法

Read syntax diagramSkip visual syntax diagramSET CURRENT EXPLAIN SNAPSHOT=NOYESEXPLAINREOPThost-variable

描述

禁用 Explain snapshot 工具。 未生成快照。 NO 是专用寄存器的初始值。
启用 Explain 快照工具,为每个符合条件的动态 SQL 语句创建内部表示的快照。 此信息插入到 EXPLAIN_STATEMENT 表的 SNAPSHOT 列中。
EXPLAIN
启用 Explain 快照工具,为预编译的每个符合条件的动态 SQL 语句创建内部表示的快照。 但是,不会执行动态语句。
REOPT
启用 Explain 工具,并使执行时在语句重新优化期间捕获静态或动态 SQL 语句的 Explain 信息; 即,当主变量,专用寄存器, 全局变量 或参数标记的实际值可用时。
host-variable
主变量 必须是数据类型 CHAR 或 VARCHAR ,并且其内容长度不得超过 8。 如果提供了较长的字段,那么将返回错误 (SQLSTATE 42815)。 此寄存器中包含的值必须是 NO , YES 或 EXPLAIN。 如果提供的实际值大于指定的替换值,那么必须在右边用空格填充输入。 不允许前导空格 (SQLSTATE 42815)。 所有输入值都被视为不区分大小写。 如果 host-variable 具有关联的指示符变量,那么该指示符变量的值不得指示空值 (SQLSTATE 42815)。

注意

  • 在限定要填充的 Explain 表时,说明工具使用以下标识作为模式:
    • 动态 SQL 的会话授权标识
    • 静态 SQL 的语句授权标识
    该模式可以与一组 Explain 表相关联,也可以与指向另一模式下的一组 Explain 表的别名相关联。 如果在该模式下找不到 Explain 表,那么 Explain 工具会检查 SYSTOOLS 模式下的 Explain 表,并尝试使用这些表。
  • 可以使用 PREP 或 BIND 命令的 EXPLSNAP 选项来捕获静态 SQL 语句的说明快照。 如果指定了 EXPLSNAP 选项的 ALL 值,并且 CURRENT EXPLAIN SNAPSHOT 寄存器值为 NO ,那么将在运行时针对动态 SQL 语句捕获 Explain 快照。 如果 CURRENT EXPLAIN SNAPSHOT 寄存器的值不是 NO ,那么将忽略 EXPLSNAP 选项。
  • 如果激活了 Explain 快照工具,那么当前授权标识必须具有对 Explain 表的 INSERT 特权,否则将产生错误 (SQLSTATE 42501)。
  • 从例程中说明 SQL 语句时,必须使用 SQL 数据访问指示符 MODISQL DATA 来定义该例程 (SQLSTATE 42985)。
  • 如果专用寄存器设置为 REOPT ,并且 SQL 语句在执行时不符合重新优化的条件 (即,如果语句没有输入变量,或者 REOPT 绑定选项设置为 NONE) ,那么不会捕获任何 Explain 信息。 如果 REOPT 绑定选项设置为 ONCE ,那么最初重新优化语句时,将仅捕获一次 Explain 快照信息。 对该语句进行高速缓存后,将不会获取有关后续执行的此语句的更多 Explain 信息。
  • 如果启用了 Explain 工具,那么 REOPT 绑定选项将设置为 ONCE ,并且您尝试执行已高速缓存的可重新优化的 SQL 语句,该语句将使用输入变量的当前值进行编译和重新优化,并且将相应地捕获 Explain 快照。 将不会对此语句高速缓存或执行新生成的存取方案。 其他同时执行此高速缓存语句的应用程序将继续执行,执行此语句的新请求将选取已高速缓存的存取方案。
  • 如果静态或动态 SQL 语句具有输入变量,并且 REOPT 绑定选项设置为 ONCE 或 ALWAYS ,那么 CURRENT EXPLAIN MODE 和 CURRENT EXPLAIN SNAPSHOT 专用寄存器的值 REOPT 将在绑定时覆盖 EXPLAIN 和 EXPLSNAP 绑定选项的值。

示例

  • 示例 1: 以下语句设置 CURRENT EXPLAIN SNAPSHOT 专用寄存器,以便将针对任何后续符合条件的动态 SQL 语句生成 Explain 快照,并将执行该语句。
       SET CURRENT EXPLAIN SNAPSHOT = YES
  • 示例 2: 以下示例将 CURRENT EXPLAIN SNAPSHOT 专用寄存器的当前值检索到名为 SNAP 的主变量中。
       EXEC SQL VALUES (CURRENT EXPLAIN SNAPSHOT) INTO :SNAP;