[sql] 프로시저 호출 시 동적 SQL 쿼리 사용 방법

프로시저는 SQL 문을 저장하고 실행하는 데 사용되는 일련의 작업을 포함하는 데이터베이스 오브젝트입니다. 보통 정적 SQL 문을 사용하여 프로시저를 작성하고 호출합니다. 그러나 때로는 동적 SQL 문을 프로시저에서 실행해야 할 때가 있습니다. 동적 SQL 문은 실행 시에 동적으로 생성되는 SQL 문입니다. 이번 글에서는 프로시저 호출 시 동적 SQL 쿼리를 사용하는 방법에 대해 알아보겠습니다.

1. 프로시저 내에서 동적 SQL 쿼리 작성하기

프로시저 내에서 동적 SQL 쿼리를 작성하려면 VARCHAR2(또는 NVARCHAR2) 타입의 변수를 선언하고 동적 SQL 문을 해당 변수에 할당해야 합니다. 이 변수를 사용하여 프로시저에서 동적으로 생성된 SQL 문을 실행할 수 있습니다.

CREATE OR REPLACE PROCEDURE execute_dynamic_sql AS
  query VARCHAR2(4000); -- 동적 SQL을 저장할 변수 선언
  
BEGIN
  -- 동적 SQL 쿼리 작성
  query := 'SELECT * FROM employees WHERE department_id = 10';
  
  -- 동적 SQL 실행
  EXECUTE IMMEDIATE query;
END;
/

위의 예제에서는 execute_dynamic_sql이라는 이름의 프로시저를 생성합니다. query 변수를 선언하고, 동적 SQL 쿼리를 할당합니다. 그런 다음 EXECUTE IMMEDIATE 문을 사용하여 동적 SQL 문을 실행합니다.

2. 바인드 변수 사용하기

동적 SQL 쿼리에서는 사용자 입력이나 변수 값을 동적으로 포함해야 할 수도 있습니다. 이 경우에는 바인드 변수를 사용하여 SQL 문에서 변수 값을 설정할 수 있습니다. 바인드 변수는 :을 접두사로 사용하여 표시됩니다.

CREATE OR REPLACE PROCEDURE execute_dynamic_sql_with_bind_var(input_value NUMBER) AS
  query VARCHAR2(4000);
BEGIN
  query := 'SELECT * FROM employees WHERE salary > :input_value';
  
  -- 바인드 변수 설정 및 동적 SQL 실행
  EXECUTE IMMEDIATE query USING input_value;
END;
/

위의 예제에서는 execute_dynamic_sql_with_bind_var라는 이름의 프로시저를 생성합니다. query 변수에 동적 SQL 쿼리를 할당하고, 바인드 변수 :input_value를 사용하여 변수 값을 동적으로 설정합니다. 이후 EXECUTE IMMEDIATE 문에서 USING 절을 사용하여 바인드 변수 값을 전달합니다.

3. 주의사항

동적 SQL을 사용할 때 몇 가지 주의사항이 있습니다.

참고 자료