MySQL
MySQL - Delimiter
필유아사
2023. 4. 10. 12:40
Stored Programs 정의
각 저장 프로그램에는 SQL 문으로 구성된 문장이 포함되어 있습니다. 이 명령문은 세미콜론(;) 문자로 구분된 여러 명령문으로 구성된 복합 명령문입니다.
예를 들어 다음 저장 프로시저에는 BEGIN ... END 블록에 select 문장이 있습니다.
CREATE PROCEDURE user_count()
BEGIN
SELECT 'Number of accounts:', COUNT(*) FROM mysql.user;
END;
mysql 클라이언트 프로그램을 사용하여 위의 세미콜론 문자가 포함된 저장 프로그램을 작성하면 아래와 같이 에러가 발생합니다. 기본적으로 mysql은 세미콜론을 명령문 구분 기호로 인식하기 때문입니다.
그러므로 mysql이 stored procedure 에서 세미콜론(;)을 인식하도록 임시로 구분 기호를 정의해야 합니다.
mysql> CREATE PROCEDURE user_count()
-> BEGIN
-> SELECT 'Number of accounts:', COUNT(*) FROM mysql.user;
ERROR 1064 (42000): You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near '' at line 3
mysql 구분 기호를 재정의하려면 delimiter 명령을 사용합니다. 다음 예에서는 user_count() 프로시저를 정의하기 위해 delimiter를 (//) 로 사용했습니다. 이를 통해 프로시저 본문에 사용된 구분 기호*;)를 자체에서 해석하지 않고 서버로 전달하여 stored procedure를 생성할 수 있습니다.
마지막 줄의 delimiter ; 는 다시 임시로 변경한 delimiter를 세미콜론(;)으로 원복하는 명령어입니다.
mysql> delimiter //
mysql> CREATE PROCEDURE user_count()
-> BEGIN
-> SELECT 'Number of accounts:', COUNT(*) FROM mysql.user;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
PROCEDURE, FUNCTION, TRIGGER에서 세미콜론을 구분하기 위해 delimeter를 사용합니다.