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 $$

为什么?如何解决?

4

1 回答 1

1

您需要提供带有RETURNS 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 *,但您也应该在此处提供一个列列表。否则,对相关表之一的每次更改都会破坏该功能。

于 2013-07-19T09:43:10.087 回答