DECLARE is not valid at this position

smurfherder :

I'm no MySQL expert, but I'm using it with a Java program I'm writing. This is part of a script I wrote. It works fine in DataGrip, but when I tried to call it from my Java program with ScriptRunner it didn't work. So I pasted the code into MySQL workbench to see what was up. Apparently it doesn't like me having more than one DECLARE statement in my procedure. Any help would be greatly appreciated.

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();
Slava Rozhnev :

Reassign delimiter before create stored procedure:

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 ;

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=169218&siteId=1