0

私はスキーマを持っています

テーブル、ビュー、シノニム、プロシージャ、および関数があります。

この関数から物事を選択しているクエリがありますが、それがどのように行われているのかわかりません。

誰か助けてくれませんか

クエリは非常に複雑ですが、ここでは単純なバージョンのクエリを示します。ビューから何かを選択し、関数からいくつかを選択しています。

Select 
       d.test1,
       d.test2,
       d.test3,
       d.test4,
       f.test4,
       f.test5
from TABLE(some_FN_currentevents(
      ?orgkey::0?,
      ?assettypekey::0?,
      ?nonflag?::null?,
      ?disflsg?::null?,
      ?devflag?:null?,
      ?wrkflag?:nmull?
)) t
 JOIN some_vw_fact_det d on t.intval = d.test4
 join so_vw_flat_dim f on d.test9 = f.orgkey 

some_FN_currentevents
はスキーマの関数にあります。
some_vw_fact_det はスキーマで表示されます。
so_vw_flat_dim もスキーマのビューです。
関数とビューがここまたは独自の例でどのように使用されているかについての例が必要です。

4

2 に答える 2

1

ここでの質問が何であるかは完全にはわかりませんが、関数がテーブルを返すようにする方法について書きます。

Oracle では、PIPELINEDを返す関数を作成することができますTABLE。これを機能させるには、いくつかの簡単な手順があります。

  1. TABLEデータ型を作成します。
  2. 作成しPIPELINEDたテーブル データ型を返す関数を作成します。
  3. 関数呼び出し内で、PIPE ROW(x);返されるテーブルに行を追加します。
  4. 次の形式の SQL ステートメントで関数を呼び出します。SELECT * from TABLE(my_function(params));

ドキュメントを探している場合は、件名の Oracle ドキュメントを参照するか、このAskTom ページを参照してください。

これで質問に答えられない場合は、質問を編集して、求めていることをもう少し明確にすることができます。

于 2013-05-29T22:51:08.413 に答える
1

これを置き換えます:

TABLE(some_FN_currentevents(
      ?orgkey::0?,
      ?assettypekey::0?,
      ?nonflag?::null?,
      ?disflsg?::null?,
      ?devflag?:null?,
      ?wrkflag?:nmull?
)) t

これのために

TABLE(select some_FN_currentevents(
      ?orgkey::0?,
      ?assettypekey::0?,
      ?nonflag?::null?,
      ?disflsg?::null?,
      ?devflag?:null?,
      ?wrkflag?:nmull?
) from dual) t

この変更は、関数が oracle テーブル型を返す場合に機能します。この関数が型を返さない場合、このクエリを機能させることはできません。

于 2013-05-29T18:50:32.733 に答える