我有一个带序列的postgresql表:
CREATE TABLE A (
id integer NOT NULL DEFAULT nextval('a_seq'::regclass),
X integer,
Y integer,
Z boolean default false,
CONSTRAINT A_pkey PRIMARY KEY (id)
)
我在函数中有一个插入语句如下:
insert into A(x,y) select $1,getdig();
我希望此插入返回id
行被赋予名为A_id
的函数varabile
应该是这样的:
CREATE OR REPLACE FUNCTION bbb(m integer)
RETURNS integer AS
$BODY$
declare
A_id int;
begin
insert into A(x,y) select $1,getdig() RETURNING id into A_id;
actions using A_id like:
update A set z=True where id=A_id;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
我该怎么做?
答案 0 :(得分:2)
不需要select
:
CREATE OR REPLACE FUNCTION bbb(m integer)
RETURNS integer AS
$BODY$
declare
A_id int;
begin
insert into A(x,y)
values ($1,getdig())
RETURNING id into A_id;
-- actions using A_id like:
update A set z=True where id=A_id;
return a_id; -- don't forget to return something!
end;
$BODY$
LANGUAGE plpgsql VOLATILE
答案 1 :(得分:0)
您使用return子句:
with i as (
insert into A(x,y)
select $1, getdig()
returning id
)
select *
from i;
从技术上讲,CTE不是必需的。但我更喜欢返回值的查询以SELECT
开头。