在Oracle SQL中,如何将多个行值返回到一个游标变量中?

在Oracle SQL中,如何将多个行值返回到一个游标变量中?,sql,database,oracle,cursor,Sql,Database,Oracle,Cursor,我在oracle中有一个包,其中包含一个存储过程。它将日期作为输入,数字作为输入,并将数据输出到ref_光标中。存储过程的目的是提取与特定输入日期对应的所有“中奖号码” CREATE OR REPLACE PACKAGE GETWINNINGNUMBERSBYDATEPKG IS TYPE lotgwndate_ref_cursor IS REF CURSOR; PROCEDURE GetWinningNumbersDATE (lg_wndate IN date, lg_wnwgid

我在oracle中有一个包,其中包含一个存储过程。它将日期作为输入,数字作为输入,并将数据输出到ref_光标中。存储过程的目的是提取与特定输入日期对应的所有“中奖号码”

CREATE OR REPLACE PACKAGE GETWINNINGNUMBERSBYDATEPKG IS

TYPE lotgwndate_ref_cursor IS REF CURSOR;     
PROCEDURE GetWinningNumbersDATE (lg_wndate IN date, lg_wnwgid IN number, lg_ref OUT 
lotgwndate_ref_cursor); 

END GETWINNINGNUMBERSBYDATEPKG;    
这是包体。同样,这里的目的是提取与特定日期和“gameid”编号对应的所有“中奖号码”。然后,我想将“中奖号码”与“游戏名称”和“抽奖日期”配对。(这是从抽奖图中提取记录)

这是通话程序

SET SERVEROUTPUT ON size 100000
DECLARE 
  v_cursor               LOTTERYGAMEPKG.lotgwndate_ref_cursor;
  v_gamename             GAMEDETAILS.gamename%type;
  v_drawingdate          WINNINGRECORDS.drawingdate%type;
  v_ballnumber           WINNINGBALLS.ballnumber%type;
BEGIN
  GETWINNINGNUMBERSBYDATEPKG.GetWinningNumbersDATE(lg_wndate =>    
TO_DATE('06/08/2014','dd/mm/yyyy'), lg_wnwgid => '4', /*date/gamedetailsid #(1-4)*/
                          lg_ref => v_cursor);
LOOP                             
  FETCH v_cursor
    INTO  v_gamename, v_drawingdate, v_ballnumber;
    EXIT WHEN v_cursor%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE
    (v_gamename || ',' || v_drawingdate || ',' || v_ballnumber);
END LOOP;
 END;
这是有效的,并返回:

NorthstarCash,06-AUG-14,10
NorthstarCash,06-AUG-14,11
NorthstarCash,06-AUG-14,15
NorthstarCash,06-AUG-14,16
NorthstarCash,06-AUG-14,21
然而,我希望它能回来

NorthstarCash,06-AUG-14,10,11,15,16,21

有没有办法做到这一点?我已经研究了许多其他问题,但没有一个问题与我的问题相同。ORACLE 11g

如果使用
ORACLE 11g
,只需使用

调用者,必须修改如下

v_ballnumber           VARCHAR2(4000);

我相信你提出的问题并没有解决我问题中的通话程序部分。它只处理select语句。我正在试图找出如何将agg字符串结果放入我的call procedure语句中。不幸的是,您所期望的
FETCH
实际上必须由您编写,以附加数字并使用临时变量。。。甲骨文与此无关,谢谢。我不知道实现这一点的语法。也许你可以告诉我一个资源?@MatheswaranRavisankar当我做出你建议的更改并运行调用过程时,我得到了
ORA-01722无效号码
。有没有办法告诉调用过程希望字符串进入变量?问题是,对于您使用的
%TYPE
变量(v_ballnumber),它引用了一个
数字列。试着做一个
VARCHAR2
。谢谢!我一直想弄明白这一点很长时间了!
PROCEDURE GetWinningNumbersDATE (lg_wndate IN date, lg_wnwgid IN number, lg_ref OUT    
  lotgwndate_ref_cursor) IS
   BEGIN
    OPEN lg_ref FOR
      SELECT a.GAMENAME, b.DRAWINGDATE, LISTAGG(c.BALLNUMBER,',') WITHIN GROUP (ORDER BY c.BALLNUMBER) AS BALLNUMBER
        FROM GAMEDETAILS a
          INNER JOIN WINNINGRECORDS b
            on a.GAMEDETAILSID = b.GAMEDETAILSID 
              INNER JOIN WINNINGBALLS c
                on b.WINNINGRECORDSID = c.WINNINGRECORDSID  
        WHERE b.DRAWINGDATE = lg_wndate
      AND a.GAMEDETAILSID = lg_wnwgid
     GROUP BY a.GAMENAME, b.DRAWINGDATE;

END GetWinningNumbersDATE;
v_ballnumber           VARCHAR2(4000);