ЗАЯВИТЬ не действует в этой позиции - PullRequest
1 голос
/ 10 марта 2020

Я не MySQL эксперт, но я использую его с Java программой, которую я пишу. Это часть сценария, который я написал. Он отлично работает в DataGrip, но когда я пытался вызвать его из моей Java программы с ScriptRunner, он не работал. Поэтому я вставил код в 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();

1 Ответ

1 голос
/ 10 марта 2020

Переназначить разделитель перед созданием хранимой процедуры:

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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...