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 ... returning
和return
之间传送结果。比如:
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学习总结—— PostgreSQL 语句 INSERT INTOSELECTUPDATEDELETE 等学习
PostgreSQL学习总结—— PostgreSQL 语句 INSERT INTOSELECTUPDATEDELETE 等学习