【发布时间】:2020-08-11 07:47:00
【问题描述】:
我正在尝试读取从另一个存储过程返回的存储过程中的游标,并希望通过循环访问主游标数据来写入多个输出游标。
-- TYPE myCursorType IS REF CURSOR;
PROCEDURE prcgetalldetails (
incustomernumber IN customer.customer_number%TYPE,
accountdetailscur OUT pkgaccount.curaccountdetailstype,
fundscur OUT mycursortype,
otherdetailscur OUT mycursortype
) IS
localaccountdetails pkgaccount.curinvestmentaccount;
outcfunds curinvestmentaccount;
accountdetails pkgaccount.curaccountdetailstype%rowtype;
BEGIN
pkgaccount.accountdetails(incustomernumber,localaccountdetails);
LOOP
FETCH localaccountdetails INTO accountdetails;
EXIT WHEN localaccountdetails%notfound;
dbms_output.put_line(localaccountdetails.accountname
|| ','
|| localaccountdetails.accountnumber);
-- I have to return the 'accountdetailscur' as well,before that I have to loop through it and return remaining data as well
-- Based on account number I have to execute other queries and fetch other details and give those cursors back
OPEN fundscur FOR
SELECT
fundname,
fundid,
fundbalance
FROM
fundstable
WHERE
accountnumber = localaccountdetails.accountnumber;
OPEN otherdetailscur FOR
SELECT
col1,
col2
FROM
othertable
WHERE
accountnumber = localaccountdetails.accountnumber;
END LOOP;
END;
当我在循环中打开游标时,它将仅返回 localaccountdetails 游标的最后一行详细信息。我不确定如何使用 BUILK COLLECT 收集所有内容并在其上循环。
而且我不知道如何将 localaccountdetails 作为 OUT 数据返回并循环它以获取剩余数据。
【问题讨论】:
-
你打算用你的游标结果做什么?
-
Java 程序将读取所有这些游标
-
所以你需要重新考虑你是如何做到这一点的。您不能遍历游标并期望输出主查询中有许多行的游标,并期望它们全部传递给Java
-
你可能会发现你需要带上localaccountdetails游标并合并到fundscur和其他detailscur游标中,例如
select ... from fundstable f inner join <cursor's select statement> c on f.accountnumber = c.accountnumber -
pkgaccount.accountdetails 有很多逻辑可以返回 localaccountdetails 光标,所以我尝试使用相同的东西而不是复制它。
标签: sql oracle plsql database-cursor