从函数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)”抱歉,出现错误。固定的。