我正在尝试从table1获取ID,并根据检索到的ID从table2中选择数据。所以我打开了一个cursor1来检索那些ID,然后我试着遍历它并用cursor2的细节填充cursor2。调试时我意识到cursor1被正确填充,循环工作正常,但只返回最后一条记录。以下是我的oracle程序:
PROCEDURE TEST_LIST(P_ITEM_ID NUMBER,
P_REFCUR OUT SYS_REFCURSOR) AS
BEGIN
DECLARE CURSOR V_REFCUR is
SELECT T.ID
FROM MY_TABLE_NAME T
WHERE T.ITEM_ID = P_ITEM_ID;
BEGIN
FOR V IN V_REFCUR LOOP
IF V.ID IS NOT NULL THEN
OPEN P_REFCUR FOR
SELECT G.*
FROM MY_SECOND_TABLE G
WHERE G.ID = V.ID
ORDER BY G.TABLE_DATE;
END IF;
END LOOP;
END;
END TEST_LIST;
如何归还整个清单?我是SQL新手,感谢您的帮助。
答案 0 :(得分:0)
您不需要第一个光标。在第一个和第二个表之间进行简单连接。
PROCEDURE TEST_LIST(P_ITEM_ID NUMBER,
P_REFCUR OUT SYS_REFCURSOR) AS
BEGIN
OPEN P_REFCUR FOR
SELECT G.*
FROM MY_SECOND_TABLE G
join MY_TABLE_NAME T
on G.ID = T.ID
WHERE T.ITEM_ID = P_ITEM_ID
ORDER BY G.TABLE_DATE;
END;
END TEST_LIST;