ホームページ  >  記事  >  バックエンド開発  >  カーソルを使用してデータを更新すると、無限ループが発生します。説明してください。

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

WBOY
WBOYオリジナル
2016-06-13 12:40:38858ブラウズ

カーソルを使用してデータを更新すると、無限ループに陥ります
データ移行
について説明してください。 古いデータベースから新しいデータベースにデータをインポートします。
データテーブルは異なりますが、一部のフィールドのみが同じです。

が欲しいです このライブラリのユーザーテーブルのデータを
にインポートします 以下に示す NEW_DB の `USER_ACCOUNT テーブルは、実際にはループに陥り、10 分以上実行されました

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

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