
# CREATE OUTLINE
#### 功能描述
为指定的sql_hash创建一个新的outline。
#### 注意事项
- 如果outline_text中的outline存在语法错误，创建报错syntax error。
- 执行成功后，会在SQL_OUTLINE系统表中插入一行。
- 该语法仅数据库管理员用户，或授予了gs_role_sql_management角色权限的用户可执行。
 
#### 语法格式
```
CREATE OUTLINE outline_name FOR sql_hash USING outline_text;
```
#### 参数说明
- **outline_name**
  指定新建outline的名字。
  
- **sql_hash**
  新建outline对应的sql的sql_hash。
  
- **outline_text**
  新建outline的具体内容。text类型，需要加单引号。
  ![](https://support.huaweicloud.com/sqlreference-911-dws/public_sys-resources/note_3.0-zh-cn.png)
  只支持把所有的hint写在一个hint注释中。如果有多个hint注释块，需合并为一个。
  
 
#### 示例
数据库管理员用户创建outline：
```
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注释块后，创建成功：
```
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报错：
```
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.
```
