gpt4 book ai didi

Mysql触发器: Result consisted of more than one row

转载 作者:行者123 更新时间:2023-11-29 14:25:57 25 4
gpt4 key购买 nike

我有 3 张 table :

模块:

id_module   | name
--------------------
1 users
2 roles
...

简介:

id_profile   | name
--------------------
1 admin
2 promoter

和许可

id   | id_profile  | id_module | read | write | modify | delete
---------------------------------------------------------------

我想要的触发器是每次插入新模块时填充表权限......但对于每个现有配置文件。

因此:

INSERT INTO `module` (`name`) VALUES
('user'),
('roles');

现有的配置文件adminpromoter权限表将按以下方式填写:

id   | id_profile  | id_module | read | write | modify | delete
---------------------------------------------------------------
1 1 1 0 0 0 0
2 1 2 0 0 0 0
3 2 1 0 0 0 0
4 2 2 0 0 0 0

为此,我创建了以下触发器:

CREATE TRIGGER `create_permission` AFTER INSERT ON `module`
FOR EACH ROW
BEGIN
DECLARE `my_profile` INT(11) ;

SELECT id_profile INTO `my_profile` FROM profile WHERE state <>3;

INSERT INTO `permission` (`id_profile`, `id_module`, `read`, `write`, `modify`, `delete`) VALUES(`my_profile`, NEW.`id_module `,0,0,0,0);

END;

当有一个配置文件时,它效果很好......当我返回“结果由多行组成”时,它会工作得很好

我读到,当您声明一个支持单个值的变量时,就会出现此问题...您可以为表配置文件的每个 id 插入记录吗?

最佳答案

正如您所发现的,您只能将标量值分配给变量。

要迭代 SELECT 查询的多个结果,您需要使用 CURSOR

我个人不喜欢繁琐的 CURSOR 语法。在您的具体情况下,我建议使用更简单的 INSERT INTO...SELECT技巧:

INSERT INTO permission (id_profile, id_module, read, write, modify, delete)
SELECT id_profile, NEW.id_module,0,0,0,0 FROM profile WHERE state <> 3;

关于Mysql触发器: Result consisted of more than one row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10956468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com