接口存储过程

原创 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)的存储过程,遵循“对修改封闭,对增加开放”的开闭原则,实现的可扩展性极强的灵活接口方案。 背景 本人...

JAVA中对存储过程的调用方法

一:Java如何实现对存储过程的调用:    A:不带输出参数的    ---------------不带输出参数的---------------------------------- create ...

DB2数据库、触发器、存储过程、JAVA数据库链接(JDBC)、调用层接口(CLI)

触发器    建一个触发器,应包含以下部分:    触发器名字    触发器触发事件: insert,delete,update    激活时间: before,after    粒度: f...

存储过程、Sql语句、面向对象、值类型、引用类型、接口、抽象类

1.  存储过程和sql语句的优缺点。优点:提高性能,减少网络传输,节约时间。减少网络流量,存储过程位于服务器上,调用的时候只须传递存储过程的名称以及参数,不用每次访问都传递很长的sql语句。安全性:...

数据库对接接口存储过程

USE [CS] GOSET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[CS] --执行插入需要用到的参数...

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

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

万能分页存储过程

  • 2017年11月23日 12:36
  • 1KB
  • 下载

存储过程循坏

  • 2017年10月30日 13:44
  • 714B
  • 下载

pb使用RPCFUNC调用存储过程

归纳起来PB6.0中调用Oracle存储过程有以下四种方法。   方法一:以关键字RPCFUNC声明存储过程;   方法二:以DECLARE PROCEDURE语句声明存储过程;   方法三:以动态S...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:接口存储过程
举报原因:
原因补充:

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