`
kzerg
  • 浏览: 25859 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

oracle package比较

阅读更多

动态SQL TABLE使用
判断数据

===========================================
2011-10-19
判断 函数

create or replace function F_CAN_APPNO_RECALL(app_no in varchar2) return boolean is
  app_count number;
  v_SQLStatement varchar2(512);
  SEND_TIME DATE;
  TYPE cursor_type IS REF CURSOR;
  C_CHKTIME cursor_type;
  i number;--控制查询语句只循环一次
begin
 select count(c_app_no) into app_count from web_app_base a where a.c_app_no=app_no and a.c_app_typ='A' and a.c_prod_no in('0326','0320')
        and a.c_app_status in ('2','O','4') and ROUND(TO_NUMBER(sysdate - a.t_insrnc_bgn_tm)) > -1;
 if(app_count=1)then
          i:=0;
          v_SQLStatement:='select T_SEND_TM from web_trd_app_send_packet where c_app_no ='''|| app_no ||''' order by t_send_tm desc';
          OPEN C_CHKTIME FOR v_SQLStatement;
            loop
               
                FETCH C_CHKTIME INTO  SEND_TIME;
                EXIT WHEN C_CHKTIME%notfound;
                i:=i+1;
                EXIT WHEN i>1;
                IF (FLOOR(SEND_TIME-sysdate) <= -10 ) THEN
                    return true;
                 END IF;
            END LOOP;
          CLOSE C_CHKTIME;
 end if;
  return false;
Exception
  when others then
       return false;
end F_CAN_APPNO_RECALL;

 

 

===========================================
不使用游标

create or replace function F_CAN_APPNO_RECALL(app_no in varchar2) return boolean is
  app_count number;
  SEND_TIME DATE;
begin
 select count(c_app_no) into app_count from web_app_base a where a.c_app_no=app_no and a.c_app_typ='A' and a.c_prod_no in('0326','0320')
        and a.c_app_status in ('2','O','4') and ROUND(TO_NUMBER(sysdate - a.t_insrnc_bgn_tm)) > -1;
 if(app_count=1)then
        select max(T_SEND_TM) into SEND_TIME from web_trd_app_send_packet where c_app_no =app_no;
        
        IF (FLOOR(SEND_TIME-sysdate) < -10 ) THEN
           return true;
        END IF;
 end if;
  return false;
Exception
  when others then
       return false;
end F_CAN_APPNO_RECALL;

 

 

============================================
包头

create or replace package pkg_finapp_validate_recall is

  -- Author  : CO-ZHANGBAIYU001
  -- Created : 2011-10-19 15:17:03
  -- Purpose : 

  --输入输出参数数组类型
  TYPE Type_Array IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;

  --function F_CAN_APPNO_RECALL(app_no in varchar2, Validate_Type number) return boolean;
  --校验
  procedure P_appno_validate(input_list in Type_Array, Validate_Type in number , output_list out Type_Array);
  
end pkg_finapp_validate_recall;

 

 

============================================
包体

create or replace package body pkg_finapp_validate_recall is


  -- 创建 : 2011-10-19 17:01:34
  -- 用途 : 审核校验
  function F_CAN_APPNO_RECALL(app_no in varchar2, Validate_Type number) return boolean is
    app_count number;
    SEND_TIME DATE;
  begin
    IF(Validate_Type = 0) THEN
        select count(c_app_no) into app_count from web_app_base a where a.c_app_no=app_no and a.c_app_status in ('2','O','4') and a.c_app_typ='A'
           and a.c_prod_no in('0326','0320') and ROUND(TO_NUMBER(sysdate - a.t_insrnc_bgn_tm)) > -1;
      ELSE
        select count(c_app_no) into app_count from web_app_base a where a.c_app_no=app_no and a.c_app_status in ('8') and a.c_app_typ='A'
           and a.c_prod_no in('0326','0320') and ROUND(TO_NUMBER(sysdate - a.t_insrnc_bgn_tm)) > -1;
    END IF;

    if(app_count=1) then
          select max(T_SEND_TM) into SEND_TIME from web_trd_app_send_packet where c_app_no =app_no;
         
          IF (FLOOR(SEND_TIME-sysdate) < -10 ) THEN
             RETURN TRUE;
          END IF;
    END IF;
    RETURN FALSE;
    EXCEPTION
      WHEN OTHERS THEN
           RETURN FALSE;
  end F_CAN_APPNO_RECALL;


   -- 创建 : 2011-10-19 17:01:34
  -- 用途 : 校验内容
  procedure P_appno_validate(input_list in Type_Array, Validate_Type in number , output_list out Type_Array) is
    j number:=1;
  begin
    FOR i IN 1..input_list.count LOOP
        IF F_CAN_APPNO_RECALL(input_list(i), Validate_Type) THEN
           output_list(j):=input_list(i);
           j:=j+1;
        END IF;
    END LOOP;
  end P_appno_validate;

end pkg_finapp_validate_recall;

 

 

============================================

 

CREATE OR REPLACE PACKAGE BODY PKG_EPCIS_AUTO_APP_VALIDATE IS

  /*******************************************************
  NAME         :P_EPCIS_AUTO_APP_VALIDATE
  SUMMARY      :
  PARAM        :VARCHAR2 -  App_No           
                NUMBER  -   Validate_Ret     
  DATE         :2011-10-19
  AUTHOR       :CO-ZHANGBAIYU001
  *******************************************************/

  PROCEDURE P_EPCIS_AUTO_APP_VALIDATE(App_No        IN VARCHAR2,
                                      Validate_Type IN NUMBER,
                                      Validate_Ret  OUT NUMBER) IS
    V_ERROR          VARCHAR2(400);
    V_SEND_TIME      NUMBER;
    V_DATA_COUNT     NUMBER;
    V_DAY_TO_INS_BGN NUMBER;
    V_PLY_START_TIME DATE;
    V_PLY_END_TIME   DATE;
    V_PROD_NO        VARCHAR2(50);
  BEGIN
    Validate_Ret := 0;
    IF Validate_Type NOT IN (0, 1) THEN
      RAISE_APPLICATION_ERROR(-20200, '校验类型应为0或1.');
    END IF;
    --判断
    SELECT A.C_PROD_NO
      INTO V_PROD_NO
      FROM WEB_APP_BASE A
     WHERE A.C_APP_NO = App_No;
    --判断数据正确性
    IF V_PROD_NO = '0325' THEN
      SELECT COUNT(A.C_APP_NO)
        INTO V_DATA_COUNT
        FROM WEB_APP_BASE A, WEB_APP_VHL B
       WHERE A.C_APP_NO = B.C_APP_NO
         AND A.C_APP_NO = App_No;
      V_ERROR := '找不到数据.';
    ELSIF V_PROD_NO = '0320' OR V_PROD_NO = '0326' THEN
      SELECT COUNT(A.C_APP_NO)
        INTO V_DATA_COUNT
        FROM WEB_TRD_APP_SEND_PACKET A, WEB_APP_BASE B, WEB_APP_VHL C
       WHERE A.C_QRY_CDE = C.C_QRY_CDE
         AND B.C_APP_NO = C.C_APP_NO
         AND B.C_APP_NO = App_No;
      V_ERROR := '找不到数据.';
    ELSE
      RETURN;
    END IF;
    IF V_DATA_COUNT = 0 THEN
      RAISE_APPLICATION_ERROR(-20201, V_ERROR);
    END IF;

    
    IF V_PROD_NO = '0325' THEN
      IF Validate_Type = 0 THEN
       
        SELECT DAY_TO_BGN
          INTO V_DAY_TO_INS_BGN
          FROM (SELECT TRUNC(SYSDATE) - TRUNC(A.T_INSRNC_BGN_TM) DAY_TO_BGN
                  FROM WEB_APP_BASE A, WEB_APP_VHL B
                 WHERE A.C_APP_NO = B.C_APP_NO
                   AND A.C_APP_NO = App_No
                   AND A.C_PROD_NO IN ('0325')
                   AND A.C_APP_STATUS IN ('2', 'O', '4')
                   AND A.C_APP_TYP = 'A'
                 ORDER BY DAY_TO_BGN DESC)
         WHERE ROWNUM < 2;
      ELSIF Validate_Type = 1 THEN
        
        SELECT DAY_TO_BGN
          INTO V_DAY_TO_INS_BGN
          FROM (SELECT TRUNC(SYSDATE) - TRUNC(A.T_INSRNC_BGN_TM) DAY_TO_BGN
                  FROM WEB_APP_BASE A, WEB_APP_VHL B
                 WHERE A.C_APP_NO = B.C_APP_NO
                   AND A.C_APP_NO = App_No
                   AND A.C_PROD_NO IN ('0325')
                   AND A.C_APP_STATUS IN ('8')
                   AND A.C_APP_TYP = 'A'
                 ORDER BY DAY_TO_BGN DESC)
         WHERE ROWNUM < 2;
      END IF;
    ELSIF V_PROD_NO = '0320' OR V_PROD_NO = '0326' THEN
      IF Validate_Type = 0 THEN
        
        SELECT T_SEND_TM, DAY_TO_BGN
          INTO V_SEND_TIME, V_DAY_TO_INS_BGN
          FROM (SELECT TRUNC(SYSDATE) - TRUNC(C.T_SEND_TM) T_SEND_TM,
                       TRUNC(SYSDATE) - TRUNC(A.T_INSRNC_BGN_TM) DAY_TO_BGN
                  FROM WEB_APP_BASE            A,
                       WEB_APP_VHL             B,
                       WEB_TRD_APP_SEND_PACKET C
                 WHERE A.C_APP_NO = B.C_APP_NO
                   AND B.C_QRY_CDE = C.C_QRY_CDE
                   AND A.C_APP_NO = App_No
                   AND A.C_PROD_NO IN ('0326', '0320')
                      AND A.C_APP_STATUS IN ('2', 'O', '4')
                   AND A.C_APP_TYP = 'A'
                 ORDER BY C.T_SEND_TM DESC)
         WHERE ROWNUM < 2;
      ELSIF Validate_Type = 1 THEN
        
        SELECT T_SEND_TM, DAY_TO_BGN
          INTO V_SEND_TIME, V_DAY_TO_INS_BGN
          FROM (SELECT TRUNC(SYSDATE) - TRUNC(C.T_SEND_TM) T_SEND_TM,
                       TRUNC(SYSDATE) - TRUNC(A.T_INSRNC_BGN_TM) DAY_TO_BGN
                  FROM WEB_APP_BASE            A,
                       WEB_APP_VHL             B,
                       WEB_TRD_APP_SEND_PACKET C
                 WHERE A.C_APP_NO = B.C_APP_NO
                   AND B.C_QRY_CDE = C.C_QRY_CDE
                   AND A.C_APP_NO = App_No
                   AND A.C_PROD_NO IN ('0326', '0320')
                   AND A.C_APP_STATUS IN ('8')
                   AND A.C_APP_TYP = 'A'
                 ORDER BY C.T_SEND_TM DESC)
         WHERE ROWNUM < 2;
      END IF;
      
      IF V_SEND_TIME >= 10 THEN
        
        Validate_Ret := 2;
        RETURN;
      END IF;
    END IF;
    
    IF V_DAY_TO_INS_BGN > 0 THEN
       Validate_Ret := 1;
      RETURN;
    END IF;

    --重复投保校验
    SELECT A.T_INSRNC_BGN_TM, A.T_INSRNC_END_TM
      INTO V_PLY_START_TIME, V_PLY_END_TIME
      FROM WEB_APP_BASE A
     WHERE A.C_APP_NO = App_No ; 
     FOR REC_DIFF_TIME IN (SELECT V_PLY_END_TIME -
                                 A.T_INSRNC_BGN_TM DIFF_TIME1,
                                 V_PLY_START_TIME -
                                 A.T_INSRNC_END_TM DIFF_TIME2
                            FROM WEB_PLY_BASE A, WEB_PLY_VHL B
                           WHERE A.C_APP_NO = B.C_APP_NO
                             AND A.C_PLY_STS = 'I'
                             AND A.C_PROD_NO = V_PROD_NO
                             AND B.C_FRM_NO IN
                                 (SELECT C_FRM_NO
                                    FROM WEB_APP_VHL A
                                   WHERE A.C_APP_NO = App_No)) LOOP
      IF (REC_DIFF_TIME.DIFF_TIME1 > 0 AND REC_DIFF_TIME.DIFF_TIME2 < 0) THEN
        Validate_Ret := 3;
        RETURN;
      END IF;
    END LOOP;

  END P_EPCIS_AUTO_APP_VALIDATE;

END PKG_EPCIS_AUTO_APP_VALIDATE;

 

分享到:
评论

相关推荐

    Oracle package

    ### Oracle Package 和 Package Body 使用详解 #### 一、Oracle Package 概念介绍 在Oracle数据库中,`Package` 是一种非常强大的工具,它允许开发者将相关的数据类型、常量、变量、游标、子程序(过程和函数)等...

    ORACLE 内置package解密工具(unwrap )

    oracle db内部的package全部是加密的,需要解密使用oracle wrap加密过的程序包,而unwrap解密工具可以拿到明文的package源代码。 解密的理论依据都来源于 "The oracle hacker's handbook" by David Litchfield 这...

    Oracle中的package对象

    Oracle中的Package对象是一种独特的特性,它体现了Oracle数据库的面向对象编程理念。Package允许开发者像创建对象一样定义一组相关的过程、函数、类型以及全局变量,这些元素共享同一个命名空间,提高了代码的组织性...

    oracle jdbc diver package 正版

    Oracle JDBC Driver Package,简称为Oracle JDBC驱动包,是Oracle公司为Java开发者提供的用于与Oracle数据库进行交互的重要组件。这个正版的驱动包确保了开发者能够安全、高效地通过Java应用程序访问和操作Oracle...

    oracle汉字转拼音package包-支持UTF8

    针对这一需求,有一个专门的Oracle Package包,它支持UTF8编码,能够帮助我们实现汉字到拼音的转换。这个包通常包含了存储过程和函数,用于处理汉字与拼音之间的转换逻辑。 在Oracle中,这样的包通常是开发人员...

    Oracle 11gR2 pl/sql package and type 参考手册

    Oracle 11gR2 pl/sql package and type 参考手册

    汉字转成拼音和拼音首字母的 oracle 的package

    脚本包含一个oracle的package,可以实现汉字转换成拼音和拼音首字母

    C#中调用ORACLE的PACKAGE里方法和存储过程的应用

    C#中调用ORACLE的PACKAGE里方法和存储过程的应用 在实际开发中,C#与ORACLE数据库的集成是一个非常重要的 topic,本文将详细介绍如何在C#中调用ORACLE的PACKAGE里的方法和存储过程。 首先,我们需要在ORACLE数据库...

    oracle汉字转拼音package_(UTF8)

    这个"oracle汉字转拼音package_(UTF8)"是一个专门为UTF8字符集设计的Oracle PL/SQL包,用于解决这类问题。UTF8是国际上广泛使用的多语言编码标准,能有效地支持各种语言,包括中文。 在Oracle中,PL/SQL是一种...

    oracle_11g_package.zip

    "oracle_11g_package.zip"压缩包包含了在Linux环境下安装Oracle 11g RAC时可能会缺失的i386架构的RPM依赖包。这些依赖包对于确保Oracle 11g RAC的稳定运行至关重要。 首先,"compat-libstdc++-33"是兼容性的C++标准...

    Oracle数据库Package

    Oracle数据库中的Package是一种高级的模块化编程工具,它允许开发者将相关的过程、函数、变量和类型等编程元素组合在一起,形成一个逻辑上的整体。Package在Oracle数据库系统中扮演着重要的角色,提供了更好的代码...

    oracle_package

    pl_sql创建包,简单易懂,对于初学者......

    centos7-oracle-package.zip

    centos7 安装oracle所需其他包,在安装oracle的过程中,有些包用yum的方式下载不了,故zip打包的是oracle所属的安装包,文件是rpm格式文件,这是centos7安装oracle所需离线包

    oracle SQL Package破解工具2

    oracle SQL Package破解工具

    Oracle Package中返回游标的写法和调用

    Oracle Package有简化应用设计、提高应用性能、实现信息隐藏、子程序重载作用。本文举例说明了Oracle Package中返回游标的写法和调用。

    Oracle_Linux6.3_oracleasm_Package_installstep

    oracleasm-support、oracleasmlib、kernel-firmware、bfa-firmware、kmod-oracleasm及安装步骤

    Oracle DB+ASM package for RedHat 6.5

    "Oracle DB+ASM package for RedHat 6.5"提供的正是完成这一配置所需的一系列软件包。 首先,让我们详细了解一下Oracle Database 12c。Oracle Database 12c是Oracle公司推出的一个重要版本,其主要特性是引入了多...

    oracle package汉字转拼音 简拼

    使用上述`oracle汉字转拼音package_获得全拼——拼音首字母_拼音截取等.sql`文件,可能包含的就是创建这样一个存储过程或包的SQL脚本。脚本中可能定义了以下过程: ```sql CREATE OR REPLACE AND COMPILE JAVA ...

    Oracle Instant Client Package For Linux(x64) - Version 11.2.0.4.0

    免费,轻量的Oracle数据库工具,库和SDK,用于构建应用程序并将其连接到Oracle数据库实例。 此为集合包,版本均为11.2.0.4.0,适用于64位的Linux系统,包含zip及rpm两种格式: Basic Basic Light JDBC Supplement ...

    数据库对比工具(支持sqlserver ,oracle)

    数据库对比工具是IT行业中一种非常实用的软件,主要用于在不同数据库之间进行结构比较,以便于数据库的维护、升级和...无论是对SQL Server还是Oracle数据库,都能提供精准且全面的比较服务,为企业的数据管理带来便利。

Global site tag (gtag.js) - Google Analytics