Database

[MySQL] DELIMITER - 구분 기호

비번변경 2025. 3. 18. 16:00

개요

Stored Procedure에 대해서 알아보다보면 SQL 구문에 DELIMITER 라는 키워드를 찾아볼 수 있다. 이번 글에서는 DELIMITER의 역할에 대해서 잠깐 알아보려고 한다.

 

 

DELIMITER

기본적으로 SQL의 구문기호는 세미콜론(;)이다. 데이터베이스는 세미콜론을 기준으로 하나의 쿼리문을 인식하고 실행시킨다. 하지만 필요한 경우 구분 기호를 변경하여 사용하기도 한다. 이 때 사용하는 키워드가 바로 DELIMITER이다.

DELIMITER <문자열>

DELIMITER는 쿼리를 구분하는 구분 기호를 전달받은 문자열로 재정의하여 사용한다.

DELIMITER //

select 1//
select 2//

테스트해보면 기본 구분 기호인 세미콜론이 아니라 '//' 문자열을 구분 기호로 하여 쿼리가 실행되고 있음을 확인할 수 있다.

 

 

주요 사용처

DELIMITER는 여러 쿼리를 묶어서 한 번에 실행하는 프로시저 등을 정의할 때 주로 사용한다.

프로시저를 정의할 때 내부 문장 구분을 위해서 구분 기호를 사용하게 되는데, DELIMITER를 사용하지 않으면 프로시저와 프로시저 내부 문장을 구분하기 어려워지게 된다. 때문에 일반적으로 DELIMITER로 쿼리 구분 기호를 별도 문자/문자열로 설정한 뒤, 프로시저를 정의한 후 다시 쿼리 구분 기호를 기본값으로 원복하는 방식으로 사용한다.

-- 구분 기호 재정의
DELIMITER &&

-- 프로시저 정의
CREATE PROCEDURE test_procedure(
  IN loop_str CHAR,
  IN loop_val INT
)
BEGIN
    declare idx INT DEFAULT 0;    
    WHILE (idx < loop_val) DO
        SET idx = idx + 1;
    END WHILE; 
    SELECT idx;
END &&

-- 구분 기호 원복
DELIMITER ;

 

그런데, DBeaver와 같은 클라이언트에서는 DELIMITER가 잘 동작하지 않는 것 같다.

클라이언트 도구를 사용할 때는 일반적으로 블럭을 잡아서 구문을 실행하는 편이라 DELIMITER를 잘 사용하지 않는다고……. 참고 삼아 기재한다.

 

 

참고 문서

https://dev.mysql.com/doc/refman/8.4/en/stored-programs-defining.html

https://www.geeksforgeeks.org/delimiters-in-sql/

 

728x90