PostgreSQL:在过程中返回一个select语句

时间:2014-01-22 11:03:10

标签: postgresql stored-procedures plpgsql dynamic-sql postgresql-9.2

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

1 个答案:

答案 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");

此相关答案中的详细说明(参见最后一段:各种完整的表格类型):