当前位置: 代码迷 >> Oracle开发 >> oracle11G not exists的BUG解决方案
  详细解决方案

oracle11G not exists的BUG解决方案

热度:102   发布时间:2016-04-24 06:25:54.0
oracle11G not exists的BUG
 insert into SYS_LOAD_COUNT (DATADT, TABLE_NAME, TABLE_COUNT,IMP_TABLE_COUNT, DATE_FLAG, END_TIME,  MAIN_FLAG, TABLE_DESC)         
select '20150104', 'ACCGEN_INFO', '0', '0', 'BYDATE', '', '1', '综合信息' from dual where not exists 
(select 1 from sys_load_count where  datadt='20150104' and table_name='ACCGEN_INFO')

很奇怪的现象,这个语句在pl sql里面执行成功把数据写入到表里面,程序几年没修改过,用Hibernate执行,之前都能成功,但到前两天开始,数据写不到表里面去了,跟踪了一下代码,代码没报错,把 not exists 后面的去掉能把数据写进去,加上 not exists 死活写不进去,SYS_LOAD_COUNT 表里面没有存在 datadt='20150104' and table_name='ACCGEN_INFO' 的数据的,  太奇葩了,求解。

------解决思路----------------------
这个是因为你的事务中含有对表sys_load_count其他插入操作吧,楼主可以调试跟进检查下代码试试。
------解决思路----------------------
单独执行一下select 语句看看结果,就知道了
SELECT '20150104',
         'ACCGEN_INFO',
         '0',
         '0',
         'BYDATE',
         '',
         '1',
         '综合信息'
    FROM dual
   WHERE NOT EXISTS (SELECT 1
            FROM sys_load_count
           WHERE datadt = '20150104'
             AND table_name = 'ACCGEN_INFO')

------解决思路----------------------
加上 not exists 死活写不进去 ?? 这个如何理解,你写进去也是0 行数据啊。
  相关解决方案