2011-08-09 51 views
0

我使用按照下列哪種光標代碼編寫存儲過程(我用phpMyAdmin來執行代碼MYSQL光標執行問題

create procedure cursorproc(OUT p_out DECIMAL(10,2)) 
begin 

    declare l_salary, l_total DECIMAL(10,2); 

    declare cur_1 cursor for select line_distance from elements; 

    open cur_1; 

    set l_total = 0; 

    loop 

     fetch cur_1 into l_salary; 


     set l_total = l_total + l_salary; 

    end loop; 

    close cur_1; 

    set p_out = l_total; 

end; 

而且表模式:

CREATE TABLE IF NOT EXISTS `elements` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `distance` int(11) NOT NULL, 
    `repeat` int(2) NOT NULL, 
    `interval` varchar(11) NOT NULL, 
    `eta` varchar(11) NOT NULL, 
    `best` varchar(11) NOT NULL, 
    `line_distance` int(5) NOT NULL, 
    `line_time` varchar(11) NOT NULL, 
    `intensity` varchar(11) NOT NULL, 
    `description` varchar(255) NOT NULL, 
    `best_time_event` varchar(50) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=215 ; 

我正在以下錯誤:

ERROR - #1329 - No data - zero rows fetched, selected, or processed 

可以採取什麼問題,請幫助

回答

1

我不知道很多關於MySQL,但錯誤信息是很清楚的 - 你永遠不檢查你是否真正獲取返回的數據/到達EOF,所以你嘗試,即使您的查詢返回沒有更多的數據來獲取。在MySQL文檔中搜索關於「CONTINUE HANDLER」的信息。

更重要的問題是:爲什麼你使用存儲過程在所有的呢?爲什麼 - 如果你必須 - 你使用一個明確的循環,其中一個簡單的

select sum(line_distance) from elements 

應該足夠嗎?

+0

使用存儲過程,其因爲我不知道如何從PHP頁面調用遊標?存儲過程將至少返回一些數據,這就是爲什麼我使用了存儲過程。 – user580950

+0

此外,我試圖用它拋出同樣的錯誤 – user580950

+0

@ user580950您選擇查詢 - 您是否嘗試過建議的查詢,而無需打開遊標?只要運行它。 – Devart