从函数PostgreSQL返回%ROWTYPE
我试着做到以下几点:从函数PostgreSQL返回%ROWTYPE,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,我试着做到以下几点: CREATE TABLE mytable(id integer NOT NULL, name character varying, CONSTRAINT pk_table PRIMARY KEY (id)); 注意:OUT ID:“NULL” 如何返回序列的值?您必须使用 SELECT * FROM fnmytable(r_rec) INTO r_rec; 我知道,I
CREATE TABLE mytable(id integer NOT NULL,
name character varying,
CONSTRAINT pk_table PRIMARY KEY (id));
注意:OUT ID:“NULL” 如何返回序列的值?您必须使用
SELECT * FROM fnmytable(r_rec) INTO r_rec;
我知道,INOUT
似乎表明输入参数被修改了,但事实并非如此(INOUT p_rec mytable)
是(p_rec mytable)返回mytable的缩写
换句话说,PostgreSQL中的函数总是按值传递,而不是按引用传递。您必须使用
SELECT * FROM fnmytable(r_rec) INTO r_rec;
我知道,INOUT
似乎表明输入参数被修改了,但事实并非如此(INOUT p_rec mytable)
是(p_rec mytable)返回mytable的缩写
换句话说,PostgreSQL中的函数总是按值传递,而不是按引用传递。请尝试此方法
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;
$$
请试试这个
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;
$$
错误:整数的输入语法无效:“(1,Jorge)”抱歉,出现错误。已修复。错误:整数的输入语法无效:“(1,Jorge)”抱歉,出现错误。固定的。