2011-08-15 158 views
15

我目前正在寫postgresql 9.04中的一個函數,我試圖使用一個將在select語句中使用的變量,然後返回結果。函數返回多個列作爲單列而不是多列

我提出的陳述很簡單,很有效;但是,所有列都輸出到單列而不是多列。

這裏是我的功能:

create or replace function foo(IN pID integer, OUT project_id integer, OUT project_name text, OUT project_type text, OUT project_description text, OUT project_status text) 
returns setof record as 

$$ 
select project_id, project_name, project_type, project_description, project_status from  t_projects 
where project_id = $1; 
$$ 

LANGUAGE SQL; 


select foo(6) -- runs function 

電流輸出是這樣的:

"(6,"test project","inbound","inbound test","processing")" 

我怎樣才能使它所以結果並不連接在一起,並seperately返回各列項?

謝謝你提前。

+1

爲什麼你有一個'setof記錄'的返回類型,同時還聲明'OUT'列匹配' SELECT'?你打算返回記錄,還是填充'OUT'參數?你應該選擇一種方法,而不是兩種。 – cdhowie

+0

postgresql對我來說仍然是新手,因爲我習慣於使用微軟sql erver。理想情況下,我想返回select語句的結果。在我的谷歌搜索中,我發現人們會用指定的輸出創建一個類型,或者將輸出放在函數中。目前,我仍處於postgresql的理解階段:) – richh

回答

27

你需要調用該函數是這樣的:

select * from foo(6); 

將返回這樣的事情:

project_id | project_name | project_type | project_description | project_status 
-----------|--------------|--------------|---------------------|---------------- 
     6 | test project |  inbound |  inbound test |  processing 

這是Postgres的,它可以被稱爲左右逢源的怪癖,給你一個結果。您可能希望再次查看有關設置返回函數的文檔,還有其他方法可以執行此操作。哦,這裏有一個wiki頁面,用於plpgsql,但大多數也適用於sql函數:http://wiki.postgresql.org/wiki/Return_more_than_one_row_of_data_from_PL/pgSQL_functions

+0

這樣做了......謝謝SOOOO太多:) – richh

+0

這確實很古怪。 – mvexel

+0

爲什麼'select * from foo(6)'是用'create或replace函數定義foo()時出錯的錯誤foo(int)返回setof記錄爲$$ SELECT $ 1爲a,'xx'爲b; $$ LANGUAGE SQL;'?? –