Postgresql INSERT RETURNING 复杂类型

Posted

技术标签:

【中文标题】Postgresql INSERT RETURNING 复杂类型【英文标题】:Postgresql INSERT RETURNING complex type 【发布时间】: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 子句中找到一些示例,但所有示例都只是使用整数等基本返回类型。

【问题讨论】:

【参考方案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 创建函数,但它可以从控制台工作。将调查原因

以上是关于Postgresql INSERT RETURNING 复杂类型的主要内容,如果未能解决你的问题,请参考以下文章

获取 PostgreSQL 中受 INSERT 或 UPDATE 影响的记录数

如何提高 PostgreSQL 在 INSERT 上的性能?

postgresql Insert插入的几个报错

PostgreSQL学习总结—— PostgreSQL 语句 INSERT INTOSELECTUPDATEDELETE 等学习

PostgreSQL学习总结—— PostgreSQL 语句 INSERT INTOSELECTUPDATEDELETE 等学习

PostgreSQL使用MyBatis,insert时返回主键