如何在jasperreport中使用存储过程

如何在jasperreport中使用存储过程

Jasper Report 不能直接调用oracle的存储过程,因为存储过程不能返回标准的
sql结果集。作为一个替代解决方法,可以使用函数来从存储过程获取结果集。
为了能够用函数来获取存储过程的结果集,需要使用到临时表来暂存结果,然后
返回table类型的结果。
下面是示例步骤,供参考:
1. 创建临时表:
第一步,创建临时表暂存存储过程结果,这样Jasper Report就能够使用标准
sql通过存储函数来查询结果。创建临时表语句:
[color=indigo]CREATE GLOBAL TEMPORARY TABLE “TEMP_PRESIDENTS” (
ID NUMBER(10) not null,
NAME VARCHAR(32) not null,
BIRTHDATE DATE not null,
PARTY char(1) not null
) ON COMMIT PRESERVE ROWS[/color]

2 创建存储过程
创建存储过程来处理获得所需数据。语句如下:
[color=indigo]CREATE PROCEDURE “LOAD_TEMP_PRESIDENTS” (
partyParam CHAR )
as
begin
EXECUTE IMMEDIATE ‘TRUNCATE TABLE TEMP_PRESIDENTS’;
COMMIT;

INSERT INTO TEMP_PRESIDENTS
SELECT ID, NAME, BIRTHDATE, PARTY FROM PRESIDENTS WHERE PARTY = partyParam;
COMMIT;
end;
[/color]

3. 测试存储过程:
[color=indigo] call LOAD_TEMP_PRESIDENTS(‘D’);
select * from TEMP_PRESIDENTS;[/color]

4. 创建返回类型:
该返回类型用来从临时表返回结果。这个类型就是你在Jasper Report里面所描述的结果信息。
[color=indigo]CREATE OR REPLACE TYPE “PRESIDENT_TYPE” AS OBJECT (
ID NUMBER(10),
NAME VARCHAR2(32),
BIRTHDATE DATE,
PARTY CHAR(1)
)[/color]

5. 创建表类型
这一步骤,我们基于上一步创建表类型。 这个“表”就是我们在Jasper Report里面做查询的那个表。这不是一个真实的表。
[color=indigo]CREATE OR REPLACE TYPE “PRESIDENT_TYPE_TABLE” AS TABLE OF “PRESIDENT_TYPE”[/color]

6. 创建存储函数
[color=indigo]CREATE OR REPLACE FUNCTION “PRESIDENTS_FUNC” (
partyParam CHAR
)
return PRESIDENT_TYPE_TABLE pipelined
is
PRAGMA AUTONOMOUS_TRANSACTION;

TYPE ref0 is REF CURSOR;
myCursor ref0;
out_rec PRESIDENT_TYPE := PRESIDENT_TYPE(0, null, null, null);

BEGIN
LOAD_TEMP_PRESIDENTS(partyParam);

open myCursor for
select id,
name,
birthdate,
party
from TEMP_PRESIDENTS;

LOOP FETCH myCursor into
out_rec.ID,
out_rec.NAME,
out_rec.BIRTHDATE,
out_rec.PARTY;

EXIT WHEN myCursor%NOTFOUND;
PIPE ROW(out_rec);
END LOOP;
CLOSE myCursor;

RETURN;
END;[/color]

7. 测试并使用存储函数
[color=indigo]select * from table(PRESIDENTS_FUNC(‘D’))[/color]

通过以上步骤,我们就可以在Jasper Report里面使用了基于存储过程的标准查询了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值