接口存储过程

原创 2006年06月14日 13:55:00
CREATE OR REPLACE PACKAGE BODY Pk_If_Epg_Bss IS
       /********************************************************************************
    * 包体名称:   PK_IF_EPG_BSS
    * 功能描述:   实现IPTV EPG_与 BSS 的一些接口功能
    *     者:
    * 编写日期:   2005.11.19
    *     明:
    *    (1) 本过程包中的P_QUERY_AUTH, P_QUERY_ORDER, P_QUERY_BILL 是返回字符串结果的,目前(P_QUERY_BILL)暂没有用,留待对性能要求更高时备用.
    *        实现同样功能的还有返回结果集的另一个版本,包含在过程包 PG_IO_EPG 中, 是目前在用的版本.
    *
    * 修改历史:
    * 修 改 人        修改说明
    * -------- -------- ----------------------------------------------------------
    * 遗留问题:
    * (3)有些表都没有判断生效/失效日期(等相关数据完整、严密之后加上)。
    * (4)验证和实际扣费可能需要分离,也就是说,先验证返回结果给IPTV平台,用户实际点播使用成功后IPTV平台再发扣费请求。
    ********************************************************************************/
 
       PROCEDURE p_User_Login_Authen -- 用户登录时认证
       (
              Pi_Stbid        IN VARCHAR2, -- 机顶盒编号
              Pi_Userid       IN VARCHAR2, -- 用户帐号
              Pi_Password     IN VARCHAR2, -- 用户密码
              Pi_Ipaddr       IN VARCHAR2, -- 机顶盒IP地址
              Po_Usertoken    OUT VARCHAR2, -- 用户令牌
              Po_Userid_Out   OUT VARCHAR2, -- 用户帐号 (输入参数中用户帐号为空时需要返回用户帐号)
              Po_Nickname     OUT VARCHAR2, -- 用户名称
              Po_Accountno    OUT VARCHAR2, -- 宽带接入帐号
              Po_Detailparams OUT VARCHAR2, -- 扩展信息
              Po_Returncode   OUT VARCHAR2, -- 认证结果 0-认证成功,1-认证失败
              Po_Message      OUT VARCHAR2 -- 返回消息, 认证失败时返回具体的失败原因
       ) IS
              /********************************************************************************
        *   过程名称:   P_USER_LOGIN_AUTHEN
        *   功能描述:   用户登录时认证
        *       者: 王占通
        *   编写日期:   2005.11.19
        *   修改历史:
        * 修 改 人        修改说明
        * -------- -------- --------------------------------------------------------------
       
        ********************************************************************************/
              Vc_Query_Pwd Serv.Query_Pwd%TYPE;
              Vc_Width_Type Serv.Width_Type%TYPE;
              Vc_Serv_Id    Serv.Serv_Id%TYPE;
              Vc_State      Serv.State%TYPE;
              Vc_State1     Serv_Terminal.State%TYPE;
              Vc_Area_Id    Serv.Area_Id%TYPE;
              Vc_Acc_Nbr    Serv.Acc_Nbr%TYPE;
              Vc_Acc_Nbr    Serv.Acc_Nbr%TYPE;
              Vc_Remark     Serv.Remark%TYPE;
              Vc_Width_Flux Serv.Width_Flux%TYPE;
              Vc_Area_Name Area.NAME%TYPE;
              Vc_Found      CHAR(1);
              Vc_Stpmsg     VARCHAR2(2000);
      
       BEGIN
      
              Po_Returncode := '1';
              Po_Userid_Out := Pi_Userid;
              Vc_Found      := '0';
              Vc_State      := 'F0A';
              Vc_State1     := '1';
      
              -- 若输入参数中用户帐号及密码为空,表明用户是首次登录认证,则需到用户表中根据机顶盒编号查找用户帐号。
              -- 否则根据用户帐号查询。
      
              IF Pi_Userid IS NULL THEN
                     Vc_Stpmsg := ' 根据输入机顶盒编号查找/验证用户信息';
                     BEGIN
                            SELECT User_Name,
                                      Query_Pwd,
                                      Nvl(Width_Type, ' '),
                                     Width_Id,
                                      Area_Id,
                                      a.Serv_Id,
                                      Width_Flux,
                                      Acc_Nbr,
                                      a.State,
                                      Nvl(b.State, '1'),
                                      Remark
                            INTO   Po_Nickname,
                                      Vc_Query_Pwd,
                                      Vc_Width_Type,
                                      Po_Accountno,
                                      Vc_Area_Id,
                                      Vc_Serv_Id,
                                      Vc_Width_Flux,
                                      Po_Userid_Out,
                                      Vc_State,
                                      Vc_State1,
                                      Vc_Remark
                            FROM   Serv a, Serv_Terminal b
                            WHERE a.Serv_Id = b.Serv_Id
                            AND    b.Terminal_Id = Pi_Stbid;
                     EXCEPTION
                            WHEN OTHERS THEN
                                   Vc_Found := '1';
                     END;
              ELSE
                     Vc_Stpmsg := ' 根据输入用户帐号查找/验证用户信息';
                     BEGIN
                            SELECT User_Name,
                                      Query_Pwd,
                                      Nvl(Width_Type, ' '),
                                      Width_Id,
                                      Area_Id,
                                      Serv_Id,
                                      State,
                                      Width_Flux
                            INTO   Po_Nickname,
                                      Vc_Query_Pwd,
                                      Vc_Width_Type,
                                      Po_Accountno,
                                      Vc_Area_Id,
                                      Vc_Serv_Id,
                                      Vc_State,
                                      Vc_Width_Flux
                            FROM   Serv
                            WHERE Acc_Nbr = Pi_Userid;
                     EXCEPTION
                            WHEN OTHERS THEN
                                   Vc_Found := '2';
                     END;
              END IF;
      
              IF Vc_Found <> '0' THEN
                     IF Vc_Found = '2' THEN
                            Po_Message := ' 用户帐号不存在.';
                     ELSE
                            Po_Message := ' 机顶盒编号不存在.';
                     END IF;
                     RETURN;
              END IF;
      
              IF Vc_State NOT IN ('F0A', 'F0B') THEN
                     Po_Message := ' 用户状态为非可用状态:' || Vc_Remark;
                     RETURN;
              END IF;
      
              IF Vc_State1 <> '1' THEN
                     Po_Message := ' 机顶盒状态为暂停状态';
                     RETURN;
              END IF;
      
              IF Vc_Query_Pwd <> Pi_Password Or Pi_Password IS NULL THEN
                     Po_Message := ' 用户密码不符.';
                     RETURN;
              END IF;
      
              SELECT 'RZ_' || To_Char(SYSDATE, 'yyyymmddhh24miss') || '_' ||
                        To_Char(Vc_Serv_Id)
              INTO   Po_Usertoken
              FROM   Dual;
      
              SELECT NAME
              INTO   Vc_Area_Name
              FROM   Area
              WHERE Area_Id = Vc_Area_Id;
      
              Vc_Stpmsg       := ' 得到扩展信息.';
              Po_Detailparams := '<areaId>' || To_Char(Vc_Area_Id) || '</areaId>' ||
                                             '<areaName>' || Vc_Area_Name || '</areaName>' || '<spId>' ||
                                             '123' || '</spId>' || '<spName>' || '123' || '</spName>' ||
                                             '<bandwidth>' || To_Char(Vc_Width_Flux) || '</bandwidth>';
      
              IF Vc_State = 'F0B' THEN
                     -- 机顶盒第一次使用,自动激活
                     UPDATE Serv
                     SET    State = 'F0A'
                     WHERE Serv_Id = Vc_Serv_Id;
              END IF;
      
              Vc_Stpmsg := ' 记录登录认证日志';
              INSERT INTO t_If_Login_Log
                     (Usertoken, Acc_Nbr, Serv_Id, Login_Time, Stb_Id, Flag)
              VALUES
                     (Po_Usertoken, Po_Userid_Out, Vc_Serv_Id, SYSDATE, Pi_Stbid, '1');
      
              COMMIT;
      
              Po_Returncode := '0';
              RETURN;
      
       EXCEPTION
              WHEN OTHERS THEN
                     ROLLBACK;
                     Vc_Stpmsg := Vc_Stpmsg || ' 错误号:' || SQLCODE || ' 错误信息:' || SQLERRM;
                     INSERT INTO Ut_Err_Log
                            (Proc, Errmsg, Err_Date)
                     VALUES
                            ('P_USER_LOGIN_AUTHEN', Vc_Stpmsg, SYSDATE);
                     COMMIT;
                     Po_Message    := ' 认证处理失败; ' || Vc_Stpmsg;
                     Po_Returncode := '1';
                     --vi_return := PG_SYS_MANAGER.F_SYS_ERROR_LOG(0,0,0,0,vc_stpmsg );
      
       END p_User_Login_Authen;

