관리 메뉴

고양의 성장일기

[DBeaver] 프로시저 생성 DDL 실행 중 SQL Error [1064] [42000] 해결방법 본문

🛠️ Development Tools/DBeaver

[DBeaver] 프로시저 생성 DDL 실행 중 SQL Error [1064] [42000] 해결방법

고 양 2026. 1. 26. 19:00
반응형
프로시저 생성 DDL 실행 중 SQL Error [1064] [42000] 해결방법
Error occurred during SQL script execution

Reason:
SQL Error [1064] [42000]: (conn=56) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 5

원인 및 해결방법

이 예외는 MySQL이나 MariaDB에서 표시되는 흔한 구문 오류입니다.

SQL 문법이 정확하지 않거나, 예약어가 충돌하는 경우 발생합니다.

 

저의 경우는 DDL을 수동으로 마이그레이션 하는 중 이 문제가 발생했습니다.

 

아무래도 DBeaver와 같은 SQL 클라이언트가 기본 구분자 규칙에 따라 문장을 분할 처리하면서,

함수 본문이 구분되는 바람에 하나의 CREATE FUNCTION문으로 전달되지 못한 것으로 보입니다.

그 결과 서버에서 온전하지 않은 SQL문으로 인식하여 구문 오류를 반환하게 됩니다.

 

이럴 때 전체 SQL문의 구분자(Delimiter)를 아래와 같이 바꿔서 한 번 감싸주면 대체로 해결됩니다.

DELIMITER $$
CREATE FUNCTION FN_NAME(value VARCHAR(12))
RETURNS VARCHAR(12)
BEGIN
  ...
END$$
DELIMITER ;

 

또한 SQL문을 실행할 때 Execute statement(한 문장 실행)이 아니라, Execute SQL Script(스크립트 실행)로 실행해야 합니다.

재발 방지를 위해 체크해야 할 사항들

아래는 Function / Procedure / Trigger 마이그레이션 시 이와 같은 문제가 재발하지 않도록 DDL 실행 전 체크해야 할 사항들입니다.

1. 실행 방식

  1. Execute statement(문장 실행)으로 실행하지 않도록 주의합니다.
  2. Execute SQL Script(스크립트 실행)으로 실행하는 것이 안전합니다.
  3. 여러 줄의 SQL을 블록지정하여 부분 실행 하지는 않았는지 확인합니다.

2. DELIMITER(구분자) 설정

  1. CREATE DDL 실행 전 DELIMITER를 변경하면 좋습니다.
  2. END 뒤에 변경한 DELIMITER를 정확히 사용해줍니다.
  3. 구문 가장 마지막줄에 DELIMITER ;로 구분자를 원복해줍니다.
DELIMITER $$
-- DDL
END$$
DELIMITER ;

마치며

이 외에도 여러가지 원인이 존재할 수 있으며 같은 에러코드라도 상황에 따라 해결방법이 다를 수 있다는게 킹받는 포인트입니다.

부디 이 포스팅이 누군가에게 도움이 될 수 있기를 바랍니다.

 

감사합니다.

반응형