postgresql 编写一个Postgres函数,该函数将使用IF语句并返回新插入记录的ID

ecfdbz9o  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(149)

我有如下定义的表

create table dbo.groups
(
    groupid       uuid not null
        constraint pk__groups__149af30a383c48d4
            primary key,
    groupname     varchar(255),
    groupparentid uuid
        constraint fkgroups635827
            references groups
);

alter table dbo.groups
    owner to postgres;

字符串
我想写一个函数,将插入到这个表如下:

create or replace  function spSetGroup( GroupName text,  GroupParentID  uuid ) returns uuid
    language sql
as
$$

    BEGIN
        IF $2 = '00000000-0000-0000-0000-000000000000' THEN

                INSERT INTO dbo.Groups(GroupID, GroupName,  GroupParentID)
                VALUES(uuid_generate_v4(), $1,  NULL);
        else
                INSERT INTO dbo.Groups(GroupID, GroupName, GroupParentID)
                VALUES(uuid_generate_v4(), $1, $2);

                RETURNING GroupID;
        END IF;
    END

$$;


所以在这里,我想检查$2的值,它是GroupParentID,并在此基础上执行到表dbo中的插入。
我还想返回行中新插入的记录的ID
返回组ID
然而,当我尝试创建它时,我得到了以下错误:
[2023-10-27 15:17:34] [42601]错误:语法错误位于或接近“IF”[2023-10-27 15:17:34]位置:141
请问我怎么才能让这个工作?

6mzjoqzu

6mzjoqzu1#

在SQL中,你不能使用IF-THEN-ELSE结构,但你也不需要它:使用NULLIF()

CREATE OR REPLACE FUNCTION spsetgroup(groupname TEXT, groupparentid UUID) RETURNS UUID
    LANGUAGE sql
AS
$$
INSERT INTO dbo.groups(groupid, groupname, groupparentid)
VALUES (uuid_generate_v4(), $1, NULLIF($2, '00000000-0000-0000-0000-000000000000')) 
RETURNING GroupID;
$$;

字符串

相关问题