从MSSQL到PostgreSQL是否有任何等效的返回select语句(结果可能来自各种表)? 在MSSQL中它会是这样的:
CREATE PROCEDURE MyProc
AS
BEGIN
SELECT * FROM MyTable
END
MyTable可以是MSSQL中的任何表,但是在PostgreSQL中我必须定义我想要返回的表。像这样:
CREATE FUNCTION MyFunction ()
RETURNS setof "MyTable" AS $$
BEGIN
RETURN QUERY SELECT * FROM "MyTable"
END;
$$ LANGUAGE plpgsql;
但我想要做的是从一个由param传递的表中返回结果(当然我的过程更复杂,我为什么这样做的意图并不那么简单,这只是一个摘要)。 / p>
答案 0 :(得分:2)
Postgres中更复杂,但polymorphic types有一种方式:
CREATE OR REPLACE FUNCTION f_data_of(_tbl_type anyelement)
RETURNS SETOF anyelement AS
$func$
BEGIN
RETURN QUERY EXECUTE 'SELECT * FROM ' || pg_typeof(_tbl_type);
END
$func$ LANGUAGE plpgsql;
致电(重要!):
SELECT * FROM f_data_of(NULL::"MyTable");
此相关答案中的详细说明(参见最后一段:各种完整的表格类型):