1

次のように、Oracleプロシージャ(または可能であればOracleパッケージでも)で再利用したいパラメータ化された(動的)クエリが1つあります。

cursor q (p1 integer, p2 integer, p3 ...) as
select .... from .... where col1 = p1 and col2 = p2 and ....

後で後続のクエリでこのようなことを行います

select ... 
from t1, t2, ..., q (a, b, c)
where q.c1 = t1.tc1
and q.c2 = t2.tc2
....


select ... 
from n1, n2, ..., q (a, b, c)
where q.c1 = n1.tc1
and q.c2 = n2.tc2
....

クエリが静的だった場合、私はVIEWSを使用しましたが、そうではありません..多くの追加オブジェクトを埋めて使用する代わりに、他の簡単な方法はありますか?

4

4 に答える 4

2

ここで AskTom で説明されている「パラメーター化されたビュー」アプローチを使用してみてください。

于 2012-04-12T09:54:23.270 に答える
2

パラメーター化されたビューのタイプを作成するには、以前の記事で詳しく説明したように、パイプライン関数を使用できます。パイプライン化された関数の使用には制限がありますが、Oracle はその機能 (関数キャッシュや並列実行など) を常に追加しています。

詳細については、例を含む優れた記事については、こちらを参照してください。

もちろん、状況に合わせてパフォーマンスをテストしてください。個人的には、単純な SQL の代わりに大量の関数を作成することに夢中になることはありませんが、それらには適切な場所があります。

于 2012-04-12T11:12:09.787 に答える
1

パラメータ化されたカーソルをパッケージで定義し、必要な場所から参照できます。

http://docs.oracle.com/cd/B14117_01/appdev.101/b10807/09_packs.htm#i7454

于 2012-04-12T11:28:57.140 に答える
1

何かが足りないかもしれませんが、ビューを次のように作成してみませんか。

create view q as
select .... from .... 

つまり、WHERE 句に 3 つのパラメータがありません ( where col1 = p1 and col2 = p2 and col3 = p3)

次に、ビューを使用するときに 3 つの「パラメーター」を適用します。

select ... 
from t1, t2, ..., q
where q.c1 = t1.tc1
and q.c2 = t2.tc2
and col1 = p1 and col2 = p2 and col3 = p3
....


select ... 
from n1, n2, ..., q
where q.c1 = n1.tc1
and q.c2 = n2.tc2
and col1 = p1 and col2 = p2 and col3 = p3
....
于 2012-04-12T10:50:21.763 に答える