기타 GTT의 특징
오라클에서 제공하는 임시 테이블인 GTT의 두 가지 종류에 대해 살펴 봤는데, GTT는 일반 테이블과 형태도 같고 사용법도 비슷한 반면 임시 테이블로써 가진 한계점이 있는데 그 내용은 다음과 같다.
① GTT의 제한사항
• 파티션 GTT를 만들 수 없다.
• GTT에는 외래키를 만들 수 없다.
• GTT에는 병렬로 UPDATE, DELETE, MERGE 문을 실행할 수 없다. 병렬 처리에 대해서는 나중에 다룰 것이다.
• GTT 컬럼으로는 중첩 테이블 타입을 사용할 수 없다.
• GTT에도 인덱스를 만들 수 있다.
② GTT의 활용
그렇다면 어떨 때 일반 테이블이 아닌 GTT를 사용하는 것이 좋을까?
여러 개의 테이블을 조인해서 복잡한 연산을 수행한 결과를 보여주는 리포트를 만들어야 하는데 해당 결과를 산출하기에는 단일 SELECT문으로 구현하기가 어렵다고 하자. 이럴 때, 과거에는 최종 리포트 구조에 맞게 테이블을 만들고 프로시저 안에서 여러 단계에 걸쳐 데이터를 입력하고 조작해 원하는 결과를 만들었다. 이렇게 하면 리포트 화면에서는 WHERE 조건도 필요 없는 단순 SELECT문만 실행하면 됐다.
하지만 이 방법은, 다른 세션의 사용자가 거의 동시에 같은 프로시저를 실행하고 결과를 조회하면 데이터가 중복되거나 누락되는 등의 문제가 발생할 소지가 있다. 하지만 GTT를 사용하면 데이터가 세션별로 관리되므로 데이터가 꼬이는 현상이 발생할 가능성은 거의 없을 뿐만 아니라 원하던 기능도 구현할 수 있다.