小编Sam*_*eau的帖子

插入COALESCE(NULL,默认值)

我有使用UUID的表.我希望能够在有或没有UUID的情况下插入新行,因为有时客户端会生成UUID,有时则不会.

每个表都有它的核心:

CREATE TABLE IF NOT EXISTS person (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid()
);
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用函数来插入行.我希望能够传递一个NULL id并获得一个默认值(生成的UUID).我有这样的事情:

CREATE OR REPLACE FUNCTION create_person(
    id UUID
) RETURNS BOOLEAN LANGUAGE plpgsql SECURITY DEFINER AS $$
BEGIN
    INSERT INTO person( id )
    VALUES (
        COALESCE(id,default)
    );
    RETURN FOUND;
END;
$$;
Run Code Online (Sandbox Code Playgroud)

我试过这个:

INSERT INTO person ( id ) VALUES (
    COALESCE(id, default),
);
Run Code Online (Sandbox Code Playgroud)

还有这个:

INSERT INTO person ( id ) VALUES (
  CASE WHEN id IS NULL THEN default ELSE id END
); …
Run Code Online (Sandbox Code Playgroud)

sql postgresql plpgsql

8
推荐指数
2
解决办法
4872
查看次数

标签 统计

plpgsql ×1

postgresql ×1

sql ×1