0

一時テーブルを作成し、一時テーブルから行をフェッチしてクエリを実行するプロシージャを作成しました.一時テーブルには約13486行あります.しかし、プロシージャを呼び出すと、フェッチ後にプロシージャが終了することがわかりました一時テーブルから 107 行。さらに、この値が一定ではないことも確認しました。107 の場合もあれば、114 の場合もあれば、100 の場合もあります。なぜこれが起こるのですか?助けが必要ですか?誰かお願いします..これが私の手順です。そして、whileループが1000回以上の反復で終了することを知りました。これを克服する方法を提案してください。

DELIMITER $$

DROP PROCEDURE IF EXISTS `lookup`.`test` $$  
CREATE PROCEDURE `lookup`.`test` ()  
BEGIN

CREATE  TEMPORARY  TABLE  lookup.airportname(id  int  AUTO_INCREMENT,PRIMARY KEY(id))
AS (select distinct airport_id from lookup.airport);  
SET @num=0;  
SET @arpt=NULL;  
SELECT count(*) INTO @num FROM airportname;  
SET @i=0;  

while @i<@num do  
SELECT airport_id INTO @arpt FROM airportname WHERE id=@i;  
select @arpt,@i;    
set @i=@i+1;  
end while;  
END $$ 

DELIMITER ; 

mysql クエリ ブラウザを使用しています。ありがとうございます。

4

2 に答える 2

0

id に値を挿入する場合は、auto_increment にしないでください。- テーブル定義から auto_increment を削除すると、機能するはずです

于 2013-03-27T10:07:50.553 に答える
0

区切り記号 |

プロシージャーの作成 employee_select()

始める

empno,done int(9); を宣言します。

emp_select Cursor を宣言して、gross_salary から emp_no を選択します。

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

emp_select を開きます。// カーソルを開く

read_loop: loop // すべてのデータを 1 つずつループし始めます

fetch emp_select into empno; // fetching the select value into variable empno 

//注 : 変数名は、select ステートメントの列名と同じであってはなりません"

IF done THEN
   LEAVE read_loop;   // if no more rows, this makes it to leave the loop"
END IF;

//Enter the code you want do for each row 

 end loop;

emp_select を閉じます。

終了 |

デリミタ;

于 2013-03-27T10:41:24.800 に答える