function에서 muti_row를 리턴받자... 9 2 10,570

by 백해현 [풍요로운삶을] [2006.03.02 11:30:16]


제목 그대로 function에서 muti_row를 리턴받자...입니다.

 

오라클 9i 부터는 function에서 multi_row를 return 받을수 있습니다.

 

예제)

CREATE OR REPLACE PACKAGE ZZ_PKG
AS

    -- Return받을 Record 선언
    -- Package를 사용하지 않으려면 Object에 Type이 미리 선언되어야 합니다
    TYPE ZZ_TYPE_ITEM_MASTER IS RECORD
    (
        ITEM_ID     IDB_ITEM_MASTER.ITEM_ID%TYPE
       ,ITEM_NAME   IDB_ITEM_MASTER.ITEM_NAME%TYPE
    );

    -- Type재정의      
    TYPE SET_ITEM_MASTER IS TABLE OF ZZ_TYPE_ITEM_MASTER;      

    -- 함수선언(Return의 Pipelined 기술)
    FUNCTION  ZZ_TEST
      RETURN  SET_ITEM_MASTER PIPELINED;
   
END ZZ_PKG;
/

 

CREATE OR REPLACE PACKAGE BODY ZZ_PKG
AS
   
FUNCTION ZZ_TEST
RETURN  SET_ITEM_MASTER PIPELINED

IS

    -- Cursor선언(Record Type선언부와 일치해야 겠죠 ^^)   
    CURSOR cur_data IS
        SELECT ITEM_ID
             , ITEM_NAME
          FROM IDB_ITEM_MASTER
    ;                      
       
BEGIN

    -- Fetch Cursor
    FOR ret_data IN cur_data LOOP

        -- 해당row를 pipe 시킨다.       
        PIPE ROW(ret_data);
       
    END LOOP;
   
    RETURN;
   
EXCEPTION
    WHEN OTHERS THEN
        RAISE_APPLICATION_ERROR(-20001, 'Error..........');   
END ZZ_TEST ;       

END ZZ_PKG;
/

 

이제 패키지가 생성 되었으므로 패키지 안의 함수를 실행 시켜보자.

여기서 중요한 것은 Table Fuction을 사용해야 한다는것.

 

SELECT *

   FROM TABLE(ZZ_PKG.ZZ_TEST())

 

이렇게 하면 결과가 다음과 같이 나타납니다.

ITEM_ID ITEM_NAME

36330 G1600.LKADB
36331 G1600.MOTDB
36332 G1600.MOTDS
36333 G1600.NGRDB
36334 G1600.NGRDS
36335 G1610.ESPBL

by 박준하 [2007.11.29 15:47:54]
실전에서 잘 활용하고 있습니다. 감사합니다.

by 지에나르 [2012.10.10 15:25:00]

와우..감사합니다.
이걸로 해결했습니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입