ch17_dynamic_test 프로시저는 사번, 사원명, JOB_ID를 매개변수로 받는데 각 매개변수 값에 따라 WHERE 절에 조건을 추가하는 SELECT문을 동적으로 생성한 후 실행해 그 결과 건수를 vn_cnt 변수에 넣어 출력하는 프로시저다. IF문으로 각 매개변수 값이 NULL이 아닐 때만 조건을 추가하므로 최소 1개에서 최대 3개의 조건이 만들어 질 수 있다. 어떤 값을 전달하느냐에 따라 매번 실행되는 문장이 달라진다. 일단 매개변수 값을 변경해가며 프로시저를 실행해 결과를 확인해 보자.
입력
EXEC ch17_dynamic_test (171, NULL, NULL );
결과
결과건수 : 1
SELECT COUNT(*)
FROM employees
WHERE 1=1
AND employee_id = 171
입력
EXEC ch17_dynamic_test (NULL, 'Jon', NULL );
결과
결과건수 : 2
SELECT COUNT(*)
FROM employees
WHERE 1=1
AND emp_name like '%Jon%'
입력
EXEC ch17_dynamic_test (NULL, NULL, 'SA_REP' );
결과
결과건수 : 30
SELECT COUNT(*)
FROM employees
WHERE 1=1
AND job_id = 'SA_REP'
입력
EXEC ch17_dynamic_test (NULL, 'Jon', 'SA_REP' );
결과
결과건수 : 1
SELECT COUNT(*)
FROM employees
WHERE 1=1
AND emp_name like '%Jon%'
AND job_id = 'SA_REP'
전달하는 매개변수의 값에 따라 SELECT 문장이 달라졌으며 반환되는 로우 수도 다르다. 특히 맨 마지막으로 실행했을 때 2개의 값을 전달해 WHERE 조건도 2줄이 만들어졌음을 알 수 있다.