카테고리 없음

MySQL 프로시저 작성 중 발생한 오류 정리

별초롱언니 2025. 6. 13. 09:49

🧩 작성한 프로시저 예시

DROP PROCEDURE IF EXISTS user_proc3;
DELIMITER $$

CREATE PROCEDURE user_proc3(
	IN txtValue CHAR(10),
    OUT outValue INT
)
BEGIN
	INSERT INTO noTable VALUES(NULL, txtValue);
	SELECT MAX(id) INTO outValue FROM noTable;
END $$

DELIMITER ;

CREATE TABLE IF NOT EXISTS noTable (
	id INT AUTO_INCREMENT PRIMARY KEY,
	txt CHAR(10)
);

CALL user_proc3('테스트1', @myValue);
SELECT CONCAT('입력된 ID값 ==>', @myValue);

❗ 발생한 오류들 & 해결 방법

✅ 1. 프로시저가 존재하지 않는다는 오류

오류 메시지: Error Code: 1305. PROCEDURE market_db.user_proc3 does not exist

 

원인:

  • 프로시저를 만들 때 END $$를 빠뜨려서 정상적으로 생성되지 않았음.
  • 또는 CALL을 먼저 실행해서 아직 생성되지 않은 프로시저를 호출했음.

해결 방법:

  • 반드시 CREATE PROCEDURE 구문을 DELIMITER $$로 감싸고,
  • END $$로 정확하게 닫아야 한다.

 

✅ 2. 프로시저가 이미 존재한다는 오류

오류 메시지: Error Code: 1304. PROCEDURE user_proc3 already exists

 

원인:

  • 이미 user_proc3라는 이름의 프로시저가 존재함에도 불구하고,
  • 삭제하지 않고 CREATE PROCEDURE를 다시 실행했기 때문.

해결 방법:

  • 프로시저를 새로 만들기 전에 항상 기존 것을 삭제해준다.

🔄 실행 순서 정리

  1. USE market_db; — 사용할 DB 선택
  2. DROP PROCEDURE IF EXISTS user_proc3; — 있으면 삭제
  3. DELIMITER $$ — 프로시저 쓸 준비
  4. CREATE PROCEDURE ... END $$ — 프로시저 만들기
  5. DELIMITER ; — 다시 기본 세미콜론으로 복구
  6. CREATE TABLE — 테이블 없으면 만들기
  7. CALL user_proc3(...); — 실행
  8. SELECT ... — 결과 확인

✅ 마무리

MySQL에서 프로시저 쓸 땐:

  • DELIMITER 잘 써줘야 하고
  • END $$로 꼭 마무리해줘야 하고
  • 이미 있으면 DROP PROCEDURE로 먼저 지워줘야 함