ORACLE 커서(Cursor)와 동적 SQL(Dynamic SQL) 활용법
Oracle PL/SQL에서 커서(Cursor)와 동적 SQL(Dynamic SQL)은 데이터베이스 작업을 효율적으로 수행하는 중요한 도구입니다. 커서는 주로 쿼리 결과를 행 단위로 처리하는 데 사용되며, 동적 SQL은 런타임 시에 SQL 문을 동적으로 생성하고 실행하는 데 사용됩니다. 이 글에서는 커서와 동적 SQL의 기본 개념과 활용법을 설명하겠습니다.
1. Oracle 커서(Cursor)란?
커서는 SQL 쿼리의 결과 집합을 순차적으로 처리하는 데 사용되는 메커니즘입니다. 커서는 주로 여러 행을 반환하는 쿼리의 결과를 행 단위로 순차적으로 가져와서 처리할 때 사용됩니다. PL/SQL에서 커서는 명시적 커서와 암시적 커서로 구분됩니다.
1.1. 암시적 커서(Implicit Cursor)
암시적 커서는 SELECT INTO 문을 사용할 때 자동으로 생성되는 커서입니다. 사용자가 명시적으로 커서를 선언하지 않아도, Oracle은 내부적으로 암시적 커서를 생성하여 SQL 문을 처리합니다.
1.2. 명시적 커서(Explicit Cursor)
명시적 커서는 사용자가 직접 선언하고 제어하는 커서입니다. 명시적 커서를 사용하면 쿼리 결과를 세밀하게 처리할 수 있으며, 커서의 상태를 명시적으로 제어할 수 있습니다. 커서를 선언한 후에는 OPEN, FETCH, CLOSE 명령어를 사용하여 커서 작업을 수행합니다.
1.3. 명시적 커서 예제
다음은 명시적 커서를 사용하는 예제입니다. 이 예제에서는 employees
테이블에서 직급이 'Manager'인 직원들의 이름을 출력합니다.
DECLARE
CURSOR emp_cursor IS
SELECT employee_name FROM employees WHERE job_title = 'Manager';
emp_name employees.employee_name%TYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO emp_name;
EXIT WHEN emp_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Manager: ' || emp_name);
END LOOP;
CLOSE emp_cursor;
END;
위 예제에서는 emp_cursor
라는 커서를 선언하고, 커서를 통해 'Manager' 직급의 직원 이름을 출력합니다. FETCH
명령어로 커서에서 한 행씩 데이터를 가져오며, EXIT WHEN
구문으로 커서의 마지막 행에 도달했을 때 루프를 종료합니다.
2. 동적 SQL(Dynamic SQL)란?
동적 SQL은 실행 시간에 SQL 문을 동적으로 생성하고 실행하는 방법입니다. 정적인 SQL 문과 달리, 동적 SQL은 쿼리를 문자열로 작성하고 이를 실행할 수 있기 때문에 유연하고 다양한 상황에 맞게 SQL 문을 처리할 수 있습니다. PL/SQL에서 동적 SQL을 실행하려면 EXECUTE IMMEDIATE
를 사용합니다.
2.1. 동적 SQL 사용 예제
아래 예제는 동적 SQL을 사용하여 런타임 시에 테이블 이름을 지정하여 데이터를 조회하는 예제입니다.
DECLARE
table_name VARCHAR2(30) := 'employees';
query VARCHAR2(1000);
result VARCHAR2(100);
BEGIN
query := 'SELECT employee_name FROM ' || table_name || ' WHERE employee_id = 100';
EXECUTE IMMEDIATE query INTO result;
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || result);
END;
위 예제에서 동적 SQL을 사용하여 테이블 이름을 table_name
변수로 지정하고, 쿼리 문을 동적으로 구성한 후 EXECUTE IMMEDIATE
명령어로 SQL 문을 실행합니다. 이 방법은 테이블 이름이나 조건을 동적으로 변경해야 하는 상황에서 유용합니다.
3. 커서와 동적 SQL의 차이점
커서와 동적 SQL은 서로 다른 용도로 사용됩니다. 커서는 주로 쿼리 결과를 행 단위로 처리하는 데 사용되며, 동적 SQL은 SQL 문 자체를 동적으로 생성하고 실행하는 데 사용됩니다. 커서는 데이터를 처리할 때 결과 집합을 순차적으로 처리하며, 동적 SQL은 SQL 문을 런타임에 동적으로 구성하여 유연한 데이터 처리 작업을 가능하게 합니다.
4. 커서와 동적 SQL의 활용 사례
4.1. 커서 활용 사례
커서는 반복적인 데이터 처리 작업에 유용합니다. 예를 들어, 고객 정보 테이블에서 특정 조건에 맞는 고객을 찾아서 일괄 처리하는 작업에 사용될 수 있습니다. 커서를 사용하면 여러 행을 하나씩 처리하면서 각 행에 대해 필요한 작업을 수행할 수 있습니다.
4.2. 동적 SQL 활용 사례
동적 SQL은 테이블 이름, 컬럼 이름 또는 쿼리 조건 등을 동적으로 변경해야 할 때 유용합니다. 예를 들어, 사용자가 테이블 이름을 입력하고, 해당 테이블에서 데이터를 조회하는 웹 애플리케이션에서 동적 SQL을 활용할 수 있습니다. 또한, SQL 문을 문자열로 동적으로 생성해야 하는 복잡한 조건을 처리할 때에도 사용됩니다.
5. 결론
Oracle PL/SQL에서 커서와 동적 SQL은 각각 특정한 목적을 가지고 있으며, 데이터베이스 프로그래밍에서 필수적인 도구입니다. 커서는 SQL 쿼리 결과를 행 단위로 처리하고, 동적 SQL은 SQL 문을 동적으로 생성하여 실행합니다. 각 상황에 맞는 도구를 적절하게 사용하면 효율적이고 유연한 데이터베이스 작업을 구현할 수 있습니다.
'ORACLE' 카테고리의 다른 글
ORA-01722: 수치가 부적합합니다 (0) | 2025.03.26 |
---|---|
Oracle SQL 튜닝 및 성능 개선 - 고급 SQL 쿼리 최적화 기법 (0) | 2025.03.26 |
ORACLE Flashback Query와 Flashback Table을 활용한 데이터 복구 (0) | 2025.03.25 |
ORACLE 데이터베이스 백업 및 복구 전략(RMAN, Export/Import) (0) | 2025.03.25 |
ORACLE 락(Lock)과 Deadlock 문제 해결 방법 (0) | 2025.03.25 |