2012-01-01 9 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

わかりません。カーソルは何も返さない。おそらく、あなたの手続きが何をしようとしているのかを広げることができます。 –

+1

@clarkk約20分前にカーソルをこのままにしておいたことに気付きました:-)これは新しい質問として提起されたことを嬉しく思っています。新しいトピックを作成することは常に良いことです。 – dash

+0

@ダッシュと助けてくれてありがとう。あなたは私に新しい強力なツールを紹介しました:) – clarkk

答えて

関連する問題