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를 사용합니다.

 

 

 

'MySQL' 카테고리의 다른 글

MySQL Lock 발생  (0) 2023.09.22
MySQL - stored procedure 성능  (0) 2023.06.29
MySQL 8.0 connect by  (0) 2023.03.21
GCP-Google Cloud Platform-프로젝트 구축  (0) 2022.03.04
mysql /*! */ 의미  (0) 2022.03.02

+ Recent posts