GOTO 명령은 간단한 점프(jump) 명령으로, 동일한 함수 내에서 레이블(label)이 선언된 특정 위치로 프로그램의 실행 흐름을 무조건적으로 이동시키는 역할을 합니다. 이 글에서는 SQL Server에서 GOTO 명령을 사용하는 방법을 문법과 실전 예제를 통해 자세히 알아보겠습니다.
GOTO 명령의 기본 개념
GOTO는 조건 없이(unconditional) 코드의 특정 지점으로 건너뛰게 하는 제어문입니다. 일반적인 순차적 실행 흐름을 벗어나기 때문에 강력하지만, 남용하면 코드의 가독성과 유지보수성이 크게 떨어질 수 있다는 점을 유의해야 합니다.
문법(Syntax)
SQL Server의 GOTO 문은 크게 두 부분으로 구성됩니다. 바로 명령부(GOTO)와 레이블부(Label)입니다.
1. GOTO 명령부
GOTO 키워드 뒤에 이동할 레이블 이름(label_name)을 붙여 작성합니다.
GOTO label_name;
2. 레이블부(Label)
레이블 이름 뒤에 콜론(:)을 붙이고, 그 아래에 점프한 후 실행할 문장들을 작성합니다.
label_name:
{ 실행할 문장 }
작성 시 주의사항
- label_name은 해당 함수 범위 내에서 반드시 고유(unique)해야 합니다.
- 레이블을 선언한 후에는 최소 하나 이상의 실행 가능한 명령문이 뒤따라야 합니다.
실전 예제
다음은 WHILE 루프와 함께 GOTO를 활용한 예제입니다.
DECLARE @Number INT = 1;
DECLARE @Total INT = 0;
WHILE @Number <= 10
BEGIN
IF @Number = 5
GOTO quantrimang;
ELSE
SET @Total = @Total + @Number;
SET @Number = @Number + 1;
END;
quantrimang:
PRINT @Total;
GO
이 예제에서는 quantrimang이라는 이름의 레이블을 생성했습니다. WHILE 루프가 돌면서 @Number 변수가 5가 되는 순간, 프로그램은 루프의 나머지 과정을 건너뛰고 함수 내 quantrimang 레이블 위치로 즉시 점프한 뒤, 그다음에 오는 PRINT 문을 실행합니다. 결과적으로 1부터 4까지의 합인 10이 출력됩니다.
GOTO 사용 시 유의할 점
GOTO는 편리하지만, 무분별하게 사용하면 실행 흐름을 추적하기 어려운 소위 '스파게티 코드'가 되기 쉽습니다. 따라서 복잡한 분기 처리나 에러 핸들링 등 꼭 필요한 상황에서만 제한적으로 사용하고, 대부분의 경우 IF...ELSE나 WHILE 같은 구조적 제어문으로 대체하는 것이 좋습니다.
함께 보면 좋은 관련 문서
- SQL Server의 IF...ELSE 명령
- SQL Server의 WHILE 루프
- SQL Server의 BREAK(반복 중단) 명령