
# 匿名块
匿名块（Anonymous Block）一般用于不频繁执行的脚本或不重复进行的活动。它们在一个会话中执行，并不被存储。
#### 语法
```
[ DECLARE [ declaration_statements ] ]
BEGIN execution_statements
END ;
/
```
图1anonymous_block::=   
![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/figure/zh-cn_image_0000002526899498.png)
对以上语法图的解释如下：
- 匿名块程序实施部分，以BEGIN语句开始，以END语句停顿，以一个分号结束。输入"/"按回车执行它。
  ![](https://support.huaweicloud.com/centralized-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  最后的结束符"/"必须独占一行，不能直接跟在END后面。
  
- 声明部分包括变量定义、类型、游标定义等。
- 最简单的匿名块不执行任何命令。但一定要在任意实施块里至少有一个语句，甚至是一个NULL语句。
- 匿名块中执行存储过程DDL语句，例如创建存储过程、重编译存储过程、实例化包等，在匿名块事务提交前会有部分临时内存申请在顶层SessionTempMemoryContext（例如：PL/pgSQL function context、PL/pgSQL package init context等），申请在顶层ExecutorTopMemoryContext（例如：ResourceOwnerCxt等），申请的临时内存在匿名块事务提交后释放。如果遇到内存不足场景，请调整GUC参数max_dynamic_memory至合适值后重试。
下面列举了基本的匿名块程序：
```
--空语句块
gaussdb=# BEGIN
     NULL; 
END;
/
ANONYMOUS BLOCK EXECUTE
--将信息打印到控制台：
gaussdb=# BEGIN
     dbe_output.print_line('hello world!'); 
END; 
/
hello world!
ANONYMOUS BLOCK EXECUTE
--将变量内容打印到控制台：
gaussdb=# DECLARE      
     my_var VARCHAR2(30);  
BEGIN      
     my_var :='world';     
     dbe_output.print_line('hello'||my_var); 
END; 
/ 
helloworld
ANONYMOUS BLOCK EXECUTE
```
