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 ;
我想创建一个将随机值插入表中的存储过程。 感谢
答案 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'];
运算符来获取整数值以“换行”。)