database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 29394 게시물 읽기
No. 29394
CURSOR를 이용한 UPDATE 방법 없나요?
작성자
ships
작성일
2009-11-10 12:59
조회수
6,074

안녕하세요.

다음처럼 프로시져를 만들어서 전체 레코드를 대상으로 값을 수정하려고 하는데요.

UPDATE query 부분이 아무래도 비효율적인 것 같습니다.

현재 커서를 이용해서 그 row를 변경하고 싶은데요 방법이 없을까요?


CREATE PROCEDURE `RemoveAutoHuntOption`()

BEGIN

    DECLARE cname VARCHAR (12);

    DECLARE huntopt1 VARCHAR (81);

    DECLARE huntopt2 VARCHAR (81);

    DECLARE done INT DEFAULT (0);   

    DECLARE dirty INT DEFAULT (0);

    DECLARE cur CURSOR FOR SELECT aName, aAutoConfig FROM ts2_gamedb.AvatarInfo;

    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

   

    CREATE TEMPORARY TABLE dummy (

        aName   VARCHAR (12),

        aHuntOpt1 VARCHAR (81),

        aHuntOpt2 VARCHAR (81)

    );

   

    OPEN cur;

   

    REPEAT

        FETCH cur INTO cname, huntopt1;

        IF NOT done THEN

            SET dirty = STRCMP (RIGHT (LEFT (huntopt1, 66), 15), '000000000000000');

            IF dirty <> 0 THEN

                SET huntopt2 = CONCAT (RPAD (LEFT (huntopt1, 51), 66, '0'), RIGHT (huntopt1, 15));

                UPDATE ts2_gamedb.AvatarInfo SET aAutoConfig = huntopt2 WHERE aName = cname;

                INSERT INTO dummy VALUES (cname, huntopt1, huntopt2);

            END IF;

        END IF;

    UNTIL done END REPEAT;

   

    CLOSE cur;

   

    SELECT * FROM dummy;

    DROP TABLE dummy;

END;


즐거운 하루 되세요.


이 글에 대한 댓글이 총 1건 있습니다.

MySQL에서 커서를 이용한 업데이트가 가능했던가요? 잘 모르겠네요...
게다가 AvatarInfo.aName이 Unique key라면 느릴 것 같지도 않습니다.

그나마 개선한다면, 

(1) huntopt2를 생성하는 부분을 function으로 떼어내고,
(2) AvatarInfo_new 테이블을 만든다음에,
(3) INSERT INTO ... SELECT .. 에서 해당 function을 사용해서 값을 변환해서 밀어넣은 다음, 
(4) AvatarInfo를 드랍하고,
(5) AvatarInfo_new 를 rename.

위와 같은 절차로 할 수 있지 않을까 생각해봅니다. 

박현우(lqez)님이 2009-11-10 16:34에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
29398mysqlbinlog 실행 시 한글 깨짐
이성헌
2009-11-13
6437
29396cluster 관련 질문 [4]
김종섭
2009-11-12
6606
29395insert시 [4]
김태희
2009-11-11
6089
29394CURSOR를 이용한 UPDATE 방법 없나요? [1]
ships
2009-11-10
6074
29393auto_increment 필드 초기화? [2]
정대원
2009-11-09
5823
29391업데이트문 질문입니다. [1]
sjy
2009-11-08
5512
29390최근글 3개중에 1개이상 등록한 아이디 추출 부탁드립니다. [2]
장춘진
2009-11-07
5297
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다