더북(TheBook)

fn_ch14_pipe_table2 함수 역시 일반 테이블 함수인 fn_ch14_table2를 변형해 만든 파이프라인 함수다. fn_ch14_pipe_table2 함수는 PIPE ROW 문을 이용해 루프 내에서 두 번 값을 반환하고 있는데, 두 번째 반환 전에 VARCHAR_COL1, VARCHAR_COL2에 사원 테이블의 JOB_ID와 EMAIL 컬럼 데이터를 넣었다. 이렇게 하면 어떤 형태로 결과가 반환되는지 확인해 보자.

입력

    SELECT *
      FROM TABLE( fn_ch14_table2 ( CURSOR ( SELECT * FROM EMPLOYEES WHERE ROWNUM < 6)
            ));

결과

    VARCHAR_COL1         VARCHAR_COL2          NUM_COL DATE_COL
    -------------------- --------------------- ---------------------
    William Smith        011.44.1343.629268    171 2000-02-23
    SA_REP               WSMITH                171 2000-02-23
    Elizabeth Bates      011.44.1343.529268    172 2000-06-24
    SA_REP               EBATES                172 2000-06-24
    Sundita Kumar        011.44.1343.329268    173 2001-06-21
    SA_REP               SKUMAR                173 2001-06-21
    Ellen Abel           011.44.1644.429267    174 1998-05-11
    SA_REP               EABEL                 174 1998-05-11
    Alyssa Hutton        011.44.1644.429266    175 1999-09-19
    SA_REP               AHUTTON               175 1999-09-19

5개의 행이 반환되어야 하는데 총 10개의 행이 반환되었는데 그 이유는 PIPE ROW문을 써서 두 번씩 반환했기 때문이다. 짝수 번 행의 데이터를 보면 VARCHAR_COL1, VARCHAR_COL2 컬럼 값에 JOB_ID, EMAIL 데이터가 출력됐는데 결국 1과 2행의 데이터는 실제로는 사번이 171인 William Smith라는 한 사람의 정보임을 알 수 있다. 이렇게 파이프라인 함수를 사용하면 컬럼을 로우로 변환하는 효과를 줄 수 있다.

이 장은 MSSQL 프로시저에서 임시 테이블을 만들어 프로시저 수행 결과로 임시 테이블의 데이터를 출력할 수 있는 MSSQL 프로시저의 기능을 오라클 프로시저에서도 구현이 가능한가? 라는 질문으로 시작해서 이와 유사한 기능인 GTT와 테이블 함수, 나아가 파이프라인 테이블 함수까지 살펴 봤다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.