管道函数例:
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;