Postgresql 使用postgres函数创建视图
我正在尝试使用postgres函数构建参数化视图:Postgresql 使用postgres函数创建视图,postgresql,stored-functions,Postgresql,Stored Functions,我正在尝试使用postgres函数构建参数化视图: CREATE FUNCTION schemaB.testFunc(p INT) RETURNS TABLE AS RETURN (SELECT * FROM schemaZ.mainTable WHERE id=p) 问题总是一样的: SQL错误[42601]:错误:位于或接近“AS”的语法错误 知道我可能做错了什么吗?您需要指定“返回表”的列,这可以使用 returns table(col_1 integer, col_2 text, .
CREATE FUNCTION schemaB.testFunc(p INT)
RETURNS TABLE
AS
RETURN (SELECT * FROM schemaZ.mainTable WHERE id=p)
问题总是一样的:
SQL错误[42601]:错误:位于或接近“AS”的语法错误
知道我可能做错了什么吗?您需要指定“返回表”的列,这可以使用
returns table(col_1 integer, col_2 text, ...)
在本例中,只返回一个表的行,因此使用起来更方便
returns setof maintable
函数体需要用单引号括起来,或者使用
由于在Postgres中存储的函数可以用多种不同的语言编写,因此还需要指定一种语言—在这种情况下,语言sql
是合适的
因此,将所有这些放在一起,您需要:
CREATE FUNCTION schemaB.testFunc(p_id INT)
RETURNS setof schemaZ.mainTable
AS
$$
SELECT *
FROM schemaZ.mainTable
WHERE id = p_id
$$
language sql;
language sql
函数不需要return
语句。您需要指定“return table”的列,这可以使用
returns table(col_1 integer, col_2 text, ...)
在本例中,只返回一个表的行,因此使用起来更方便
returns setof maintable
函数体需要用单引号括起来,或者使用
由于在Postgres中存储的函数可以用多种不同的语言编写,因此还需要指定一种语言—在这种情况下,语言sql
是合适的
因此,将所有这些放在一起,您需要:
CREATE FUNCTION schemaB.testFunc(p_id INT)
RETURNS setof schemaZ.mainTable
AS
$$
SELECT *
FROM schemaZ.mainTable
WHERE id = p_id
$$
language sql;
language sql
函数不需要return
语句。是否可以基于p\u id参数从不同的表中返回2个或更多选择?例如:如果p_id=1返回从schemaZ.mainTable选择,如果p_id=2则返回从schemaZ.tableSecondary1选择,等等?是否可以基于p_id参数从不同的表返回2个或更多选择?例如:如果p_id=1返回select from schemaZ.main表,如果p_id=2则返回select from schemaZ.tableSecondary1,等等?