MySQL 저장 프로시저에서 DELIMITER의 역할
MySQL에서 저장 프로시저를 작성할 때 DELIMITER는 매우 중요한 역할을 합니다. MySQL 클라이언트는 기본적으로 세미콜론(;)을 문장의 끝으로 인식하기 때문에, 저장 프로시저 내부에 여러 개의 SQL 문장이 포함되어 있으면 클라이언트가 프로시저를 하나의 완전한 블록으로 처리하지 못하고 중간에 오류가 발생합니다.
따라서 저장 프로시저를 정의하기 전에 구분자(delimiter)를 다른 기호로 변경해 주어야 합니다. 일반적으로는 더블 슬래시(//)나 $$(달러 기호)가 많이 사용됩니다.
올바른 사용 방법
저장 프로시저에서 DELIMITER를 올바르게 사용하는 기본 형식은 다음과 같습니다:
DELIMITER //
CREATE PROCEDURE yourStoredProcedureName()
BEGIN
IF yourCondition THEN
yourStatement1;
ELSE
yourStatement2;
END IF;
END
//
DELIMITER ;
위 코드의 핵심 흐름은 다음과 같습니다:
1. 구분자 변경: DELIMITER // 명령으로 문장 끝 기호를 세미콜론에서 //로 변경합니다.
2. 프로시저 작성: BEGIN과 END 사이에 여러 SQL 문장을 자유롭게 작성합니다. 내부의 세미콜론은 이제 문장 종료로 해석되지 않습니다.
3. 구분자 복원: 프로시저 정의가 끝난 후 DELIMITER ;로 원래 상태로 되돌립니다.
실제 예제: 저장 프로시저 생성하기
이제 실제 예제를 통해 저장 프로시저를 생성해 보겠습니다:
mysql> DELIMITER //
mysql> CREATE PROCEDURE delimiter_demo()
-> BEGIN
-> IF 1 THEN
-> SELECT "If condition will always true";
-> ELSE
-> SELECT "No";
-> END IF;
-> END
-> //
Query OK, 0 rows affected (0.17 sec)
mysql> DELIMITER ;
위 예제에서 IF 조건의 값이 1(참)이므로, 조건문은 항상 참으로 평가되어 첫 번째 SELECT 문이 실행됩니다.
CALL 명령으로 프로시저 실행하기
생성된 저장 프로시저는 CALL 명령을 통해 호출할 수 있습니다:
mysql> CALL delimiter_demo();
실행 결과는 다음과 같습니다:
+-------------------------------+
| If condition will always true |
+-------------------------------+
| If condition will always true |
+-------------------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.02 sec)
정리 및 주의사항
DELIMITER를 사용할 때 기억해야 할 핵심 사항은 다음과 같습니다:
- DELIMITER는 SQL 표준 문법이 아니라 MySQL 클라이언트(mysql 명령줄 도구)의 기능입니다.
- 프로시저 생성 후에는 반드시 원래 구분자인 세미콜론(;)으로 되돌려야 이후 일반 SQL 문장들이 정상적으로 실행됩니다.
- GUI 도구(예: MySQL Workbench)에서는 자동으로 처리해 주는 경우도 있지만, 명령줄 환경에서는 직접 설정해 주어야 합니다.
- END 뒤의 //는 프로시저 정의의 실제 끝을 알리는 역할을 하며, 그 후에 구분자를 복원하는 것을 잊지 마세요.