循环内的游标仅返回最后一条记录

时间:2017-08-24 07:04:55

标签: mysql oracle

我正在尝试从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新手,感谢您的帮助。

1 个答案:

答案 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;