Oracle 违反协议 OALL8 处于不一致状态

异常集锦 专栏收录该内容
3 篇文章 0 订阅

BEGIN;

 

 

 

 

ERROR-util.JDBCExceptionReporter>: 违反协议
ERROR-util.JDBCExceptionReporter>: OALL8 处于不一致状态!

 

最近被这个问题纠结了很久,昨天终于找到了正确的解决方案,总结下, 出现这种问题的原因大致有

种:

 

1、连接oracle驱动不匹配。比如说在11g+jdk6.0的环境下,使用ojdbc5.jar。

2、中途修改了表结构等信息,也会导致上述错误。(重启WEB就不会再出现了)

3、操作字段数据时,不按照字段类型规范去操作。这也是一种比较隐藏的一个问题。比如说,我有一个表table,该表就2个字段,一个number类型tid,一个varchar2类型tname。从数据库建表规范上来说,表应该要有主键的,所以就设定第一个字段为主键,按序列递增。那么,怎么样使异常重现呢?请看如下sql:
select * from table where tid = '1';
    从结果上来说,这个sql是没有问题的,不信大家可以在PL/SQL上试一试。但是,很明显,tid明明是number类型,但是后面却是比较了一个字符串类型的值。
    而我出现这样的问题也是因为这个,在我JAVA中写的hql语句(hibernate)里面,有好几处都是这样(由于使用的是模板,所以当时拷贝的时候没注意这些),导致频繁出现这类问题。(也有可能跟hibernate有关,具体我就没有多做深究了。)

 

 

 

END;

--- --- --- ---> 点击查看更多最新原创博文<--- --- --- ---

 

技术交流

 

 

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页

打赏作者

倚楼听风雨_

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值