1
當試圖在phpMyAdmin的SQL窗口將返回以下錯誤..mysql的程序 - 運行總
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:[email protected] running_total, @total:[email protected]+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
你有一個鏈接,我可以閱讀更多關於這些內部變量'@running_total:'?這叫什麼? – clarkk
它看起來像它返回我想要的! :D – clarkk
這些是用戶定義的變量。你可以在這裏閱讀更多關於它們的內容:http://dev.mysql.com/doc/refman/5.0/en/user-variables.html我對''做了什麼,(SELECT @running_total:= 0)vars'就是在查詢中動態初始化它們。這與SET @running_total:= 0相同。 SELECT ...'沒有',(SELECT @running_total:= 0)vars'部分。 – fancyPants