gpt4 book ai didi

postgresql - 我可以在 postgres 的 CASE 中使用 INSERT

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

我正在尝试在 postgres 中创建一个函数,如果该行不存在则插入该行并返回该行的 ID(新创建的或现有的)。

我想到了这个:

CREATE OR REPLACE FUNCTION                                                      
get_enttype(name character varying, module character varying)
RETURNS integer LANGUAGE SQL STABLE AS $$
SELECT typeid FROM enttypes WHERE name = $1 AND module = $2
$$;

CREATE OR REPLACE FUNCTION
ensure_enttype(name character varying, module character varying)
RETURNS integer LANGUAGE SQL AS $$
SELECT CASE WHEN get_enttype($1, $2) IS NULL
THEN
INSERT INTO enttypes(name, module) VALUES ($1, $2) RETURNING typeid
ELSE
get_enttype($1, $2)
END
$$;

然而,由于 CASE 中的 INSERT,它会引发语法错误。我设法通过使用此 INSERT 创建一个单独的函数并在 CASE 中使用此函数来解决此问题。它按预期工作,但此修复程序似乎有点奇怪。我的问题是 - 我可以在不创建另一个函数的情况下解决这个问题吗?

最佳答案

不可以,您不能在 sql 函数的 CASE 中使用 INSERT。但是,您可以:

  • 使用带有 IF ... ELSE ... END 语句的 PL/PgSQL 函数;或
  • 使用可写公用表表达式 (wCTE) 或 INSERT INTO ... SELECT 查询

关于postgresql - 我可以在 postgres 的 CASE 中使用 INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15781345/

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