更新时间:2026-10-21 GMT+08:00
分享

匿名块

匿名块(Anonymous Block)一般用于不频繁执行的脚本或不重复进行的活动。它们在一个会话中执行,并不被存储。

语法

[ DECLARE [ declaration_statements ] ]
BEGIN execution_statements
END ;
/

匿名块(Anonymous Block)语法图如图1所示。

图1 anonymous_block::=
  • 匿名块程序实施部分,以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驱动绑定参数的步骤如下:

  1. 调用Connection的prepareCall方法创建调用语句对象cstmt。

    1
    CallableStatement cstmt = conn.prepareCall("DECLARE var int; BEGIN var := ?; ? := 50; END;");
    

  2. 调用CallableStatement的setInt方法设置参数。

    1
    cstmt.setInt(1, 20);
    

  3. 调用CallableStatement的registerOutParameter方法注册输出参数。

    1
    cstmt.registerOutParameter(2, Types.INTEGER);  //注册out类型的参数,类型为整型。
    

  4. 调用CallableStatement的execute方法执行匿名块语句。

    1
    cstmt.execute();
    

  5. 调用CallableStatement的getInt方法获取out输出参数。

    1
    int out = cstmt.getInt(2); 
    

  6. 调用CallableStatement的close方法关闭调用语句对象cstmt。

    1
    cstmt.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驱动绑定出参。

相关文档