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

简单演示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;
/
分享到:
评论

相关推荐

    rpc-Remote Procedure Call源码1

    在这个“rpc-Remote Procedure Call源码1”的压缩包中,包含了多个示例项目,它们可以帮助我们深入理解RPC的工作原理。 1. RPC基本概念: - 远程调用:RPC使得开发者可以像调用本地函数一样调用远程服务器上的函数...

    ABAQUS CAE procedure

    这些工具可以从二进制输出数据库读取数据,并提供了多种展示结果的方式,例如色彩等值线图、动画演示、变形形状图和X-Y曲线图等。 #### 三、ABAQUS模型的组成部分 一个完整的ABAQUS模型(即FEM模型)包含多个不同的...

    chord算法演示源代码

    这个"chord算法演示源代码"是一个使用C++编程语言在Visual Studio 2008环境下编写的控制台应用程序,它提供了对Chord算法的直观展示。 Chord算法的核心概念是将网络中的节点通过一个固定大小的ID空间进行映射,每个...

    Delphi关于链表的演示

    Delphi是一款强大的面向对象的 Pascal 编程语言,而链表是C++编程中常见的数据结构之一,因此,这个演示将帮助我们理解如何在Delphi中实现类似C++的链表功能。 首先,我们需要了解链表的基本概念。链表不同于数组,...

    Delphi演示鼠标悬停显示数据..rar

    这个“Delphi演示鼠标悬停显示数据”项目可能是一个示例程序,它展示了如何在Delphi应用中实现鼠标悬停时动态显示相关信息的功能。这个功能在很多用户界面设计中都很常见,比如图表分析、数据库浏览或自定义控件等...

    在Delphi中动态创建和拖动控件的演示..rar

    本演示将详细解释如何实现这一功能。 首先,动态创建控件通常涉及TControl类的子类,如TButton、TLabel或TEdit等。在Delphi中,我们可以通过以下步骤来创建一个动态的控件: 1. 在代码中声明控件变量,例如: ```...

    哥德巴赫猜想Delphi演示..rar

    这个猜想简单来说,就是任何大于2的偶数都可以表示为两个质数之和。尽管经过了无数尝试,至今仍未找到一个通用的证明方法。然而,这并不妨碍我们通过编程来模拟和验证这一猜想。 Delphi,作为一个强大的面向对象的 ...

    delphi取得鼠标位置的演示

    在提供的"鼠标位置"源程序中,可能包含了类似的逻辑,演示了如何在Delphi程序中实时跟踪和显示鼠标的当前位置。通过分析这个源程序,开发者可以更好地理解如何在自己的项目中实现相同的功能,无论是为了调试,还是...

    Delphi互斥防止程序多次启动,程序内部互斥演示

    以下是一个简单的示例: ```delphi uses Windows; var MutexHandle: THandle; begin MutexHandle := CreateMutex(nil, False, 'MyUniqueMutexName'); // 创建互斥体,'MyUniqueMutexName'为互斥体名称,必须...

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

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

    Delphi演示Params属性如何使用的小例子.rar

    为了演示Params属性的使用,压缩包中的小例子很可能会包含一个简单的测试程序,它创建一个动态的方法或者过程,并通过Params传递参数。在运行这个例子时,可以看到如何通过Params属性将参数传递到动态创建的代码中,...

    C# WinForm 分页控件以及Demo演示(存储过程,有脚本)超级简单的,你值得拥有

    CREATE PROCEDURE GetPagedData @CurrentPage INT, @PageSize INT AS BEGIN SELECT * FROM YourTable OFFSET (@CurrentPage - 1) * @PageSize ROWS FETCH NEXT @PageSize ROWS ONLY; END ``` 2. 在C#中调用...

    这是一个关于 matlab 的 打开和写入的简单程序,This is an open matlab and write about the simple procedure

    7. **文本文件和二进制文件**:"open.txt"可能是用来演示读写的文本文件。MATLAB可以处理文本文件(ASCII或UTF-8编码)和二进制文件。二进制文件的读写通常使用`fwrite`和`fread`,它们允许直接操作原始字节数据,...

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

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

    Delphi演示TDBGrid组件的斑马线提示功能..rar

    本示例“Delphi演示TDBGrid组件的斑马线提示功能”着重介绍了如何在TDBGrid中实现斑马线效果,以提高数据浏览的可读性和用户体验。 斑马线提示功能,即交替行颜色,通常表现为奇数行和偶数行采用不同的背景色,这样...

    delphi Intraweb14.0.49接收url参数演示, 可是花了一天时间的

    下面是一个简单的示例: ```delphi procedure TMyForm.FormActivate(Sender: TObject); var RequestInfo: TIWRequestInfo; ParamValue: string; begin RequestInfo := IWApplication.Request; if ...

    MASM32编程演示程序在窗口模式和全屏模式间切换

    **MASM32编程演示:窗口与全屏模式切换** MASM32是Microsoft Macro Assembler的32位版本,它是一种低级汇编语言工具,用于编写Windows平台下的应用程序。这个程序示例展示了如何利用MASM32来实现一个功能,即允许...

    delphi xe5下Android消息提示的演示代码

    - 虽然这里讨论的是简单的文本提示,但`TMessageNotification`还支持更复杂的功能,如自定义动作、声音和振动等,可以根据实际需求进行配置。 通过以上步骤和知识点,你应该能理解如何在Delphi XE5下为Android平台...

Global site tag (gtag.js) - Google Analytics