MySQL 구분 기호 오류란?
MySQL에서 구분 기호(delimiter) 오류는 주로 파이프(|)를 세미콜론(;)과 함께 사용할 때, 그리고 MySQL 8.0.12 미만 버전에서 발생합니다.
MySQL은 파이프(|)와 세미콜론(;)을 서로 다른 두 개의 구분 기호로 인식합니다. 따라서 저장 프로시저(stored procedure) 작성 시 이 두 기호를 혼동하지 않도록 주의해야 합니다.
참고: 본문 예제는 MySQL 8.0.12 버전을 기준으로 작성되었습니다. 이 버전에서는 파이프 구분 기호가 세미콜론과 함께 정상적으로 동작합니다. 반면 8.0.12 미만 버전을 사용하면 구분 기호 오류가 발생할 수 있으니, 먼저 자신이 사용 중인 MySQL 버전을 확인하는 것이 좋습니다.
구분 기호 변경 후 프로시저 생성 예제
다음은 MySQL 구분 기호가 실제로 동작하는 방식을 보여주는 예제입니다. 먼저 구분 기호를 파이프(|)로 변경한 뒤, 두 수의 합을 반환하는 저장 프로시저를 생성합니다.
mysql> delimiter |; mysql> create procedure getSumOfTwoNumbers() -> begin -> select 2+3 as TotalValue; -> end ; -> |; Query OK, 0 rows affected (0.17 sec) mysql> delimiter ;
프로시저 생성이 완료되면 call 명령어로 저장 프로시저를 호출할 수 있습니다.
mysql> call getSumOfTwoNumbers();
실행 결과는 다음과 같습니다.
+------------+ | TotalValue | +------------+ | 5 | +------------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)
세미콜론이 기본 구분 기호인 이유
위 예제처럼 파이프(|)를 세미콜론(;)과 함께 사용하는 방식은 권장되지 않습니다. 그 이유는 MySQL에서 세미콜론이 기본 구분 기호(default delimiter)이며, 하나의 문(statement)이 끝났음을 알려주는 역할을 하기 때문입니다.
따라서 여러 개의 문을 포함하는 저장 프로시저를 작성할 때는 세미콜론을 활용해야 내부 문장들과 전체 프로시저의 종료 지점을 명확하게 구분할 수 있습니다.
구분 기호 변경 방법 정리
다음은 구분 기호를 변경하는 기본적인 절차입니다.
1. 구분 기호를 파이프(|)로 설정
구분 기호를 파이프로 지정하려면 아래 쿼리를 실행합니다.
mysql> DELIMITER |
그런 다음 저장 프로시저를 생성합니다.
mysql> DELIMITER | mysql> create procedure Demo() -> begin -> select 2*3 as TotalMultiplication; -> end ; -> | Query OK, 0 rows affected (0.12 sec)
2. 구분 기호를 다시 세미콜론(;)으로 복원
프로시저 생성이 끝나면 반드시 구분 기호를 세미콜론으로 되돌려야 합니다. 아래 쿼리를 사용합니다.
mysql> delimiter ;
이렇게 하면 이후 일반 SQL 문을 세미콜론으로 정상적으로 종료할 수 있습니다. 구분 기호 오류를 방지하려면 MySQL 8.0.12 이상 버전을 사용하고, 프로시저 작성 전후로 구분 기호를 올바르게 설정하고 복원하는 습관을 들이는 것이 가장 확실한 방법입니다.