`
_____bEn-beN
  • 浏览: 13682 次
社区版块
存档分类
最新评论

简单演示procedure

 
阅读更多
prompt
prompt Creating procedure P_BSS_QUERYACCOUNT
prompt =====================================
prompt
CREATE OR REPLACE PROCEDURE P_BSS_QUERYACCOUNT
/*
    Description  : 查询用户基本的订购信息
          Author : 刘宏宗 57983
    Date         : 2007-06-14
    Version      : VMS V2.0D500
    Caller       : com.huawei.umcp.bss.dao.AccountInfoDAO.query()
    Callee       :
    Comments     : 相关表: T_BSS_ACCOUNTINFO
    History      :
      1.  Date   : 2007-06-14
          Author : 刘宏宗 57983
    Modification : 创建
      2. ......
  */
(
  i_UserNo         VARCHAR2, -- 用户号码
  i_SubboxNo       VARCHAR2,--用户的子邮箱号码
  i_StartTime      DATE, -- 开始时间
  i_EndTime        DATE, -- 结束时间
  i_AreaCode       VARCHAR2, -- 区号
  i_StartNum       NUMBER, -- 起始记录数
  i_EndNum         NUMBER, -- 结束记录数
  i_QueryType      NUMBER, -- 查询类型 1查总数 2查内容  3按号码查询
  o_AccountInfoRef OUT SYS_REFCURSOR, -- 用户返回游标
  o_Count          OUT NUMBER, -- 总记录数(最大返回10000,10001表示超过10000条数据)
  o_Ret            OUT NUMBER -- 返回值
) AS
  v_StartTime DATE;
  v_EndTime   DATE;
BEGIN
  o_Ret := 1;
  o_Count := 0;

  IF i_StartTime IS NULL THEN
    v_StartTime := TO_DATE('1970', 'YYYY');
  ELSE
    v_StartTime := i_StartTime;
  END IF;

  IF i_EndTime IS NULL THEN
    v_EndTime := TO_DATE('2050', 'YYYY');
  ELSE
    v_EndTime := i_EndTime;
  END IF;

  IF i_QueryType = 1 THEN
    -- 判断用户号码是否为空
    IF i_UserNo IS NULL THEN
      SELECT COUNT(1)
        INTO o_Count
        FROM T_BSS_ACCOUNTINFO t
       WHERE ROWNUM < 10001
         AND OPEN_TIME >= v_StartTime
         AND OPEN_TIME <= v_EndTime;
    ELSE
      IF I_AREACODE IS NULL THEN
        SELECT COUNT(1)
          INTO o_Count
          FROM T_BSS_ACCOUNTINFO t
         WHERE ROWNUM < 10001
           AND OPEN_TIME >= v_StartTime
           AND OPEN_TIME <= v_EndTime
           AND PARTCOL_USERNO = SUBSTR(i_UserNo, -3, 2);
      ELSE
        SELECT COUNT(1)
          INTO o_Count
          FROM T_BSS_ACCOUNTINFO t
         WHERE ROWNUM < 10001
           AND AREA_CODE = NVL(i_AreaCode, AREA_CODE)
           AND OPEN_TIME >= v_StartTime
           AND OPEN_TIME <= v_EndTime
           AND PARTCOL_USERNO = SUBSTR(i_UserNo, -3, 2);
      END IF;
    END IF;
    OPEN o_AccountInfoRef FOR
      SELECT NULL FROM dual WHERE 1 = 0;
    o_Ret := 0;
    RETURN;
  END IF;

  IF i_QueryType = 3 THEN
  OPEN o_AccountInfoRef FOR
        SELECT USER_NO,
               LEVEL_ID,
               STATUS,
               OPEN_TIME,
               AREA_CODE,
               PARTCOL_USERNO,
               ADDITIONAL_INFO_1,
               ADDITIONAL_INFO_2,
               ADDITIONAL_INFO_3,
               ATTRIBUTVE_POINT,
               DATASITE_CODE,
               FILESITE_CODE,
               FEE_TYPE,
               COUNTRY_CODE,
               SUBBOX_NO
          FROM T_BSS_ACCOUNTINFO
         WHERE USER_NO = I_USERNO
           AND ((I_AREACODE IS NULL) or(AREA_CODE = I_AREACODE ))
           AND OPEN_TIME >= v_StartTime
           AND OPEN_TIME <= v_EndTime
           AND PARTCOL_USERNO = substr(i_UserNo, -3, 2);
          
      SELECT COUNT(1)
        INTO o_Count
        FROM T_BSS_ACCOUNTINFO t
       WHERE USER_NO = i_UserNo
         AND ((I_AREACODE IS NULL) or(AREA_CODE = I_AREACODE ))
         AND OPEN_TIME >= v_StartTime
         AND OPEN_TIME <= v_EndTime
         AND PARTCOL_USERNO = substr(i_UserNo, -3, 2);

  o_Ret := 0;
  RETURN;
  END IF;

  -- 判断用户号码是否为空
  /*IF i_UserNo IS NULL THEN
    -- 不附带条件查询所有订购信息
    OPEN o_AccountInfoRef FOR
      SELECT USER_NO,
             LEVEL_ID,
             STATUS,
             OPEN_TIME,
             AREA_CODE,
             PARTCOL_USERNO,
             ADDITIONAL_INFO_1,
             ADDITIONAL_INFO_2,
             ADDITIONAL_INFO_3,
             ATTRIBUTVE_POINT,
             DATASITE_CODE,
             FEE_TYPE
        FROM (SELECT USER_NO,
                     LEVEL_ID,
                     STATUS,
                     OPEN_TIME,
                     AREA_CODE,
                     PARTCOL_USERNO,
                     ADDITIONAL_INFO_1,
                     ADDITIONAL_INFO_2,
                     ADDITIONAL_INFO_3,
                     ATTRIBUTVE_POINT,
                     DATASITE_CODE,
                     FEE_TYPE,
                     ROWNUM ROWNO
                FROM T_BSS_ACCOUNTINFO
               WHERE OPEN_TIME >= v_StartTime
                 AND OPEN_TIME <= v_EndTime) a
       WHERE a.ROWNO >= nvl(i_StartNum, 0)
         AND a.ROWNO <= nvl(i_EndNum, 15);

    -- 查询数据库中符合条件的用户数量
    SELECT COUNT(1)
      INTO o_Count
      FROM T_BSS_ACCOUNTINFO t
     WHERE ROWNUM < 10001
       AND OPEN_TIME >= v_StartTime
       AND OPEN_TIME <= v_EndTime;

  ELSE*/
      -- 附带UserNo条件查询相应订购信息
      OPEN o_AccountInfoRef FOR
        SELECT USER_NO,
               LEVEL_ID,
               STATUS,
               OPEN_TIME,
               AREA_CODE,
               PARTCOL_USERNO,
               ADDITIONAL_INFO_1,
               ADDITIONAL_INFO_2,
               ADDITIONAL_INFO_3,
               ATTRIBUTVE_POINT,
               DATASITE_CODE,
               FILESITE_CODE,
               FEE_TYPE,
               COUNTRY_CODE
          FROM T_BSS_ACCOUNTINFO
         WHERE USER_NO = I_USERNO
           AND ((i_SubboxNo IS NULL AND SUBBOX_NO IS NULL) or (SUBBOX_NO = i_SubboxNo))
           AND ((I_AREACODE IS NULL) or(AREA_CODE = I_AREACODE ))
           AND OPEN_TIME >= v_StartTime
           AND OPEN_TIME <= v_EndTime
           AND PARTCOL_USERNO = substr(i_UserNo, -3, 2);

      SELECT COUNT(1)
        INTO o_Count
        FROM T_BSS_ACCOUNTINFO t
       WHERE USER_NO = i_UserNo
        AND ((i_SubboxNo IS NULL AND SUBBOX_NO IS NULL) or (SUBBOX_NO = i_SubboxNo))
        AND ((I_AREACODE IS NULL) or(AREA_CODE = I_AREACODE ))
         AND ROWNUM < 10001
         AND OPEN_TIME >= v_StartTime
         AND OPEN_TIME <= v_EndTime
         AND PARTCOL_USERNO = substr(i_UserNo, -3, 2);
  /*END IF;*/

  o_Ret := 0;
  RETURN;
EXCEPTION
  WHEN OTHERS THEN
    o_Ret := 1;
    IF o_AccountInfoRef%ISOPEN THEN
      CLOSE o_AccountInfoRef;
    END IF;
    OPEN o_AccountInfoRef FOR
      SELECT NULL FROM dual WHERE 1 = 0;
    P_COMM_ADDEXCEPTION('P_BSS_QUERYACCOUNT', SQLERRM, SQLCODE, 'i_UserNo=' || i_UserNo);
END P_BSS_QUERYACCOUNT;
/
分享到:
评论

相关推荐

    camel-stored-procedure:一个简单的项目,展示了一个 bean 的使用,它可以被配置为调用存储过程,作为一个 Camel 组件

    描述这是一个简单的项目,它演示了如何为特定存储过程配置 Spring bean 并参与 Apache Camel 路由。设置和安装设置环境和运行此演示的步骤: 查找可用的 Oracle 数据库环境,或安装 Oracle XE 11g。 转至下载它及其...

    Delphi 隐藏桌面图标 并显示图标.rar

    Delphi 隐藏桌面图标 并显示图标,运行这个小程序后,单击窗口上的对应按钮,即可演示对应的功能,其实实现这个功能挺简单的,可以使用Delphi中内置的函数功能来实现,比如:  procedure TForm1.Button1Click...

    Delphi Trim删除字符串首尾空格的实例.rar

    过滤字符串,替换字符串,删除指定部位的字符串,具体到本例中,是删除字符串开头和结尾处的空格,本例子其实简单,使用内置的Trim函数即可实现,可当作是Delphi Trim函数的用法演示:  procedure TForm1....

    VC 删除已存在的存储过程.rar

    VC 演示在程序中删除已存在的存储过程,VC6存储过程相关操作实例,删除方法很简单,创建对象,如下代码示:  UpdateData(true);  BOOL result;  ADOConn m_AdoConn;  m_AdoConn.OnInitADOConn();  _bstr_t sql;...

    Delphi 获取MonthCalendar中选择的日期.rar

    Delphi 获取MonthCalendar中选择的日期,其实就是完成一个时间、日期的选择功能,年份、月份、日期、时间都可自定义调整并选择,这个简单的例子,可演示Delphi中MonthCalendar的用法,生成一个日期时间选择器功能。...

    Delphi 拖放文件显示路径-支持打开多文件.rar

    Delphi 文件拖放显示路径-支持打开多文件,是一种比较人性化的文件打开方式,拖动文件到Delphi窗口中,即可获取并显示文件路径,本源码还可获取拖放的文件个数,程序运行界面如演示截图所示。拖动文件放入本窗口中,...

    基于Sanic实现一个jsRpc框架

    提供了一个完整的示例代码,演示了如何在Sanic框架下实现一个简单的jsRpc服务端和客户端; 解释了如何处理jsRpc请求和响应,以及如何进行异常处理和错误处理; 提供了一些最佳实践和常见问题的解答。 通过学习这个...

    VC++精品源代码,非常好用

    -VC source-------------------------------------------- dswRename_src.zip a workspace can rename the procedure. Simplecomserver_src.zip demonstration of how to create a ...

    pageshuoming

    VS2005 分页自定义控件,测试环境在:VS2005+SQL2005下通过 &lt;br&gt;演示说明:前台ASPX页(可以绑定的控件是:DataGrid,GridView,Repeater,DataList等等) 1:先注册一下控件,不要跟我说看不懂下面这句 &lt;%@ Register ...

    NS2网络模拟器的原理和应用_part1

     3.6 过程(Procedure)  3.7 数组(Array)  3.8 类(Class)  3.9 字符串(String)  3.10 输出(Output)  3.11 列表(List)  3.12 Tcl内置命令  第4章 NS2语法  4.1 一个简单的例子  4.2 基本语法 第二...

    NS2网络模拟器的原理和应用_part5

     3.6 过程(Procedure)  3.7 数组(Array)  3.8 类(Class)  3.9 字符串(String)  3.10 输出(Output)  3.11 列表(List)  3.12 Tcl内置命令  第4章 NS2语法  4.1 一个简单的例子  4.2 基本语法 第二...

    NS2网络模拟器的原理和应用_part2

     3.6 过程(Procedure)  3.7 数组(Array)  3.8 类(Class)  3.9 字符串(String)  3.10 输出(Output)  3.11 列表(List)  3.12 Tcl内置命令  第4章 NS2语法  4.1 一个简单的例子  4.2 基本语法 第二...

    NS2网络模拟器的原理和应用_part3

     3.6 过程(Procedure)  3.7 数组(Array)  3.8 类(Class)  3.9 字符串(String)  3.10 输出(Output)  3.11 列表(List)  3.12 Tcl内置命令  第4章 NS2语法  4.1 一个简单的例子  4.2 基本语法 第二...

    NS2网络模拟器的原理和应用_part4

     3.6 过程(Procedure)  3.7 数组(Array)  3.8 类(Class)  3.9 字符串(String)  3.10 输出(Output)  3.11 列表(List)  3.12 Tcl内置命令  第4章 NS2语法  4.1 一个简单的例子  4.2 基本语法 第二...

    毕业论文 基于Authorware实现企业产品形象设计

    Application of enterprise product figure design based on Authorware &lt;br&gt;[摘 要] 本文结合一个实例,介绍了在基于Authorware的多媒体企业产品形象设计开发过程中对程序进行制作的原则和方法,并简单介绍...

    Oracle 10g 学习笔记

    这个笔记是学习oracle数据库过程中整理出来的,比较详细,适合于初学者。 │ oracle与tomcat端口冲突.txt │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt ... 演示代码.sql

    网管教程 从入门到精通软件篇.txt

    网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    3. scott用户:是个演示用户,是让你学习Oracle用的。 二、 常用命令 学习oracle,首先我们必须要掌握常用的基本命令,oracle中的命令比较多,常用的命令如下: 1. 登录命令(sqlplus) 说明:用于登录到oracle数据库 ...

Global site tag (gtag.js) - Google Analytics