`
zpl3001
  • 浏览: 93410 次
  • 性别: Icon_minigender_1
  • 来自: baga
社区版块
存档分类
最新评论

用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());
4
0
分享到:
评论
2 楼 w156445045 2012-06-18  
请问下博主,现在最新的iReport也不能调用存储过程嘛?
iReport 4.5.1
1 楼 how 2011-10-27  
function传入参数可以吗?

相关推荐

    Ireport+oracle连接包安装资源

    在使用Ireport连接Oracle数据库时,关键在于JDBC驱动程序。Oracle JDBC驱动程序ojdbc6.jar是Oracle数据库与Java应用程序之间的桥梁,允许Java应用通过JDBC接口与Oracle数据库通信。在本资源中,提供的是ojdbc6.jar,...

    Struts2.0+JasperReport+IReport+Oracle 报表开发

    Struts2.0+JasperReport+IReport+Oracle 报表开发 整个项目打包上传,用MyEclipse导入即可调试使用 含报表文件、数据库表结构及测试数据,项目中解决了PDF中文不显示问题

    Struts2.0+JasperReport+IReport+Oracle 报表开发 2/3

    Struts2.0+JasperReport+IReport+Oracle 报表开发 整个项目打包上传,用MyEclipse导入即可调试使用 含报表文件、数据库表结构及测试数据,项目中解决了PDF中文不显示问题

    Struts2.0+JasperReport+IReport+Oracle 报表开发 3/3

    Struts2.0+JasperReport+IReport+Oracle 报表开发整个项目打包上传,用MyEclipse导入即可调试使用含报表文件、数据库表结构及测试数据,项目中解决了PDF中文

    Java调用IReport5.6需要的jar包,JDK1.7可用

    IReport 5.6是一个较旧但仍然广泛使用的版本,与JDK 1.7兼容。本主题主要围绕Java如何调用IReport 5.6进行报表生成,并涉及相关的jar包依赖。 首先,Java调用IReport 5.6的关键在于正确引入必要的jar包。这些jar包...

    java ireport jar包部署,引用,与ireport文件调用

    在Java项目中使用iReport,我们需要正确部署iReport的jar包,并在代码中正确引用,以便能够动态生成和调用报表。 1. **iReport Jar包部署**: - 下载iReport的对应版本(本例中为4.1)的jar文件,通常包括`ireport-...

    ireport报表制作(讲述ireport的整个应用过程)

    本文将详细介绍在Windows环境下使用iReport制作报表的全过程,以及如何在Web和胖客户端应用中集成Jasperreport报表控件。 **1、前言** iReport的使用教程通常只提供基础指导,缺乏全面的操作步骤,使得开发者在...

    java调用ireport生成word报告

    本文档旨在详细介绍如何使用Java语言调用iReport工具来生成Word报告的过程。主要内容包括环境搭建、数据库配置、报表设计以及Java代码实现等方面。 #### 二、环境搭建 1. **确认已安装并配置JDK** - 确保系统已经...

    Java Jsp 调用ireport动态模板打印

    Java JSP调用iReport动态模板打印是一种在Web应用程序中实现报表打印的常见技术。iReport是一款开源的报表设计工具,它可以与Java、JSP、Servlets等进行集成,为开发者提供灵活的报表生成和打印功能。在这个场景下,...

    ireport自定义报表制作使用手册

    【ireport自定义报表制作使用手册】 一、ireport简介 ireport是一款强大的报表设计工具,主要用于Java平台下的B/S系统。它支持多种数据源,包括JDBC、XML、CSV等,可以创建复杂的表格、图表、文本等元素,提供丰富...

    ireport报表制作过程

    本文将详细介绍如何使用iReport来制作报表,主要分为三个部分:一是使用iReport制作报表的详细过程;二是使用JasperReport作为报表控件开发胖客户端报表应用;三是使用JasperReport作为报表控件开发Web报表应用。...

    Ireport 用子报表调用交叉报表

    本主题将详细讲解如何利用 Ireport 实现子报表调用交叉报表的过程,以帮助你更好地理解和操作。 首先,我们需要了解什么是子报表和交叉报表。子报表是在主报表内部嵌套的一个独立报表,它可以展示与主报表相关的...

    ireport 4 饼图制作过程(-)

    本文将详细介绍如何使用iReport 4创建饼图,这是一个基于Java的开源报表设计工具,常用于JasperReports项目。iReport允许用户设计复杂的报告布局,包括表格、图表等元素,而本文的重点在于饼图的制作过程。 首先,...

    ireport和jasperreport的简单使用

    【ireport的使用】 1. **安装与配置**:首先需要从官方网站下载ireport和jasperreport的对应版本。ireport通常以nbm插件形式提供,可以直接安装到NetBeans或其他支持nbm的IDE中。jasperreport是库文件,用于项目中...

    如何使用IReport3.5.1来制作报表模板

    【如何使用IReport3.5.1来制作报表模板】 IReport是一款强大的报表设计工具,尤其在配合JasperReports库时,能帮助开发者创建复杂的报表模板。以下将详细介绍如何使用IReport 3.5.1来创建报表模板。 **一、安装...

    iReport-5.1.0和iReport-5.6.0

    iReport-5.1.0和iReport-5.6.0

    Ireport

    在描述中提到的博客链接(由于实际链接无法访问,我们只能基于提供的信息进行推测)可能包含关于如何使用iReport或者iReport的某个特定功能的教程或经验分享。博主可能探讨了如何处理报表设计、数据源配置、样式定制...

    iReport 的使用入门

    ### iReport 使用入门详解 #### 一、iReport简介 iReport是一款强大的开源报表设计工具,主要用于创建复杂的报表。它可以无缝地集成到任何Java应用程序中,通过调用JasperReports库来实现报表功能。该工具完全由...

    ireport使用

    【ireport使用】 iReport是一款基于Java的开源报表设计工具,它是JasperReports库的一部分,主要用于设计复杂的PDF、HTML、Excel、CSV等格式的报表。本文将详细介绍iReport 4.5.1版本的使用方法。 1. **报表设计器...

Global site tag (gtag.js) - Google Analytics