게시일: Jan 15, 2012 11:24:42 PM
- PIVOT, UNPIVOT 절
테이블에 있는 데이터를 표현시 로우를 컬럼 형태로 변경해야 할 때가 있다. 이러한 경우 일반적으로는 컬럼으로 변환할 로우들을 선택하는 인라인 뷰를 생성하는데, 이 인라인 뷰 내에서 컬럼으로 변환할 내용을 DECODE 문을 사용하여 작성한 뒤에(여기까지 작엊ㅂ해서 쿼리를 실행하면 반환되는 결과가 계단모양이 된다.) 다시 조건에 따라 로우를 합치게 된다. 보통 이 경우 인라인 뷰를 감싸는 SELECT 문장에서 GROUP BY가 사용된다.
그런데 11g에서는 PIVOT 절을 제공함으로써 이 작업을 아주 간단히 수행할 수 있게 해준다. PIVOT 절의 역할은 엑셀에서의 PIVOT 기능과 유사한데, 쿼리 문장에 GROUP BY 절을 명시하지 않으면서 위에서 했던 동일한 작업을 아주 간편히 수행할 수 있다. 반대로 컬럼 정보를 로우로 변환할 시에는 UNPIVOT 절을 상요하여 간편하게 변환할 수 있다.
- 동적 쿼리의 기능 향상
NATIVE 동적 쿼리의 경우 동적 쿼리 문장의 전체 크기가 32KB를 넘게되면 사용할 수 없었는데, 11g에서는 이 제한이 풀렸다. NATIVE 동적 쿼리의 대상 문자열 타입으로 CLOB 타입을 새로 지원하게 되었기 때문에 32KB 이상의 길이가 되더라도 NATIVE 동적 퀄이 생성이 가능하다.
- 가상 컬럼 (Virtual Column)
테이블을 생성할 때 컬럼 자체를 계산식을 적용하여 생성할 수 있다.
CREATE TABLE EMPLOYEE (
EMPLOYEE_ID NUMBER(10),
...
...
SALARY NUMBER(22,2),
COMMISSION_PCT NUMBER( 2,2),
REAL_SALARY NUMBER GENERATED ALWAYS AS (SALARY + (SALARY * COMMISSION_PCT)) VIRTUAL,
...
);