`

在Crystal Report 8中调用Oracle的procedure储存过程,并取得返回的类型为Sys_Refcursor数据表

阅读更多

Crystal Report 8非常易入门,通常只需要鼠标就可以完成报表的创建,但随着实习中对SQL语言和底层数据库的熟悉,我越来越对Crystal的“指指点点”的创建报表方式感到失望,对于存在大量表连接查询创建,SQL语言比CR(Crystal Report)的GUI界面要方便得多。

但Crystal Report 8中调用Oracle的存储过程从而直接取得数据表,并不像直接使用CR的GUI界面创建报表那样步骤明显,接下来将介绍如何在Crystal Report 8中调用Oracle Procedure的步骤,希望能对相关CR报表开发人员起到一点参考作用。

其实详细步骤在Bussiness Object的“Using Oracle Stored Procedures in Crystal Reports ”技术论文中已经有了,但我发现,对于Crystal Report 8和Oracle 9.2,并且在Oracle中程序员没有创建Package权限的情况下,具体做法仍旧有些差异:






  1. 从BI网站下载更新的CR到Oracle的数据库驱动,其实这个驱动也老的不行啦,不过恐怕CR 8内置的更古老。注意一下,XP以上的操作系统,反而倒要使用cror815.zip包中的Win9x.reg来导入注册表,因为从XP开始,C:\Windows而不是C:\WinNT才是Windows的系统目录,如果你把操作系统安装在D盘,请更改相应的reg注册表文件。
  2. 在Oracle中创建CR要调用的procedure,比如下面这个,注意ResultCur为输入输出类型,不能只申明为输出类型,即不能将IN OUT参数改为单单OUT型的,否则随后的CR8会无法显示这样的store procedure:
    procedure OperationStayTime
    <!---->create or replace procedure OperationStayTime(Cust      in varchar2,
                                                  StartDT   
    in varchar2,
                                                  EndDT     
    in varchar2,
                                                  ResultCur 
    in Out Sys_Refcursor) is
      
    CURSOR c_OPST IS
        
    SELECT CO.CONTAINERNAME,
                        CO.CUSTOMERLOTNUMBER,
                        WFSTP.SEQUENCE,
                        OP.OPERATIONNAME,
                        CO.DIERELEASEDATE,
                        CO.TARGETDEVICE,
                        HML1.TXNDATE TransDate,
                        HML2.TXNDATE LastTransDate, 






    -- to be modifyed in procedure

                        HML2.TXNDATE HML2TXNDATE,
                        CU.CUSTOMERNAME,
                        CDODEF.CDONAME,
                        PAK.PACKAGETYPENAME


    ||DI.DIMENSIONNAME||LD.LEADCOUNTNAME PDL,
                        PTL.PRODUCTIONLINENAME,
                        OP.DESCRIPTION,
                        AMKOP.AMKORWWOPERNAME
          



    FROM CONTAINER       CO,
               HISTORYMAINLINE HML1,
               PRODUCT         PT,
               HISTORYMAINLINE HML2,
               MOVEHISTORY     MH,
               CUSTOMER        CU,
               CDODEFINITION   CDODEF,
               DIMENSION       DI,
               PACKAGETYPE     PAK,
               LEADCOUNT       LD,
               PRODUCTIONLINE  PTL,
               CURRENTSTATUS   CUTSTS,
               OPERATION       OP,
               WORKFLOWSTEP    WFSTP,
               AMKORWWOPER     AMKOP
         














    WHERE CO.CONTAINERID = HML1.CONTAINERID
           
    AND CO.PRODUCTID = PT.PRODUCTID
           
    AND CO.CURRENTSTATUSID = CUTSTS.CURRENTSTATUSID
           
    AND HML1.CONTAINERID = HML2.CONTAINERID
           
    AND PT.CUSTOMERID = CU.CUSTOMERID
           
    AND HML1.TXNTYPE = CDODEF.CDODEFID
           
    AND PT.DIMENSIONID = DI.DIMENSIONID
           
    AND PT.PACKAGETYPEID = PAK.PACKAGETYPEID
           
    AND PT.LEADCOUNTID = LD.LEADCOUNTID
           
    AND CUTSTS.PRODUCTIONLINEID = PTL.PRODUCTIONLINEID
           
    AND HML2.OPERATIONID = OP.OPERATIONID
           
    AND HML2.WORKFLOWSTEPID = WFSTP.WORKFLOWSTEPID
           
    AND OP.AMKORWWOPERID = AMKOP.AMKORWWOPERID
           
    AND mh.historymainlineid = hml2.historymainlineid
           
    AND CDODEF.CDONAME = 'Ship'
           
    AND HML1.REVERSALSTATUS = 1
           
    AND HML2.REVERSALSTATUS = 1
           
    AND HML2.OPERATIONID <> '00060e08000013f1' AND -- Shipping

               HML2.OPERATIONID <> '00060e08000013f0' AND -- FP Packing

               HML2.OPERATIONID <> '00060e08000013ef' AND -- Schedule

               CU.CUSTOMERNAME = Cust
           
    and hml1.txndate >= to_date(nvl(StartDT, '2006/06/01 01:00:00'),
                                       
    'yyyy/mm/dd hh24:mi:ss')
           
    and hml1.txndate <= to_date(nvl(EndDT, '2006/06/01 01:00:00'),
                                       
    'yyyy/mm/dd hh24:mi:ss')
         
    ORDER BY CO.CONTAINERNAME, WFSTP.SEQUENCE;

      opst_rec TempOperationStayTime

    %ROWTYPE;

      l_LastTransDate opst_rec.lasttransdate

    %type;

    begin
      
    delete from tempOperationStayTime;

      

    FOR opst_rec IN c_OPST LOOP
        
    if l_LastTransDate is not null then
          opst_rec.lasttransdate :
    = l_LastTransDate;
        
    end if;
        l_LastTransDate :
    = opst_rec.hml2txndate;
      
        

    if opst_rec.containername is not null then
          
    INSERT INTO tempOperationStayTime VALUES opst_rec;
        
    end if;
      
      

    END LOOP;

      

    Open ResultCur for
        
    Select *
          
    from TempOperationStayTime
         
    ORDER BY CONTAINERNAME, SEQUENCE;

      

    return;

    end OperationStayTime;


  3. 在CR的DataExplorer中,选择More Data Sources->Oracle Server节点,在弹出的Oracle SQL对话框中分别输入User ID,Password,Server,这也是关键的一步,不能使用ODBE驱动,否则仍然不能在CR8中成功调用procedure。
  4. 选择刚刚添加的Server,按Options打开选项对话框,选中Show->Stored Procedures才能显示出各个储存过程,如果更改Options后Data Explorer窗口没有刷新(在CR8.0.5版本下,这肯定会发生),先收拢Server节点,再打开,CR就会按新设置刷新列表。
  5. 现在可以通过列表选择CR8需要调用的procedure,单击Add按钮添加要使用Oracle 存储过程。若你的储存过程有输入参数,单击Add后会要求你输入参数值,输入具体参数值,这些参数会成为Crystal Reports的Parameter Field的缺省参数,RESULTCUR是输出的数据表,不必填值。
  6. 完成后已经可以在Field Explorer上已经显示出存储过程返回的字段了,后面的步骤都是常规的CR8使用方法了……

 



丁丁 2007-02-02 14:45 发表评论
分享到:
评论
1 楼 diddyrock 2009-08-25  
thanks

相关推荐

    水晶报表控件CrystalReport8

    **水晶报表控件CrystalReport8** 是一款广泛用于企业级应用的报告生成工具,由Business Objects(现为SAP的一部分)开发。它提供了一个强大的设计环境,允许开发人员创建复杂、交互式的报表,并能轻松地集成到各种...

    Crystal Report 2011 User Guide

    综上所述,Crystal Report 2011不仅是一个功能强大的报表设计工具,也是一套完整的报表解决方案,涵盖了从数据获取、设计、预览到存储和管理的全过程。无论是初学者还是高级用户,都能从中找到满足需求的功能。

    Crystal report

    该方法使您可以将连接共享置入应用程序中,并在 Crystal Reports 收到数据之前先将数据筛选出来。 五、从 ADO.NET 数据集制作报表 1. 在项目中新建一个架构文件: a. 在解决方案资源管理器中,右击项目名,指向...

    Crystal_Report_10(附注册码).rar

    3. 在安装过程中,选择合适的安装类型,如“完整安装”或“自定义安装”,根据实际需求进行选择。 4. 输入提供的注册码进行激活,确保软件的正常使用。 四、使用指南 1. 创建新报表:在水晶报表10中,首先添加数据...

    CrystalReport水晶报表教程

    Crystal Report 需要安装在 Visual Studio 环境中,并且需要配置 Crystal Report 的设计器和控件。 3.报表设计 报表设计是 Crystal Report 的核心功能之一,开发者可以使用 Crystal Report 设计器设计报表、设置...

    在Visual Studio.NET中使用Crystal Report

    在 Visual Studio.NET 中使用 Crystal Report 在 Visual Studio.NET 中使用 Crystal Report,是一个功能强大且实用的报表生成工具。通过本文,我们将逐步介绍如何在 VS.NET 中使用 Crystal Report,包括将简单的...

    CrystalReport水晶报表控件示例

    CrystalReport水晶报表控件是开发人员在.NET框架下创建复杂、交互式报告的常用工具,尤其在VB.NET环境中。这个示例提供了关于如何利用Crystal Reports控件进行报表设计和数据展示的实际操作指导。 首先,Crystal...

    Jsp中嵌入CrystalReport指南

    在能够使用查看器将Crystal Report嵌入到JSP页面中或使用导出控件将Crystal Report导出为多种文件格式(如PDF和RTF)之前,必须能够创建报告源。 ##### 创建报告源步骤 1. **了解报告源**:报告源是与特定报告实例...

    CrystalReport DLL 11.X

    CrystalReport是一款强大的报表设计工具,尤其在企业级应用中广泛使用。DLL(Dynamic Link Library)是Windows操作系统中的一个重要组件,它封装了特定的功能,供其他程序调用。当我们谈论"CrystalReport DLL 11.X...

    C#水晶报表(Crystal Report)编程

    在IT行业中,报表工具是数据分析和展示的重要组成部分,而Crystal Reports,简称水晶报表,是由SAP公司开发的一款功能强大的报表设计软件。它被广泛应用于.NET Framework环境,特别是与C#结合,可以创建复杂的业务...

    c# CrystalReport 水晶报表 最简单的显示

    在IT行业中,水晶报表(Crystal Reports)是一款广泛用于创建数据驱动的报告的工具,尤其在.NET框架下,如C#环境中。本篇文章将详细介绍如何在C#中使用CrystalReport进行最简单的报表显示。 首先,我们需要了解水晶...

    Crystal Report帮助文档

    Crystal Report是一款强大的报表设计工具,广泛应用于商业智能和...通过这份“Crystal Report帮助文档”,无论是初学者还是有经验的用户,都能系统性地学习和提升在Crystal Report中的技能,实现高效的数据报告制作。

    CryRpt.rar_Crystal Report

    标题“CryRpt.rar_Crystal Report”暗示我们将讨论如何在C#中调用Crystal Reports,而描述中的“how to do the c# invoke crystal report”正是我们要解决的问题。下面,我们将详细探讨如何在C#中集成和使用Crystal ...

    Visual Studio 2005,CrystalReport概述

    在Visual Studio 2005中,CrystalReport已经成为了一个标准的报表创建工具,被集成到了开发环境中,为开发者提供了便捷的数据展示方式。 #### 报表设计的重要性 通常情况下,开发者可以通过编写代码对数据库进行...

    Crystal Report篇之Web报表服务

    Crystal Report是一款强大的报告生成工具,尤其在企业级应用中广泛使用,用于生成各种复杂的数据报告。Web报表服务是Crystal Reports的重要组成部分,它使得用户能够通过Web浏览器访问和交互报告,从而实现了远程...

    Crystal Report练习数据库Xtreme中文版

    在描述中提到的"Crystal Report练习数据库Xtreme中文版",我们可以理解为这是一套特别设计用于学习和实践Crystal Report的数据库系统,且以中文语言呈现,方便中国用户理解和使用。 Xtreme数据库是专门为Crystal ...

    Crystal Report for Java

    Crystal Report for Java是一款专为Java开发者设计的直观报告工具包,旨在简化和加速数据在Java Server Pages (JSP)中的访问、格式化及整合过程。作为BEA WebLogic Workshop和Borland JBuilder X的紧密集成特性,它...

    Crystal Report9.1(水晶报表)

    在软件开发中,Crystal Report9.1常被嵌入到应用程序中作为报表引擎,允许用户自定义和生成报告。通过.NET或Java API,开发人员可以控制报表的生成、打印和导出,实现与应用程序的无缝集成。 5. **学习与进阶** ...

    report_long.rar_Crystal Report _site:www.pudn.com

    在图表设计方面,Crystal Report支持多种类型的图表,如柱状图、折线图、饼图、散点图等,能够直观地展示数据趋势和分布。通过"report_long.rpt",我们可以学习如何将数据库中的数值数据转化为可视化图形,以及如何...

Global site tag (gtag.js) - Google Analytics