【问题标题】:Postgresql INSERT RETURNING complex typePostgresql INSERT RETURNING 复杂类型
【发布时间】:2016-01-09 20:03:14
【问题描述】:

我对 Postgresql 函数有疑问。 我想声明一个函数,它将向表中插入一行,然后将这一行返回给我(但带有自动创建的字段,如 Id)。

CREATE OR REPLACE FUNCTION UserCreate(
    name character varying(80),
    surname character varying(80),
    age int,
    email character varying(80)
)
RETURNS "Users" AS $$
BEGIN
INSERT INTO "Users" 
    (name,surname,age,email) VALUES 
    (name, surname,  age, email) RETURNING
    * AS result;
END;
$$ LANGUAGE 'plpgsql' 

但是当我尝试创建这个函数时,我得到一个错误:

Function's final statement must be SELECT or INSERT/UPDATE/DELETE RETURNING.

我试图在RETURNING 子句中找到一些示例,但所有示例都只是使用整数等基本返回类型。

【问题讨论】:

    标签: sql postgresql postgresql-9.3


    【解决方案1】:

    您可以使用变量在insert ... returningreturn 之间传送结果。比如:

    CREATE OR REPLACE FUNCTION UserCreate(
        name character varying(80),
        surname character varying(80),
        age int,
        email character varying(80)
    )
    RETURNS "Users" AS $$
    DECLARE
      result "Users";
    BEGIN
    INSERT INTO "Users" 
        (name,surname,age,email) 
        VALUES  (name, surname,  age, email) 
        RETURNING * INTO result;
    RETURN result;
    END;
    $$ LANGUAGE 'plpgsql';
    

    【讨论】:

    • 我尝试了类似的解决方案,但它不起作用。我认为问题在于我声明返回一行,result 可能包含一组行。我也试过LIMIT 1,但没有帮助
    • 以上对我有用,它应该对你有用。您收到什么错误消息?
    • 好吧,我的错。我尝试使用 pgAdmin 创建函数,但它可以从控制台工作。将调查原因
    猜你喜欢
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 2019-09-20
    • 2017-05-06
    • 2016-09-10
    • 2012-09-28
    相关资源
    最近更新 更多