2012-01-01 108 views
1

如何在mysql中的過程函數中檢查遊標是否返回任何東西?檢查遊標是否返回任何東西

是否有可能避免做IF (SELECT COUNT(*) FROM stock ...,而是以某種方式檢查_cur變量?

程序功能

DELIMITER $$ 

DROP FUNCTION IF EXISTS `stock_first_available_id` $$ 
CREATE DEFINER=`dynaccount`@`localhost` FUNCTION `stock_first_available_id`(_running_total_limit INT, _product_id INT, _group_id INT) RETURNS INT 
BEGIN 
    DECLARE _running_count INT default 0; 
    DECLARE _id INT; 
    DECLARE _current_id INT; 
    DECLARE _sum_count INT; 
    DECLARE _cur CURSOR FOR SELECT id, count FROM stock WHERE group_id=_group_id && type=2 && product_id=_product_id ORDER BY time DESC, id DESC; 

    IF (SELECT COUNT(*) FROM stock WHERE group_id=_group_id && type=2 && product_id=_product_id) = 0 THEN 
     RETURN 0; 
    END IF; 

    OPEN _cur; 

    read_loop: LOOP 
     FETCH _cur INTO _id, _sum_count; 

     SET _running_count = _running_count + _sum_count; 
     SET _current_id = _id; 

     IF _running_count > _running_total_limit THEN 
      LEAVE read_loop; 
     END IF; 
    END LOOP read_loop; 

    CLOSE _cur; 

    RETURN _current_id; 
END $$ 

DELIMITER ; 
+0

我不明白。遊標不「返回」任何東西。也許你可以擴展你的程序試圖做的事情。 – 2012-01-01 18:33:03

+1

@clarkk我注意到20分鐘前我離開了光標:-)很高興看到你提出這個問題作爲一個新問題 - 提出一個新話題總是很好的。 – dash 2012-01-01 20:37:53

+0

@dash,並感謝您的幫助..你剛剛介紹我的一個新的強大的工具:) – clarkk 2012-01-02 13:16:55

回答

相關問題