【问题标题】:using cursor how can i display this on dbms_output.put_line?使用光标如何在 dbms_output.put_line 上显示它?
【发布时间】:2018-02-01 06:12:13
【问题描述】:
select distinct tbl2.id, tbl1.year
from table1 tbl1 join table2 tbl2
on(tbl1.tbl2id = tbl2.id)

这是这个查询的输出

ID     YEAR    
1      2001   
1      2002    
2      1995   
2      1996

但我想要的输出是这样的

1 - 2001, 2002     
2 - 1995, 1996

【问题讨论】:

    标签: sql oracle plsql oracle11g


    【解决方案1】:

    不使用游标和PLSQL,您可以使用LISTAGG:

    select id || ' - ' || listagg(year, ', ') within group (order by year)
    from (
            yourQuery
          )
    group by id   
    

    【讨论】:

      【解决方案2】:

      您可以按照以下方式进行操作。首先可以使用LISTAGG获取comma分隔的格式的数据,然后循环运行;

      Declare
      
      Cursor xyz is 
                select  tbl2.id,listagg(tbl1.year,',') within group (ORDER BY tbl1.id) 
               from table1 tbl1 
                join table2 tbl2
               on tbl1.id = tbl2.id
               group by tbl2.id 
               order by 1 ;
      
      var1 number;    
      var2 varchar2(100);
      
      begin
      
       Open xyz;
       Loop
        fetch xyz into var1, var2;
      
        EXIT WHEN XYZ%NOTFOUND;
      
        DBMS_OUTPUT.PUT_LINE('ID-'|| var1 || 'YEAR-' ||var2);
      
        END Loop;
      
        close xyz;
      End;
      

      DEMO

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-13
        • 1970-01-01
        • 2021-08-28
        相关资源
        最近更新 更多