Postgresql

返回儲存過程中的記錄集

  • April 26, 2014

我想從 pl/pgsql 返回一組記錄。有沒有辦法在不使用“for”結構和游標的情況下做到這一點?例如,當我比較這兩個儲存過程時:

create or replace function sqlProc () returns setof integer as $$                                                                                                                                              
 select * from foo;
$$ language sql;


create or replace function plpgSqlProc () returns setof integer as $$
declare
 c integer;
begin
 for c in select * from foo loop
   return next c;
end loop;

end;
$$ language plpgsql;

純 SQL 版本的時間性能是 pl/pgsql 版本的 2 倍!不幸的是,我還有其他無法用純 SQL 表達的邏輯,所以我想知道我應該如何編寫儲存過程?

根據您必須支持的版本,在 PostgreSQL 中有幾種方法可以做到這一點。最簡單的是:

create or replace function plpgSqlProc () returns setof integer as $$
BEGIN

RETURN QUERY select * from foo;
END;
$$ LANGUAGE PLPGSQL;

話雖這麼說,我發現你不需要幫助程式碼的地方,普通的 SQL 函式通常更好。它們通常速度很快,有時甚至是計劃者透明的。

引用自:https://dba.stackexchange.com/questions/35743