0

私は3つの機能を持っています:-

select function1(param1) from dual;
select function2(param2) from dual;
select function3(param3) from dual;

1パックで3個使いたいです。

Create or replace package body PACKAGE_ABC

as procedure proc_abc(param1 varchar,param2 varchar,param3 varchar)

as 

cursor cur1
is 
select meaning from
table1
where meaning=(select function1(param1) from dual)

cursor cur2
is 
select meaning from
table2
where meaning=(select function2(param2) from dual)

cursor cur3
is 
select meaning from
table3
where meaning=(select function3(param3) from dual)

Begin
for cursor_var in cur1
loop
fnd_output.put_line(cursor_var.meaning )
end loop;
for cursor_var2 in cur2
loop
fnd_output.put_line(cursor_var2.meaning )
end loop;

for cursor_var3 in cur3
loop
fnd_output.put_line(cursor_var3.meaning )
end loop;

end proc_abc;
end package_abc;

とにかく、1つのforループで3つの関数を使用できます..... 3つのカーソルselectステートメントは同じテーブルを使用しますが、差分値をフェッチしています

4

1 に答える 1

0

私が質問を理解しているなら、あなたはあなたの質問をただしたいように聞こえます

SELECT meaning
  FROM table1
 WHERE meaning IN (function1(param1), function2(param2), function3(param3))

もちろん、これにはいくつかの問題があります

  • 投稿したコードparam1では、、、param2およびparam3はすべて宣言されていません。したがって、これをコンパイルしようとすると、構文エラーが発生します。
  • 列のみを選択していて、meaning列をフィルタリングしている場合は、クエリでmeaning参照する理由はありません。table1から関数呼び出しの結果を選択するだけですdual
于 2013-03-20T17:37:38.510 に答える