[TOC] # CREATE OUTLINE ## 描述 该语句用来创建 OUTLINE。可以通过两种方式创建,一种是通过 SQL\_TEXT(用户执行的带参数的原始语句),另一种是通过 SQL\_ID 创建。 **说明** 创建 OUTLINE 需要进入对应的 DataBase 下执行。 ## 格式 * **使用****SQL\_TEXT 创建****OUTLINE** ~~~ CREATE [OR REPLACE] OUTLINE outline_name ON stmt [ TO target_stmt ] ~~~ * **使用****SQL\_ID 创建****OUTLINE** ~~~ CREATE OUTLINE outline_name ON sql_id USING HINT hint; ~~~ ## 参数解释 <table data-tag="table" id="table-u2x-1ol-dd2" class="table"><colgroup width="360" span="1" data-tag="col" id="col-2st-78m-yis" colwidth="1*" colnum="1" colname="col1" style="width:50%" class="col"></colgroup><colgroup width="360" span="1" data-tag="col" id="col-ycb-a2y-a0i" colwidth="1*" colnum="2" colname="col2" style="width:50%" class="col"></colgroup><thead id="thead-3um-hxt-8kg" class="thead"><tr id="tr-ebh-vfu-g0m"><th id="td-15n-2ox-gxq"><p id="p-ing-d7m-4v3"><b>参数</b></p></th><th id="td-akn-evu-h6v"><p id="p-2dx-txl-l0v"><b>描述</b></p></th></tr></thead><tbody data-tag="tbody" id="tbody-da1-es4-t7e" class="tbody"><tr data-tag="tr" id="tr-dhd-lhu-d7j" class="tr"><td data-tag="td" id="td-3o9-b21-s8o" class="td"><p id="p-qol-qng-jp4">outline_name</p></td><td data-tag="td" id="td-c3g-pja-r9p" class="td"><p data-tag="p" id="p-zpt-nka-zmi" class="p">指定要创建的 OUTLINE 名称。</p></td></tr><tr data-tag="tr" id="tr-j21-6k7-ors" class="tr"><td data-tag="td" id="td-wmv-wd9-6ji" class="td"><p id="p-of2-hzv-y7w">OR REPLACE</p></td><td data-tag="td" id="td-4w6-iev-1wn" class="td"><p data-tag="p" id="p-2m9-1vp-8fc" class="p">指定 OR REPLACE 后,如果要创建的 OUTLINE 已存在,则会替换原有的 OUTLINE。</p></td></tr><tr data-tag="tr" id="tr-mhj-c7o-kk3" class="tr"><td data-tag="td" id="td-d27-z21-qi6" class="td"><p id="p-816-f1d-27k">stmt</p></td><td data-tag="td" id="td-434-abu-zll" class="td"><p id="p-zas-9qa-al2">一般为一个带有 hint 和原始参数的 DML 语句。</p></td></tr><tr data-tag="tr" id="tr-wfi-c4t-45q" class="tr"><td data-tag="td" id="td-h40-v75-323" class="td"><p id="p-pj8-265-woc">TO target_stmt</p></td><td data-tag="td" id="td-k0i-bej-0al" class="td"><p data-tag="p" id="p-uzi-ver-yq3" class="p">如果不指定 TO target_stmt, 则表示如果数据库接受的SQL参数化后与stmt去掉hint参数化文本相同,则将该SQL绑定stmt中hint生成执行计划;如果期望对含有hint的语句进行固定计划,则需要 TO target_stmt 来指明原始的SQL。</p><div type="notice" id="note-wcg-3c3-b1d" class="note note-notice"><div class="note-icon-wrapper"><i class="icon-note note notice"></i></div><div class="noteContentSpan"><strong>注意 </strong><p data-tag="p" id="p-qbx-pny-42v" class="p">在使用target_stmt时,严格要求stmt与target_stmt在去掉hint后完全匹配。</p></div></div></td></tr><tr data-tag="tr" id="tr-z38-j32-da9" class="tr"><td data-tag="td" id="td-xdd-hjx-f2t" class="td"><p id="p-ax8-hnd-iba">sql_id</p></td><td data-tag="td" id="td-0al-2nk-ovk" class="td"><p id="p-bim-h3v-apy">如果sql_id对应的SQL语句已经有hint,则创建OUTLINE指定的hint会覆盖原始语句中所有hint。</p></td></tr><tr data-tag="tr" id="tr-98b-6tw-6y8" class="tr"><td data-tag="td" id="td-ck7-c0b-1t5" class="td"><p data-tag="p" id="p-w9q-0dq-mf5" class="p">hint</p></td><td data-tag="td" id="td-4h8-sd6-9zj" class="td"><p data-tag="p" id="p-2zq-bgn-ocm" class="p">格式为 /*+ xxx */ 。</p></td></tr></tbody></table> ## 示例 * 使用 SQL\_TEXT 创建 OUTLINE ~~~ CREATE OUTLINE otl_idx_c2 ON SELECT/*+ index(t1 idx_c2)*/ * FROM t1 WHERE c2 = 1; ~~~ * 使用 SQL\_ID 创建 OUTLINE ~~~ CREATE OUTLINE otl_idx_c2 ON "ED570339F2C856BA96008A29EDF04C74" USING HINT /*+ index(t1 idx_c2)*/ ; ~~~ ## 注意事项 使用 SQL\_TEXT 方式创建的 OUTLINE 会覆盖 SQL\_ID 方式创建的 OUTLINE,SQL\_TEXT 方式创建的优先级高。