- 浏览: 25802 次
- 性别:
- 来自: 成都
最新评论
动态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查询列名 输出文件
2012-04-27 20:11 1074insert select b.column_name||' ... -
oracle 动态查询 多维数组
2012-03-31 13:57 1580declare /* * 遍历数据库可以打开的表 收集数 ... -
oracle sequence job
2012-03-31 13:06 748declare job1 number; startdat ... -
oracle merge
2012-03-31 13:05 785MERGE INTO EHR_STAFF_ATTEND_DET ... -
oracle 数组
2012-03-31 11:14 674Oracle数组一般可以分为固定数组和可变数组 固定数组 S ...
相关推荐
### Oracle Package 和 Package Body 使用详解 #### 一、Oracle Package 概念介绍 在Oracle数据库中,`Package` 是一种非常强大的工具,它允许开发者将相关的数据类型、常量、变量、游标、子程序(过程和函数)等...
oracle db内部的package全部是加密的,需要解密使用oracle wrap加密过的程序包,而unwrap解密工具可以拿到明文的package源代码。 解密的理论依据都来源于 "The oracle hacker's handbook" by David Litchfield 这...
Oracle中的Package对象是一种独特的特性,它体现了Oracle数据库的面向对象编程理念。Package允许开发者像创建对象一样定义一组相关的过程、函数、类型以及全局变量,这些元素共享同一个命名空间,提高了代码的组织性...
Oracle JDBC Driver Package,简称为Oracle JDBC驱动包,是Oracle公司为Java开发者提供的用于与Oracle数据库进行交互的重要组件。这个正版的驱动包确保了开发者能够安全、高效地通过Java应用程序访问和操作Oracle...
针对这一需求,有一个专门的Oracle Package包,它支持UTF8编码,能够帮助我们实现汉字到拼音的转换。这个包通常包含了存储过程和函数,用于处理汉字与拼音之间的转换逻辑。 在Oracle中,这样的包通常是开发人员...
Oracle 11gR2 pl/sql package and type 参考手册
脚本包含一个oracle的package,可以实现汉字转换成拼音和拼音首字母
C#中调用ORACLE的PACKAGE里方法和存储过程的应用 在实际开发中,C#与ORACLE数据库的集成是一个非常重要的 topic,本文将详细介绍如何在C#中调用ORACLE的PACKAGE里的方法和存储过程。 首先,我们需要在ORACLE数据库...
这个"oracle汉字转拼音package_(UTF8)"是一个专门为UTF8字符集设计的Oracle PL/SQL包,用于解决这类问题。UTF8是国际上广泛使用的多语言编码标准,能有效地支持各种语言,包括中文。 在Oracle中,PL/SQL是一种...
"oracle_11g_package.zip"压缩包包含了在Linux环境下安装Oracle 11g RAC时可能会缺失的i386架构的RPM依赖包。这些依赖包对于确保Oracle 11g RAC的稳定运行至关重要。 首先,"compat-libstdc++-33"是兼容性的C++标准...
Oracle数据库中的Package是一种高级的模块化编程工具,它允许开发者将相关的过程、函数、变量和类型等编程元素组合在一起,形成一个逻辑上的整体。Package在Oracle数据库系统中扮演着重要的角色,提供了更好的代码...
pl_sql创建包,简单易懂,对于初学者......
centos7 安装oracle所需其他包,在安装oracle的过程中,有些包用yum的方式下载不了,故zip打包的是oracle所属的安装包,文件是rpm格式文件,这是centos7安装oracle所需离线包
oracle SQL Package破解工具
Oracle Package有简化应用设计、提高应用性能、实现信息隐藏、子程序重载作用。本文举例说明了Oracle Package中返回游标的写法和调用。
oracleasm-support、oracleasmlib、kernel-firmware、bfa-firmware、kmod-oracleasm及安装步骤
"Oracle DB+ASM package for RedHat 6.5"提供的正是完成这一配置所需的一系列软件包。 首先,让我们详细了解一下Oracle Database 12c。Oracle Database 12c是Oracle公司推出的一个重要版本,其主要特性是引入了多...
使用上述`oracle汉字转拼音package_获得全拼——拼音首字母_拼音截取等.sql`文件,可能包含的就是创建这样一个存储过程或包的SQL脚本。脚本中可能定义了以下过程: ```sql CREATE OR REPLACE AND COMPILE JAVA ...
免费,轻量的Oracle数据库工具,库和SDK,用于构建应用程序并将其连接到Oracle数据库实例。 此为集合包,版本均为11.2.0.4.0,适用于64位的Linux系统,包含zip及rpm两种格式: Basic Basic Light JDBC Supplement ...
数据库对比工具是IT行业中一种非常实用的软件,主要用于在不同数据库之间进行结构比较,以便于数据库的维护、升级和...无论是对SQL Server还是Oracle数据库,都能提供精准且全面的比较服务,为企业的数据管理带来便利。