VastbaseE100

基于开源技术的HTAP数据库管理系统。性能优异,稳定可靠,提供诸多专属领域特性。

Menu

DO

DO - 执行匿名代码块

语法格式

DO [ LANGUAGE lang_name ] code

说明

DO 执行匿名代码块,或者换句话说,使用过程语言执行临时匿名函数。

代码块被视为没有参数说明的函数体,返回 void 。它被解析并执行一次。

可选的 LANGUAGE 子句可以在代码块之前或之后写入。

参数说明

  • code

    要被执行的过程语言代码。就像在 CREATE FUNCTION中一样,必须把它指定为一个 字符串。推荐使用一个美元引用的文本。

  • lang_name

    编写该代码的过程语言的名称。如果省略,默认为plpgsql。

注意事项

要使用的过程语言必须已经用CREATE EXTENSION安装在 当前数据库中。默认已经安装了plpgsql,但是其他语言没有被 安装。

用户必须拥有该过程语言的USAGE特权,如果该语言 是不可信的则必须是一个超级用户。这和创建一个该语言的函数对 特权的要求相同。

如果在事务块中执行DO,过程代码则无法执行事务控制语句。只有在自己的事务中执行DO时,才允许使用事务控制语句。

示例

授予所有视图的所有权限schema public 到role webuser :

DO $$DECLARE r record;
BEGIN
    FOR r IN SELECT table_schema, table_name FROM information_schema.tables
             WHERE table_type = 'VIEW' AND table_schema = 'public'
    LOOP
        EXECUTE 'GRANT ALL ON ' || quote_ident(r.table_schema) || '.' || quote_ident(r.table_name) || ' TO webuser';
    END LOOP;
END$$;