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

MySQL DELIMITER에 세미콜론(;)을 사용할 수 있을까?

결론부터 말하면, 세미콜론(;)은 DELIMITER로 사용할 수 없습니다. 만약 그대로 세미콜론을 구분자로 지정한 상태에서 저장 프로시저(Stored Procedure)를 생성하려고 하면, 프로시저 내부의 각 문장이 세미콜론을 만나는 시점에 prematurely 종료되어 프로시저가 정상적으로 생성되지 않습니다.

왜 다른 구분자가 필요한가?

저장 프로시저의 본문에는 여러 개의 SQL 문장이 포함되며, 각 문장은 기본적으로 세미콜론으로 끝납니다. MySQL 클라이언트는 세미콜론을 문장의 끝으로 인식하기 때문에, 프로시저 전체를 하나의 단위로 전달하려면 임시로 다른 구분자(예: //, $$ 등)로 변경해야 합니다.

DELIMITER 변경 방법

다음은 올바른 작성 순서입니다. 먼저 구분자를 //로 변경하고, 프로시저 생성이 완료된 후 원래대로 되돌립니다.

DELIMITER //
CREATE PROCEDURE yourProcedureName()
BEGIN
yourStatement1;
.
.
.
statementN;
END
//
DELIMITER ;

실제 예제

위 문법을 실제로 적용하여 저장 프로시저를 생성해 보겠습니다.

mysql> DELIMITER //
mysql> CREATE PROCEDURE get_Message()
-> BEGIN
-> SELECT CONCAT("HELLO"," ","MYSQL USERS");
-> END
-> //
Query OK, 0 rows affected (0.23 sec)

mysql> DELIMITER ;

프로시저 호출

생성이 완료되면 CALL 명령어를 사용하여 저장 프로시저를 호출할 수 있습니다.

mysql> CALL get_Message();

실행 결과

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

+-----------------------------------+
| CONCAT("HELLO"," ","MYSQL USERS") |
+-----------------------------------+
| HELLO MYSQL USERS |
+-----------------------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

정리

  • 세미콜론은 MySQL 클라이언트의 기본 문장 종료 문자이므로 DELIMITER로 사용할 수 없습니다.
  • 저장 프로시저, 트리거, 함수 등을 생성할 때는 // 또는 $$ 같은 대체 구분자를 사용해야 합니다.
  • 작업이 끝난 후 반드시 DELIMITER ;로 원래 상태로 복구하는 것을 잊지 마세요.