PIPELINED 함수 질문드립니다. 0 1 688

by 김민수 [PL/SQL] [2017.05.23 22:25:50]


원 소스를 복사 못해서 대충 구조에 맞게 작성해봤습니다.
컴파일 하고 실행을 해도 데이터가 나오질 않습니다.
어디가 잘못된건지 도움좀 주십시오..

CREATE OR REPLACE FUNCTION TABLE_FUNC
(
      P_INPUT1    IN VARCHAR2
    , P_INPUT2    IN VARCHAR2
    , P_INPUT3    IN VARCHAR2
    , P_INPUT4    IN VARCHAR2
    , P_INPUT5    IN VARCHAR2
)
RETURN TABLE_TYPE
PIPELINED
IS
    V_TYPE   OBJ_TYPE;
    CUR      SYS_REFCURSOR;
    V_SQL VARCHAR2(1000);

BEGIN
    V_SQL := '';
    V_SQL := V_SQL || 'SELECT COL1';
    V_SQL := V_SQL || '     , COL2';
    V_SQL := V_SQL || '     , COL3';
    V_SQL := V_SQL || '     , COL4';
    V_SQL := V_SQL || '     , COL5';
    V_SQL := V_SQL || '  FROM ZZ';
    V_SQL := V_SQL || ' WHERE COL6 = '''A'''';
    IF (P_INPUT1 IS NOT NULL) THEN
        V_SQL := V_SQL || '  AND COL1 = ''' || P_INOUT1 || '''';
    END IF;
    IF (P_INPUT2 IS NOT NULL) THEN
        V_SQL := V_SQL || '  AND COL2 = ''' || P_INOUT2 || '''';
    END IF;
    IF (P_INPUT3 IS NOT NULL) THEN
        V_SQL := V_SQL || '  AND COL3 = ''' || P_INOUT3 || '''';
    END IF;
    IF (P_INPUT4 IS NOT NULL) THEN
        V_SQL := V_SQL || '  AND COL4 = ''' || P_INOUT4 || '''';
    END IF;
    IF (P_INPUT5 IS NOT NULL) THEN
        V_SQL := V_SQL || '  AND COL5 = ''' || P_INOUT5 || '''';
    END IF;

OPEN CUR FOR V_SQL;
LOOP
    FETCH CUR INTO V_TYPE.COL1, V_TYPE.COL2, V_TYPE.COL3, V_TYPE.COL4, V_TYPE.COL5;

    EXIT WHEN CUR%NOTFOUND;

    PIPE ROW(V_TYPE);
END LOOP;

CLOSE CUR;

RETURN;

END TABLE_FUNC;
/
by 마농 [2017.05.24 10:32:34]
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입