我在PostgreSQL的这个功能:如何使用参数创建函数的VIEW?
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,查看文章编辑 – John
也许最好是创建'VIEW as $ BODY $'并从该视图中选择函数? – Smileek