Postgresql
返回儲存過程中的記錄集
我想從 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 函式通常更好。它們通常速度很快,有時甚至是計劃者透明的。