ireport oracle,用ireport调用oracle存储过程

ireport不能直接调用oracle存储过程的结果集,因为存储过程不能返回标准的结果集。在oracle中作为解决方案,你可以使用存储函数来得到存储过程的结果集。

CREATE GLOBAL TEMPORARY TABLE TEMP_DATA(

create_date DATE,

case_id VARCHAR2(30),

division_a NVARCHAR2(50),

division_name NVARCHAR2(50),

case_type NVARCHAR2(255),

case_stage_2 VARCHAR2(20),

case_stage_3 VARCHAR2(20),

case_stage_4 VARCHAR2(20),

transaction_remark NVARCHAR2(255)

) ON COMMIT PRESERVE ROWS

CREATE OR REPLACE PROCEDURE LOAD_TEMP_DATA

as

TYPE cur is REF CURSOR;

myCursor cur;

create_date DATE;

case_id VARCHAR2(30);

division_a NVARCHAR2(50);

division_name NVARCHAR2(50);

case_type NVARCHAR2(255);

case_stage VARCHAR2(2);

case_assignee VARCHAR2(255);

transaction_remark NVARCHAR2(255);

begin

EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_DATA';

COMMIT;

OPEN myCursor FOR

select

table1.create_date, table1.case_id,

table2.division_name,

table1.division_name,

table3.description c_type,

table1.case_stage, table1.case_assignee,

table1.transaction_remark

from

(select

cm.create_date, cm.case_id, dt.division_name, dt.division_parent_id, cm.case_type,

ct.transaction_id, ct.case_stage, ct.case_action, ct.transaction_remark, ct.case_assignee

from

com.division_type dt, com.user_master um, com.case_master cm, com.case_transaction ct

where

dt.division_id= um.division_id and cm.create_by= um.user_id and ct.case_id= cm.case_id

and ct.case_action='A5'

order by

cm.case_id, ct.transaction_id

)table1

join

(select

dt.division_id, dt.division_name

from

com.division_type dt

where

dt.division_level = 'A'

)table2 on table1.division_parent_id=table2.division_id

join

(select

p.field_value fvalue,

p.field_description description

from

com.parameter p

where

p.field_name='Case_Type'

)table3 on table1.case_type = table3.fvalue;

LOOP

FETCH myCursor INTO

create_date, case_id, division_a, division_name,

case_type, case_stage, case_assignee, transaction_remark;

EXIT WHEN myCursor%NOTFOUND;

dbms_output.put_line(case_id);

IF case_stage='S2' THEN

INSERT INTO TEMP_DATA VALUES

(

create_date, case_id, division_a, division_name,

case_type, case_assignee, '---', '---', transaction_remark

);

ELSIF case_stage='S3' THEN

INSERT INTO TEMP_DATA VALUES

(

create_date, case_id, division_a, division_name,

case_type, '---', case_assignee, '---', transaction_remark

);

ELSIF case_stage='S4' THEN

INSERT INTO TEMP_DATA VALUES

(

create_date, case_id, division_a, division_name,

case_type, '---', '---', case_assignee, transaction_remark

);

ELSE

INSERT INTO TEMP_DATA VALUES

(

create_date, case_id, division_a, division_name,

case_type, '---', '---', '---', transaction_remark

);

END IF;

COMMIT;

END LOOP;

CLOSE myCursor;

end;

--call LOAD_TEMP_DATA();

--select * from TEMP_DATA;

CREATE OR REPLACE TYPE DATA_TYPE AS OBJECT(

create_date DATE,

case_id VARCHAR2(30),

division_a NVARCHAR2(50),

division_name NVARCHAR2(50),

case_type NVARCHAR2(255),

case_stage_2 VARCHAR2(20),

case_stage_3 VARCHAR2(20),

case_stage_4 VARCHAR2(20),

transaction_remark NVARCHAR2(255)

)

CREATE OR REPLACE TYPE DATA_TYPE_TABLE AS TABLE OF DATA_TYPE

CREATE OR REPLACE FUNCTION DATAS_FUNCTION

return DATA_TYPE_TABLE pipelined

is

PRAGMA AUTONOMOUS_TRANSACTION;

TYPE cur1 is REF CURSOR;

myCursor cur1;

out_rec DATA_TYPE := DATA_TYPE(null, null, null, null, null, null, null, null, null);

BEGIN

LOAD_TEMP_DATA();

OPEN myCursor FOR

select

create_date, case_id, division_a, division_name, case_type,

case_stage_2, case_stage_3, case_stage_4, transaction_remark

from TEMP_DATA;

LOOP

FETCH myCursor INTO

out_rec.create_date, out_rec.case_id, out_rec.division_a,

out_rec.division_name, out_rec.case_type, out_rec.case_stage_2,

out_rec.case_stage_3, out_rec.case_stage_4, out_rec.transaction_remark;

EXIT WHEN myCursor%NOTFOUND;

PIPE ROW(out_rec);

END LOOP;

CLOSE myCursor;

return;

END;

select * from table(DATAS_FUNCTION());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值