存储过程实现可扩展灵活接口

今日奇闻 2016-12-06 08:31 序言 本文分享一个通过数据库(ORACLE)的存储过程,遵循“对修改封闭,对增加开放”的开闭原则,实现的可扩展性极强的灵活接口方案。 背景 本人...
  • u011277123
  • u011277123
  • 2016年12月07日 08:37
  • 404

存储过程实现接口轻松传数据

需求飘忽不定,实施人员想自己通过修改存储过程来调整数据,省着今天说要这个字段,明天说要那个字段。因为一个字段,几个系统的开发人员都要讨论半天,然后再重新的修改程序,发布程序,太麻烦了。于是,封装接口类...
  • u013047824
  • u013047824
  • 2016年11月29日 16:28
  • 867

数据库知识体系+sql语句实现存储过程和函数+应用程序接口

按存储模型分为:关系次数据库、网络次数据库、层次数据库。不同的数据库的是按不同的数据结构组织和联系的 数据结构:数据的组织形式与数据之间的联系 用ds=(D, R)其中D表示数据,R表示数据间的联系。...
  • lu93it
  • lu93it
  • 2016年09月15日 09:48
  • 1153

存储过程五种使用场景比较

存储过程五种使用场景比较1. 使用 JDBC API 直接调用存储过程Java Database Connectivity (JDBC) API 是 J2EE 的一部分,是 Java 语言访问关系数据...
  • mic_hero
  • mic_hero
  • 2010年10月30日 22:41
  • 3670

