如何使用PL/SQL在Oracle报表生成器上获得多行结果?

如何使用PL/SQL在Oracle报表生成器上获得多行结果?,oracle,plsql,cursor,output,reportbuilder,Oracle,Plsql,Cursor,Output,Reportbuilder,我希望返回与报表生成器中的sql developer相同的结果,每当我在报表生成器中使用相同的查询时,它只返回一行或使用PL/sql的结果。请帮我做这个 我有如下表格:需要在报表生成器上逐个获取“名称”列结果,或者打印出来 select * from emp; SL NAME CITY PHONE JOB ---- ----------- ----------- ----------- ------------- 1 PRADEEP

我希望返回与报表生成器中的sql developer相同的结果,每当我在报表生成器中使用相同的查询时,它只返回一行或使用PL/sql的结果。请帮我做这个

我有如下表格:需要在报表生成器上逐个获取“名称”列结果,或者打印出来

select * from emp;

 SL    NAME         CITY        PHONE     JOB    
---- ----------- ----------- ----------- -------------
 1    PRADEEP     MANGALORE   66455466    MANAGER         
 2    PRASHANTH   UDUPI       553453      PRESIDENT       
 3    NELSON      MOODABIDRE  255343      A MANAGER       
 4    JACKSON     KAUP        234534663   CLERK           
 5    JOHN        MANGALORE   9947848     CLERK           
 6    DEXIE       MANGALORE   122324324   CLERK           
 7    SUKESH      KAUP        44266373    LINE MANAGER    
 8    YASER       TAMILNADU   4423424     PRESIDENT       
 9    MITHUN      KASARAGOD   3234242     CLERK           
 10   ABU         AJMAN       54636673    SUPERVISOR   

10 rows selected
现在我有了一个只返回名称的pl/sql查询。这是没有循环的

SET SERVEROUTPUT ON

DECLARE
  CURSOR C1 IS SELECT NAME FROM EMP WHERE JOB = 'CLERK';
  JOBS VARCHAR2(2000);
  RES VARCHAR2(2000);
BEGIN 
  OPEN C1;
  FETCH C1 INTO JOBS;
  CLOSE C1;

  RES := JOBS;
  DBMS_OUTPUT.PUT_LINE(RES);
END;
此代码返回:

anonymous block completed

JACKSON
如果我使用return将此应用于报表生成器(DOPL在Oracle报表生成器上不起作用,因此使用return),此块将给出与上述相同的结果

将尝试循环(这一步对我来说非常重要)

在SQL Developer中,这将返回以下结果:

anonymous block completed

JACKSON
JOHN
DEXIE
MITHUN
我在Oracle Report Builder中尝试使用return而不是
DBMS\u OUTPUT.PUT\u LINE
,但返回如下:

anonymous block completed

JACKSON
 SET SERVEROUTPUT ON

        DECLARE
          CURSOR C1 IS SELECT NAME FROM EMP WHERE JOB = 'CLERK';
          JOBS VARCHAR2(2000);
          RES VARCHAR2(2000);

      n1 number default null;
    BEGIN 
      OPEN C1;

      LOOP
      if n1 is null  then 
        FETCH C1 INTO JOBS;
        EXIT WHEN c1%NOTFOUND;
        res := jobs||chr(10);
         else 
      res:= res||chr(10)||jobs;
    end if;
    DBMS_OUTPUT.PUT_LINE(res);
      END LOOP;
      CLOSE C1;
    END;
在sql developer上执行第二个块时,会给出job=clerk的所有记录,但在报表生成器中,它不会给出正确的结果。在报表生成器中,它应该给出4行,但只返回一行。所以我需要知道如何在报表生成器上获得这4行


请帮我解决这个问题

在我修改代码后解决了这个问题,如下所示:

anonymous block completed

JACKSON
 SET SERVEROUTPUT ON

        DECLARE
          CURSOR C1 IS SELECT NAME FROM EMP WHERE JOB = 'CLERK';
          JOBS VARCHAR2(2000);
          RES VARCHAR2(2000);

      n1 number default null;
    BEGIN 
      OPEN C1;

      LOOP
      if n1 is null  then 
        FETCH C1 INTO JOBS;
        EXIT WHEN c1%NOTFOUND;
        res := jobs||chr(10);
         else 
      res:= res||chr(10)||jobs;
    end if;
    DBMS_OUTPUT.PUT_LINE(res);
      END LOOP;
      CLOSE C1;
    END;

那么你是说第一个游标块返回了错误的数据?没有sathya第一个游标也返回了正确的数据。在这里,我没有使用循环,所以它返回第一行。现在我关心的是第二个块。没有sathya第一个游标也返回正确的一个。在这里,我没有使用循环,所以它返回第一行。现在,我关心的是在sql developer上执行的第二个块,它提供了job=clerk的所有记录,但在报表生成器中,它并没有给我正确的结果。在报表生成器中,它应该给出4行,但只返回一行。因此,我需要知道如何在报表生成器上获得这4行。如果使用while循环,是否会得到正确的结果?我正在本地测试您的场景,并将告诉您我得到了什么