Oracle--管道函数

管道函数例:

CREATE OR REPLACE TYPE RQ_MNG.PRIV_R_NO_ROW IS OBJECT
(
  PRIV_R_NO VARCHAR2(20)              --角色
);
   
CREATE TYPE RQ_MNG.PRIV_R_NO_TAB IS TABLE OF RQ_MNG.PRIV_R_NO_ROW;


FUNCTION GET_ROLE_NO_BY_EMP_NO
  (
      I_EMP_NO  IN VARCHAR2 --员工编号
  )RETURN PRIV_USER_ROLES_TAB PIPELINED11111
  /**********************************************************************************
[功能描述]   --传入员工编号返回角色编号
             --如 传入 A,返回 'A',传入 A,B  返回 'A','B'
             --适用用JAVA 传入组装成IN 条件
[创建日期]   20180711   
[返回代码] 
**********************************************************************************/
AS
V_PRIV_USER_ROLES_ROW   PRIV_USER_ROLES_ROW;
BEGIN
     
  --根据员工编号查询角色编号   
  BEGIN
    FOR X1 IN (SELECT B.PRIV_R_NO 
                 FROM  RQ_MNG.PRIV_ROLE A, RQ_MNG.PRIV_USER_ROLES B
                 WHERE B.EMP_NO = I_EMP_NO
                 AND A.PRIV_R_NO = B.PRIV_R_NO
               )
    LOOP
      V_PRIV_USER_ROLES_ROW := PRIV_USER_ROLES_ROW(X1.PRIV_R_NO);
      PIPE ROW(V_PRIV_USER_ROLES_ROW);
   
    END LOOP;
    RETURN;
   
    
  EXCEPTION WHEN OTHERS THEN
      RAISE_APPLICATION_ERROR(-20001,'GETPROVMSG:'||SQLERRM);
  END;
END GET_ROLE_NO_BY_EMP_NO;

CREATE OR REPLACE TYPE RQ_MNG.PRIV_USER_ROLES_ROW IS OBJECT
(
  PRIV_R_NO VARCHAR2(20)              --角色
)

CREATE OR REPLACE TYPE RQ_MNG.PRIV_USER_ROLES_TAB IS TABLE OF PRIV_USER_ROLES_ROW

例2:
根据传入人员编号返回受限制的渠道编号(管道函数)

CREATE OR REPLACE TYPE RQ_MNG.CHN_NO_ROW IS OBJECT
(
  CHN_NO VARCHAR2(20)              --渠道编号
);
   
CREATE TYPE RQ_MNG.CHN_NO_TAB IS TABLE OF RQ_MNG.CHN_NO_ROW;





FUNCTION GET_NO_SEE_CHN_NO_BY_USER
(
    I_OP_USER     IN VARCHAR2                     --操作人【非空】
)RETURN CHN_NO_TAB PIPELINED
AS
/**********************************************************************************
[ 功能描述 ]         根据传入人员返回受限制的渠道编号
                     返回值为渠道编号的集合。
                    
                     使用示例:
                     AND O.CHN_NO NOT EXISTS(
                     SELECT CHN_NO FROM TABLE(RQ_MNG.M_CHANNEL.GET_NO_SEE_CHN_NO_BY_USER('E1002841'))
                     WHERE CHN_NO = O.CHN_NO
                     )
 
[修改日期]   20180718   
[返回代码]
**********************************************************************************/
V_OP_USER                                RQ_MNG.USER_PASS.EMP_NO%TYPE;        --操作人
V_CHN_NO_ROW                             CHN_NO_ROW;                          --渠道编号
BEGIN
    V_OP_USER := UPPER(I_OP_USER);
    --查询角色渠道表配置的渠道编码
    FOR X1 IN
        (SELECT CHN_NO AS CHN_NO FROM RQ_MNG.CHANNEL_ROLE_SET CRS ,RQ_MNG.PRIV_USER_ROLES PUR
                WHERE CRS.ROLE_NO = PUR.PRIV_R_NO
                AND PUR.PRIV_R_NO IN
                --操作人对应的所有角色
                (SELECT PRIV_R_NO FROM RQ_MNG.PRIV_USER_ROLES
                        WHERE EMP_NO = V_OP_USER
                ) GROUP BY CHN_NO
        )
    LOOP
        V_CHN_NO_ROW := CHN_NO_ROW(X1.CHN_NO);
        PIPE ROW(V_CHN_NO_ROW);
    END LOOP;
   
   
    RETURN;
 
END GET_NO_SEE_CHN_NO_BY_USER;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值