더북(TheBook)

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줄이 만들어졌음을 알 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.