关于oracle 12c SQL语句执行结果与11g不一致的问题
来源:互联网 发布:达内java 百度网盘 编辑:程序博客网 时间:2024/05/17 08:04
将原有的系统迁移到oracle 12c上面,版本是12.1.0.2,总是有各种问题出现,不得不说,目前的版本真是个坑。
开发一条sql语句,insert .....select形式,单独执行select部分有结果,但insert。。。select的时候,显示插入结果为0,同样的数据,该语句放在10g,11gR1上都没问题,能够插入数据。只能说恭喜发财了。
语句如下:
insert all when nvl ((BM10060851_2), 0) <> 0 then into KPI.KPI_ORGAN (data_date, organ_code, curr_type, kpi_code, KPI_FREQ, KPI_VALUE)values (to_date('20150730', 'YYYYMMDD'), org_no, '00', 'BM10060851', 'Q', BM10060851_2) select --/*+optimizer_features_enable('11.2.0.3')*/ org_no, '00', to_number((count(distinct case when GL_TYPE = 'Q' then ACCT_NO END)),'9999999999999999999999.999999') BM10060851_2 from CMDATA.C_S_ELEC_TX_ORG T where chan_type = 'P01' and tran_status = '0' and data_dt = to_date('20150630', 'YYYYMMDD') group by org_no, '00'
-------------------------------------------------------------------------------------------------------------------------------------------
采用optimizer_features_enable指定优化器版本,发现11.2.0.4的时候,也会出现该问题,但11.2.0.3及以下版本就可以正常插入了。
对此表示很无奈,定然是oracle的bug,而且可以说是很严重的bug,如果这个问题不是在测试库上发现而是在生产上,想想都觉得无语。
在itpub上看到过类似的问题,也是sql语句在12c上执行没有结果,在之前的版本就可以,那哥们还开了sr给oracle,我这边客户也和原厂联系了,不知道是不是也要开个sr。
一般对于这种问题,其实改写下写法多多数是可以避免的,比如客户在调试的时候就将select部分的case那块给改写了,这条语句就有结果,或者将insert all后面那个when部分去掉,也是可以正常插入结果。。。。
但开发人员多是不愿意更改语句的,涉及到大量的程序,而且这个问题确实存在比较大的隐患,说不好下次写出类似语句便中招了,还是寄希望于oracle能及时处理吧。
当然,针对该语句而言,如果急着使用的话,我觉得将hint,将优化器版本降低点也是可以对付过去的。
--------------------------------------------------------------------------------------------------------------------------------------------
写这个案例呢,倒不是跟以往那样提供啥解决方案,而是想给自己一点关于解决问题的思考。
比如一开始遇到这个问题的时候,我便没有想到通过改写语句来避免这个情况,而是执着于去metalink上查找类似的bug,结果一无所得,
也体现出了我思维的僵硬一面,很多问题不一定都会有明确的解决措施,也不一定你都是第二个遇到这个问题的人,如果哪天你是第一个了,
是不是该考虑下创造历史,也为后来者做点贡献,毕竟这些年都在受惠于网络,于他人。
另一方面,知识也决定了思维,狭隘的知识面终究只会在那一亩二分地里面摸索,跳不出来,也就难以达到新的高度,多学习,也便能多遇未知,有未知方能去思索,探索,如此这般,才能让自己站在不同的高度去看过去的风景。也许曾经折磨自己死去活来的问题,再回首时,一览众山小。
--------------------------------------------------------------------------------------------------------------------------------------------
累了就休息,清闲了就看点书,遇到不解之处就多思考,学到东西就多总结,多分享。
- 关于oracle 12c SQL语句执行结果与11g不一致的问题
- 关于c#.net oracle 中联系执行多条sql语句的问题
- Oracle的SQL语句执行效率问题查找与解决方法
- oracle的SQL语句执行效率问题查找与解决方法
- Oracle 10g的SQL语句问题??
- 关于sql语句的执行顺序问题
- SQL和存储过程的结果不一致——小议Oracle的number精度问题
- oracle 导出sql语句的结果集和保存执行的sql语句
- 关于libsvm的Java和C版本的运算结果不一致的问题
- Linq查询结果集比对应的sql语句查询结果集不一致,存在重复结果
- 关于eclipse和javac编译结果不一致的问题的分析与解决
- Oracle 11g 的PL/SQL函数结果缓存
- sql语句中的字段类型与sql表字段类型不一致可能引起的性能问题
- Oracle中SQL语句执行效率问题的查找与解决
- HQL和SQL查询的结果不一致问题!!!
- 关于SQL语句的执行
- C#执行Oracle的Sql语句 参数顺序问题
- 将oracle SQL语句执行结果导入文本文件
- [POJ 1182]食物链[并查集]
- WinExec, ShellExecute,CreateProcess 的其他注意事项
- google mock分享
- [热门应用]开放媒体控制器(W5100)
- 微信公众平台OAuth2.0网页授权php示例
- 关于oracle 12c SQL语句执行结果与11g不一致的问题
- Android Launcher分析和修改5——HotSeat分析
- The PHP cURL extension must be installed to use Guzzle 错误: ubuntu 安装 php-curl 拓展
- C#中多个客户端连接的例程
- confluence 配置
- js中变量的作用域
- codevs 没有上司的舞会
- 软件开发过程中遇到的问题(Java 、JavaScript)
- 正则表达式