Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 저장 프로시저에서 DELIMITER를 올바르게 사용하여 BEGIN/END 문 오류 방지하기

MySQL에서 저장 프로시저(Stored Procedure)를 생성할 때 DELIMITER 개념을 사용하지 않으면 BEGIN/END 문 관련 오류가 자주 발생합니다. 그 이유는 MySQL 클라이언트가 기본적으로 세미콜론(;)을 문장의 끝으로 인식하기 때문입니다. 저장 프로시저 내부에는 여러 개의 SQL 문이 세미콜론과 함께 포함되므로, 구분 기호를 변경하지 않으면 프로시저가 중간에 잘려서 오류가 발생하게 됩니다.

DELIMITER를 사용한 올바른 저장 프로시저 생성

다음은 DELIMITER를 활용하여 오류 없이 저장 프로시저를 생성하는 예제입니다.

mysql> DELIMITER //
mysql> CREATE PROCEDURE correct_procedure()
   BEGIN
   SELECT 'Hello MySQL !!!';
   END
//
Query OK, 0 rows affected (0.12 sec)
mysql> DELIMITER ;

위 예제에서는 먼저 구분 기호를 세미콜론(;)에서 슬래시 두 개(//)로 변경했습니다. 이렇게 하면 BEGIN과 END 사이의 세미콜론이 문장 종료로 해석되지 않고, 전체 프로시저가 하나의 단위로 처리됩니다. 프로시저 생성이 완료된 후에는 반드시 DELIMITER ; 명령으로 원래 구분 기호를 복원해야 합니다.

저장 프로시저 호출 방법

생성한 저장 프로시저를 호출하는 기본 문법은 다음과 같습니다.

call yourStoredProcedureName();

CALL 명령을 사용하여 위에서 만든 저장 프로시저를 호출해 보겠습니다.

mysql> call correct_procedure();

실행 결과

위 쿼리를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

+-----------------+
| Hello MySQL !!! |
+-----------------+
| Hello MySQL !!! |
+-----------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.02 sec)

정리

저장 프로시저 작성 시 DELIMITER 사용은 선택이 아닌 필수입니다. 핵심 순서를 정리하면 다음과 같습니다.

1. DELIMITER //로 구분 기호를 변경합니다.
2. CREATE PROCEDURE 문으로 프로시저를 정의하고 END 뒤에 새 구분 기호(//)를 붙여 마무리합니다.
3. DELIMITER ;로 구분 기호를 원래대로 되돌립니다.
4. CALL 명령으로 프로시저를 실행합니다.

이 과정을 지키면 BEGIN/END 문에서 발생하는 구문 오류를 효과적으로 피할 수 있습니다.