描述

该语句仅支持使用 SQL_TEXT 创建的 OUTLINE,可用于添加绑定 OUTLINE 和限流规则。

格式

  1. ALTER OUTLINE outline_name ADD stmt [ TO target_stmt ]

参数解释

参数

描述

outline_name

指定要创建的 OUTLINE 名称。

stmt

一般为一个带有 hint 和原始参数的 DML 语句。

TO target_stmt

如果不指定 TO target_stmt, 则表示如果数据库接受的 SQL 参数化后与 stmt 去掉 hint 参数化文本相同,则将该 SQL 绑定 stmt 中 hint 生成执行计划;如果期望对含有 hint 的语句进行固定计划,则需要 TO target_stmt 来指明原始的 SQL。

注意

在使用 target_stmt 时,严格要求 stmt 与 target_stmt 在去掉 hint 后完全匹配。

示例

  • 通过 ALTER OUTLINE 来添加限流规则。
  1. obclient> ALTER OUTLINE ol_1 ADD SELECT /*+max_concurrent(1)*/ * FROM t1 WHERE c1 = 1 and c2 = ?;
  2. obclient> ALTER OUTLINE ol_1 ADD SELECT /*+max_concurrent(1)*/ * FROM t1 WHERE c1 = ? and c2 = 1;
  • 通过 ALTER OUTLINE 来添加执行计划。
  1. obclient> CREATE OUTLINE ol_2 on SELECT /*+max_concurrent(1)*/ * FROM t1,t2 WHERE t1.c1 = 1;
  2. obclient> ALTER OUTLINE ol_2 add SELECT /*+use_nl(t2)*/ * FROM t1,t2 WHERE t1.c1 = 1;

注意事项

  • 同一个 outline_name 只能指定一个执行计划。如果通过 CREATE OUTLINE 语句指定了执行计划,则无法通过执行 ALTER OUTLINE 时再添加。

  • CREATE OUTLINE 类似,在 ALTER OUTLINE 时不能同时指定限流规则和执行计划。