mysql在触发器中怎么定义变量_声明变量MySQL触发器

bd96500e110b49cbb3cd949968f18be7.png

My question might be simple for you, if you're used to MySQL. I'm used to PostgreSQL SGBD and I'm trying to translate a PL/PgSQL script to MySQL.

Here is what I have :

delimiter //

CREATE TRIGGER pgl_new_user

AFTER INSERT ON users FOR EACH ROW

BEGIN

DECLARE m_user_team_id integer;

SELECT id INTO m_user_team_id FROM user_teams WHERE name = "pgl_reporters";

DECLARE m_projects_id integer;

DECLARE cur CURSOR FOR SELECT project_id FROM user_team_project_relationships WHERE user_team_id = m_user_team_id;

OPEN cur;

ins_loop: LOOP

FETCH cur INTO m_projects_id;

IF done THEN

LEAVE ins_loop;

END IF;

INSERT INTO users_projects (user_id, project_id, created_at, updated_at, project_access)

VALUES (NEW.id, m_projects_id, now(), now(), 20);

END LOOP;

CLOSE cur;

END//

But MySQL Workbench gives me an error on DECLARE m_projects_id. I don't really understand because I've the same instruction two lines above...

Any hints ?

EDIT: neubert solved this error. Thanks.

But yet, when I try to insert into users :

Error Code: 1329. No data - zero rows fetched, selected, or processed

Do you have any idea ? Or better, do you know how I can get a better error message ?

解决方案

All DECLAREs need to be at the top. ie.

delimiter //

CREATE TRIGGER pgl_new_user

AFTER INSERT ON users FOR EACH ROW

BEGIN

DECLARE m_user_team_id integer;

DECLARE m_projects_id integer;

DECLARE cur CURSOR FOR SELECT project_id FROM user_team_project_relationships WHERE user_team_id = m_user_team_id;

SET @m_user_team_id := (SELECT id FROM user_teams WHERE name = "pgl_reporters");

OPEN cur;

ins_loop: LOOP

FETCH cur INTO m_projects_id;

IF done THEN

LEAVE ins_loop;

END IF;

INSERT INTO users_projects (user_id, project_id, created_at, updated_at, project_access)

VALUES (NEW.id, m_projects_id, now(), now(), 20);

END LOOP;

CLOSE cur;

END//

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值