【问题标题】:How to get multiple row result on Oracle Report Builder using PL/SQL?如何使用 PL/SQL 在 Oracle Report Builder 上获得多行结果?
【发布时间】:2016-01-07 10:17:14
【问题描述】:

我想返回与报表生成器中的 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 Report Builder 上工作,因此使用 RETURN)此块将给我与上述相同的结果。

会尝试循环(这一步对我来说很重要)

SET SERVEROUTPUT ON

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

  LOOP
    FETCH C1 INTO JOBS;
    EXIT WHEN c1%NOTFOUND;

    res := jobs;
    DBMS_OUTPUT.PUT_LINE(res);
  END LOOP;

  CLOSE C1;
END;

在 SQL Developer 中,这将返回如下:

anonymous block completed

JACKSON
JOHN
DEXIE
MITHUN

我在 Oracle Report Builder 中尝试使用 return 而不是 DBMS_OUTPUT.PUT_LINE,但它返回如下:

anonymous block completed

JACKSON

在 sql developer 上执行时的第二个块为我提供了 job = clerk 的所有记录,但在报告生成器中它没有给我正确的结果。在报表生成器中,它应该给出 4 行,但它只返回一行。所以我需要知道如何在报表生成器上获取这 4 行。

请帮我解决这个问题。

【问题讨论】:

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

标签: oracle plsql cursor output reportbuilder


【解决方案1】:

在我修改代码后解决了这个问题:

 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;

【讨论】:

    猜你喜欢
    • 2018-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多