«   2021/12   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Archives
Today
8
Total
1,143,090
관리 메뉴

Bryan's Tech-Log

MySQL Tip - caution for 'not found handler' 본문

Technical/DBMS

MySQL Tip - caution for 'not found handler'

Barracuda 2011. 1. 9. 02:55

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 -


0 Comments
댓글쓰기 폼