반응형
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 -
반응형
'Technical > DBMS' 카테고리의 다른 글
Haproxy - Master/Backup 설정에서 MySQL alive check 방법 (0) | 2011.03.25 |
---|---|
Percona - Xtrabackup 1.4 유틸리티의 innobackupex 스크립트 오류 (0) | 2011.01.26 |
MySQL Tip - General log 활용 (0) | 2011.01.09 |
CentOS 5.4, MySQL build를 위한 패키지들 (0) | 2010.10.01 |
MySQL replication : Statement-Based vs. Row-Based replication (0) | 2010.08.01 |