DO

DO —执行匿名代码块

Synopsis

DO [ LANGUAGE lang_name ] code

Description

DO执行一个匿名代码块,或用一种程序语言执行一个临时的匿名函数。

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

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

Parameters

  • code

    • 要执行的过程语言代码。必须像CREATE FUNCTION一样,将其指定为字符串 Literals。建议使用美元报价 Literals。
  • lang_name

    • 编写代码所用的过程语言的名称。如果省略,则默认值为plpgsql

Notes

必须已经通过CREATE LANGUAGE将要使用的过程语言安装到当前数据库中。默认情况下已安装plpgsql,但未安装其他语言。

用户必须具有程序语言的USAGE特权,或者如果该语言不受信任,则必须是超级用户。这与使用该语言创建函数的特权要求相同。

Examples

将模式public中所有视图的所有特权授予角色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$$;

Compatibility

SQL 标准中没有DO语句。

See Also

CREATE LANGUAGE