在给客户开发人员讲解LOB列的访问方式后,开发人员尝试在JDBC中使用包含RETURN的INSERT语句,但是出现了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 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语句,何况JDBC的RETURNING语句是从10.2的JDBC就引入新特性。

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

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

oracle error 439,JDBC使用INSERT RETURN语句报错ORA-439相关推荐

  1. 05_SQL注入_功能语句报错注入盲注

    05_SQL注入_功能语句&报错回显&盲注 1. SQL 语句和网站功能 1.1 Web开发中常见语句 [本章代码来源于pikachu和sqli-lab中的靶场] 开发中,根据不同的需 ...

  2. sq语句报错Parameter index out of range (2 > number of parameters, which is 1).

    sql语句报错: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeE ...

  3. mysql查找语句报错_MYSQL报错注入-WEB资讯专栏-DMOZ中文网站分类目录-免费收录各类优秀网站的中文网站目录....

    目录 审计思路报错语句报错函数查询表floor报错函数讲解报错原理语句xpath语法报错函数讲解语句整数溢出报错exppowcot列名重复报错name_constjoin using几何函数报错不存在 ...

  4. hive insert overwrite directory 报错

    hive insert overwrite directory 报错: 2017-06-07T16:56:11,766 ERROR [main]: exec.Task (:()) - Failed w ...

  5. mysql远程连接权限grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘123456‘ with grant option语句报错

    mysql远程连接权限grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option语句报错 记录 ...

  6. Module build failed: Error: Cannot find module ‘node-sass‘ Require stack报错解决

    Module build failed: Error: Cannot find module 'node-sass' Require stack报错解决 异常信息 解决方法 设置用淘宝镜像下载 npm ...

  7. sql无效字符 执行sql语句报错解决方案

    sql无效字符 执行sql语句报错解决方案 参考文章: (1)sql无效字符 执行sql语句报错解决方案 (2)https://www.cnblogs.com/feifeicui/p/8907851. ...

  8. Android移动开发-AndroidStudio调试安装时出现“Error running app: Default Activity Not Found”报错的解决方案

    如果在AndroidStudio调试安装程序时,如果程序中没有Activity的代码文件的话可能会在程序部署到手机或虚拟机上时碰到"Error running app: Default Ac ...

  9. navicat for mysql执行sql语句报错: [Err] 1146 - Table ‘performance_schema.session_status‘doesn‘t exist 解决办法

    navicat for mysql执行sql语句报错: [Err] 1146 - Table 'performance_schema.session_status' doesn't exist 解决办 ...

最新文章

  1. 干货!一文解决产品经理对UML的全部疑问
  2. Rust 编程语言极简教程 --- 实例学习
  3. canvas动画简单操作
  4. 计算机上没有office2010,《我安装了office2010,为什么桌面-右键-新建中没有excel呢?》 excel文件找不到...
  5. mysql启多_MySQL启多个实例
  6. arcengine 加载地图不显示_layUi的html页面动态加载的元素不显示
  7. 用Javascript读取CheckBox数组的值
  8. A better zip bomb,比例28000000:1「V2」
  9. windows下PTAM的编译
  10. 理解 Rack 应用及其中间件
  11. Navicat 中文显示乱码解决之道 ,亲测可行
  12. java 翻译框架_java框架外文翻译
  13. 网络打印机计算机服务,如何把局域网中的所有计算机及打印机设置共享?
  14. ps调整图片大小,像素大小
  15. 观echat的一个例子后有感
  16. laravel api 429 问题解决
  17. 大数据处理实践探索 ---- 笔试面试题:Spark基本调优
  18. pcb布线时爬电距离的总结与算法
  19. 免费的DNS服务OpenDNS、Google Public DNS
  20. 小米 红米 MIUI 重新打开(开启)蓝牙耳机电量弹窗

热门文章

  1. 苹果原壁纸高清_抖音头像 | 高清头像图片
  2. 2021年危险化学品经营单位主要负责人考试题及危险化学品经营单位主要负责人最新解析
  3. oracle nvarchar2问题,Oracle nvarchar2 错误解决方案
  4. java集合类(collection)
  5. PC微信逆向:实现自动保存加密的聊天图片
  6. java 枚举 接口_java枚举接口
  7. 跑步装备品牌排行榜:2022最值得买的几个跑步装备
  8. Karen莫文蔚签约索尼音乐 携音乐厂牌荣耀回归
  9. 编写Python程序输入直角三角形的两个直角边的边长a,b,请你求出其斜边边长,结果保留小数点后三位小数。如a=3,b =4,则输出5.000...
  10. 前端实现js模糊查询关键字显示下拉框功能的实例教程