我正在尝试创建一个 UDF,该 UDF 可以VIEW
动态创建使用USING
子句功能。问题是,EXECUTE
不会接受传递给CREATE VIEW
命令的参数。
CREATE OR replace FUNCTION test(name varchar) RETURNS void LANGUAGE plpgsql AS $$
BEGIN
EXECUTE format('create or replace view %I as select $1 as id limit 1;',$1) using $1;
RETURN;
END
$$;
测试:
select test('tabel_view');
电流输出:
SQL 错误 [42P02]:错误:没有参数 $1
其中:执行时的 PL/pgSQL 函数测试(字符变化)第 3 行
同样适用于CREATE TABLE
:
CREATE OR REPLACE FUNCTION test(name varchar) RETURNS void LANGUAGE plpgsql AS $$
BEGIN
EXECUTE format('create table %I as select $1 as id limit 1;',$1) using $1;
RETURN;
END
$$;
我尝试这种方式是因为字符串连接很容易出现 SQL 注入。另外,我正在处理的 UDF 将有一个数组作为输入。
知道如何解决这个问题吗?