mysql - 声明变量MySQL触发器

标签 mysql sql stored-procedures triggers

如果您习惯使用 MySQL,我的问题对您来说可能很简单。我习惯了 PostgreSQL SGBD,我正在尝试将 PL/PgSQL 脚本转换为 MySQL。

这是我的:

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//

但是 MySQL Workbench 在 DECLARE m_projects_id 上给我一个错误。我不太明白,因为我在上面两行有相同的指令......

有什么提示吗?

编辑:neubert 解决了这个错误。谢谢。

但是,当我尝试插入用户时:

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

你有什么想法吗?或者更好的是,您知道如何获得更好的错误消息吗?

最佳答案

所有 DECLARE 都必须位于顶部。即。

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//

关于mysql - 声明变量MySQL触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15841455/

相关文章:

MySQL - 从另一个表更新表值

mysql 查询从子查询迁移

MySQL存储过程问题。抛出警告。想不通为什么?

sql-server - 如何将存储过程返回的 XML 放入变量中?

SQL - 查找重复值并在字段中删除

sql-server - 存储过程中查询的不同执行计数

mysql - 如何在新更新的 phpmyadmin 中添加外键?

mysql - SQL INNER JOIN/On 子句中的未知列 C.book

php - 如何使用 PHP 和 SQL 生成嵌套的 JSON 响应

mysql - 对没有唯一值的同一查询进行 UPDATE 或 INSERT