我试图做以下事情:
CREATE TABLE mytable(id integer NOT NULL,
name character varying,
CONSTRAINT pk_table PRIMARY KEY (id));
CREATE OR REPLACE FUNCTION fnmytable(inout p_rec mytable)
RETURNS mytable AS
$BODY$
declare
begin
p_rec.id := 1;--sequence
INSERT INTO mytable(id,
name)
VALUES (p_rec.id,
p_rec.name);
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
do
$$
declare
r_rec mytable%rowtype;
begin
r_rec.name := 'Jorge';
perform fnmytable(r_rec);
raise notice 'OUT ID: %', r_rec.id;
end;
$$
注意:OUT ID:" NULL"
如何返回序列的值?
答案 0 :(得分:1)
你必须使用
SELECT * FROM fnmytable(r_rec) INTO r_rec;
我知道INOUT
似乎暗示输入参数被修改,但事实并非如此。 (INOUT p_rec mytable)
是(p_rec mytable) RETURNS mytable
的缩写。
换句话说,PostgreSQL中的函数始终是按值传递而不是按引用传递。
答案 1 :(得分:0)
请试试这个
CREATE OR REPLACE FUNCTION fnmytable(inout p_rec mytable) AS
--EDITED HERE
$BODY$
declare
begin
p_rec.id := 1;--sequence
INSERT INTO mytable(id,
name)
VALUES (p_rec.id,
p_rec.name);
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
调用函数
do
$$
declare
r_rec mytable%rowtype;
begin
r_rec.name := 'Jorge';
select * from fnmytable(r_rec) into r_rec; --EDITED HERE
raise notice 'OUT ID: %', r_rec.id;
end;
$$