gpt4 book ai didi

sql - 使用 DEFAULT 或 INTEGER 值作为 SQL 函数的参数

转载 作者:行者123 更新时间:2023-11-29 11:55:16 26 4
gpt4 key购买 nike

我正在编写一个 SQL 函数来执行智能插入并管理多对多表(触发器无法工作,因为一个值是可变的)。

这是示例的最小集合:

link_foo_to_bar (foo_id int, bar_id int)
foo (id serial, name character varying)

这是我的 sql 函数:

CREATE FUNCTION smart_insert (bar_id integer, foo_id integer, name character varying name)
RETURNS void AS $body$
INSERT INTO foo VALUES (foo_id, name);
INSERT INTO link_foo_to_bar (CURRVAL('foo_id_seq'), bar_id);
$body$ LANGUAGE sql;

现在的问题是 foo_id 是一个 serial 所以它要么得到 DEFAULT 要么得到一个 INTEGER 作为一个传入值。该函数不接受 DEFAULT 关键字。我应该如何更改函数以允许这种不同的论点?使用文本类型?

最佳答案

这是在 PostgreSQL 中指定 DEFAULT 函数参数的方法:

CREATE FUNCTION smart_insert (
name character varying,
bar_id integer,
foo_id integer = -1
)
RETURNS void AS $body$
INSERT INTO foo VALUES (
CASE foo_id WHEN -1 THEN NEXTVAL('foo_id_seq') ELSE foo_id END,
name
);
INSERT INTO link_foo_to_bar (
CASE foo_id WHEN -1 THEN CURRVAL('foo_id_seq') ELSE foo_id END,
bar_id
);
$body$ LANGUAGE sql;

这里是你如何调用它:

-- with an explicit foo_id:
smart_insert('abc', 1, 2);

-- applying the default value:
smart_insert('abc', 1);

... 然而,有一些 useful feedback from Erwin你应该考虑插入 serial 类型,你应该小心。

关于sql - 使用 DEFAULT 或 INTEGER 值作为 SQL 函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30155988/

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