更新时间:2025-07-10 GMT+08:00

CREATE OUTLINE

功能描述

为指定的sql_hash创建一个新的outline。

注意事项

  • 如果outline_text中的outline存在语法错误,创建报错syntax error。
  • 执行成功后,会在SQL_OUTLINE系统表中插入一行。
  • 该语法仅数据库管理员用户,或授予了gs_role_sql_management角色权限的用户可执行。

语法格式

1
CREATE OUTLINE outline_name FOR sql_hash USING outline_text;

参数说明

  • outline_name

    指定新建outline的名字。

  • sql_hash

    新建outline对应的sql的sql_hash。

  • outline_text

    新建outline的具体内容。text类型,需要加单引号。

    只支持把所有的hint写在一个hint注释中。如果有多个hint注释块,需合并为一个。

示例

数据库管理员用户创建outline:

1
2
3
4
5
6
7
CREATE OUTLINE outline_test1 FOR sql_be2995e824abb8b712b69fca4825b532 USING '/*+ leading(@sel$1 public.t1@sel$1 s1.t2@sel$1) */';
CREATE OUTLINE outline_test2 FOR sql_be2995e824abb8b712b69fca4825b532 USING
'/*+
    begin_outline_data
     leading(@sel$1 public.t1@sel$1 s1.t2@sel$1)
    end_outline_data
 */';

数据库管理员用户创建outline时,outline_text指定多个hint注释块,报错syntax error;合并为一个hint注释块后,创建成功:

1
2
3
4
5
6
7
8
CREATE OUTLINE outline_test3 FOR sql_be2995e824abb8b712b69fca4825b532 USING '/*+ leading(@sel$1 public.t1@sel$1 s1.t2@sel$1) */ /*+ mergejoin(@sel$1 t1@sel$1 t1@sel$2)*/';
ERROR:  LINE 1: syntax error at '*'

CREATE OUTLINE outline_test3 FOR sql_be2995e824abb8b712b69fca4825b532 USING '/*+ leading(@sel$1 public.t1@sel$1 s1.t2@sel$1) */' '/*+ mergejoin(@sel$1 t1@sel$1 t1@sel$2)*/';
ERROR:  syntax error at or near "'/*+ mergejoin(@sel$1 t1@sel$1 t1@sel$2)*/'"
LINE 1: ...+ leading(@sel$1 public.t1@sel$1 s1.t2@sel$1) */' '/*+ merge...
                                                             ^
CREATE OUTLINE outline_test3 FOR sql_be2995e824abb8b712b69fca4825b532 USING '/*+ leading(@sel$1 public.t1@sel$1 s1.t2@sel$1) mergejoin(@sel$1 t1@sel$1 t1@sel$2)*/';

普通用户创建outline报错:

1
2
CREATE OUTLINE outline_test4 FOR sql_be2995e824abb8b712b69fca4825b532 USING '/*+ leading(@sel$1 public.t1@sel$1 s1.t2@sel$1) */';
ERROR:  Permission denied to create outline.