`
hackbomb
  • 浏览: 217425 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

包中创建存储过程

    博客分类:
  • SQL
阅读更多

在包中创建存储过程的语句是
CREATE OR REPLACE PACKAGE PackageName AS
         --Insert Roles Declaration---
         PROCEDURE procedurename(
         );
        
END PackageName ;

注意:写存储过程时要注意参数名不能与数据库 字段名相同 . 否则 Oracle 会把这个参数名看成是字段名的 , 即使你用表的别名区分也不行 . 所以起参数名的时候一定要注意这点了 .


e.g:在oracle存储过程中返回一个结果集


create or replace package XX_ECIF_VIP_PKG is

   -- Author   : HUAWANG
   -- Created : 2007-11-1 14:33:38
   -- Purpose :
   g_vip_info_source_type_etl   constant varchar2(30) := 'ETL';
   g_vip_info_sourec_type_card constant varchar2(30) := 'CARD';
   g_vip_count_mode_zc          constant varchar2(10) := '10';
   g_vip_count_mode_dk          constant varchar2(10) := '20';
   g_credit_rating_cd_normal    constant NUMBER(5) := 0;
   g_currency_cd                constant varchar2(3) := 'CNY';
   g_vip_mode_count_status_a    constant varchar2(1) := 'A';
   -- Public procedure declarations
   procedure CHECK_VIP_PRC;
   procedure insert_vip_prc(v_party_id in number, v_vip_code in varchar2);  

end XX_ECIF_VIP_PKG;


包体:create or replace package body XX_ECIF_VIP_PKG is

   -- procedure implementations
   procedure CHECK_VIP_PRC as
   begin
     insert into XX_ECIF_VIP_INFO
       (PARTY_ID, VIP_CODE, AS_OF_DATE, EFFECTIVE_DATE, SOURCE_TYPE)
       select uv.PARTY_ID                 PARTY_ID,
              uv.VIP_CODE                 VIP_CODE,
              uv.AS_OF_DATE               AS_OF_DATE,
              sysdate                     EFFECTIVE_DATE,
              g_vip_info_source_type_etl SOURCE_TYPE
         from (
               --取日个人客户资产总额对应VIP等级、贷款总额对应VIP等级、卡系统个人客户对应VIP等级中最大的
               select u.PARTY_ID PARTY_ID,
                       max(u.VIP_CODE) VIP_CODE,
                       max(u.AS_OF_DATE) AS_OF_DATE
                 From (
                        /*                                             */
                        --日个人客户贷款总额对应VIP等级
                        select clv.PARTY_ID    PARTY_ID,
                                xevcc.vip_code VIP_CODE,
                                clv.AS_OF_DATE AS_OF_DATE
                          from (select xalcny.PARTY_ID PARTY_ID,
                                        sum(xalcny.ORG_BOOK_BAL *
                                            NVL(oerh.EXCHANGE_RATE, 1)) CUR_AMOUNT_BAL,
                                        max(xalcny.AS_OF_DATE) AS_OF_DATE
                                   from (select xal.PARTY_ID,
                                                xal.ORG_BOOK_BAL,
                                                xal.AS_OF_DATE,
                                                CURRENCY
                                           from (select PARTY_ID,
                                                        PROD_CODE,
                                                        AS_OF_DATE,
                                                        ORG_BOOK_BAL,
                                                        CUR_BOOK_BAL,
                                                        CREDIT_RATING_CD,
                                                        CURRENCY,
                                                        row_number() over(partition by PARTY_ID, PROD_CODE order by AS_OF_DATE desc) as row_number
                                                   from XX_ACCTINFO_LOAN) xal
                                           join XX_ECIF_VIP_STAT_MODE vsm on xal.PROD_CODE =
                                                                             vsm.PROD_CD
                                          where xal.row_number = 1
                                            and xal.CREDIT_RATING_CD =
                                                g_credit_rating_cd_normal
                                            and xal.CUR_BOOK_BAL > 0
                                            and vsm.COUNT_MODE = g_vip_count_mode_dk
                                            and vsm.STATUS =
                                                g_vip_mode_count_status_a) xalcny
                                   left join (select FROM_CURRENCY_CD,
                                                    EXCHANGE_RATE,
                                                    row_number() over(partition by FROM_CURRENCY_CD, TO_CURRENCY_CD order by EFFECTIVE_DATE desc) as row_number
                                               from OFSA_EXCHANGE_RATE_HIST
                                              where TO_CURRENCY_CD = g_currency_cd) oerh on (xalcny.CURRENCY =
                                                                                            oerh.FROM_CURRENCY_CD and
                                                                                            row_number = 1)
                                  group by PARTY_ID) clv
                          join XX_ECIF_VIP_CHK_CONDIT xevcc on (clv.CUR_AMOUNT_BAL >=
                                                               xevcc.count_lowest and
                                                               clv.CUR_AMOUNT_BAL <
                                                               xevcc.count_highest)
                                                            or (clv.CUR_AMOUNT_BAL >=
                                                               xevcc.count_lowest and
                                                               xevcc.count_highest is null)
                         where xevcc.COUNT_MODE = g_vip_count_mode_dk
                        Union All
                        --卡系统个人客户对应VIP等级
                        Select PARTY_ID, VIP_CODE, AS_OF_DATE
                          from (select party_id,
                                       vip_code,
                                       as_of_date,
                                       row_number() over(partition by party_id order by vip_code desc) as row_number
                                  from XX_ECIF_VIP_INFO
                                 where source_type = g_vip_info_sourec_type_card
                                   and vip_code is not null)
                         where row_number = 1) u
                Group by PARTY_ID) uv
         left join (
                    --OFDM中系统已判断个人客户VIP等级
                    select evi.PARTY_ID, evi.AS_OF_DATE, evi.VIP_CODE
                      from (select party_id,
                                    as_of_date,
                                    vip_code,
                                    row_number() over(partition by party_id order by as_of_date desc) as row_number
                               from XX_ECIF_VIP_INFO
                              where source_type = g_vip_info_source_type_etl) evi
                     where row_number = 1) viv on uv.PARTY_ID = viv.PARTY_ID
        where uv.VIP_CODE > NVL(viv.VIP_CODE, '');
     commit;
   exception
     when others then
       null;
    
   end CHECK_VIP_PRC;

   procedure insert_vip_prc(v_party_id in number, v_vip_code in varchar2) is
   begin
  
     insert into bocofsa.xx_ecif_vip_info
       (party_id, as_of_date,vip_code,effective_date, source_type)
     values
       (v_party_id, sysdate,v_vip_code,   sysdate, 'CUST');
     commit;
   exception
     when others then
       null;
   end insert_vip_prc;

end XX_ECIF_VIP_PKG;

分享到:
评论

相关推荐

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

    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 包(package) 7 1.3.1 包的基本结构 7 1.3.2 包的创建 7 1.3.3 调用包中...

    Oracle存储过程、函数和包

    - **权限需求**:创建存储过程需要`CREATE PROCEDURE`或`CREATE ANY PROCEDURE`权限。 - **基本语法**: ```sql CREATE [OR REPLACE] PROCEDURE 存储过程名 [(参数 [IN|OUT|INOUT] 数据类型)] {AS | IS} [说明...

    Oracle 存储过程学习文档

    **2.1 创建存储过程:** 存储过程的创建使用`CREATE OR REPLACE PROCEDURE`语句。例如: ```sql CREATE OR REPLACE PROCEDURE my_procedure (p_param IN NUMBER) AS BEGIN -- 过程体 END; ``` - `IN`表示参数是...

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    接下来,我们创建了一个名为 TESTPACKAGE 的包,包中包含了一个名为 TESTC 的存储过程。存储过程 TESTC 有一个输出参数,类型为游标类型。我们使用 CALLABLESTATEMENT 来调用存储过程,获取游标类型参数的值,并将其...

    oralce存储过程包跨用户访问表

    创建存储过程包 首先,在拥有相应表的用户下创建一个存储过程包。这个存储过程包用于实现特定的业务逻辑,例如查询、更新或插入操作。 ```plsql CREATE OR REPLACE PACKAGE pkg_example AS PROCEDURE proc_query_...

    Delphi中调用oracle的存储过程返回数据集

    首先,在 Oracle 数据库中创建一个包(PACKAGE),包中包含多个存储过程,每个存储过程可以返回一个游标(REF CURSOR),该游标可以返回多行记录集。下面是一个示例包的定义: ```sql CREATE OR REPLACE PACKAGE PKG...

    java调用sqlserver存储过程.pdf

    1. 创建存储过程 在 SQL Server 中,存储过程是一个预编译的 SQL 语句集,可以对数据库中的数据进行操作。在本例中,创建了一个名为 `InsertUser` 的存储过程,该存储过程用于向 `BookUser` 表中插入新用户信息。 ...

    存储过程,存储函数和触发器

    创建存储过程使用`CREATE PROCEDURE`语句。其基本语法如下: ```sql CREATE [OR REPLACE] PROCEDURE 过程名 (参数列表) AS BEGIN -- PL/SQL代码块 END; ``` 其中`参数列表`定义了存储过程中使用的输入参数或输出...

    oracle存储过程+日期+定时任务Job

    在 Oracle 中,可以使用 `DBMS_SCHEDULER` 包来创建定时任务,以自动调用存储过程。定时任务的创建主要包括以下几个步骤: 1. **定义程序**: - 使用 `DBMS_SCHEDULER.create_program` 创建程序对象。 - 需要指定...

    java 调用存储过程返回单个值

    #### 2.2 创建存储过程 假设我们有一个名为`userManage`的存储过程,它接受多个输入参数并返回一个整数值。这个存储过程可能定义如下: ```sql CREATE PROCEDURE userManage ( OUT return_value INT, IN p_...

    oracle 自动执行存储过程

    #### 三、创建存储过程 首先,我们需要创建一个简单的存储过程作为示例。在这个例子中,我们将创建一个名为`INF_HstIshISTR`的存储过程,用于向表`abc`中插入一条记录。 ```sql CREATE OR REPLACE PACKAGE mqce IS...

    Oracle第7章存储过程操作.pptx

    在PL/SQL中,创建存储过程使用`CREATE OR REPLACE PROCEDURE`语句,调用存储过程则通过简单的函数调用实现。查看存储过程定义使用`DESCRIBE`或`SELECT`从数据字典视图中获取信息,修改存储过程使用`ALTER PROCEDURE`...

    oracle中的存储过程.函数,包

    #### 创建存储过程 存储过程是一种在数据库中存储的预编译的SQL和PL/SQL语句集合。它可以在任何时候被调用执行。创建一个简单的存储过程如下: ```sql CREATE OR REPLACE PROCEDURE my_procedure (p_no NUMBER) IS ...

    PLSQL和存储过程练习

    ### 练习四:创建存储过程查询特定条件下的员工信息 练习要求创建一个存储过程,能够返回工资高于3000并且部门号为20的员工信息。 ```sql CREATE OR REPLACE PACKAGE my_package IS TYPE cur_type IS REF CURSOR;...

    Oracle存储过程分页

    ### Oracle存储过程分页知识点详解 #### 一、Oracle存储过程分页原理及实现方法 在Oracle数据库中,实现分页查询通常有两种方法:一种是使用`ROWNUM`伪列,另一种则是通过存储过程实现。其中,使用存储过程进行...

    java调用存储过程小结.pdf

    文档中具体的代码示例涉及了创建存储过程、调用存储过程以及处理存储过程返回结果的全过程。例如,创建一个名为adddept的存储过程,该过程接受三个参数,向dept表中插入一行数据。在Java代码中,通过...

    java连存储过程

    以下是在Oracle数据库中创建存储过程的例子: ```sql CREATE OR REPLACE PROCEDURE addMember ( name IN VARCHAR2(50), address IN VARCHAR2(50) ) AS BEGIN INSERT INTO family (f.name, f.address) VALUES ...

    orcle存储过程

    #### 创建存储过程包:`p_page` 首先,我们创建了一个名为`p_page`的包,这个包包含了两个主要的过程:`Pagination`和`PageRecordsCount`。包的结构如下所示: ```sql create or replace package p_page is TYPE ...

Global site tag (gtag.js) - Google Analytics