ホームページ >バックエンド開発 >PHPチュートリアル >カーソルを使用してデータを更新すると、無限ループに陥ります。説明してください。

カーソルを使用してデータを更新すると、無限ループに陥ります。説明してください。

WBOY
WBOYオリジナル
2016-06-23 14:18:13981ブラウズ

データ移行
古いデータベースから新しいデータベースにデータをインポートします。
データテーブルは異なりますが、一部のフィールドは同じです。
このライブラリの user テーブルのデータを
NEW_DB の `USER_ACCOUNT テーブルにインポートしたいのですが、以下は実際にはループに陥って 10 分以上実行されました

DELIMITER $$CREATE DEFINER=`root`@`localhost` PROCEDURE `pr_test3`()BEGIN  DECLARE p_username VARCHAR(20);  DECLARE p_email VARCHAR(20) ;    DECLARE Done INT;    #得到游标,选择老的表里面的username和emailDECLARE rs CURSOR FOR SELECT username,email FROM  user LIMIT 100;  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET Done = 1;    OPEN rs;FETCH NEXT FROM rs INTO p_username,p_email;  #开始遍历  REPEAT  IF NOT Done THEN  #执行需要的操作    SELECT @p_username;#插入到新的库的表  INSERT INTO NEW_DB.`USER_ACCOUNT` (USERID,`PASSWORD`,`EMAIL`,`REGTIME`,`MODTIME`) VALUES (p_username,,'123456',p_email,NOW(),NOW()); #下一条 FETCH NEXT FROM rs INTO p_username,p_email;  END IF;  UNTIL Done END REPEAT;  CLOSE rs;  END$$DELIMITER ;


ディスカッションへの返信 (解決策) )

あなたのせいで 100 の制限が追加されたため、SQLSTATE '02000' は表示できなくなりました

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。