오라클의 가상 컬럼(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_name 은 first_name과 last_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)를 포함한 가격을 계산합니다.
🔹 결론
오라클 가상 컬럼은 저장 공간을 절약하면서 자동으로 계산된 값을 제공하는 강력한 기능입니다.
이를 활용하면 데이터 무결성을 유지하면서도 중복 저장 없이 효율적인 연산이 가능합니다! 🚀