ORACLE 管道表的使用

--新建类型
CREATE OR REPLACE TYPE AA.SPLIT_TBL
as table of varchar2(32767)

--新建管道表的函数返回
CREATE OR REPLACE FUNCTION AA.SPLIT
(
    P_LIST VARCHAR2,
    P_DEL VARCHAR2 := ','
) RETURN SPLIT_TBL PIPELINED
IS
    L_IDX    PLS_INTEGER;
    L_LIST    VARCHAR2(32767):= P_LIST;
    L_VALUE  VARCHAR2(32767);
BEGIN
    LOOP
        L_IDX :=INSTR(L_LIST,P_DEL);
        IF L_IDX > 0THEN
            PIPE ROW(SUBSTR(L_LIST,1,L_IDX-1));
            L_LIST:= SUBSTR(L_LIST,L_IDX+LENGTH(P_DEL));
        ELSE
            PIPE ROW(L_LIST);
            EXIT;
        END IF;
    END LOOP;
    RETURN;
END SPLIT;
 

你可能感兴趣的:(ORACLE 管道表的使用)