Virtual column의 생성과 사용(메뉴얼요약)

오라클의 가상 컬럼(Virtual Column) 은 테이블에 존재하지만 물리적으로 저장되지 않고, 필요할 때 계산되는 컬럼입니다. 기존 컬럼 값을 기반으로 자동 계산되며, 저장 공간을 차지하지 않고 효율적으로 사용할 수 있습니다.


1. 가상 컬럼 생성 방법

가상 컬럼은 GENERATED ALWAYS AS 구문을 사용하여 정의합니다.

CREATE TABLE employees (
    emp_id      NUMBER PRIMARY KEY,
    first_name  VARCHAR2(50),
    last_name   VARCHAR2(50),
    salary      NUMBER(10, 2),
    annual_salary NUMBER(12, 2) 
        GENERATED ALWAYS AS (salary * 12) VIRTUAL  -- 가상 컬럼
);
  • annual_salary 컬럼은 salary * 12의 결과를 자동으로 계산하는 가상 컬럼입니다.
  • VIRTUAL 키워드는 선택 사항이며, 명시하지 않아도 기본적으로 가상 컬럼이 됩니다.

2. 가상 컬럼 조회

가상 컬럼도 일반 컬럼처럼 SELECT 문에서 사용할 수 있습니다.

SELECT emp_id, first_name, salary, annual_salary 
FROM employees;

3. 가상 컬럼 제약 조건 적용

가상 컬럼에는 제약 조건을 설정할 수 있습니다.

CREATE TABLE orders (
    order_id   NUMBER PRIMARY KEY,
    quantity   NUMBER(5),
    price      NUMBER(10, 2),
    total_cost NUMBER(12, 2) 
        GENERATED ALWAYS AS (quantity * price) VIRTUAL CHECK (total_cost >= 0) 
);
  • total_cost 가상 컬럼에 CHECK (total_cost >= 0) 제약 조건을 추가했습니다.

4. 가상 컬럼을 사용한 인덱스 생성

가상 컬럼은 인덱스 생성도 가능합니다.

CREATE INDEX idx_annual_salary ON employees(annual_salary);
  • 인덱스가 생성되면 검색 성능이 향상됩니다.

5. 가상 컬럼 변경 및 삭제

① 가상 컬럼 추가

기존 테이블에 가상 컬럼을 추가할 수도 있습니다.

ALTER TABLE employees ADD (monthly_salary NUMBER(10,2) 
    GENERATED ALWAYS AS (salary / 12) VIRTUAL);

② 가상 컬럼 삭제

가상 컬럼을 삭제하려면 DROP COLUMN 명령을 사용합니다.

ALTER TABLE employees DROP COLUMN annual_salary;

6. 가상 컬럼의 제한 사항

  • UPDATE, INSERT 시 값 입력 불가annual_salary 는 가상 컬럼이므로 직접 값을 지정할 수 없습니다.
  • INSERT INTO employees (emp_id, first_name, last_name, salary, annual_salary) VALUES (101, 'John', 'Doe', 5000, 60000); -- 오류 발생!
  • LOB (CLOB, BLOB) 타입 사용 불가
    • 가상 컬럼에서는 CLOB, BLOB 등의 대용량 데이터 타입 사용이 불가능합니다.
  • 기본키, 외래키로 사용할 수 없음
    • 가상 컬럼은 기본키, 외래키 제약 조건으로 설정할 수 없습니다.

7. 가상 컬럼 실전 활용 예제

(1) FULL_NAME 가상 컬럼 생성

CREATE TABLE persons (
    first_name VARCHAR2(50),
    last_name  VARCHAR2(50),
    full_name  VARCHAR2(101) 
        GENERATED ALWAYS AS (first_name || ' ' || last_name) VIRTUAL
);
  • full_namefirst_namelast_name을 결합한 가상 컬럼입니다.

(2) VAT 포함 가격 가상 컬럼 생성

CREATE TABLE products (
    product_id  NUMBER PRIMARY KEY,
    price       NUMBER(10,2),
    vat_rate    NUMBER(5,2),
    price_with_vat NUMBER(12,2) 
        GENERATED ALWAYS AS (price * (1 + vat_rate / 100)) VIRTUAL
);
  • price_with_vat 컬럼은 자동으로 부가세(VAT)를 포함한 가격을 계산합니다.

🔹 결론

오라클 가상 컬럼은 저장 공간을 절약하면서 자동으로 계산된 값을 제공하는 강력한 기능입니다.
이를 활용하면 데이터 무결성을 유지하면서도 중복 저장 없이 효율적인 연산이 가능합니다! 🚀