DO
Name
DO -- 执行匿名代码块
Synopsis
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
语句。