次の問題があります。私は経験豊富なJavaプログラマーですが、SQLおよびPL/SQLでは少しn00bです。
私は次のことをする必要があります。
1いくつかの配列と他のいくつかの変数をプロシージャに渡します
2配列の値をループし(すべて同じ数の項目があります)、SQLステートメントを動的に作成します
3このステートメントを実行し、結果セット(プロシージャーのOUTパラメーター)に追加します。
SQLクエリをその場で作成し、実行して結果を結果セット(REF CURSOR)に追加した経験はすでにありますが、ループして各呼び出しの結果をに追加する方法がわかりません。同じ結果セットにクエリを実行します。これが可能かどうかさえわかりません。
これが私がこれまでに持っているものです(簡単にするためにコードを編集しました)。RESULT_SETの内容を最新のクエリ結果に置き換えているだけなので、間違っていることがわかります(これは、このプロシージャを呼び出しているJavaで確認されています)。
ありとあらゆる助けをいただければ幸いです。
TYPE REF_CURSOR IS REF CURSOR;
PROCEDURE GET_DATA_FASTER(in_seq_numbers IN seq_numbers_array, in_values IN text_array, in_items IN text_array, list IN VARCHAR2, RESULT_SET OUT REF_CURSOR) AS
query_str VARCHAR2(4000);
seq_number NUMBER;
the_value VARCHAR2(10);
the_item VARCHAR2(10);
BEGIN
FOR i IN 1..in_seq_numbers.COUNT
LOOP
seq_number := in_seq_numbers(i);
the_value := trim(in_values(i));
the_item := trim(in_items(i));
query_str := 'SELECT distinct '||seq_number||' as seq, value, item
FROM my_table ai';
query_str := query_str || '
WHERE ai.value = '''||the_value||''' AND ai.item = '''||the_item||'''
AND ai.param = ''BOOK''
AND ai.prod in (' || list || ');
OPEN RESULT_SET FOR query_str;
END LOOP;
EXCEPTION WHEN OTHERS THEN
RAISE;
END GET_DATA_FASTER;