[MySQL] Error: is not valid at this position expecting an identifier

뭉딩·2024년 4월 25일

👍

목록 보기
4/4

"DECLARE" is not valid at this position expecting an identifier
한시간 넘게 이유를 찾았다..위 에러는 그냥 sql문법 적으로 문제 있다고 알려주는 것이라 정확한 원인을 찾지 못하고 수많은 에러 원인 중 하나로 적어 둔다.

DECLARE문은 BEGIN 바로 뒤에 와야 한다 !!!

ELSE뒤에 있던 DECLARE문을 BEGIN 바로 뒤로 옮겨주었다.


DELIMITER //
CREATE PROCEDURE borrow
(   
    IN book_in INTEGER,
    IN user_in INTEGER
)
BEGIN
    DECLARE borrow_num INT default 0;
    DECLARE resultmsg VARCHAR(30) DEFAULT '대출 완료';
    DECLARE is_book_available VARCHAR(10);
    DECLARE b_date DATE;
    DECLARE finished INT DEFAULT 0;

    SELECT COUNT(*) INTO borrow_num FROM borrows WHERE user_id = user_in;
    SELECT book_status INTO is_book_available FROM book WHERE book_id = book_in;

    IF is_book_available = '대출' THEN
        SET resultmsg = '대출 실패: 이미 대출 중인 도서입니다.';
    ELSEIF borrow_num >= 5 THEN 
        SET resultmsg = '대출 실패: 최대 권수 초과';
    ELSE 
        DECLARE cur1 CURSOR FOR SELECT borrow_date FROM borrows WHERE user_id = user_in;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

        OPEN cur1;

        my_loop: LOOP
            FETCH cur1 INTO b_date;
            IF finished = 1 THEN
                LEAVE my_loop;
            END IF;
            IF CURDATE() > b_date THEN
                SET resultmsg = '대출 실패: 반납 지연 도서 존재';
                CLOSE cur1; 
                LEAVE my_loop;
            END IF;
        END LOOP my_loop;

        CLOSE cur1;
	END IF;
	if resultmsg='대출 완료' then
        INSERT INTO borrows (book_id, user_id, borrow_date, return_date) VALUES (book_in, user_in, CURDATE(), DATE_ADD(CURDATE(), INTERVAL 14 DAY));
    end if;
    
    SELECT resultmsg;
END;

//
DELIMITER ;


profile
멋있는 개발자 되기

0개의 댓글