프로시저 실행 중 아래와 같은 오류가 발생되는 경우
Error Code : 1329 No data - zero rows fetched, selected, or processed
데이터를 찾지 못해서 발생되는 에러로 해당 하는 상황에 맞게 아래와 같이 작업 해줘야 합니다.
DELIMITER $$
DROP PROCEDURE IF EXISTS `PROC_TEST_WORK`$$
CREATE PROCEDURE `PROC_TEST_WORK`()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE v_column1 VARCHAR(12);
DECLARE v_column2 VARCHAR(12);
DECLARE v_column3 VARCHAR(10);
DECLARE c1 CURSOR FOR
SELECT AA.COLUMN1,
AA.COLUMN2,
AA.COLUMN3
FROM TEST_TABLE AA
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN c1;
data_loop: LOOP
FETCH c1 INTO v_column1, v_column2, v_column3;
IF done = 1 THEN
LEAVE data_loop;
END IF;
CALL PROC_LOG(CONCAT ( '데이터갱신 v_column1: ' ,v_column1, ', v_column2', v_column2));
END LOOP data_loop;
CLOSE c1;
END$$
DELIMITER ;
위의 코드 중
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
이 부분이 에러와 관련된 부분으로 done 변수의 값을 HANDLER FOR NOT FOUND 데이터를 찾지 못하는 상황이
발생되면 1로 변경하고
loop문 안에서
IF done = 1 THEN
LEAVE data_loop;
END IF;
그런 상황이 발생되면 작업을 하지 않고 빠져 나오게 설정 해줍니다.
다른 분들이 올린 내용을 보면 DECLARE done INT DEFAULT FALSE 로 설정하고
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
IF done THEN 으로 설정 하는 경우도 있는데 동일한 동작을 하게 됩니다. (1=true, 0=false)
이런 작업을 진행 후에도 동일한 에러가 발생 된다면 해당 쿼리문이 정상 동작 하는지 여부를 체크 하는게 좋습니다.
전 database charset설정이 맞지 않아 한글이 깨지며 오류가 발생된 경우가 있었습니다.
반응형
'DB > MY-SQL' 카테고리의 다른 글
MySql 8.x serverTimezone 에러 (0) | 2022.03.21 |
---|---|
mysql datetime 0000-00-00 00:00:00 (0) | 2022.02.22 |
Error Code: 2006 - MySQL server has gone away (0) | 2017.01.18 |
jdbc연결시 한글 인코딩 문제 (0) | 2017.01.18 |
mysql recource설정시 옵션 (0) | 2016.12.20 |