我是PostgreSQL的新手,我遇到了一些問題,需要它來做我想做的事情。從Postgres函數返回數據
我需要構建一個函數,它可以接受多個變量,在內部執行多個查詢,然後返回一個由多行和幾列組成的數據集。我已經建立了幾個測試功能來獲得Postgres的功能,更好地把握,這裏是一個:
CREATE OR REPLACE FUNCTION sql_with_rows11(id integer) RETURNS character varying AS $BODY$
declare vid integer;
declare vendor character varying;
BEGIN
vid := (select v_id from public.gc_alerts where a_id = id);
vendor := (select v_name from public.gc_vendors where v_id = vid);
RETURN vendor;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION sql_with_rows11(integer)
OWNER TO postgres;
我知道我可以合併到這一個查詢,但是這更是一個實踐鍛鍊。這工作正常,我得到供應商的名稱。但是,現在我需要返回gc_vendors
表中的多個列。
最後,我需要構建一個函數,它將根據子查詢從幾個表中返回列。我研究過創建一個結果集函數,但我相信它一次只返回一行。我還研究了返回的setof類型,但似乎僅限於存在的表。
--------------編輯
嘿,夥計們,感謝您的幫助。我改變了以下功能:
CREATE OR REPLACE FUNCTION sql_with_rows14(IN v_uid character varying, IN lid integer)
RETURNS table (aid int, aname character varying) AS $BODY$
declare aid integer;
declare aname character varying;
BEGIN
sql_with_rows14.aid := (select a_id from public.gc_alerts where v_id = sql_with_rows14.v_uid);
sql_with_rows14.aname := (select a_name from public.gc_alerts where a_id = sql_with_rows14.aid);
RETURN;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
我也嘗試過使用RETURN NEXT,但結果相同。
當我查詢它,如果查詢返回只有一行,它工作正常。但它不適用於多行。我也嘗試過這樣的結果。你們能幫忙嗎?
試過這個: BEGIN sql_with_rows14.aid:=(從public.gc_alerts中選擇a_id); sql_with_rows14.aname:=(從public.gc_alerts中選擇a_name);
RETURN NEXT;
END;
喜羅馬的一章,你的答案是非常有幫助的。我試圖寫類似的東西,但是我有一個返回多行的問題。我有以下 – user2630270
@ user2630270以下是什麼? –