我正在创建一个添加角色的函数。该函数接收两个参数:name和可以从角色执行的函数列表。
我在分配语句内的[v0execute]参数的内容时遇到麻烦:GRANT EXECUTE on FUNCTION v_execute [i] to v_rolename;
问题是,在FUNCTION上的EXECUTE期望这样的函数名称:fn_customer_add()
,我在那里传递了数组类型变量。
这是我的plpgsql代码:
create function fn_roles_add(v_role_name varchar, v_execute varchar[]) returns character varying
language plpgsql
as
$$
DECLARE
i varchar;
BEGIN
CREATE ROLE v_role_name;
/* Function execution permissions are assigned from the array argument v_role_name */
FOREACH i IN ARRAY v_execute
LOOP
GRANT EXECUTE on FUNCTION i to v_role_name;
END LOOP;
RETURN 'OK';
END;
$$;
如果将v_execute[i]
替换为现有函数的名称,它将正常工作。但是我需要能够传递给它可变数量的函数,因为我的数据库基于几乎所有查询都使用函数。
错误:
[[42601]错误:“至”处或附近的语法错误
有人有任何想法欺骗plpgsql来执行此操作吗?