我试过以下几点:
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“
如何返回序列的值?
发布于 2016-09-08 19:15:31
你必须用
SELECT * FROM fnmytable(r_rec) INTO r_rec;我知道INOUT似乎建议修改输入参数,但事实并非如此。(INOUT p_rec mytable)是(p_rec mytable) RETURNS mytable的缩写。
换句话说,PostgreSQL中的函数总是通过值传递,而不是通过引用传递。
发布于 2016-09-09 06:56:23
请尝尝这个
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;
$$https://stackoverflow.com/questions/39398434
复制相似问题