在存储的Proceduresmysql中创建临时表

时间:2017-09-28 11:57:23

标签: mysql database stored-procedures

这是我在这里的第一篇文章,所以我很抱歉你所期待的任何错误或遗漏的信息。 我试图在一个过程中创建一个临时表但不知何故我一直在收到错误(DECLARE l_coin_base_id INT UNSIGNED的#1064),当我尝试实现该过程时。我删除了整个创建临时表部分并且它有效,所以我相信我的错误就在这部分。

DELIMITER //
CREATE PROCEDURE UPDATE_HISTORY()`

MODIFIES SQL DATA
BEGIN
    DECLARE l_c_pair INT DEFAULT (SELECT COUNT(*) + 1 FROM pairList); 
    DECLARE i INT DEFAULT 1; 
    DECLARE l_now INT UNSIGNED DEFAULT UNIX_TIMESTAMP() - 300;`

    CREATE TEMPORARY TABLE temp_history ENGINE = MEMORY AS(
SELECT
    active_pairList.base,
    active_pairList.peer,
    (active_history.highest_ask + active_history.highest_bid) / 2 AS price,
    active_history.buy_volume,
    active_history.sell_volume,
    active_history.trade_volume
FROM
    active_history
INNER JOIN
    active_pairList
ON
    active_history.sell_volume IS NOT NULL 
    AND active_history.buy_volume IS NOT NULL
    AND active_history.trade_volume IS NOT NULL
    AND active_history.timeStamp > l_now); 
    DECLARE l_coin_base_id INT UNSIGNED; 
    DECLARE l_coin_peer_id INT UNSIGNED; 
    DECLARE l_avg_price FLOAT UNSIGNED; 
    DECLARE l_sum_buy_volume FLOAT UNSIGNED; 
    DECLARE l_sum_sell_volume FLOAT UNSIGNED; 
    DECLARE l_sum_trade_volume FLOAT UNSIGNED; 
-- doing smth. --
END //
DELIMITER ;

如果我尝试在语句中执行CREATE TEMPORARY TABLE部分,我可以创建临时表并正确创建它。谷歌也不知道。 (这也是我第一次使用join,也许是我的错误?)。

我真的非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您无法在过程中间定义变量。它应该在BEGIN之后。 因此,在程序开始时声明所有变量。