Mysql 預存程序在cursor迴圈中使用cursor查詢出來的資料作為sql語句的一部分

來源:互聯網
上載者:User

這個東西不好用簡短的話描述

 

大概就是要根據查詢結果更新資料,查詢出來的資料又有很多行。

我下面的代碼看起來很複雜,但是必須像下面那樣,必須用PREPARE,否則update語句不起作用。

 

drop PROCEDURE `UPGRADE_SKILL`//CREATE DEFINER=`root`@`%` PROCEDURE `UPGRADE_SKILL`()BEGIN DECLARE stopFlag, us_skill_id , s_id, ct int(11);     DECLARE s_uuid, str_sql varchar(255);           DECLARE cursor1 CURSOR FOR      SELECT us.skill_id , s.id, us.uuid FROM user_skill us, dragon_fx.skill s  WHERE s.old_id=us.skill_id and s.id>us.skill_id limit 1;          DECLARE CONTINUE HANDLER FOR NOT FOUND set stopFlag=1;           SET stopFlag=0;          OPEN cursor1;     SET ct =0;     REPEAT     SET ct=ct+1;            FETCH cursor1 INTO us_skill_id , s_id, s_uuid;            SET @s_id=s_id;            SET @s_uuid=s_uuid;            SET @str_sql=concat('UPDATE user_skill SET `skill_id` = ? WHERE `uuid` = ?;');            PREPARE stmt FROM @str_sql;            EXECUTE stmt USING @s_id,@s_uuid;     UNTIL stopFlag = 1 END REPEAT;     select ct;END;//call `UPGRADE_SKILL`//select * from user_skill where uuid='00012bd21f614b02b42450fc8ec5e9f6'//

你可能覺得一句sql就可以搞定:UPDATE dragon.user_skill us, dragon_fx.skill s
SET us.skill_id = s.id
WHERE s.old_id=us.skill_id and s.id>us.skill_id

但執行起來,很慢,無法忍受,而且似乎根本沒有起作用(困惑中)。

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.