🧩 작성한 프로시저 예시
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를 다시 실행했기 때문.
해결 방법:
- 프로시저를 새로 만들기 전에 항상 기존 것을 삭제해준다.
🔄 실행 순서 정리
- USE market_db; — 사용할 DB 선택
- DROP PROCEDURE IF EXISTS user_proc3; — 있으면 삭제
- DELIMITER $$ — 프로시저 쓸 준비
- CREATE PROCEDURE ... END $$ — 프로시저 만들기
- DELIMITER ; — 다시 기본 세미콜론으로 복구
- CREATE TABLE — 테이블 없으면 만들기
- CALL user_proc3(...); — 실행
- SELECT ... — 결과 확인
✅ 마무리
MySQL에서 프로시저 쓸 땐:
- DELIMITER 잘 써줘야 하고
- END $$로 꼭 마무리해줘야 하고
- 이미 있으면 DROP PROCEDURE로 먼저 지워줘야 함