FOR MTH IN 1 .. 12 LOOP
F(TO_CHAR(MTH, '00'));
END LOOP;
01~12를 순회하려고 하는데 F는 문자열로 된 두자리의 월 값을 인자로 기대한다.
PROCEDURE F ( mthIN VARCHAR2 ) IS
BEGIN
IF mth = '01' THEN
...
END IF;
만약 다음처럼 직접 F를 호출한다면 아무런 문제가 없을 것이다.
F ( '01' );
그렇지만 위의 루프를 통해서는 IF mth= '01' 조건을 만족하는 케이스를 찾을 수 없을것이다.
그 이유는 TO_CHAR(1, '00')의 결과가 '01'이 아니라 ' 01' 이기 때문이다.
오라클 TO_CHAR는 마이너스 사인(-)을 넣기 위한 자리를 포함해서 반환하기 때문에 위 루프를 제대로 동작하게 만들기 위해서는 TO_CHAR 함수의 인자를 다음처럼 변경해 주어야 한다.
TO_CHAR(MTH, 'FM00')