mysql - 在 MySql 中将随机数据插入到表中
问题描述
有人可以帮我吗?我不知道这里有什么问题
DROP PROCEDURE IF EXISTS insertRandom;
CREATE PROCEDURE insertRandom()
BEGIN
DECLARE mytime timestamp;
SET mytime := '2009-01-01 00:00:00'
BEGIN
test_loop : LOOP
while mytime < now()
mytime = mytime + interval '8 hours';
insert into tempdata(temp_val, datum) values((select random()*(110)-10), mytime);
END LOOP;
END;
CALL insertRandom;
SELECT * FROM `temp_table`;
解决方案
看起来程序主体中的分号正在终止语句。我们需要 MySQL 将其CREATE PROCEDURE
视为单个语句,但 MySQL 将语句截断,当它看到分号时会看到完整的语句。
MySQL 中默认的语句分隔符是分号;
字符。可以覆盖默认分隔符;我们随着DELIMITER
声明而改变。
此处临时将语句分隔符修改为两个美元符号字符的示例$$
。在过程主体中,分号字符的出现不会终止语句...... MySQL 将继续读取,直到找到两个美元符号字符。(不用说程序主体不应该包含$$
)
DELIMITER $$
DROP PROCEDURE IF EXISTS insertRandom $$
CREATE PROCEDURE insertRandom()
...
...
...
END$$
DELIMITER ;
CALL insertRandom();
请注意,我们使用该DELIMITER
语句将分隔符改回分号字符。我没有检查程序的主体是否有其他语法错误;但有些事情很突出。例如,这看起来是错误的
mytime = mytime + interval '8 hours';
那可能应该是SET
语句,语法是这样的:
SET mytime = mytime + INTERVAL 8 HOUR;
在SET
语句中,我们可以使用:=
in 代替=
作为赋值运算符,所以等价
SET mytime := mytime + INTERVAL 8 HOUR;
对于 MySQL 存储程序的循环,我们可以做一个LOOP ... END LOOP
并包含一个LEAVE
语句,或者我们可以使用一个WHILE
循环,或者......
此处记录的语法:
推荐阅读
- python - 模板烧瓶运行 AndreiD/Flask-Easy-Template 时出错
- docker-compose - 序列化的 dask.distributed.Queue() 对象中的错误 ip:无法反序列化
- tfs - TFS2018:使用 npm publish 任务发布构建的 npm 包
- python - 如何在 Pycharm 中将导入的库添加到“我的代码”以调试导入的库并使用“步入我的代码”按钮?
- jquery - 在 jQuery 集合上运行 reduce()
- c++ - Gstreamer:xvimagesink 内部错误:无法分配图像
- javascript - Array里面的对象,怎么解决这个问题?
- sql-server - SSRS - 报告在 5 分钟后中止,程序在 db 中运行 6 分钟
- perl - WebSocket 服务器从头开始显示操作码 -1
- oop - 在 Fortran 中分配抽象类型的数组