PostgreSQL 9.4.4 中文手册
上一页 | 上一级 |  | 下一页

# DO

## 名称

DO -- 执行匿名代码块

## 大纲

    DO [ LANGUAGE lang_name ] code

## 描述

`DO`执行一段匿名代码块, 换句话说，在程序语言过程中一次性执行的匿名函数。

代码块被看做是没有参数的一段函数体，返回值类型是`void`。它的解析和执行时同一时刻发生的。

可选属性`LANGUAGE`可以在代码块之前写，也可以写在代码块的后面。

## 参数

`code`

  程序语言代码可以被执行的。程序语言必须指定为字符串才行, 就像命令`CREATE FUNCTION`，推荐使用美元符号一样。

`lang_name`

  用来解析代码的程序语言的名字，如果缺省，默认的语言是`plpgsql`。

## 注意事项

程序语言在使用之前，必须通过命令`CREATE LANGUAGE`安装到当前的数据库中。 `plpgsql`是默认的安装语言，其它语言安装时必须指定。

如果语言是不受信任的，用户必须有使用程序语言的`USAGE`权限，或者是超级用户。 在语言上，这同创建一个函数是一样的权限要求。

## 例子

授予角色`webuser`对模式`public`下视图的所有操作权限：

    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

上一页 | 起始页 | 下一页
DISCARD | 上一级 | DROP AGGREGATE