2017-11-29 10 views
0

나는 Google로하지만 나는 내가 필요한 것을 정확히 찾을 수 없었다.하나의 준비 준비 명령문에서 다중 업데이트 쿼리 mysql

PREPARE, EXECUTEMySQL에 사용하여 단일 명령문에서 여러 개의 업데이트 쿼리를 실행한다고 가정했습니다.

샘플 쿼리 : 나는 쿼리 이상 사용하려고하지만 오류

오류 코드가 발생

update tableName set column2='a', column3='b' where column1=1; 
update tableName set column2='c', column3='d' where column1=2; 
update tableName set column2='f', column3='g' where column1=3; 

SET @Query=myUpdateQuery; 
PREPARE stmt FROM @Query; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

: 1064 당신은 당신의 SQL 구문에 오류가 있습니다;

나는이 오류를 극복하기 위해 애 쓰고 있습니다.

내 필요를 성취 할 수있는 방법을 알려주십시오. 미리 감사드립니다.

답변

0

이보십시오. 프로 시저의 첫 번째 인수로 업데이트해야하는 쉼표로 구분 된 ID 목록을 전달해야합니다. 희망이 도움이됩니다.

DELIMITER $$ 

CREATE PROCEDURE proc_name(IN strIDs VARCHAR(255)) 
BEGIN 
    DECLARE strLen INT DEFAULT 0; 
    DECLARE SubStrLen INT DEFAULT 0; 

    IF strIDs IS NULL THEN 
    SET strIDs = ''; 
    END IF; 

do_this: 
    LOOP 
    SET strLen = LENGTH(strIDs); 

    update tableName 
    set column2 = 'a', column3 = 'b' 
    where column1 = SUBSTRING_INDEX(strIDs, ',', 1); 

    SET SubStrLen = LENGTH(SUBSTRING_INDEX(strIDs, ',', 1)); 
    SET strIDs = MID(strIDs, SubStrLen, strLen); 

    IF strIDs = NULL THEN 
     LEAVE do_this; 
    END IF; 
    END LOOP do_this; 

END 
$$ 

DELIMITER ; 
+0

제안이 도움이되었습니다. 위로 마크를 남기지 마십시오. –

+0

왜 두 개의 답변을 게시 했습니까? –

0

아래 샘플을 실행하십시오. 이

DELIMITER $$ 
CREATE PROCEDURE proc_name() 
BEGIN 
    update tableName set column2='a', column3='b' where column1=1; 
    update tableName set column2='c', column3='d' where column1=2; 
    update tableName set column2='f', column3='g' where column1=3; 
END$$ 
DELIMITER ; 
+0

답장을 보내 주셔서 감사합니다. 경우에, 나는 1000 행을 업데이 트해야합니다 1000 진술을 작성 준비가 아니에요. –

+1

** ** 당신의 오타가 ** 고정되어 있습니다 ** 열 ** - "coulum"이 아닙니다. 그러므로 이러한 수정을 다시하기 위해 제 수정을 취소하지 마십시오 ..... –

1

하는 데 도움이 PREPARE/EXECUTE stmt 한 번에 하나의 문을 처리 할 수 ​​있기 때문에 불가능 바랍니다. 다음 참조 MySQL의 질문과 협의 :

Execute multiple semi-colon separated query using mysql Prepared Statement

그러나, 당신은 하나의 문장으로 업데이트 쿼리를 바꿔 수 있습니다

UPDATE tableName 
SET column2 = CASE WHEN column1 = 1 THEN 'a' 
        WHEN column1 = 2 THEN 'c' 
        WHEN column1 = 3 THEN 'f' END, 
    column3 = CASE WHEN column1 = 1 THEN 'b' 
        WHEN column1 = 2 THEN 'd' 
        WHEN column1 = 3 THEN 'g' END 
WHERE column1 IN (1, 2, 3);