クエリ変換Hint(Stmt Transform Hint)は、SQLクエリ内で特定のクエリ変換操作を制御することを許可します。
Hintタイプ |
説明 |
|---|---|
NO_REWRITE |
クエリのいかなる形式のリライトも禁止します。 |
NO_REWRITE Hint
NO_REWRITE Hintは、クエリ内でのリライトを禁止するために使用されます。このHintを使用すると、影響を受けるクエリブロック(Query Block)は、いかなるクエリリライト操作にも参加しません。
構文説明
/*+ NO_REWRITE [ ( [ @ qb_name ] ) ] */
パラメータの説明
@qb_name:オプションです。NO_REWRITEプロパティを適用するクエリブロック名を指定するために使用します。クエリブロック名が指定されていない場合、HintはSQLステートメント全体に影響します。
例
-- 以下のクエリでは、NO_REWRITE Hintが追加されているため、ビュー結合のリライトは行われません。
SELECT /*+ NO_REWRITE */ * FROM (SELECT * FROM t1);
NO_REWRITE Hintはクエリのリライトを禁止するために使用されますが、他のクエリリライトHintと組み合わせて使用することで、特定のタイプのクエリリライトを許可することができます。例えば、内部クエリブロックで MERGE Hintを使用することで、外部クエリブロックで NO_REWRITE Hintを使用していても、ビュー結合のリライトを指定できます。
-- 外部クエリはNO_REWRITE Hintを使用しているため、自動リライトは行われません
SELECT /*+ NO_REWRITE */
*
FROM
(SELECT /*+ MERGE */ * FROM t1) -- 内部クエリはMERGE Hintを使用しており、ビュー結合のリライトを強制的に実行します
WHERE
t1.column1 = 'somevalue';