查询中的SQL脚本和随机变量

时间:2014-09-22 21:08:24

标签: mysql sql

我开始编写一个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)确实存在于数据库中。  如何在插入值中包含变量?我在网上搜索了一些结果说变量可以用@作为前缀,但由于某种原因我得到了错误。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您没有插入随机值,而是插入包含单词Random的STRING:

[...snip...] 'localhost', 'Random', 'Random', 'IS_IN');
                          ^------^--^------^---

使用引号:包含字符Ran等字符串的字符串...
没有引号:名为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_idObjectscdom_idObjects。 如果&#39; @&#39;不起作用,你使用不同的编译器。你能提供更多细节吗?