오라클 TO_CHAR 결과와 문자열 비교시 예상대로 작동하지 않는 경우 원인

PL/SQL에서 1 월에서 12 월 까지의 값을 처리하기 위해 루프를 만들었는데 예상대로 동작하지 않는 상황이 생겼다.

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')