触发器+过程问题
Trigger+procedure issue
正如标题所说,我对触发器 + 程序有疑问。
我正在尝试做的是一个程序 + 触发器,它仅在我尝试插入学生数据 w/o 电子邮件时才创建包含姓名和姓氏的电子邮件。
基本上卡住的地方是,代码融合了名字和姓氏并创建了电子邮件,但是我如何在它插入 table 之前放置它?
此致,
工程师
这是我编写的代码:
use alumnesTriggers;
drop procedure if exists ex2;
delimiter //
create procedure ex2 (in nom varchar(50), in cognom1 varchar(50),
in cognom2 varchar(50), in domini varchar(50), out email varchar(50))
begin
set email := concat(nom,cognom1,cognom2,'@',domini,'.com');
#set @email := email;
#UPDATE alumnesEmail as ae SET ae.email = @email WHERE nom = @nom;
end //
delimiter ;
drop trigger if exists ex2_2_trigger;
DELIMITER $$
CREATE TRIGGER ex2_2_trigger before insert on alumnesEmail for each row begin
set @mail := new.email;
#if @mail := null or @mail='' then
set @id := new.id;
set @nom := new.nom;
set @cognom1 := new.cognom1;
set @cognom2 := new.cognom2;
call ex2(@nom,@cognom1,@cognom2,'gmail',@email);
UPDATE alumnesEmail SET new.email = @email;
#end if;
END $$
DELIMITER ;
INSERT INTO `alumnesEmail` (`id`, `nom`, `cognom1`, `cognom2`, `email`)
VALUES (80, 'a', 'a', 'a',null);
select * from alumnesEmail where id = 80;
select @email;
select * from alumnesEmail ;
but how do I place it before it inserts inside the table?
在 before
触发器中,您只需将 new.email
设置为目标值。这修改了即将写入数据库的值。
另外,程序在这里似乎是多余的。
以下代码应该可以满足您的需求:
delimiter $$
create trigger ex2_2_trigger
before insert on alumnesemail
for each row
begin
if new.email is null or new.email = '' then
set new.email = concat(new.nom, new.cognom1, new.cognom2, '@gmail.com');
end if;
end $$
delimiter ;
正如标题所说,我对触发器 + 程序有疑问。
我正在尝试做的是一个程序 + 触发器,它仅在我尝试插入学生数据 w/o 电子邮件时才创建包含姓名和姓氏的电子邮件。
基本上卡住的地方是,代码融合了名字和姓氏并创建了电子邮件,但是我如何在它插入 table 之前放置它?
此致, 工程师 这是我编写的代码:
use alumnesTriggers;
drop procedure if exists ex2;
delimiter //
create procedure ex2 (in nom varchar(50), in cognom1 varchar(50),
in cognom2 varchar(50), in domini varchar(50), out email varchar(50))
begin
set email := concat(nom,cognom1,cognom2,'@',domini,'.com');
#set @email := email;
#UPDATE alumnesEmail as ae SET ae.email = @email WHERE nom = @nom;
end //
delimiter ;
drop trigger if exists ex2_2_trigger;
DELIMITER $$
CREATE TRIGGER ex2_2_trigger before insert on alumnesEmail for each row begin
set @mail := new.email;
#if @mail := null or @mail='' then
set @id := new.id;
set @nom := new.nom;
set @cognom1 := new.cognom1;
set @cognom2 := new.cognom2;
call ex2(@nom,@cognom1,@cognom2,'gmail',@email);
UPDATE alumnesEmail SET new.email = @email;
#end if;
END $$
DELIMITER ;
INSERT INTO `alumnesEmail` (`id`, `nom`, `cognom1`, `cognom2`, `email`)
VALUES (80, 'a', 'a', 'a',null);
select * from alumnesEmail where id = 80;
select @email;
select * from alumnesEmail ;
but how do I place it before it inserts inside the table?
在 before
触发器中,您只需将 new.email
设置为目标值。这修改了即将写入数据库的值。
另外,程序在这里似乎是多余的。
以下代码应该可以满足您的需求:
delimiter $$
create trigger ex2_2_trigger
before insert on alumnesemail
for each row
begin
if new.email is null or new.email = '' then
set new.email = concat(new.nom, new.cognom1, new.cognom2, '@gmail.com');
end if;
end $$
delimiter ;