프로시저 실행 중 아래와 같은 오류가 발생되는 경우 

 

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
Posted by 질주하는구
,