首页 > 解决方案 > DECLARE 在此位置无效

问题描述

我不是 MySQL 专家,但我将它与我正在编写的 Java 程序一起使用。这是我编写的脚本的一部分。它在 DataGrip 中运行良好,但是当我尝试使用 ScriptRunner 从我的 Java 程序中调用它时,它不起作用。所以我将代码粘贴到 MySQL 工作台中,看看发生了什么。显然它不喜欢我在我的程序中有多个 DECLARE 语句。任何帮助将不胜感激。

DROP PROCEDURE IF EXISTS create_fake_stock_data;
CREATE PROCEDURE create_fake_stock_data()
BEGIN
    DECLARE counter INT DEFAULT 0;
    DECLARE appl_price DECIMAL(8,2) DEFAULT 100.34;
    DECLARE goog_price DECIMAL(8,2) DEFAULT 80.79;
    DECLARE amzn_price DECIMAL(8,2) DEFAULT 212.13;
    DECLARE quote_date DATETIME DEFAULT '2019-04-01 00:00:00';

    WHILE counter < 91 DO
            INSERT INTO stocks.quotes (symbol, time, price) VALUES ('APPL', quote_date, appl_price);
            INSERT INTO stocks.quotes (symbol, time, price) VALUES ('GOOG', quote_date, goog_price);
            INSERT INTO stocks.quotes (symbol, time, price) VALUES ('AMZN', quote_date, amzn_price);
            SET quote_date = DATE_ADD(quote_date, INTERVAL 1 DAY);
            SET appl_price = appl_price + 1.25;
            SET goog_price = goog_price + 0.83;
            SET amzn_price = amzn_price + 1.02;
            SET counter = counter + 1;
        END WHILE;
END;
CALL create_fake_stock_data();

标签: mysqlsql

解决方案


在创建存储过程之前重新分配分隔符:

DROP PROCEDURE IF EXISTS create_fake_stock_data;
DELIMITER $$
CREATE PROCEDURE create_fake_stock_data()
BEGIN
    DECLARE counter INT DEFAULT 0;
    DECLARE appl_price DECIMAL(8,2) DEFAULT 100.34;
    DECLARE goog_price DECIMAL(8,2) DEFAULT 80.79;
    DECLARE amzn_price DECIMAL(8,2) DEFAULT 212.13;
    DECLARE quote_date DATETIME DEFAULT '2019-04-01 00:00:00';

    WHILE counter < 91 DO
            INSERT INTO stocks.quotes (symbol, TIME, price) VALUES ('APPL', quote_date, appl_price);
            INSERT INTO stocks.quotes (symbol, TIME, price) VALUES ('GOOG', quote_date, goog_price);
            INSERT INTO stocks.quotes (symbol, TIME, price) VALUES ('AMZN', quote_date, amzn_price);
            SET quote_date = DATE_ADD(quote_date, INTERVAL 1 DAY);
            SET appl_price = appl_price + 1.25;
            SET goog_price = goog_price + 0.83;
            SET amzn_price = amzn_price + 1.02;
            SET counter = counter + 1;
        END WHILE;
END$$

DELIMITER ;

推荐阅读