如何使用 PL/SQL 在 Oracle Report Builder 上获取多行结果?
How to get multiple row result on Oracle Report Builder using PL/SQL?
我想要 return 与我在报表生成器中的 sql 开发人员得到的结果相同,每当我在报表生成器中使用相同的查询时,它仅 returning使用 PL/SQL 的一行或结果。请帮我解决这个问题。
我有 table 如下所示:需要在报表生成器上逐一获取 'name' 列结果或跨页打印。
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 查询 return 姓名。这是没有循环的。
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;
此代码returns:
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 开发者中,这将 return 下面:
anonymous block completed
JACKSON
JOHN
DEXIE
MITHUN
我在 Oracle Report Builder 中尝试使用 return 而不是 DBMS_OUTPUT.PUT_LINE
,但它 returning 如下所示:
anonymous block completed
JACKSON
在 sql 开发人员上执行时的第二个块给我所有记录,其中 job = clerk 但在报表生成器中它没有给我正确的结果。在 Report Builder 中,它应该给出 4 行,但它的 returning 只有一行。所以我需要知道如何在 Report Builder 上获取这 4 行。
请帮我解决这个问题。
修改代码后解决了这个问题:
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;
我想要 return 与我在报表生成器中的 sql 开发人员得到的结果相同,每当我在报表生成器中使用相同的查询时,它仅 returning使用 PL/SQL 的一行或结果。请帮我解决这个问题。
我有 table 如下所示:需要在报表生成器上逐一获取 'name' 列结果或跨页打印。
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 查询 return 姓名。这是没有循环的。
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;
此代码returns:
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 开发者中,这将 return 下面:
anonymous block completed
JACKSON
JOHN
DEXIE
MITHUN
我在 Oracle Report Builder 中尝试使用 return 而不是 DBMS_OUTPUT.PUT_LINE
,但它 returning 如下所示:
anonymous block completed
JACKSON
在 sql 开发人员上执行时的第二个块给我所有记录,其中 job = clerk 但在报表生成器中它没有给我正确的结果。在 Report Builder 中,它应该给出 4 行,但它的 returning 只有一行。所以我需要知道如何在 Report Builder 上获取这 4 行。
请帮我解决这个问题。
修改代码后解决了这个问题:
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;