2013-07-19 2 views
0
ERROR: syntax error at or near "AS" 
LINE 3: AS $$ 

테이블을 함수로 반환하는 방법은 무엇입니까?

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; 
? 그것을 고치는 방법?

답변

1

당신은 like described in the manual hereRETURNS TABLE 절에 열 정의 목록을 제공해야합니다

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

방법이 다른가요? –

관련 문제