问题报告 纠错本页面

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