簡體   English   中英

從函數PostgreSQL返回%ROWTYPE

[英]return %ROWTYPE from function PostgreSQL

我嘗試執行以下操作:

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”

如何返回序列的值?

你必須用

SELECT * FROM fnmytable(r_rec) INTO r_rec;

我知道INOUT似乎建議修改輸入參數,但事實並非如此。 (INOUT p_rec mytable)(p_rec mytable) RETURNS 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;
$$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM