mysql - 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();
解决方案
在创建存储过程之前重新分配分隔符:
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 ;
推荐阅读
- apache-spark - Firehose JSON -> S3 Parquet -> ETL Spark,错误:无法推断 Parquet 的架构
- javascript - jquery使用自定义属性更改li内的值
- javascript - Flowtype 命名类型
- c - openmp - 并行向量矩阵乘积
- javascript - Redux.js - 构建一个侦听器中间件来侦听调度的 thunk 操作
- android - 更新 support-v4 库
- azure - 自动/计划的每日 USQL 脚本执行
- mysql - 无法为 MySQL 设置密码
- sql - 数据库设计 - 跟踪用户提交数据的最新快照
- python - 无法根据字典中的项目获取值