2013-03-27 42 views
0

我寫過一個程序,它創建一個臨時表並通過從臨時表中獲取行來執行查詢。我在臨時表中有大約13486行。但是當我調用過程我觀察到,從臨時表中取出107行後,程序正在終止。此外,我還觀察到,該值不是常數。有時它是107,而另一次是114,而其他時間只有100。會發生什麼?請幫助嗎?有人請。這裏是我的程序。我知道while循環將終止> 1000次迭代。請向我建議一種方法來解決這個問題。while循環在取出某些數據後終止

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 [email protected]; 
select @arpt,@i;  
set @[email protected]+1; 
end while; 
END $$ 

DELIMITER ; 

我正在使用mysql查詢瀏覽器。謝謝。

+0

你怎麼知道它被終止了? – palindrom 2013-03-27 09:18:33

+0

我不確定.. :( – user2037445 2013-03-27 09:19:08

+0

輸出可能會被修剪,刪除循環內部的選擇並在循環後執行相同的選擇。讓我們來看看@i是13487. – palindrom 2013-03-27 09:20:40

回答

0

如果你想插入值到id然後它不應該是auto_increment。 - 從表格定義中刪除auto_increment,它應該可以工作

+0

我只是想讓他們訂購,以便我可以一個一個地抓取他們。你有任何想法獲取每一行除了添加ID?如果是這樣,請指導我。謝謝你 – user2037445 2013-03-27 10:12:39

+0

使用繼續處理程序,你可以...我會粘貼我的一個SP短..在回答 – user170851 2013-03-27 10:21:49

0

分隔符|

創建過程employee_select()

開始

申報EMPNO,完成INT(9);

聲明emp_select用於從gross_salary中選擇emp_no的光標;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

打開emp_select; //光標開

read_loop:循環//由一個

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

//注意開始循環所有DATAS之一:變量名不應相同SELECT語句columne名」

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;

末頁|

分隔符;

+0

是隻適用於遊標嗎?或者我可以使用它對於任何方法? – user2037445 2013-03-27 11:02:45

+0

用於在SP內部循環記錄,您必須使用遊標...繼續處理程序用於任何錯誤處理..(繼續運行過程/代碼,即使出現錯誤 - 用法可以超出光標) – user170851 2013-03-27 11:40:12

+0

但實時遊標不會有任何好處,所以我沒有選擇遊標。 – user2037445 2013-03-27 11:42:33