我正在尝试从 table1 中获取 ID,并根据检索到的 ID 从 table2 中选择数据。所以我打开了一个cursor1来检索这些ID,然后我尝试循环它并用table2的详细信息填充cursor2。调试时,我意识到光标1已正确填充,循环工作正常,但仅返回最后一条记录。下面是我的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 新手,感谢您的帮助。
最佳答案
您不需要第一个光标。在第一个表和第二个表之间进行简单的连接。
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;
关于mysql - 循环内的光标仅返回最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45855051/