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

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