是否有任何技巧可以解决PLPGSQL中的此语法错误?

问题描述 投票:1回答:1

我正在创建一个添加角色的函数。该函数接收两个参数: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来执行此操作吗?

postgresql plpgsql
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.