説明
このステートメントは、SQL_TEXT を使用して作成されたアウトラインにのみ適用されます。バインディングアウトラインとレートリミットルールを追加するために使用できます。
構文
ALTER OUTLINE outline_name ADD stmt [ TO target_stmt ]
パラメータの説明
| パラメータ | 説明 |
|---|---|
| outline_name | 変更するアウトラインの名前を指定します。 |
| stmt | 一般的には、Hintと元のパラメータを含むDMLステートメントです。 |
| TO target_stmt | TO target_stmt を指定しない場合、データベースが受け入れるSQLがパラメータ化されてstmtからHintパラメータ化テキストを除いたものと同じである場合、そのSQLはstmt内のHintを用いて実行計画を生成してバインドされます。Hintを含むステートメントに対して固定計画を期待する場合は、元のSQLを指定するためにTO target_stmtが必要です。注意 target_stmtを使用する際は、stmtとtarget_stmtがHintを除いた後に完全に一致することが厳密に求められます。 |
例
ALTER OUTLINEを使用してレートリミットルールを追加します。obclient> CREATE TABLE tbl1 (col1 NUMBER, col2 NUMBER); obclient> CREATE OUTLINE outline1 ON SELECT /*+max_concurrent(1)*/ * FROM tbl1 WHERE col1 =1 AND col2 = 1; obclient> ALTER OUTLINE outline1 ADD SELECT /*+max_concurrent(1)*/ * FROM tbl1 WHERE col1 =1 AND col2 = ?; obclient> ALTER OUTLINE outline1 ADD SELECT /*+max_concurrent(1)*/ * FROM tbl1 WHERE col1 =? AND col2 = 1;同一のシグネチャで複数のレートリミットステートメントを作成できます。
obclient> CREATE TABLE tbl2 (col1 NUMBER, col2 NUMBER); obclient> CREATE OUTLINE olt_2 ON SELECT /*+max_concurrent(1)*/ c2,c1 FROM t1 WHERE c1 > 3 AND c2 = 1; obclient> ALTER OUTLINE olt_2 ADD SELECT /*+max_concurrent(2)*/ c2,c1 FROM t1 WHERE c1 > ? AND c2 = 1; obclient> ALTER OUTLINE olt_2 ADD SELECT /*+max_concurrent(2)*/ c2,c1 FROM t1 WHERE c1 > ? AND c2 = 2; obclient> ALTER OUTLINE olt_2 ADD SELECT /*+max_concurrent(0)*/ c2,c1 FROM t1 WHERE c1 > ? AND c2 = 3;
注意事項
同一の
outline_nameに対して実行計画は1つしか指定できません。CREATE OUTLINEステートメントで実行計画が指定されている場合、ALTER OUTLINEの実行時に追加することはできません。CREATE OUTLINEと同様に、ALTER OUTLINEの際にはレートリミットルールと実行計画を同時に指定することはできません。ALTER OUTLINEを実行する際には、outline_nameとsignatureが同時に一致している必要があります。