MySQL에서 DECLARE 구문 오류가 발생하는 이유
MySQL에서 저장 프로시저(Stored Procedure)를 작성할 때 DECLARE 구문 오류가 자주 발생합니다. 가장 흔한 원인은 DECLARE 문이 반드시 BEGIN과 END 블록 사이에 위치해야 한다는 규칙을 지키지 않기 때문입니다.
DECLARE 기본 문법
DECLARE는 변수를 선언하는 구문으로, 다음과 같이 BEGIN과 END 사이에 작성해야 합니다.
BEGIN DECLARE 변수명1 데이터타입; DECLARE 변수명2 데이터타입; ... END
DECLARE 구문 오류를 피하는 올바른 예제
아래는 MySQL에서 DECLARE 구문 오류 없이 저장 프로시저를 생성하는 실제 쿼리 예제입니다.
mysql> DELIMITER //
mysql> create procedure declare_Demo()
-> BEGIN
-> DECLARE Name varchar(100);
-> SET Name := 'John';
-> SELECT Name;
-> END
-> //
Query OK, 0 rows affected (0.17 sec)
mysql> DELIMITER ;주요 포인트:
DELIMITER //로 구분자를 변경하여 프로시저 본문의 세미콜론 충돌을 방지합니다.- 변수 선언(DECLARE)은 반드시 BEGIN 바로 뒤에 위치해야 합니다.
- SET 구문에서는
Name := 'John'처럼 할당 연산자를 사용해 값을 대입합니다. - 작업이 끝나면
DELIMITER ;로 원래 구분자를 복원합니다.
저장 프로시저 호출하기
생성된 저장 프로시저는 CALL 명령어로 실행할 수 있습니다. 기본 문법은 다음과 같습니다.
CALL 프로시저이름();
위에서 만든 프로시저를 호출하는 쿼리는 아래와 같습니다.
mysql> call declare_Demo();
실행 결과 확인
프로시저를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
+------+ | Name | +------+ | John | +------+ 1 row in set (0.00 sec) Query OK, 0 rows affected (0.01 sec)
정리
MySQL Workbench에서 DECLARE 오류를 방지하려면 세 가지만 기억하면 됩니다. 첫째, DECLARE는 항상 BEGIN과 END 사이에 작성할 것. 둘째, DELIMITER를 변경하여 프로시저 생성 시 구문 충돌을 막을 것. 셋째, 프로시저 생성 후에는 DELIMITER를 반드시 원래대로 되돌릴 것입니다. 이 규칙만 지키면 변수 선언 관련 오류를 손쉽게 피할 수 있습니다.