본문 바로가기

Technical/DBMS

MySQL Tip - caution for 'not found handler'


MySQL에서 NOT FOUND exception은 Cursor Fetch 시에만 발생한다.

따라서 update 아래의 IF 문 내의 처리는 의도한 대로 동작하지 않는다. 즉, 코더의 의도는 Update 문을 실행해서 해당 데이터가 없다면 If 문 내의 문장이 처리되기를 원한 거겠지만, 아래의 이 IF 문 내의 문장은 전혀 실행되지 못하게 된다.
DECLARE MyErr INT default 0;
DECLARE CONTINUE HANDLER FOR NOT FOUND set MyErr = -1;
...
UPDATE table
   SET COL = 'data'
WHERE
   KEY_COL = 'key data';

IF MyErr < 0 THEN
    statements_for_not_found...;
END IF;

또한 update에서 해당 row가 없을 경우에 found_rows()=0 역시 동작하지 않는다.
이런 경우 반드시 아래와 같이 ROW_COUNT() 를 이용해서 코딩해야 한다.
/* DECLARE CONTINUE HANDLER FOR NOT FOUND set MyErr = -1; */
...
...
/* IF MyErr < 0 THEN */
IF ROW_COUNT()=0 THEN
    statements_for_not_found...;
END IF;
...


- Barracuda -