ITPub博客

首页 > Linux操作系统 > Linux操作系统 > JDBC使用INSERT RETURN语句报错ORA-439

JDBC使用INSERT RETURN语句报错ORA-439

原创 Linux操作系统 作者:yangtingkun 时间:2011-12-24 23:59:07 0 删除 编辑

在给客户开发人员讲解LOB列的访问方式后,开发人员尝试在JDBC中使用包含RETURNINSERT语句,但是出现了ORA-439错误。

 

 

检查后发现客户的程序使用的还是PreparedStatement语句,而RETURNING语句,则是Oracle扩展的SQL语法,因此在声明语句的时候必须使用OraclePreparedStatement方式进行声明。

除了修改SQL语句外,使用OraclePreparedStatement声明语句变量外,还需要注册输出参数,类似的代码如下:

OraclePreparedStatement sqlstmt =
(OraclePreparedStatement)conn.prepareStatement
("insert into t_lob values (?, ?, empty_clob()) returning contents into ?");
sqlstmt.setInt(1, 1);
sqlstmt.setString(2, "a");
sqlstmt.registerReturnParameter(3, OracleTypes.CLOB);
sqlstat.executeUpdate();
ResultSet resset = sqlstmt.getReturnResultSet();
if (resset.next())
{
CLOB contents = (CLOB)resset.getClob(2);
...
}

不过即使开发人员声明了OraclePreparedStatement语句,仍然找不到registerReturnParameter过程。

当前的数据库的版本是11.2.0.2,没有道理不支持RETURN语句,何况JDBCRETURNING语句是从10.2JDBC就引入新特性。

查询了一下当前客户端JDBC的驱动版本,发现居然还是9.2的版本,这就难怪使用RETURN语句的时候,会出现ORA-439的错误了。

很多时候数据库的版本已经升级到很高的版本,但是应用程序使用的版本或驱动没有进行升级,同样很多新特性无法使用。而且一般而言,推荐客户端驱动版本和所连接数据库的版本保持一致,这样出现BUG的可能性最小。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-713913/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1955
  • 访问量
    10387300