我正在尝试使用phpmyadmin触发器接口创建一个sql触发器语句。
尝试为表1做一些事情,如下所示:
BEGIN
declare @valid_number int ;
select id into @valid_number from table 2 ;
if 10 does not exist in @valid_number then
{do something here}
end if;
END
如何实现它?
答案 0 :(得分:1)
首先:存储例程中的变量不能存储多个值,只能存储一个值。你的陈述
select id into @valid_number from table 2 ;
如果查询只返回一行,将起作用。如果查询返回多行,则会发生错误,如果查询根本没有返回任何行,则会出现警告,请参阅手册页SELECT ... INTO:
INTO子句可以命名一个或多个变量的列表,可以是 用户定义的变量,存储过程或函数参数,或 存储程序局部变量。 [...]
将所选值分配给变量。的数量 变量必须与列数匹配。查询应该返回一个 单排。如果查询未返回任何行,则会显示带有错误代码的警告 发生1329(无数据),变量值保持不变。 如果 查询返回多行,发生错误1172 (结果包含 不止一行)。
<强>解决方案:强>
创建一个能够在一行中给出所需答案的语句并不困难,即
SELECT COUNT(*) into valid_number FROM example WHERE id = 10;
如果列id中不存在id 10,则返回0,如果出现其他值,则返回0。当然,有几种方法可以实现这一点,这只是其中之一。您可以将存储的例程重写为:
BEGIN
-- prefer local variables, don't use user defined, if not needed.
DECLARE valid_number int;
SELECT COUNT(*) into valid_number FROM example WHERE id = 10;
IF valid_number = 0 THEN
-- do something here
END IF;
SELECT result;
END
注意强>
您可以使用cursor遍历查询结果,但大多数情况下都希望避免使用游标。在这个问题的类似条件下使用游标不是SQL方法,而且大多数时候非常低效。