On this page
DO
DO —执行匿名代码块
Synopsis
DO [ LANGUAGE lang_name ] code
Description
DO
执行一个匿名代码块,或用一种程序语言执行一个临时的匿名函数。
将代码块视为没有参数的函数的主体,返回void
。它被解析并执行一次。
可选的LANGUAGE
子句可以在代码块之前或之后编写。
Parameters
code
- 要执行的过程语言代码。必须像
CREATE FUNCTION
一样,将其指定为字符串 Literals。建议使用美元报价 Literals。
- 要执行的过程语言代码。必须像
lang_name
- 编写代码所用的过程语言的名称。如果省略,则默认值为
plpgsql
。
- 编写代码所用的过程语言的名称。如果省略,则默认值为
Notes
必须已经通过CREATE LANGUAGE
将要使用的过程语言安装到当前数据库中。默认情况下已安装plpgsql
,但未安装其他语言。
用户必须具有程序语言的USAGE
特权,或者如果该语言不受信任,则必须是超级用户。这与使用该语言创建函数的特权要求相同。
Examples
将模式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$$;
Compatibility
SQL 标准中没有DO
语句。