ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 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`语句。 ## 又见 [CREATE LANGUAGE](#calibre_link-605)