【发布时间】:2013-11-20 00:15:43
【问题描述】:
我能够在我的 Postgresql 9.3 数据库中创建以下函数:
create or replace function upsert_expense(
p_id integer,
p_amount integer,
p_payer_id integer,
p_category category_t,
p_description text)
returns text as
$$
begin
if p_id = 0 then
insert into expenses(amount, payer_id, category, description)
values (p_amount, p_payer_id, p_category, p_description)
returning row_to_json(expenses.*);
end if;
update expenses set
amount=p_amount,
payer_id=p_payer_id,
category=p_category,
description=p_description
where id=p_id
returning row_to_json(expenses.*);
end;
$$
language plpgsql;
当我尝试调用该函数时出现问题:
select upsert_expense(1,1,1,'groceries','description');
我收到以下错误:
ERROR: query has no destination for result data
我认为这是由于“returning”关键字使用不当,使用“pg_get_serial_sequence”可能会得到相同的结果,但我觉得使用“returning”会更优雅。
有人有什么想法吗?还是我在这里找错树了。
【问题讨论】:
-
只是为了解释错误消息,您要求 INSERT 返回数据,但没有提供任何要返回的变量。要么您需要该数据,然后将其分配给一个变量,要么您不需要它,然后删除
returning子句。
标签: json postgresql sql-update plpgsql sql-insert