gpt4 book ai didi

PostgreSQL - 如何将函数的参数传递给触发器?

转载 作者:行者123 更新时间:2023-11-29 12:53:17 24 4
gpt4 key购买 nike

我在数据库中有树表:用户(user_id(自动递增)、fname、lname)、角色(role_id、role_desc)和 users_roles(user_id、role_id)。我想要做的是拥有一个函数 create_user_with_role。该函数有 3 个参数:名字、姓氏和 role_id。该函数在用户表中插入一个新行,并自动创建一个新的 user_id。现在我想向 users_roles 表中插入一条新记录:user_id 是新创建的值,role_id 取自函数的参数列表。是否可以将 role_id 参数传递给插入后触发器(在用户表上定义)以便可以执行另一个自动插入?或者您可以建议任何其他解决方案吗?

最佳答案

首先@Pavel Stehule 是对的:

Don't try to pass parameters to triggers, ever!

其次,您只需将插入的 id 放入变量中。

CREATE FUNCTION create_user_with_role(first_name text, last_name text, new_role_id integer)
RETURNS VOID AS $$
DECLARE
new_user_id integer;
BEGIN
INSERT INTO users (fname, lname) VALUES (first_name, last_name)
RETURNING id INTO new_user_id;
INSERT INTO users_roles (user_id, role_id)
VALUES (new_user_id, new_role_id);
END;$$ LANGUAGE plpgsql;

显然,如果您想插入多行,这是完全没有效率的,但这是另一个问题;)

关于PostgreSQL - 如何将函数的参数传递给触发器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49113614/

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