2013-07-19 92 views
0
CREATE FUNCTION Test_Extract_Text(tm_id1 int4, tm_subid1 int4, tm_id2 int4, tm_subid2 int4) 
RETURNS Table 
AS $$ 
BEGIN 
    RETURN QUERY SELECT * FROM dat_extract_text inner join dat_replace_text on dat_extract_text.Id=dat_replace_text.subid ; 
END; 
$$ LANGUAGE plpgsql; 
ERROR: syntax error at or near "AS" 
LINE 3: AS $$ 

爲什麼?如何解決它?如何返回一個表freom函數?

回答

1

您需要提供一個字段定義列表與RETURNS TABLE條款,like described in the manual here

CREATE FUNCTION Test_Extract_Text(
    tm_id1 int4, tm_subid1 int4, tm_id2 int4, tm_subid2 int4) 
RETURNS TABLE (col1 type1, col2 type2, ...) AS 
$$ 
BEGIN 
    RETURN QUERY 
    SELECT * 
    FROM dat_extract_text e 
    JOIN dat_replace_text r ON e.Id = r.subid; 
END 
$$ LANGUAGE plpgsql;

雖然它允許使用SELECT *,你應該在這裏提供了一個列的列表,太。否則,對涉及的表格中的任何一個的每次更改都會中斷該功能。

+0

但我有很多列(500列) –

+0

@ user1497597:這是很多列。引發您的數據庫架構是否可能得到改進的問題。如果在多個函數中需要相同的表類型,則可以創建一個類型並使用'RETURNS SETOF my_composite_type' ... –

+0

您有與之不同的方法嗎? –