`
terran_li2008
  • 浏览: 199891 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle存储过程中使用cursor

阅读更多

CREATE OR REPLACE PROCEDURE GLU_SP_RECALCULATE_RATE (P OUT VARCHAR2)AS

  rateRow REV_SHARE_RATE%rowtype;
  cursor rateRows is
    SELECT
        DISTRIBUTOR_ID,
        RETAILER_ID,
        RATE,
        MODIFIED_DATE ,
        GENRE
    FROM REV_SHARE_RATE
    WHERE
        IS_RUN=0;

BEGIN

  FOR rateRow in rateRows loop

      --Qualcomm,Qualcomm(p)Qualcomm(s)
      IF rateRow.Distributor_Id =1 OR rateRow.Distributor_Id =35 OR rateRow.Distributor_Id =61 THEN
          UPDATE DAILYDAP SET USD_VALUE = (NUM_DOWNLOADS * DAP_AMOUNT* rateRow.Rate)/(NET_REV/USD_VALUE),-- v_usd_fx,
                 GBP_VAlUE = (NUM_DOWNLOADS * DAP_AMOUNT* rateRow.Rate)/(NET_REV/GBP_VAlUE),--v_gbp_fx,
                 NET_REV= NUM_DOWNLOADS * DAP_AMOUNT* rateRow.Rate
          WHERE DISTRIB_ID=rateRow.DISTRIBUTOR_ID AND RETAILER_ID=rateRow.Retailer_Id AND NET_REV > 0 AND REPORT_DATE >= rateRow.Modified_Date;
      --ATT
      ELSIF rateRow.DISTRIBUTOR_ID = 49 THEN
         update (select /*+ BYPASS_UJVC */ d.DISTRIB_ID,d.RETAILER_ID,rate.genre,d.USD_VALUE,d.DATA_RAW,d.NET_REV,d.GBP_VAlUE,d.REPORT_DATE from dailydap d
                 inner join att_raw_daily att on d.ref_id = att.id
                 inner join rev_share_rate rate on d.distrib_id = rate.DISTRIBUTOR_ID and d.retailer_id = rate.Retailer_Id and att.product_category = rate.genre
                )
         SET
            USD_VALUE = (DATA_RAW * rateRow.Rate)/ (NET_REV/USD_VALUE),--v_usd_fx,
            GBP_VAlUE = (DATA_RAW * rateRow.Rate)/(NET_REV/GBP_VAlUE),--v_gbp_fx,
            NET_REV= DATA_RAW * rateRow.Rate
         where
             DISTRIB_ID=rateRow.DISTRIBUTOR_ID AND RETAILER_ID=rateRow.Retailer_Id AND
             GENRE=rateRow.GENRE AND NET_REV > 0 AND REPORT_DATE >= rateRow.Modified_Date;
      --sprint,nextel...
      ELSE
          UPDATE DAILYDAP SET USD_VALUE = (DATA_RAW * rateRow.Rate)/ (NET_REV/USD_VALUE),--v_usd_fx,
                 GBP_VAlUE = (DATA_RAW * rateRow.Rate)/(NET_REV/GBP_VAlUE),--v_gbp_fx,
                 NET_REV= DATA_RAW * rateRow.Rate
          WHERE DISTRIB_ID=rateRow.DISTRIBUTOR_ID AND RETAILER_ID=rateRow.Retailer_Id AND NET_REV > 0 AND REPORT_DATE >= rateRow.Modified_Date;
      END IF;

      --UPDATE REV_SHARE_RATE SET IS_RUN = 1
      UPDATE REV_SHARE_RATE SET IS_RUN=1 WHERE DISTRIBUTOR_ID=rateRow.DISTRIBUTOR_ID AND RETAILER_ID=rateRow.Retailer_Id;

  END LOOP;

  COMMIT;
  P:='OK';
EXCEPTION
   WHEN OTHERS THEN
   dbms_output.put_line(SQLERRM);
   ROLLBACK;
   P:= SQLERRM;
END;

 

分享到:
评论

相关推荐

    Java获取Oracle存储过程返回的Cursor

    Java获取Oracle存储过程返回的Cursor,使用odbc6

    Oracle数据库存储过程技术文档.doc

    第一章 oracle存储过程概述 2 1.1 存储过程基本结构(PROCEDURE) 3 1.1.1创建存储过程 3 1.1.2 存储过程删除 5 1.1.3 调用存储过程 5 1.2存储函数(FUNCTIONE) 6 1.2.1 创建存储函数 6 1.2.2 删除存储函数 7 1.3 包...

    Oracle_存储过程的基本语法

    3.1 oracle 存储过程的基本语法 3.1.1 基本结构 CREATE OR REPLACE PROCEDURE 存储过程名字 ( 参数1 IN NUMBER, 参数2 IN NUMBER ) IS 变量1 INTEGER :=0; 变量2 DATE; BEGIN END 存储过程名字 3.1.2 ...

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    spring mybatis 调用oracle存储过程

    在已有的spring+mybatis 基本操作oracle数据库的基础上,增加了3个调用存储过程的例子:无返回值、返回结果集、返回多个结果,希望对大家能有所帮助

    Oracle存储过程out游标

    内有三个文件 TESTPACKAGE.txt和CURSOR_TEST2.txt中为oracle建存储过程语句,OracleProcedure.java为java操作存储过程的程序

    ORACLE分页存储过程

    在分页存储过程中,主要理解了变量的动态赋值和输入输出参数的使用就非常简单了 下面为调用方法: var c_Preccount number; var c_Ppagecount number; var c_cur refcursor; exec proc_SpPag(1,'SELECT * FROM T_...

    java调用oracle存储过程返回结果集,Record,cursor.[参考].pdf

    java调用oracle存储过程返回结果集,Record,cursor.[参考].pdf

    Oracle技术_5分钟会用存储过程_存储过程简单实例

    Oracle技术_5分钟会用存储过程_存储过程简单实例 包括建表及初始化数据,直接运行就可以用 包含循环、条件、增改查、参数传入、变量赋值、java调用等 http://blog.csdn.net/ooppookid/article/details/41206963

    Oracle存储过程和自定义函数详解

    PL/SQL中的过程和函数(通常称为子程序)是PL/SQL块的一种特殊的类型,这种类型的子程序可以以编译的形式存放在数据库中,并为后续的程序块调用。 相同点: 完成特定功能的程序 不同点:是否用return语句返回值。 ...

    pkg_XXX.rar_oracle_oracle record cursor

    oracle 存储过程 包括 cursor record 动态sql 临时表等 用于oracle参考学习用

    Oracle存储过程及调用

    Oracle存储过程语法 Oracle的存储过程语法如下: create procedure 存储过程名称(随便取) is 在这里可以定义常量、变量、游标、复杂数据类型这里可以定义变量、常量 begin 执行部分 end; (2)带参数的存储...

    如何从 Java 存储过程将 JDBC ResultSet 作为 Ref Cursor 返回.doc

    在 Oracle9i 之前,不可能从 Java 存储过程直接返回一个 ResultSet,因为没有定义表单 ResultSet->REF CURSOR 的映射。Oracle9i 增加了此映射,允许从函数返回 ResultSet 或将其作为 OUT 参数传到某个过程。但它仍不...

    Oracle存储过程游标用法分析

    本文实例讲述了Oracle存储过程游标用法。分享给大家供大家参考,具体如下: 使用游标的5个步骤 1、声明一些变量用于保存select语句返回的指 2、声明游标,并指定select 语句 3、打开游标 4、从游标中获取记录 5、...

    asp.net中调用oracle存储过程的方法

    不多说了,本文通过两种方法介绍asp.net中调用oracle存储过程的方法,具体内容请看下面代码。 调用oracle存储过程方法一: ORACLE代码 CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR

    Oracle Exception汇总(自定义Oracle异常)

    使用CASE语句时在WHEN子句中没有包含必需的条件分支,并且没有包含ELSE语句。 对应ORA-06592错误。 COLLECTION_IS_NULL 给集合元素赋值前,必需初始化集合元素。对应ORA-06531错误。 CURSOR_ALRADY_OPEN 重新打开...

    asp.net中oracle 存储过程(图文)

    在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。 ORACLE代码 CREATE OR REPLACE PROCEDURE gd_CURSOR(MYCS1 OUT SYS_REFCURSOR,MYCS2 OUT ...

    oracle 在一个存储过程中调用另一个返回游标的存储过程

    第一种情况是返回的游标是某个具体的... 其中USERS就是数据库中一个表。在调用的时候只要声明一个该表的ROWTYPE类型就可以了: SQL-Code: 代码如下: CREATE OR REPLACE PROCEDURE P_TESTB AS VARCURSOR SYS_REFCURSOR;

    ibatis调存储过程返回游标

    ibatis调存储过程返回游标,资料整理

    oracle存储过程创建表分区实例

    用存储过程创建数据表:创建时注意必须添加authid current_user,如果创建的表已存在,存储过程继续执行,但如不不加此关键语句,存储过程将出现异常,这个语句相当于赋权限。例1创建语句如下: 代码如下:create or ...

Global site tag (gtag.js) - Google Analytics