【发布时间】:2014-01-22 11:03:10
【问题描述】:
是否有任何从 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;
但是我想要做的是从一个由参数传递的表中返回结果(当然我的过程更复杂,我的意图为什么这样做并不那么简单,这只是一个抽象)。
【问题讨论】:
-
问题不在于表名的传递,问题在于结果集的定义。 Postgres 要求在编译时定义返回的结果(使用
returns setof或returns table时)。我认为这样做的唯一方法是使用带有引用光标的函数。 -
嗯,这有点可惜,但我怀疑它。我将尝试使用光标,这是个好主意,所以我会将其作为结果提供给 php.ini。把它写成答案,所以我会把它作为接受的答案
-
@a_horse_with_no_name cursor 做到了。花了我一点时间如何用 PHP 处理光标(并将其转换为数组),但它有效。谢谢!请写下您的评论作为答案,以便我接受。
标签: postgresql stored-procedures plpgsql dynamic-sql postgresql-9.2