2012-10-28 95 views
3

我試圖從PostgreSQL 9.0函數中獲取數據集,但我無法使用存儲過程。如何從PostgreSQL 9.0獲取數據集函數(「存儲過程」)

我是新來的Pos​​tgres這個星期,所以讓我解釋一下我的條件:

在pgAdmin的III我可以輸入命令:

SELECT * FROM member; 

和接收以下數據輸出:

memberid membername 
1   Bill Smith 
2   Joe Smith 

我試着創建很多功能(表/ SETOF/etc)非常像:

CREATE OR REPLACE FUNCTION get_all_members() 
RETURNS SET OF member AS 
'select * from member;' 

當我在pgAdmin的運行它們(或從程序調用它們)我得到以下幾點:

SELECT get_all_members() 

結果:

get_all_members 
member 
(1, "Bill Smith") 
(2, "Joe Smith") 

反正有沒有得到這個從數據集一個函數(存儲過程),我可以直接輸入SQL命令。

您的幫助非常感謝!

+1

該輸出是包含*記錄*的單個列,它是一種*複合類型*。 PostgreSQL支持將行視爲值。當你想要'SELECT * FROM get_all_members()'時,'SELECT get_all_members()'做等價於'SELECT x FROM get_all_members()x'。 –

回答

2

您可以通過修改你的SELECT語句了一點,所以它看起來像這樣得到每列輸出:

SELECT * FROM get_all_members() 

這會給你通過列輸出列,就像通常在做查詢。

請參閱set returning functions的文檔。

+0

我得到了同樣的結果。實際上pgAdmin III爲我添加了LANGUAGE SQL。 –

+0

我已經修改了答案,我認爲LANGUAGE SQL解決了它,但是您需要修改後續SQL查詢,試圖從函數獲取數據,所以它看起來像:'SELECT * FROM get_all_members()' –

+0

非常感謝很多 - 這既適用於PHP和pgAdmin III! –

相關問題