我开始编写一个sql脚本,我正在尝试创建一个使用2个整数之间的随机变量创建插入查询的过程
这是我到目前为止所做的:
DELIMITER $$
CREATE PROCEDURE REL9()
BEGIN
DECLARE k INT DEFAULT 1;
DECLARE Random INT;
DECLARE Upper INT DEFAULT 9999;
DECLARE Lower INT DEFAULT 1;
WHILE k < 20 DO
SET Random = ROUND(((Upper - Lower -1) * RAND() + Lower), 0);
INSERT INTO `sc_db`.`relations` (`idRelations`, `cdate`, `rel_type`, `port_cdom`, `host_cdom`, `dom_idObjects`, `cdom_idObjects`, `rel_name`) VALUES (NULL, '5555', 'Transitive', 'localhost', 'localhost', 'Random', 'Random', 'IS_IN');
SET k = k + 1;
END WHILE;
END$$
DELIMITER ;
调用该过程时,我收到外键错误,很可能是由于未正确设置或调用随机变量。那些“随机”键(1到9999)确实存在于数据库中。 如何在插入值中包含变量?我在网上搜索了一些结果说变量可以用@作为前缀,但由于某种原因我得到了错误。
感谢任何帮助。
答案 0 :(得分:1)
您没有插入随机值,而是插入包含单词Random
的STRING:
[...snip...] 'localhost', 'Random', 'Random', 'IS_IN');
^------^--^------^---
使用引号:包含字符R
,a
,n
等字符串的字符串...
没有引号:名为Random
答案 1 :(得分:0)
如果您想为每个插页添加不同的随机数..
DELIMITER $$
CREATE PROCEDURE REL9()
BEGIN
DECLARE @k INT DEFAULT 1;
DECLARE @Random INT;
DECLARE @Upper INT DEFAULT 9999;
DECLARE @Lower INT DEFAULT 1;
WHILE k < 20 DO
SET @Random = ROUND(((@Upper - @Lower -1) * RAND() + @Lower), 0);
INSERT INTO `sc_db`.`relations` (`idRelations`, `cdate`, `rel_type`, `port_cdom`, `host_cdom`, `dom_idObjects`, `cdom_idObjects`, `rel_name`) VALUES (NULL, '5555', 'Transitive', 'localhost', 'localhost', @Random, @Random, 'IS_IN');
SET @k = @k + 1;
#Or @k -= 1;
END WHILE;
END$$
DELIMITER ;
另外,那些是什么? dom_idObjects
,cdom_idObjects
。
如果&#39; @&#39;不起作用,你使用不同的编译器。你能提供更多细节吗?