┮龅牙哥┱ ┮龅牙哥┱
慎独
关注数: 3 粉丝数: 249 发帖数: 1,484 关注贴吧数: 5
报表开发经验之如何在jasperreport中使用存储过程 Jasper Report 不能直接调用oracle的存储过程,因为存储过程不能返回标准的 sql结果集。作为一个替代解决方法,可以使用函数来从存储过程获取结果集。 为了能够用函数来获取存储过程的结果集,需要使用到临时表来暂存结果,然后 返回table类型的结果。 下面是示例步骤,供参考: 1. 创建临时表: 第一步,创建临时表暂存存储过程结果,这样Jasper Report就能够使用标准 sql通过存储函数来查询结果。创建临时表语句: 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 2 创建存储过程 创建存储过程来处理获得所需数据。语句如下: 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 PRESIDENTSWHERE PARTY = partyParam; COMMIT; end; 3. 测试存储过程: call LOAD_TEMP_PRESIDENTS(‘D’); select * from TEMP_PRESIDENTS; 4. 创建返回类型: 该返回类型用来从临时表返回结果。这个类型就是你在JasperReport里面所描述的结果信息。 CREATE OR REPLACE TYPE “PRESIDENT_TYPE” AS OBJECT ( ID NUMBER(10), NAME VARCHAR2(32), BIRTHDATE DATE, PARTY CHAR(1) ) 5. 创建表类型 这一步骤,我们基于上一步创建表类型。这个“表”就是我们在Jasper Report里面做查询的那个表。这不是一个真实的表。 CREATE OR REPLACE TYPE “PRESIDENT_TYPE_TABLE” ASTABLE OF “PRESIDENT_TYPE” 6. 创建存储函数 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; 7. 测试并使用存储函数 select * from table(PRESIDENTS_FUNC(‘D’)) 通过以上步骤,我们就可以在JasperReport里面使用了基于存储过程的标准查询了。 -------InSigma_Hengtian_reporting(XZW)
1 下一页