Oracle--函数

人员是否可见权限控制函数

FUNCTION PERSON_MATCH
(
    I_LOG_TYPE VARCHAR2,                           --日志类型RM9075
    I_OP_USER IN VARCHAR2,                         --用户
    I_CUS_TYPE VARCHAR2,                           --客户类型
    I_COMP_NO VARCHAR2,                            --公司编号
    I_FLAG    VARCHAR2                             --是否参与验证Y参与验证 否则不参与验证
)RETURN VARCHAR2
/**********************************************************************************
  [功能描述]   查询人员的查看权限是否受限制
  [修改日期]   2018-7-16     
  [返回代码]
  Y代表不受限 ,N代表受限
 
 
**********************************************************************************/
AS
V_LOG_TYPE           CUST.EMP_OPERA_LIMIT_CONFIG.LOG_TYPE%TYPE;                          --日志类型
V_OP_USER            RQ_MNG.USER_PASS.EMP_NO%TYPE;                                       --操作人
V_CUS_TYPE           CUST.EMP_OPERA_LIMIT_CONFIG.CUS_TYPE%TYPE;                          --客户类型
V_COMP_NO            CUST.EMP_OPERA_LIMIT_CONFIG.COMP_NO%TYPE;
V_FLAG               VARCHAR2(1);
V_IS_EXISTS          NUMBER;
BEGIN
    V_LOG_TYPE := I_LOG_TYPE;
    V_OP_USER := UPPER(I_OP_USER);
    V_CUS_TYPE := I_CUS_TYPE;
    V_COMP_NO := I_COMP_NO;
    V_FLAG := I_FLAG;
   
    IF V_FLAG = 'Y' THEN
        SELECT COUNT(1) INTO V_IS_EXISTS
               FROM CUST.EMP_OPERA_LIMIT_CONFIG
               WHERE LOG_TYPE = V_LOG_TYPE
               AND CUS_TYPE = V_CUS_TYPE
               AND COMP_NO = V_COMP_NO
               AND EMP_NO = V_OP_USER;
               
        IF V_IS_EXISTS > 0 THEN
            RETURN 'Y';
        ELSE
            RETURN 'N';
        END IF; 
    ELSE
        RETURN 'Y';
    END IF;   
END PERSON_MATCH;


--函数的应用之处。。。。。。。。。。。。。。。获取数据处限制条件。。。。。。。。




--获取客户类型,如果客户获取不到类型(没有跟进人,被分配到池),默认能够查看
  BEGIN
      SELECT
      MC.IF_STAR
      INTO
      V_IF_STAR
      FROM CUST.MY_CUST MC
      WHERE MC.CUS_NO = V_CUS_NO; 
  --如果失去客户类型,默认可见,不参与验证
  EXCEPTION WHEN OTHERS THEN
      V_IN_VISABLE := 'N'; 
  END;
 
  --公司参数开关是否开启,开启表示参与验证,否则不参与
  BEGIN
      SELECT
      CP.F_VALUE
      INTO
      V_F_VALUE
      FROM RQ_MNG.COMP_PARAMETER   CP
      WHERE CP.FCS_TYPE = 'EMP_VIEW'
        ANDCP.COMP_NO = V_ROW_EMPLOYEE.COMP_NO;
  EXCEPTION WHEN OTHERS THEN
      R_CODE := 'E05';
      R_MSG  := '公司参数,是否参与业务限制(跟进,计划,通话)未找到!';
      GOTO END_EXE;   
  END;
 
  --获取数据
  BEGIN
      OPEN R_DATA FOR
          SELECT * FROM ( SELECT T1.*,ROWNUM RN
            FROM (SELECT CF.CREATE_TIME CREATE_TIME, -- 跟进时间
                         RQ_MNG.GET_USER_NAME(CF.EMP_NO) EMP_NAME, -- 跟进人
                         RQ_MNG.DIC.GET_DIC_NAME('RM','RM0028',CF.FR_WAY) FR_WAY_VAL,--跟进方式(中文)
                         CF.FR_CMT FR_CMT, -- 跟进内容
                         COUNT(1) OVER() R_PAGESUM
                    FROM CUST.C_FOLLOW_RECORD CF
                   WHERE CF.CUS_NO = V_CUS_NO
                     ANDCF.COMP_NO = V_ROW_EMPLOYEE.COMP_NO
                     --默认看自己对客户的跟进
                     OR CF.EMP_NO = V_OP_USER
                     AND (
                     --如果失去客户类型,默认能够查看
                     'Y' = 
                          ( SELECT CUST.M_CUST_LIMIT_CONFIG.PERSON_MATCH(
                                    '1',                           --日志类型 RM9075  1  跟进记录
                                    V_OP_USER,                     --用户
                                    V_IF_STAR,                     --客户类型
                                    V_ROW_EMPLOYEE.COMP_NO,        --公司编号
                                    V_IN_VISABLE                   --是否参与验证  Y 参与 N 不参与
                                    ) FROM DUAL )
                         OR
                     --总开关是否开启,开启参与限制,关闭,不参与限制
                     'N' = V_F_VALUE
                     )
                     ORDER BY CF.CREATE_TIME DESC) T1
                  WHERE ROWNUM <= V_ROWCOUNT * V_PAGENUM)T2
           WHERE T2.RN > V_ROWCOUNT * (V_PAGENUM - 1);
  EXCEPTION WHEN OTHERS THEN
      R_CODE := 'E00';
      R_MSG  := '操作失败! ' || SQLERRM;
      GOTO END_EXE;
  END;
 
 
  R_CODE := 'S00';
  R_MSG  := '操作成功!';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值