[  ◎ 여러 레코드 Return하기 ]     

☞ 정의
 

1. Function의 기본은 값 하나만 넘기자만

   PIPE를 이용하면 Table단위나 Row_Type단위로 값을 리턴할 수 있다.  

2. PipeLined 라고 불리는 이유는 데이터를 찾는 즉시 바로 바로 전송해주기 때문이다.  

 

   

☞ 생성 방법

 

1. Object Type을 생성한다.

   -- 레코드 타입
   
CREATE OR REPLACE TYPE myObjectFormat
       AS OBJECT
    ( A INT,
      B DATE,
      C VARCHAR2(25)
    );
 
   -- 테이블 타입
   
CREATE OR REPLACE TYPE myTableType
       AS TABLE OF
myObjectFormat

 

2. 패지지 생성
   -- 패지키 헤더 생성

   
CREATE OR REPLACE PACKAGE myDemoPack
       
AS
          
FUNCTION prodFunc RETURN myTableType PIPELINED;  --pipelined선언
   
END;

   --패키지 바디 생성
   
CREATE OR REPLACE PACKAGE BODY myDemoPack AS
       
FUNCTION prodFunc RETURN myTableType PIPELINED IS
       
BEGIN
           
FOR i  IN  1 .. 5   
              
LOOP
                  
PIPE ROW (myObjectFormat(i, SYSDATE+I, 'Row' || i)); --바로바로 리턴
              
END LOOP;
              
              
RETURN;   --이때 RETURN는 사실 의미 없음
           
END;
        
END

  3. 쿼리 조회
   SELECT * FROM TABLE(myDemoPack.prodFunc());
   

참고URL : http://cafe.naver.com/dbmodeler/93

Posted by 농부지기
,