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 파일을 참고한다).