`
raymond.chen
  • 浏览: 1437464 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Oracle包的使用

阅读更多

一、包规范

    1、report包

CREATE OR REPLACE package report as
    type cursorType is ref cursor;
	type CommInfo is record(
		id_ varchar2(60),
		name_ varchar2(200),
		comm_category_name_ varchar2(60),
		city_company_name_ varchar2(200),
		district_name_ varchar2(100),
		county_company_name_ varchar2(200),
		contact_ varchar2(60),
		mobile_phone_ varchar2(60),
		person_id_ varchar2(60),
		bank_num_ varchar2(60)
	);
	type CardType is record(
		id_ varchar2(60),
		type_ varchar2(60),
		card_brand_ varchar2(60),
		card_brand_name_ varchar2(60)
	);
	type QuantityBean is record(
		commId number,
		pkl number := 0,
		jhl number := 0,
		jfl number := 0,
		zsl number := 0
	);
	function genPiKaDataSet(p_fgs varchar2, p_fwt varchar2, p_comm varchar2, p_date1 varchar2, p_date2 varchar2, p_status varchar2) return varchar2;
end; 

  

   2、reportFunc包

CREATE OR REPLACE package reportFunc as
	function getCommSQL(p_fgs varchar2, p_fwt varchar2, p_comm varchar2) return varchar2;
	function getCardTypeSQL return varchar2;
	function getQuantityBean(p_comm varchar2, p_type varchar2, p_date1 varchar2, p_date2 varchar2, p_status varchar2) return report.QuantityBean;
end;

 

二、包体

    1、report包体

CREATE OR REPLACE package body report as 
    --生成数据集
 function genPiKaDataSet(p_fgs varchar2, p_fwt varchar2, p_comm varchar2, p_date1 varchar2, p_date2 varchar2, p_status varchar2) return varchar2 is
        c1 cursorType;
        c2 cursorType;
        v_CommInfo CommInfo;
        v_CardType CardType;
  pkl_ number := 0; -- 值 
  jhl_ number := 0;
  jfl_ number := 0;
  zsl_ number := 0;
  jhRate number := 0;
  jfRate number := 0;
  v_pk_total_ number := 0; -- 值合计 
  v_jh_total_ number := 0;
  v_jf_total_ number := 0;
  v_zs_total_ number := 0;
  v_jhl_total_ number := 0;
  v_jfl_total_ number := 0;
  pk_sum number := 0; -- 值合计的合计  
  jh_sum number := 0;
  jf_sum number := 0;
  zs_sum number := 0;
  jhl_sum number := 0;
  jfl_sum number := 0;
  
  bean QuantityBean;
  result varchar2(200);
  lsh number := 0;
  createDate date := sysdate;
    begin
     delete from R_PIKA_STAT_ where create_date_<createDate-1;
     commit;
   
  select SEQ_LSH.nextval into lsh from dual;
  
        --代办点 
        open c1 for reportFunc.getCommSQL(p_fgs, p_fwt, p_comm);
        loop
   v_pk_total_ := 0;
   v_jh_total_ := 0;
   v_jf_total_ := 0;
   v_zs_total_ := 0;
   v_jhl_total_ := 0;
   v_jfl_total_ := 0;
    
            fetch c1 into v_CommInfo;
            exit when c1%notfound;
   
            --卡类型 
            open c2 for reportFunc.getCardTypeSQL;
            loop
                fetch c2 into v_CardType;
                exit when c2%notfound;
    
    bean := reportFunc.getQuantityBean(v_CommInfo.id_, v_CardType.id_, p_date1, p_date2, p_status);
    
    --批卡量
    pkl_ := bean.pkl;
    v_pk_total_ := v_pk_total_ + pkl_;
     
    insert into R_PIKA_STAT_(id_,lsh_,comm_id_,comm_name_,category_name_,city_company_name_,district_name_,
    county_company_name_,contact_,mobile_phone_,person_id_,bank_num_,card_type_id_,type_,
    card_brand_,card_brand_name_,data_type_,amount_,create_date_) 
    values(SEQ_PIKA_STAT.nextval,lsh,v_CommInfo.id_,v_CommInfo.name_,v_CommInfo.comm_category_name_,
    v_CommInfo.city_company_name_,v_CommInfo.district_name_,v_CommInfo.county_company_name_,v_CommInfo.contact_,
    v_CommInfo.mobile_phone_,v_CommInfo.person_id_,v_CommInfo.bank_num_,v_CardType.id_,replace(v_CardType.type_,v_CardType.card_brand_name_,''),
    v_CardType.card_brand_,v_CardType.card_brand_name_,'1.批卡量(套数)', pkl_, createDate);
    
    --激活量
    jhl_ := bean.jhl;
    v_jh_total_ := v_jh_total_ + jhl_;
     
    insert into R_PIKA_STAT_(id_,lsh_,comm_id_,comm_name_,category_name_,city_company_name_,district_name_,
    county_company_name_,contact_,mobile_phone_,person_id_,bank_num_,card_type_id_,type_,
    card_brand_,card_brand_name_,data_type_,amount_,create_date_) 
    values(SEQ_PIKA_STAT.nextval,lsh,v_CommInfo.id_,v_CommInfo.name_,v_CommInfo.comm_category_name_,
    v_CommInfo.city_company_name_,v_CommInfo.district_name_,v_CommInfo.county_company_name_,v_CommInfo.contact_,
    v_CommInfo.mobile_phone_,v_CommInfo.person_id_,v_CommInfo.bank_num_,v_CardType.id_,replace(v_CardType.type_,v_CardType.card_brand_name_,''),
    v_CardType.card_brand_,v_CardType.card_brand_name_,'2.激活量(套数)', jhl_, createDate);
    
    --成功积分登记量
    jfl_ := bean.jfl;
    v_jf_total_ := v_jf_total_ + jfl_;
     
    insert into R_PIKA_STAT_(id_,lsh_,comm_id_,comm_name_,category_name_,city_company_name_,district_name_,
    county_company_name_,contact_,mobile_phone_,person_id_,bank_num_,card_type_id_,type_,
    card_brand_,card_brand_name_,data_type_,amount_,create_date_) 
    values(SEQ_PIKA_STAT.nextval,lsh,v_CommInfo.id_,v_CommInfo.name_,v_CommInfo.comm_category_name_,
    v_CommInfo.city_company_name_,v_CommInfo.district_name_,v_CommInfo.county_company_name_,v_CommInfo.contact_,
    v_CommInfo.mobile_phone_,v_CommInfo.person_id_,v_CommInfo.bank_num_,v_CardType.id_,replace(v_CardType.type_,v_CardType.card_brand_name_,''),
    v_CardType.card_brand_,v_CardType.card_brand_name_,'3.成功积分登记量(套数)', jfl_, createDate);
    
    --激活率
    jhRate := 0;
    if pkl_ > 0 then
     jhRate := (1.0 * jhl_) / pkl_;
    else
     if jhl_ > 0 then
      jhRate := 1.0;
     end if;
    end if;
     
    insert into R_PIKA_STAT_(id_,lsh_,comm_id_,comm_name_,category_name_,city_company_name_,district_name_,
    county_company_name_,contact_,mobile_phone_,person_id_,bank_num_,card_type_id_,type_,
    card_brand_,card_brand_name_,data_type_,amount_,create_date_) 
    values(SEQ_PIKA_STAT.nextval,lsh,v_CommInfo.id_,v_CommInfo.name_,v_CommInfo.comm_category_name_,
    v_CommInfo.city_company_name_,v_CommInfo.district_name_,v_CommInfo.county_company_name_,v_CommInfo.contact_,
    v_CommInfo.mobile_phone_,v_CommInfo.person_id_,v_CommInfo.bank_num_,v_CardType.id_,replace(v_CardType.type_,v_CardType.card_brand_name_,''),
    v_CardType.card_brand_,v_CardType.card_brand_name_,'4.激活率(%)', jhRate, createDate);
     
    --积分率 = 已积分数量 / (已激活数量-赠送号激活量) 
    zsl_ := bean.zsl;
    v_zs_total_ := v_zs_total_ + zsl_;
     
    jfRate := 0;
    if (jhl_ - zsl_) > 0 then
     jfRate := (1.0 * jfl_) / (jhl_ - zsl_);
    else
     if jfl_ > 0 then
      jfRate := 1.0;
        end if;
    end if;
     
    insert into R_PIKA_STAT_(id_,lsh_,comm_id_,comm_name_,category_name_,city_company_name_,district_name_,
    county_company_name_,contact_,mobile_phone_,person_id_,bank_num_,card_type_id_,type_,
    card_brand_,card_brand_name_,data_type_,amount_,create_date_) 
    values(SEQ_PIKA_STAT.nextval,lsh,v_CommInfo.id_,v_CommInfo.name_,v_CommInfo.comm_category_name_,
    v_CommInfo.city_company_name_,v_CommInfo.district_name_,v_CommInfo.county_company_name_,v_CommInfo.contact_,
    v_CommInfo.mobile_phone_,v_CommInfo.person_id_,v_CommInfo.bank_num_,v_CardType.id_,replace(v_CardType.type_,v_CardType.card_brand_name_,''),
    v_CardType.card_brand_,v_CardType.card_brand_name_,'5.积分率(%)', jfRate, createDate);
     
            end loop;
            close c2;
    
   --去掉值为0的代办点
   if v_pk_total_<=0 and v_jh_total_<=0 and v_jf_total_<=0 then
       delete from R_PIKA_STAT_ where comm_id_=v_CommInfo.id_;
   else
       --批卡合计
    update R_PIKA_STAT_ set pk_total_=v_pk_total_ where comm_id_=v_CommInfo.id_;
    pk_sum := pk_sum + v_pk_total_;
     
    --激活合计
    update R_PIKA_STAT_ set jh_total_=v_jh_total_ where comm_id_=v_CommInfo.id_;
    jh_sum := jh_sum + v_jh_total_;
    
    --积分量合计
    update R_PIKA_STAT_ set jf_total_=v_jf_total_ where comm_id_=v_CommInfo.id_;
    jf_sum := jf_sum + v_jf_total_;
    
    --激活率合计
    v_jhl_total_ := 0;
    if v_pk_total_ > 0 then
     v_jhl_total_ := (1.0 * v_jh_total_) / v_pk_total_;
    else
     if v_jh_total_ > 0 then
      v_jhl_total_ := 1.0;
        end if;
    end if;
    update R_PIKA_STAT_ set jhl_total_=v_jhl_total_ where comm_id_=v_CommInfo.id_;
    
    --积分率合计
    v_jfl_total_ := 0;
    if (v_jh_total_ - v_zs_total_) > 0 then
     v_jfl_total_ := (1.0 * v_jf_total_) / (v_jh_total_ - v_zs_total_);
    else
     if v_jf_total_ > 0 then
      v_jfl_total_ := 1.0;
     end if;
    end if;
    update R_PIKA_STAT_ set jfl_toal_=v_jfl_total_ where comm_id_=v_CommInfo.id_;
    zs_sum := zs_sum + v_zs_total_;
    
   end if;
   
        end loop;
        close c1;
        
  --合计的合计 
  if pk_sum > 0 then
      jhl_sum := (1.0 * jh_sum) / pk_sum;
  else
      if jh_sum > 0 then
        jhl_sum := 1.0;
   end if;
  end if;
  
  if (jh_sum - zs_sum) > 0 then
      jfl_sum := (1.0 * jf_sum) / (jh_sum - zs_sum);
  else
      if jf_sum > 0 then
       jfl_sum := 1.0;
   end if;
  end if;
  
  result := lsh || ',' || pk_sum || ',' || jh_sum || ',' || jf_sum || ',' || jhl_sum || ',' || jfl_sum;
  
  commit;
  
  return result;
   end;
    
 
end;

    2、reportFunc包体

CREATE OR REPLACE package body reportFunc as 
    --返回获取代办点信息的SQL 
 function getCommSQL(p_fgs varchar2, p_fwt varchar2, p_comm varchar2) return varchar2 is
     sql_1 varchar2(2000);
 begin
     sql_1 := 'select a.id_,a.name_,e.name_ comm_category_name_,b.name_ city_company_name_,d.name_ district_name_,c.name_ county_company_name_,';
  sql_1 := sql_1 || 'case when (select name_ from commission_user_ where rownum=1 and commission_id_=a.id_ and user_type_=1 and user_status_=''COMMISSIONUSER_STATUS_01'') is null then a.contact_ else (select name_ from commission_user_ where rownum=1 and commission_id_=a.id_ and user_type_=1 and user_status_=''COMMISSIONUSER_STATUS_01'') end contact_,';
  sql_1 := sql_1 || 'case when (select tel_ from commission_user_ where rownum=1 and commission_id_=a.id_ and user_type_=1 and user_status_=''COMMISSIONUSER_STATUS_01'') is null then a.mobile_phone_ else (select tel_ from commission_user_ where rownum=1 and commission_id_=a.id_ and user_type_=1 and user_status_=''COMMISSIONUSER_STATUS_01'') end mobile_phone_,';
  sql_1 := sql_1 || 'case when (select person_id_ from commission_user_ where rownum=1 and commission_id_=a.id_ and user_type_=1 and user_status_=''COMMISSIONUSER_STATUS_01'') is null then a.person_id_ else (select person_id_ from commission_user_ where rownum=1 and commission_id_=a.id_ and user_type_=1 and user_status_=''COMMISSIONUSER_STATUS_01'') end person_id_,';
  sql_1 := sql_1 || 'case when (select bank_num_ from commission_user_ where rownum=1 and commission_id_=a.id_ and user_type_=1 and user_status_=''COMMISSIONUSER_STATUS_01'') is null then a.bank_num_ else (select bank_num_ from commission_user_ where rownum=1 and commission_id_=a.id_ and user_type_=1 and user_status_=''COMMISSIONUSER_STATUS_01'') end bank_num_';
  sql_1 := sql_1 || ' from commission_info_ a';
  sql_1 := sql_1 || ' left join organization_ b on a.city_company_id_=b.party_id_';
  sql_1 := sql_1 || ' left join organization_ c on a.county_company_id_=c.party_id_';
  sql_1 := sql_1 || ' left join district_ d on a.district_=d.id_';
  sql_1 := sql_1 || ' left join commission_category_ e on a.comm_cagegory_=e.id_';
  sql_1 := sql_1 || ' where a.id_ is not null';
  if p_fgs is not null then
     sql_1 := sql_1 || ' and a.city_company_id_=''' || p_fgs || '''';
  end if;
  if p_fwt is not null then
     sql_1 := sql_1 || ' and a.county_company_id_=''' || p_fwt || '''';
  end if;
  if p_comm is not null then
     sql_1 := sql_1 || ' and a.id_ in(' || p_comm || ')';
  end if;
  sql_1 := sql_1 || ' order by a.id_ asc';
  
  return sql_1;
 end;
 
 --返回获取卡类型信息的SQL 
 function getCardTypeSQL return varchar2 is
     sql_2 varchar2(1000);
 begin
     sql_2 := 'select a.id_,a.type_,a.card_brand_,b.description_ card_brand_name_';
  sql_2 := sql_2 || ' from sim_card_type_ a inner join enumeration_ b';
  sql_2 := sql_2 || ' on a.card_brand_=b.enum_id_ order by a.id_ asc';
  return sql_2;
 end;
 
 -- 数量Bean 
 function getQuantityBean(p_comm varchar2, p_type varchar2, p_date1 varchar2, p_date2 varchar2, p_status varchar2) return report.QuantityBean is
     s varchar2(2000);
  bean report.QuantityBean;
     c1 report.cursorType;
 begin
     s := 'select a.id_,';
  
  s := s || '(select count(id_) from sim_card_detail_ where commission_id_=a.id_ and status_ in(' || p_status || ') and card_type_id_=' || p_type;
  if p_date1 is not null then
       s := s || ' and status_date_>=' || p_date1;
  end if;
  if p_date2 is not null then
       s := s || ' and status_date_<' || p_date2;
  end if;
  s := s || ') pkl,';
  
  s := s || '(select count(id_) from sim_card_detail_ where commission_id_=a.id_ and card_type_id_=' || p_type;
  if p_date1 is not null then
       s := s || ' and active_date_>=' || p_date1;
  end if;
  if p_date2 is not null then
       s := s || ' and active_date_<' || p_date2;
  end if;
  s := s || ') jhl,';
  
  s := s || '(select count(id_) from sim_card_detail_ where is_integral_=1 and commission_id_=a.id_ and card_type_id_=' || p_type;
  if p_date1 is not null then
       s := s || ' and active_date_>=' || p_date1;
  end if;
  if p_date2 is not null then
       s := s || ' and active_date_<' || p_date2;
  end if;
  s := s || ') jfl,';
  
  s := s || '(select count(id_) from sim_card_detail_ where status_=''RESOURCE_STATUS_13'' and commission_id_=a.id_ and card_type_id_=' || p_type;
  if p_date1 is not null then
       s := s || ' and active_date_>=' || p_date1;
  end if;
  if p_date2 is not null then
       s := s || ' and active_date_<' || p_date2;
  end if;
  s := s || ') zsl';
  
  
  s := s || ' from commission_info_ a where a.id_=' || p_comm;
  
  open c1 for s;
  loop
      fetch c1 into bean;
   exit when c1%notfound;
  end loop;
  close c1;
  
     return bean;
 end;
 
end;

 

分享到:
评论

相关推荐

    怎么用oracle打包

    在本文中,我们将详细探讨Oracle中的打包方法,以及如何创建和管理自己的数据库包。 一、Oracle数据库包的基本概念 Oracle数据库包是一种高级的PL/SQL编程结构,它允许将相关的变量、过程和函数封装在一起,形成一...

    oracle19C驱动包

    Oracle 19C驱动包是针对Oracle数据库19c版本的Java数据库连接器(JDBC)驱动程序。这个驱动包包含两个重要的文件:ojdbc10.jar和ojdbc8.jar,它们是Java开发者用来在Java应用程序中与Oracle 19c数据库进行交互的关键...

    oracle12C依赖包.zip

    依赖包是指在安装Oracle 12c时,系统可能需要的一系列支持软件或库文件,这些包确保数据库能够正常运行并满足其功能需求。"oracle12C依赖包.zip"提供的内容显然涵盖了这些必要的组件,适用于Oracle 12c以及11g等其他...

    各版本Oracle驱动包下载

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级应用中占据着重要的地位。本文将详细讨论Oracle驱动包的各个版本及其下载相关知识。 首先,Oracle驱动包主要用于Java应用程序与Oracle数据库之间...

    dbeaver oracle离线驱动包

    标题中的“dbeaver oracle离线驱动包”指的是DBeaver这款数据库管理工具针对Oracle数据库的离线驱动程序集合。DBeaver是一款免费且开源的通用SQL客户端,它支持多种数据库管理系统,包括Oracle。离线驱动包意味着...

    java连接oracle数据库jar包

    Java连接Oracle数据库主要依赖于JDBC(Java Database Connectivity)...正确引入Oracle JDBC驱动JAR包,并理解其使用方法,是开发Java数据库应用的基础。在实际开发中,还需要注意错误处理、性能优化和安全性等问题。

    oracle系统内置包

    Oracle系统内置包是Oracle数据库中的预编译程序包,它们为数据库管理员(DBA)和开发人员提供了广泛的功能。这些内置包大致可以分为两类,一类是为DBA提供的,另一类是为开发人员提供的。它们包含了各种实用的过程和...

    Oracle Ojdbc各版本驱动包

    Oracle各版本驱动包,有需要的可以下载使用,支持目前常用的不同版本oracle和JDK,根据自己需要调整和使用 主要包括的jar有: ojdbc5.jar 适用JDK版本:JDK 1.5 对应Oracle数据库版本:Oracle数据库版本(如Oracle ...

    oracle11g驱动包

    Oracle 11g驱动包是用于Java应用程序与Oracle数据库之间通信的重要组件,...总的来说,Oracle 11g驱动包是Java开发者与Oracle数据库交互的核心组件,理解其工作原理和使用方法对于进行Oracle数据库相关的开发至关重要。

    oracle jdbc jar包

    在使用Oracle JDBC Jar包时,开发者需要确保引入了正确的驱动版本,以匹配运行的Oracle数据库版本。同时,需要了解如何配置数据源,创建`DataSource`对象,以及如何使用`Connection`、`Statement`和`ResultSet`等...

    oracle包调试 视频

    oracle包调试.wmv

    Oracle19c 驱动jar包

    Oracle19c驱动jar包是Oracle数据库连接Java应用程序的关键组件,尤其对于那些使用JDK8和JDK10的开发者而言。这个压缩包包含了两个重要的jar文件:ojdbc10.jar和ojdbc8.jar,它们分别对应不同的Java版本兼容性。 1. ...

    oracle19c驱动jar包.zip

    Oracle 19c驱动jar包是Oracle数据库与Java应用程序之间通信的重要组件,它允许Java程序通过JDBC(Java Database Connectivity)接口与Oracle数据库进行交互。本压缩包包含两个版本的驱动文件,ojdbc10.jar适用于Java...

    SSH和Oracle的jar包

    使用这些jar包,开发者可以在Java环境中搭建SSH框架,实现业务逻辑,同时通过Hibernate与Oracle数据库进行交互,执行CRUD(创建、读取、更新、删除)操作。在开发过程中,通常会利用IDE(如Eclipse或IntelliJ IDEA)...

    Oracle系统包详细使用方法

    Oracle系统包是数据库管理系统Oracle中一组预定义的PL/SQL包,它们提供了各种功能,用于数据库管理和维护。...在实际应用中,根据具体需求选择合适的系统包并正确使用,是确保Oracle数据库高效稳定运行的关键。

    oracle12C驱动包

    总的来说,Oracle 12C驱动包是Java开发者与Oracle 12C数据库交互的基础工具,正确理解和使用它可以确保Java应用与数据库的稳定连接。在使用过程中,注意版本兼容性、安全性和性能优化,以及适时更新以获取最新的功能...

    oracle8驱动包.zip

    Oracle数据库是世界上最广泛使用的数据库系统之一,尤其在企业级应用中占据重要地位。Oracle8是其早期的一个版本,虽然现在已经被更先进的版本如Oracle11g、Oracle12c和Oracle19c所取代,但有些旧系统或特定场景可能...

    Oracle12C驱动包JDBC

    Oracle 12C JDBC驱动包是Oracle数据库与Java应用程序之间的桥梁,它允许Java开发者通过编写Java代码来访问和操作Oracle数据库。JDBC(Java Database Connectivity)是Java平台的标准API,用于连接各种数据库,包括...

    oracle12 jdbc驱动包

    Oracle 12c JDBC驱动包是Oracle数据库与Java应用程序之间的桥梁,它允许Java开发者通过编写Java代码来访问和操作Oracle数据库。在Java编程环境中,JDBC(Java Database Connectivity)是标准API,用于连接各种类型的...

    oracle19c驱动包(ojdbc8,ojdbc10)

    总的来说,Oracle 19c驱动包为Java开发者提供了与Oracle 19c数据库交互的工具,通过理解这些驱动的工作原理和使用方式,你可以构建高效、安全的应用程序。在实际开发中,根据项目的具体需求选择合适的JDBC驱动版本,...

Global site tag (gtag.js) - Google Analytics