我有以下问题。我是一位经验丰富的 Java 程序员,但在 SQL 和 PL/SQL 方面有点不熟练。
我需要执行以下操作。
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;