触发器错误 1326 MySQL
Trigger Error 1326 MySQL
我在 MySQL 中创建触发器时遇到问题。我的 "tb_pessoa" table 存储我的用户数据。我希望在进行新插入时,它存储在 "tb_email" table 用户的电子邮件中,检查它是否已经存在,但是当使用游标执行查询时,它说游标是没有打开,它是。它可以是什么?
CREATE DEFINER=`root`@`localhost` TRIGGER `db_agenda`.`tb_pessoa_AFTER_INSERT` AFTER INSERT ON `tb_pessoa` FOR EACH ROW
BEGIN
declare id_email, id_tipo_email int(11);
declare nm_email varchar(100);
declare cr_email cursor for
select id_email, nm_email, id_tipo_email
from tb_email
where nm_email like new.nm_email;
declare continue handler for sqlstate '02000'
open cr_email;
lp_email: loop
fetch cr_email into id_email, nm_email, id_tipo_email;
if (id_email = null) then
insert into tb_email set
id_email = (select max(id_email)+1 from tb_email),
nm_email = nm_email,
id_tipo_email = 1;
close cr_email;
leave lp_email;
end if;
end loop lp_email;
close cr_email;
END
您不需要使用游标,只需执行从 SELECT
.
获取值的 INSERT
CREATE TRIGGER tb_pessoa_AFTER_INSERT AFTER INSERT ON tb_pessoa
ON EACH ROW
INSERT INTO tb_email (nm_email, id_tipo_email, id_email)
SELECT e.nm_email, 1, @id_email := @id_email + 1
FROM tb_email AS e
CROSS JOIN (SELECT @id_email := MAX(id_email) FROM tb_email) AS i
WHERE e.nm_email LIKE NEW.nm_email
此外,如果 NEW.nm_email
不包含任何通配符 %
或 _
,您应该使用 =
而不是 LIKE
。
我在 MySQL 中创建触发器时遇到问题。我的 "tb_pessoa" table 存储我的用户数据。我希望在进行新插入时,它存储在 "tb_email" table 用户的电子邮件中,检查它是否已经存在,但是当使用游标执行查询时,它说游标是没有打开,它是。它可以是什么?
CREATE DEFINER=`root`@`localhost` TRIGGER `db_agenda`.`tb_pessoa_AFTER_INSERT` AFTER INSERT ON `tb_pessoa` FOR EACH ROW
BEGIN
declare id_email, id_tipo_email int(11);
declare nm_email varchar(100);
declare cr_email cursor for
select id_email, nm_email, id_tipo_email
from tb_email
where nm_email like new.nm_email;
declare continue handler for sqlstate '02000'
open cr_email;
lp_email: loop
fetch cr_email into id_email, nm_email, id_tipo_email;
if (id_email = null) then
insert into tb_email set
id_email = (select max(id_email)+1 from tb_email),
nm_email = nm_email,
id_tipo_email = 1;
close cr_email;
leave lp_email;
end if;
end loop lp_email;
close cr_email;
END
您不需要使用游标,只需执行从 SELECT
.
INSERT
CREATE TRIGGER tb_pessoa_AFTER_INSERT AFTER INSERT ON tb_pessoa
ON EACH ROW
INSERT INTO tb_email (nm_email, id_tipo_email, id_email)
SELECT e.nm_email, 1, @id_email := @id_email + 1
FROM tb_email AS e
CROSS JOIN (SELECT @id_email := MAX(id_email) FROM tb_email) AS i
WHERE e.nm_email LIKE NEW.nm_email
此外,如果 NEW.nm_email
不包含任何通配符 %
或 _
,您应该使用 =
而不是 LIKE
。