GOTO문
PL/SQL 코드 상에서 GOTO문을 만나면 GOTO문이 지정하는 라벨로 제어가 넘어간다. 구구단 출력 프로그램으로 예를 들어 보자.
입력
DECLARE
vn_base_num NUMBER := 3;
BEGIN
<<third>>
FOR i IN 1..9
LOOP
DBMS_OUTPUT.PUT_LINE (vn_base_num || '*' || i || '= ' || vn_base_num * i);
IF i = 3 THEN
GOTO fourth;
END IF;
END LOOP;
<<fourth>>
vn_base_num := 4;
FOR i IN 1..9
LOOP
DBMS_OUTPUT.PUT_LINE (vn_base_num || '*' || i || '= ' || vn_base_num * i);
END LOOP;
END;
결과
3*1= 3
3*2= 6
3*3= 9
4*1= 4
4*2= 8
4*3= 12
4*4= 16
4*5= 20
4*6= 24
4*7= 28
4*8= 32
4*9= 36
첫 번째 FOR문에 <<third>>, 두 번째 FOR문에 <<fourth>>라는 라벨을 붙였다. 그리고 첫 번째 FOR문에서 인덱스 값이 3이면, fourth 라벨로 이동해 3단을 출력하다가 4단을 출력하고 있다.
개발 현장에서는 GOTO문은 잘 사용하지 않는다. 왜냐하면 일반적으로 특정 로직에 맞게 PL/SQL 코드를 순차적으로 작성하는데, 중간중간에 GOTO문을 사용해 제어를 다른 부분으로 넘기면 로직의 일관성을 훼손하기 때문이다. 소스코드가 길어지면 이런 문제가 더 불거져 프로그램 가독성이 극도로 나빠져 버린다.
위에서 예로 든 것처럼 구구단 3단을 출력하다 4단을 출력하는 로직을 짜는 것과 같은 일은 거의 없을 것이다. 보통은 A라는 로직을 처리하다가 특정 조건에 부합할 때 B 로직에 제어권을 넘기기 보다는, A1 로직을 처리하고 A2를 처리하는 식으로 로직의 일관성을 유지하는 것이 좋은 프로그래밍 습관이기 때문이다.