2013-01-06 35 views
6

如何將簡單選擇查詢如select * from customers轉換爲pg中的存儲過程/函數?簡單PostgreSQL函數返回行

我是新來的Pos​​tgres和create function customers() as returns table/setof只是感覺不對,因此這裏的問題。

我知道proc在pg land中被稱爲「函數」。因此 create procedure 不存在,我唯一的選擇是創建視圖或函數。問題是create function x() returns setof y返回一個paren'd逗號分隔的值行,如果沒有進一步處理就不能使用(至少這就是我在pgAdmin和Ruby/Sequel中看到的)。

create function x() returns table(...)要求我嵌入我不想要的行定義。

我確信這背後有一個原因,但我很驚訝最常見的用例是這個棘手的。

+3

[你有什麼嘗試?](http://whathaveyoutried.com) – 2013-01-06 01:56:45

+2

@rebnoob而不是「沒有工作」 - 指定**您嘗試的功能的全文和產生的錯誤信息**爲以及您的PostgreSQL版本。 –

+0

太棒了!謝謝歐文和克雷格。 – rebnoob

回答

11

未經檢驗,但應約權:

CREATE OR REPLACE FUNCTION getcustomers() RETURNS SETOF customers AS $$ 
SELECT * FROM customers; 
$$ LANGUAGE sql; 
+2

這個作品,謝謝。但pg似乎只返回一列而不是實際列的逗號sep'd值,給出了什麼? – rebnoob

+1

@rebnoob你用'SELECT x FROM getcustomers()x'來調用它。你想使用'SELECT getcustomers();'或'SELECT * FROM getcustomers();'。 –

11

的問題是「創建函數X()返回SETOF Y」返回不能沒有使用的paren'd 逗號分隔行值進一步 處理

由於該函數返回一個記錄/行類型,你有

叫它

將返回的行分解爲單獨的列。

manual on CREATE FUNCTION應該是一個很好的起點。示例部分介紹了該主題。

+0

你先生..是一個絕地和力量來對付! – faizanjehangir