首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Trigger+procedure问题

Trigger+procedure问题
EN

Stack Overflow用户
提问于 2020-05-24 19:08:18
回答 1查看 20关注 0票数 1

正如标题所述,我对触发器+过程有一个问题。

我想要做的是,这是一个过程+触发器,只有当我试图插入学生数据时,才会创建一个带有姓名和名字的电子邮件。

基本上,我被困的地方,代码使名字和姓氏的融合,并创建电子邮件,但我如何将它放在它插入在表内?

好了,工程师,这是我做的代码:

代码语言:javascript
复制
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 ;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-24 23:37:28

,但是我如何将它放在表内插入之前呢?

before触发器中,只需将new.email设置为目标值。这将修改即将写入数据库的值。

而且,这个程序在这里似乎是多余的。

下面的代码应该做您想做的事情:

代码语言:javascript
复制
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 ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61991082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档