【发布时间】:2015-09-15 14:18:23
【问题描述】:
我在 PostgreSQL 中有这个功能:
CREATE OR REPLACE FUNCTION func1(a integer, b timestamp, c integer[])
RETURNS SETOF typ_new AS
$BODY$
declare
begin
CREATE OR REPLACE VIEW newView as (select * from func2($1,$2,$3));
end;
$BODY$
LANGUAGE plpgsql VOLATILE
func2 也返回 SETOF typ_new,因此它们是兼容的。
运行时出现错误:ERROR: there is no parameter $1
如果我将$1 更改为参数名称a,则错误更改为
ERROR: column "a" does not exist
我也试过动态SQL:
sqlstr ='CREATE OR REPLACE VIEW newView (columns... ) as
(select * from func2('||$1||','||$2||','||$3||'))';
execute sqlstr;
但它不起作用,因为 $3 是 integer[] 和 || 不能用于数组。
我该如何解决这个问题?
【问题讨论】:
-
您似乎正在尝试执行动态 SQL;看看 PL/PgSQL 的
EXECUTE和format参数。有关详细信息,请参阅许多相关答案。 -
@Craig,查看帖子编辑
-
也许最好创建
VIEW as $BODY$并从此视图中选择函数?
标签: sql postgresql dynamic-sql