通过数据库存储过程调用Web服务的办法

Web服务概览   Web服务,从广义而言,就是在两个应用或电子设备之间通过万维网通信的方法。Web服务有两种类型:简单对象访问协议(SOAP)以及表述性状态转移(REST)。   SOAP为基于...
  • lc7404
  • lc7404
  • 2013年06月30日 23:02
  • 1359

初学JDBC(七)-使用CallableStatement接口调用存储过程

上一篇博客讲了对大数据对象的处理操作,用到了Clob和blob接口,这一篇博客我来说说CallableStatement接口调用存储过程。...
  • u013132035
  • u013132035
  • 2016年11月20日 23:21
  • 1144

PB内置OEACLE数据库接口的使用方法

PB内置OEACLE数据库接口的使用方法 马长明   PowerBuilder(PB)和Oracle分别是前端开发工具和RDBMS的主流产品。PB提供了两种与Oracle连接的接口:PowerSoft...
  • Jason009
  • Jason009
  • 2006年09月28日 11:14
  • 1141

存储过程五种使用场景比较

存储过程五种使用场景比较 1. 使用 JDBC API 直接调用存储过程 Java Database Connectivity (JDBC) API 是 J2EE 的一部分,是 Java 语言访问关系...
  • qq_37878579
  • qq_37878579
  • 2018年01月19日 01:40
  • 69

Mybaits mapper 和 XML映射详解

MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...
  • qq_36235922
  • qq_36235922
  • 2017年08月05日 15:04
  • 219

JDBC存储过程的调用

一. JDBC存储过程的调用 (1)存储过程是用SQL语句和控制流语句等编写的一段程序代码,在创建时已被编译成机器代码并存储在数据库中供客户端调用。 存储过程有以下优点:  1.所生成的机器代码...
  • u010870518
  • u010870518
  • 2014年09月19日 12:38
  • 2894
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:接口存储过程
举报原因:
原因补充:

(最多只允许输入30个字)