【问题标题】:Cursor inside loop is returning only last record循环内的光标仅返回最后一条记录
【发布时间】:2017-08-24 07:04:55
【问题描述】:

我正在尝试从 table1 中获取 ID,并根据检索到的 ID 从 table2 中选择数据。所以我打开了一个 cursor1 来检索这些 ID,然后我尝试遍历它并用 table2 的详细信息填充 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 新手,感谢您的帮助。

【问题讨论】:

    标签: mysql oracle


    【解决方案1】:

    您不需要第一个光标。在第一个和第二个表之间进行简单连接。

    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;
    

    【讨论】:

    • 感谢您的回复,现在一切正常
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 2011-10-12
    • 2018-02-27
    相关资源
    最近更新 更多