更新时间:2026-10-21 GMT+08:00
匿名块
匿名块(Anonymous Block)一般用于不频繁执行的脚本或不重复进行的活动。它们在一个会话中执行,并不被存储。
语法
[ DECLARE [ declaration_statements ] ] BEGIN execution_statements END ; /
匿名块(Anonymous Block)语法图如图1所示。
- 匿名块程序实施部分,以BEGIN语句开始,以END语句停顿,以一个分号结束。输入“/”按回车执行它。
最后的结束符“/”必须独占一行,不能直接跟在END后面。
- 声明部分包括变量定义、类型、游标定义等。
- 最简单的匿名块不执行任何命令。但一定要在任意实施块里至少有一个语句,甚至是一个NULL语句。
示例
下面列举了基本的匿名块程序:
--空语句块 gaussdb=# BEGIN NULL; END; / --将信息打印到控制台: 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
匿名块使用JDBC驱动绑定参数
- 该功能仅支持ORA兼容性数据库,并且仅支持Oracle风格的匿名块。
- 在全密态加密场景中:
- 当JDBC连接配置enable_ce=1时不支持匿名块绑定参数。
- 当匿名块内定义的变量(包括显示定义的变量或类型)与绑定参数变量($1、$2...)命名冲突时会报错。
- 声明为自治事务的匿名块不支持绑定参数。
- 匿名块绑定参数个数上限为32767,绑定出参个数上限为1664。
前置条件:已连接数据库并且连接对象为conn。
匿名块使用JDBC驱动绑定参数的步骤如下:
- 调用Connection的prepareCall方法创建调用语句对象cstmt。
1CallableStatement cstmt = conn.prepareCall("DECLARE var int; BEGIN var := ?; ? := 50; END;");
- 调用CallableStatement的setInt方法设置参数。
1cstmt.setInt(1, 20);
- 调用CallableStatement的registerOutParameter方法注册输出参数。
1cstmt.registerOutParameter(2, Types.INTEGER); //注册out类型的参数,类型为整型。
- 调用CallableStatement的execute方法执行匿名块语句。
1cstmt.execute();
- 调用CallableStatement的getInt方法获取out输出参数。
1int out = cstmt.getInt(2);
- 调用CallableStatement的close方法关闭调用语句对象cstmt。
1cstmt.close();
- 507.0.0版本的JDBC连接历史版本的数据库(503.1.0及之后的版本),不支持匿名块使用JDBC驱动绑定参数。历史版本的JDBC(503.1.0及之后的版本)连接507.0.0版本的数据库,支持匿名块使用JDBC驱动绑定入参,不支持匿名块使用JDBC驱动绑定出参。
- 从507.0.0之前版本升级到507.0.0及更高版本时,在升级观察期期间:使用升级后的JDBC连接数据库,支持匿名块使用JDBC驱动绑定参数;使用升级前的JDBC(503.1.0及之后的版本)连接507.0.0版本的数据库,支持匿名块使用JDBC驱动绑定入参,不支持匿名块使用JDBC驱动绑定出参。
父主题: 声明语法
