DO

Name

DO -- 执行一个匿名代码块

Synopsis

DO [ LANGUAGE lang_name ] code

描述

DO执行一个匿名代码块, 或者换句话说是一个程序语言的顺便匿名函数。

代码块被视为不带参数的函数体,返回void。解析并执行一个单独的时间。

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

参数

code

将被执行的程序语言代码。这必须被指定为一个字符串符,仅如在CREATE FUNCTION中。 建议使用美元符。

lang_name

写代码使用的程序语言的名称。若省略,默认为plpgsql

注意

要被使用的程序语言必须是已经通过CREATE LANGUAGE被安装到当前数据库中。 plpgsql是么人安装的,而其他语言并不是。

用户必须对程序语言由USAGE权限,或者若语言是不可信的就必须是超级用户。 这与用该语言创建函数的权限要求相同。

示例

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$$;

兼容性

在SQL标准中没有DO语句。

又见

CREATE LANGUAGE