mysql - 循环内的光标仅返回最后一条记录

标签 mysql oracle

我正在尝试从 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/

相关文章:

oracle - 查询 Oracle 运行 sql 和绑定(bind)变量的值

sql - 在 Oracle 11g 中,你如何计算两个日期之间每小时的平均数据时间?

php - 从 MySql 在 php 中创建 GeoJson 以与 MapBox javascript API 一起使用

mysql - 用MYSQL获取最长的字符串

PHPExcel - 如何将边框应用于从 mysql 数据加载的动态单元格范围

sql - Oracle加入-常规语法VS ANSI语法之间的比较

SQL如何仅连接第一个匹配行

mysql - 为什么 GROUP BY with LEFT JOIN 会改变这个 MySQL 查询的结果?

php - Codeigniter/MYSQL 对每个州的城市进行分组

oracle - 获取 ORA-01031 : insufficient privileges while querying a table instead of ORA-00942: table or view does not exist