簡體   English   中英

mysql程序-運行總計

[英]mysql procedures - running total

嘗試在phpmyadmin的SQL窗口中運行此命令時,返回以下錯誤。

SQL

DELIMITER $$

DROP FUNCTION IF EXISTS `stock_in_stock_ids` $$
CREATE DEFINER=`root`@`localhost` FUNCTION `stock_in_stock_ids`(_running_total_limit INT, _product_id INT, _block_id INT) RETURNS TEXT
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE _running_qty INT DEFAULT 0;
    DECLARE _id INT;
    DECLARE _qty INT;
    DECLARE _ids TEXT DEFAULT NULL;

    DECLARE _cur CURSOR FOR
        SELECT id, qty
        FROM stock
        WHERE block_id=_block_id && type=2 && product_id=_product_id
        ORDER BY time DESC, id DESC;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

    OPEN _cur;

    read_loop: LOOP
        FETCH _cur INTO _id, _qty;

        IF done THEN
            SET _ids = '';
            LEAVE read_loop;
        END IF;

        SET _running_qty = _running_qty + _qty;
        SET _ids = CONCAT_WS(',', _ids, _id);

        IF _running_qty >= _running_total_limit THEN
            LEAVE read_loop;
        END IF;
    END LOOP read_loop;

    CLOSE _cur;

    RETURN _ids;
END $$

DELIMITER ;

錯誤

#1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable) 

更新(工作解決方案)

SELECT qty, price_cost, @running_total:=@total running_total, @total:=@total+qty total
FROM stock, (SELECT @running_total:=0, @total:=0) vars
WHERE block_id=101 && type=2 && product_id=20
HAVING running_total<=3000
ORDER BY time DESC, id DESC

您想使用存儲過程,但正在使用函數。 有區別,你知道嗎?

另外,我認為您根本不需要過程,更不用說游標了。 游標像地獄一樣昂貴。

這能給您想要的東西嗎?

SELECT * FROM (
  SELECT 
  id, 
  qty,
  @running_total:=@running_total + qty as running_total
  FROM stock
  , (SELECT @running_total:=0) vars
  WHERE block_id=_block_id && type=2 && product_id=_product_id
  ORDER BY time DESC, id DESC
) sq 
WHERE running_total <= $yourRunningTotalLimit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM