더북(TheBook)

DB2에서는 GENERATED 키워드를 사용해 비슷한 기능을 구현할 수 있다. 하지만 DB2는 쿼리를 호출하는 함수로 계산 컬럼을 생성하는 것을 허용하지 않는데 비결정적 함수이기 때문이다. 하지만 결정적 함수 호출이나 표현식을 사용하는 컬럼은 정의할 수 있다. 코드 1-7은 수량 * 금액을 계산해 총 금액을 반환하는 표현식을 정의하고 Order_Details 테이블에 컬럼을 생성하는 방법을 보여 준다.

코드 1-7 DB2에서 표현식을 사용한 테이블 컬럼 정의

-- 테이블을 변경하려고 INTEGRITY 옵션을 끔

SET INTEGRITY FOR Order_Details OFF;

-- 표현식을 사용해 계산 컬럼을 생성함

ALTER TABLE Order_Details

  ADD COLUMN ExtendedPrice decimal(15,2)

    GENERATED ALWAYS AS (QuantityOrdered * QuotedPrice);

-- INTEGRITY 옵션을 다시 켬

SET INTEGRITY FOR Order_Details

IMMEDIATE CHECKED FORCE GENERATED;

-- 계산 컬럼에 인덱스를 생성함

CREATE INDEX Order_Details_ExtendedPrice

  ON Order_Details (ExtendedPrice);


 

이 표현식에는 결정적 특성이 있으므로 테이블에 컬럼을 생성하고 인덱스도 만들 수 있다. 코드 1-7은 DB2용 예제이지만 다른 데이터베이스에서 처리한 예제도 깃허브 리포지터리에서 찾아볼 수 있다(https://github.com/gilbutITbook/006882에서 <데이터베이스 이름>/Listing 1.007.sql 파일을 참고한다).

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