`

Oracle函数与存储过程

阅读更多
==========函数======================

create or replace function BILL_TABLE_NAME(userId in number)
return varchar2 is
  TABLE_NAME varchar2(20);
  TABLE_NAME1 varchar2(20);
  TABLE_NAME2 varchar2(20);
  MOD_NUM varchar2(20);
begin
TABLE_NAME1 := 'bill_billing_0';
TABLE_NAME2 := 'bill_billing_';
MOD_NUM := mod(userId,32);
if ( mod(userId,32) < 10 ) then
  TABLE_NAME := concat(TABLE_NAME1,MOD_NUM);
else
  TABLE_NAME := concat(TABLE_NAME2,MOD_NUM);
end if;
return(TABLE_NAME);
end BILL_TABLE_NAME;

=========存储过程====================

CREATE OR REPLACE PROCEDURE TMP_GJ_zk_BILL_REPAIR_DATA
(p_ali_pay_trade_id  in  VARCHAR2 )  is
  V_PROGRAME_NAME  VARCHAR2(100);
  v_error              VARCHAR2(4000);
  b_bill_id number;
  b_fee_type number;
  a_alipay_time date;
  a_notify_time date;
  a_taobao_alipay_id number;
  a_other_alipay_id number;
  a_other_alipay_email VARCHAR2(200);
  a_fee number;
  a_trade_no VARCHAR2(200);
  a_external_no VARCHAR2(200);
  a_user_id number;
  a_nick VARCHAR2(200);
  a_gmt_create date;
  a_bill_billing_id number;
  a_pay_tpye number;
  p_point_type number;
  countnum number;

BEGIN

for c in(
SELECT
bill_id,
ali_pay_time,
gmt_create,
ali_pay_trade_id,
point_type
FROM BILL_BILLING_POINT p
where p.ALI_PAY_TRADE_ID = p_ali_pay_trade_id
  ) loop
 
a_external_no := c.ali_pay_trade_id;

b_bill_id :=c.bill_id;

SELECT
notify_time,
taobao_alipay_id,
alipay_id,
alipay_email,
rel_receive_pay,
user_id,
nick,
fee_type,
  gmt_create
into
a_notify_time,
a_taobao_alipay_id,
a_other_alipay_id,
a_other_alipay_email,
a_fee,
a_user_id,
a_nick,
b_fee_type,
  a_gmt_create
FROM bill_billing 
  where id=b_bill_id;

if ( b_fee_type = 0) then
if( c.point_type = 3 )then
a_pay_tpye := 0;
else
a_pay_tpye := 1;
end if;
else
a_pay_tpye := 1;
end if;

  SELECT
  count(*)
  into
  countnum
  from bill_ali_pay
  where
  taobao_alipay_id='20880016748712110156' and
  external_no=c.ali_pay_trade_id and
  fee=a_fee and
  alipay_time=c.ali_pay_time and
  pay_tpye = a_pay_tpye;

if(countnum = 0)then
insert into bill_ali_pay(
id,
alipay_time,
notify_time,
taobao_alipay_id,
other_alipay_id,
other_alipay_email,
fee,
trade_no,
type,
status,
external_id,
external_no,
external_type,
descriptions,
user_id,
nick,
pay_tpye,
gmt_create,
bill_billing_id
) values(
seq_bill_ali_pay_id.nextval,--id
c.ali_pay_time,--alipay_time
a_notify_time,--notify_time
a_taobao_alipay_id,--taobao_alipay_id
a_other_alipay_id,--other_alipay_id
a_other_alipay_email,--other_alipay_email
a_fee,--fee
c.ali_pay_trade_id,--trade_no
null,--type
null,--status
0,--external_id
p_ali_pay_trade_id,--external_no
0,--external_type
'数据修正',--descriptions
a_user_id,
a_nick,
a_pay_tpye,
a_gmt_create,
c.bill_id
);
end if;

end loop;

end;

====================================
declare

  V_PROGRAME_NAME  VARCHAR2(100);
  v_error              VARCHAR2(4000);
  b_bill_id number;
  b_fee_type number;
  a_alipay_time date;
  a_notify_time date;
  a_taobao_alipay_id number;
  a_other_alipay_id number;
  a_other_alipay_email VARCHAR2(200);
  a_fee number;
  a_trade_no VARCHAR2(200);
  a_external_no VARCHAR2(200);
  a_user_id number;
  a_nick VARCHAR2(200);
  a_gmt_create date;
  a_bill_billing_id number;
  a_pay_tpye number;
  p_point_type number;
  countnum number;
  tabmod varchar2(2);
  usermod number;
 
 
  cursor alipay_cur is
  select  order_id  from bill_balance_result_dtl
  where biz_type=3 and gmt_create>to_date('20091111','yyyymmdd') and rel_dtl_id<0;
 
BEGIN

for alipay_rec  in  alipay_cur  loop
      for c in(
      SELECT
      bill_id,
      ali_pay_time,
      gmt_create,
      ali_pay_trade_id,
      point_type,
        user_id
      FROM BILL_BILLING_POINT p
      where p.ALI_PAY_TRADE_ID = alipay_rec.order_id
        ) loop
       
      a_external_no := c.ali_pay_trade_id;
     
      b_bill_id :=c.bill_id;
     
      /* SELECT
      notify_time,
      taobao_alipay_id,
      alipay_id,
      alipay_email,
      rel_receive_pay,
      user_id,
      nick,
      fee_type,
        gmt_create
      into
      a_notify_time,
      a_taobao_alipay_id,
      a_other_alipay_id,
      a_other_alipay_email,
      a_fee,
      a_user_id,
      a_nick,
      b_fee_type,
        a_gmt_create
      FROM bill_billing 
        where id=b_bill_id;*/
     
        usermod := mod(c.user_id,32);
        if(usermod<10) then
                       tabmod:='0'||usermod ;
        else tabmod:=''||usermod;
        end if;
       
        execute immediate '
        SELECT
      notify_time,
      taobao_alipay_id,
      alipay_id,
      alipay_email,
      rel_receive_pay,
      user_id,
      nick,
      fee_type,
        gmt_create  FROM bill_billing_'||tabmod||' where id= :b_bill_id'
        into
      a_notify_time,
      a_taobao_alipay_id,
      a_other_alipay_id,
      a_other_alipay_email,
      a_fee,
      a_user_id,
      a_nick,
      b_fee_type,
        a_gmt_create using b_bill_id;
     
     
     
     
      if ( b_fee_type = 0 and c.point_type = 3 )then
      a_pay_tpye := 0;
      else
          a_pay_tpye := 1;
      end if;
     
        SELECT
        count(*)
        into
        countnum
        from bill_ali_pay
        where
        taobao_alipay_id='20880016748712110156' and
        external_no=c.ali_pay_trade_id and
        fee=a_fee and
        alipay_time=c.ali_pay_time and
        pay_tpye = a_pay_tpye;
     
      if(countnum = 0)then
      insert into bill_ali_pay(
      id,
      alipay_time,
      notify_time,
      taobao_alipay_id,
      other_alipay_id,
      other_alipay_email,
      fee,
      trade_no,
      type,
      status,
      external_id,
      external_no,
      external_type,
      descriptions,
      user_id,
      nick,
      pay_tpye,
      gmt_create,
      bill_billing_id
      ) values(
      seq_bill_ali_pay_id.nextval,--id
      c.ali_pay_time,--alipay_time
      a_notify_time,--notify_time
      a_taobao_alipay_id,--taobao_alipay_id
      a_other_alipay_id,--other_alipay_id
      a_other_alipay_email,--other_alipay_email
      a_fee,--fee
      c.ali_pay_trade_id,--trade_no
      null,--type
      null,--status
      0,--external_id
      alipay_rec.order_id,--external_no
      0,--external_type
      '数据修正',--descriptions
      a_user_id,
      a_nick,
      a_pay_tpye,
      a_gmt_create,
      c.bill_id
      );
      end if;
     
      end loop;

end loop;
end;
分享到:
评论

相关推荐

    oracle函数调用存储过程

    ### Oracle函数调用存储过程详解 #### 背景与目的 在开发Oracle应用程序时,经常需要使用到存储过程和函数。这两种类型的数据库对象各有优势,可以满足不同的业务需求。有时候,为了更好地组织代码和提高复用性,...

    oracle oracle函数 存储过程

    在学习和使用Oracle函数和存储过程时,建议从以下几个方面入手: 1. 熟悉基本的SQL语法和操作,这是使用函数和存储过程的前提。 2. 精读Oracle帮助文档,理解每个函数的用法和存储过程的结构。 3. 练习编写简单的...

    oracle函数大全与存储过程语法-中文.rar

    本资源包“oracle函数大全与存储过程语法-中文.rar”涵盖了从Oracle 9i到10G版本的函数和存储过程的详细信息,旨在帮助用户深入理解和应用这些关键概念。 1. **Oracle函数大全**: - 函数是预定义的代码块,接受一...

    oracle笔记存储函数和存储过程

    oracle笔记存储函数和存储过程,有具体的代码案例!存储函数和存储过程的知识笔记!

    oracle函数大全及存储过程语法.rar

    本资源"oracle函数大全及存储过程语法.rar"显然是一个关于Oracle函数和存储过程的详细指南,涵盖了各种常用和高级的函数以及存储过程的编写和使用方法。 一、Oracle函数 Oracle提供了丰富的内置函数,包括数值函数...

    oracle 函数大全 存储过程语法

    本篇文章将针对“Oracle函数大全”和“存储过程语法”进行深入的探讨。 首先,Oracle函数是预定义的代码块,它们接收输入参数并返回一个值。函数分为内置函数和自定义函数。内置函数包括数学函数(如:ROUND、TRUNC...

    java调用oracle存储过程或者函数

    调用Oracle函数的过程与调用存储过程类似,但创建CallableStatement时的SQL语句略有不同。由于函数会返回一个值,所以格式通常是`{? = call function_name(?, ?, ...)}`。在执行后,通过`CallableStatement....

    如何调用oracle的函数、存储过程

    调用Oracle函数和存储过程通常涉及以下步骤: 1. **创建函数和存储过程**: 使用SQL的CREATE FUNCTION或CREATE PROCEDURE语句来定义它们。例如: ```sql CREATE OR REPLACE FUNCTION my_function(param1 IN ...

    oracle函数大全及存储过程语法

    总结起来,Oracle函数和存储过程是数据库管理和开发中的重要工具,掌握它们的语法和应用对于优化数据库性能、提升开发效率以及保证数据安全具有重要意义。在实际工作中,应根据具体需求灵活运用,以实现更高效、更...

    oracle函数大全及存储过程语法 chm

    Oracle数据库是世界上最广泛使用的数据库系统之一,其...总的来说,Oracle函数和存储过程是数据库开发的核心工具,通过深入学习和实践,你将能够更有效地管理和操作Oracle数据库,提升你的数据库技能和项目实施能力。

    oracle笔记(存储过程函数触发器游标流程控制等)

    1. **存储过程与函数**:存储过程是预编译的SQL语句集合,用于执行特定任务。它们可以提高性能,减少网络流量,并提供模块化编程。函数则是返回值的存储过程,可以在SQL查询中直接使用。理解并熟练创建、调用和管理...

    Oracle存储过程和函数(最详细包含emp 表实例操作,边看边操作)

    **二、Oracle函数** 函数与存储过程相似,但函数必须返回一个值,而存储过程可以不返回。函数可以被用作查询的一部分,提升SQL语句的灵活性。 1. **创建函数**:使用`CREATE FUNCTION`语句定义函数,例如: ```...

    Oracle中的函数、存储过程、包

    3. **函数与存储过程的区别**: - **返回值**:函数必须有返回值,而存储过程可以没有返回值,或者通过OUT参数返回结果。 - **数据修改**:函数不能修改数据库中的数据,而存储过程可以。 - **参数类型**:两者都...

    oracle 存储过程 函数 dblink

    ### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...

    Oracle触发器与存储过程高级编程-第3版itpub.rar

    《Oracle触发器与存储过程高级编程》第3版是一本深入探讨Oracle数据库中触发器和存储过程技术的专业书籍。在Oracle数据库系统中,触发器和存储过程是数据库管理员和开发人员进行复杂业务逻辑处理和数据管理的重要...

    oracle 函数大全 参考函数 手册 速查 chm格式

    Oracle函数是数据库操作中的核心组成部分,它们允许开发人员和DBA执行各种计算、转换、查询和数据处理任务。手册中可能涵盖了以下几类函数: 1. 数学函数:如ABS(取绝对值)、MOD(取模)、ROUND(四舍五入)等,...

    oracle中存储函数与存储过程的区别介绍

    在Oracle数据库中,存储函数和存储过程是两种重要的PL/SQL编程组件,它们在数据库管理和应用程序开发中扮演着重要角色。虽然两者有许多相似之处,但它们之间也存在显著的差异。 首先,存储过程是一个预编译的PL/SQL...

Global site tag (gtag.js) - Google Analytics