1. 개요: 자동 SQL 생성 쿼리란?
데이터베이스를 다루다 보면 특정 테이블의 데이터를 조회(SELECT), 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 쿼리를 자주 작성해야 합니다. 하지만 매번 쿼리를 수동으로 작성하는 것은 시간이 많이 걸리고, 실수가 발생할 가능성도 높습니다.
이에 따라 특정 테이블명을 입력하면 자동으로 CRUD(생성, 조회, 수정, 삭제) SQL을 생성하는 SQL 스크립트를 활용하면, 반복적인 작업을 효율적으로 처리할 수 있습니다.
2. 자동 SQL 생성이 필요한 이유
2.1 개발 생산성 향상
- 매번 수동으로 SQL을 작성할 필요가 없음
- 테이블 구조가 변경되더라도 쉽게 반영 가능
2.2 실수 방지
- 컬럼명을 잘못 입력하는 등의 실수를 줄일 수 있음
- 자동으로 쿼리를 생성하기 때문에 일관성 유지 가능
2.3 유지보수 용이
- 여러 개의 테이블을 한 번에 처리 가능
- 시스템 변경 시 빠르게 쿼리를 재생성할 수 있음
3. SQL 자동 생성 스크립트 작성 방법
3.1 기본 개념
- 오라클 데이터 딕셔너리 뷰(
ALL_TAB_COLUMNS
)를 활용하여 특정 테이블의 컬럼 정보를 가져옴 SELECT
,INSERT
,UPDATE
,DELETE
쿼리를 동적으로 생성
3.2 자동 SQL 생성 쿼리
다음 SQL을 실행하면 특정 테이블의 CRUD 쿼리를 자동으로 생성할 수 있습니다.
① SELECT 쿼리 자동 생성
SELECT 'SELECT ' || LISTAGG(COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) ||
' FROM ' || TABLE_NAME || ';' AS GENERATED_QUERY
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME'
GROUP BY TABLE_NAME;
🔹 설명:
ALL_TAB_COLUMNS
뷰에서 지정한 테이블(YOUR_TABLE_NAME
)의 컬럼명을 가져옴LISTAGG
함수를 사용하여 컬럼명을 쉼표(,)로 구분하여 하나의 문자열로 합침- 최종적으로
SELECT 컬럼명 FROM 테이블명;
형태의 쿼리를 생성
✅ 실행 예시 (EMPLOYEES
테이블 기준)
SELECT EMP_ID, EMP_NAME, SALARY, DEPARTMENT_ID FROM EMPLOYEES;
② INSERT 쿼리 자동 생성
SELECT 'INSERT INTO ' || TABLE_NAME || ' (' ||
LISTAGG(COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) ||
') VALUES (' ||
LISTAGG(':' || COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) ||
');' AS GENERATED_QUERY
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME'
GROUP BY TABLE_NAME;
🔹 설명:
INSERT INTO 테이블명 (컬럼1, 컬럼2, ...) VALUES (:컬럼1, :컬럼2, ...);
형태로 쿼리 생성
✅ 실행 예시 (EMPLOYEES
테이블 기준)
INSERT INTO EMPLOYEES (EMP_ID, EMP_NAME, SALARY, DEPARTMENT_ID)
VALUES (:EMP_ID, :EMP_NAME, :SALARY, :DEPARTMENT_ID);
③ UPDATE 쿼리 자동 생성
SELECT 'UPDATE ' || TABLE_NAME || ' SET ' ||
LISTAGG(COLUMN_NAME || ' = :' || COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) ||
' WHERE ' || (SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND COLUMN_ID = 1) || ' = :' ||
(SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND COLUMN_ID = 1) || ';' AS GENERATED_QUERY
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME'
GROUP BY TABLE_NAME;
🔹 설명:
UPDATE 테이블명 SET 컬럼1 = :컬럼1, 컬럼2 = :컬럼2 WHERE 기본키 = :기본키;
형태로 생성- 기본키(첫 번째 컬럼)를
WHERE
조건으로 사용하여 특정 레코드만 수정 가능
✅ 실행 예시 (EMPLOYEES
테이블 기준)
UPDATE EMPLOYEES
SET EMP_NAME = :EMP_NAME, SALARY = :SALARY, DEPARTMENT_ID = :DEPARTMENT_ID
WHERE EMP_ID = :EMP_ID;
④ DELETE 쿼리 자동 생성
SELECT 'DELETE FROM ' || TABLE_NAME || ' WHERE ' ||
(SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND COLUMN_ID = 1) ||
' = :' ||
(SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME' AND COLUMN_ID = 1) || ';' AS GENERATED_QUERY
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'YOUR_TABLE_NAME'
GROUP BY TABLE_NAME;
🔹 설명:
DELETE FROM 테이블명 WHERE 기본키 = :기본키;
형태로 쿼리 생성
✅ 실행 예시 (EMPLOYEES
테이블 기준)
DELETE FROM EMPLOYEES WHERE EMP_ID = :EMP_ID;
4. 활용 예시
이 스크립트를 사용하면 특정 테이블의 SQL 쿼리를 자동으로 생성할 수 있습니다.
다음과 같이 YOUR_TABLE_NAME
을 원하는 테이블명으로 변경한 후 실행하면 해당 테이블의 SQL이 자동으로 생성됩니다.
DECLARE v_table_name VARCHAR2(50) := 'EMPLOYEES';
-- SELECT SQL 생성
SELECT 'SELECT ' || LISTAGG(COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID) ||
' FROM ' || v_table_name || ';'
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = v_table_name
GROUP BY TABLE_NAME;
💡 이렇게 하면 테이블명만 입력하면 자동으로 CRUD 쿼리를 생성할 수 있어 매우 유용합니다.
5. 결론: SQL 자동 생성 스크립트의 활용
✅ 특정 테이블명을 입력하면 CRUD(SELECT, INSERT, UPDATE, DELETE) 쿼리를 자동으로 생성할 수 있음
✅ 반복적인 SQL 작성 시간을 단축하고, 실수를 방지할 수 있음
✅ 오라클 데이터 딕셔너리 뷰(ALL_TAB_COLUMNS
)를 활용하여 컬럼 정보를 동적으로 가져올 수 있음
이제 테이블이 변경될 때마다 일일이 쿼리를 작성하지 않고, 위 스크립트를 활용하여 빠르고 효율적으로 SQL을 생성해 보세요! 🚀
'개발 > 오라클' 카테고리의 다른 글
오라클 SQL 실행 계획 최적화 - 성능 향상을 위한 실전 가이드 (0) | 2025.02.03 |
---|---|
오라클에서 조인의 종류와 활용법: 자세한 가이드 (0) | 2025.01.23 |
오라클 배치 처리 작성법과 다양한 유형의 예제 (0) | 2025.01.18 |
오라클 트리거의 작성법과 다양한 유형의 예제 (0) | 2025.01.17 |
오라클 VIEW 작성법과 다양한 유형의 예제 (0) | 2025.01.17 |