此存储过程中的错误在哪里

时间:2015-05-16 13:54:18

标签: mysql stored-procedures

DELIMITER //
CREATE PROC InserimentoValori()
BEGIN
  DECLARE @caratteri varchar(30);
  set @caratteri = 'abcdefghijklmnopqrstuvwxyz',
  DECLARE x INT DEFAULT 1;
  WHILE x <=100 DO
  INSERT INTO Persona(nome,cognome,eta) VALUES((SELECT @caratteri = substring(@caratteri +1),(SELECT @caratteri = sebstring(@caratteri +1),(SELECT floor(rand() * 99) AS randNum));
  SET x = x+1;
END WHILE
END //
DELIMITER ;

我想创建一个将随机值插入表中的存储过程。 感谢

1 个答案:

答案 0 :(得分:0)

有几个错误。

我们不会在MySQL中“声明”用户定义的变量。只需SET他们。

如果您想在过程中DECLARE变量,则需要是过程变量

用户定义变量的名称以 @ 字符开头。 过程变量不能以 @ 字符开头。

所以,像这样的一行是一个错误:

DECLARE @foo ...

如果要使用用户定义的变量,请删除该行。如果要使用过程变量,请从变量名称的开头删除@(并在要引用过程变量foo的任何位置进行相同的更改。)

并且SEBSTRING不是MySQL提供的函数的名称。

此外,查询的SELECT列表中的布尔表达式将返回0,1或NULL。

例如:

SELECT @caratteri = substring(@caratteri +1)

该表达式将=左侧的值与右侧的值进行比较,如果它们相等则返回1,如果是0则返回:=不是,如果其中任何一个值为NULL,则为NULL。

要在SELECT语句中对用户定义的变量执行赋值,请使用Pascal样式的 MOD 运算符。

(如果你打算做一个任务,那么设计会让你看起来像是每次都要通过循环丢掉第一个字符;如果我们循环足够多次,那最终将成为一个空字符串。你可以想要考虑将字符串保持为静态。考虑递增整数值,并将它们用作SUBSTRING函数中的参数。并且可以使用$rsm = new ResultSetMapping(); $em = $this->getDoctrine()->getManager(); $user= $this->get('security.context')->getToken()->getUser(); $query = $em->createNativeQuery('SELECT id FROM fos_user WHERE username_canonical = ?', $rsm); $query->setParameter(1, $user); $users = $query->getResult(); echo $users[0]['id']; 运算符来获取整数值以“换行”。)