Oracle 10g 10.2.0.4的group by BUG |ORA-00979 not a GROUP BY expression|
乍看 ORA-00979 not a GROUP BY expression 这个提示估计很快能将其定位为SQL语句写得有问题,实际上有可能你遇到了一个Oracle的BUG,这个BUG常见于10.2.0.4这个版本(10g 最后一个补丁版本是10.2.0.5)。
前几天和同事做一个应用系统升级的时候遇到了这个问题,首先是一张视图无法创建,仔细分析构成视图的查询也没有发现明显的SQL语法问题:
01selectt.stat_date,02 t.species_name,03 t.species_id,04 0 jzcg_bid_price,05 (selectnvl(sum(a.bid_price), 0)06 fromvb_pr_stat27_2 a07 wherea.stock_mode_name = 'AAAAAAAA'08 anda.stat_date = t.stat_date09 anda.species_name = t.species_name10 anda.stock_mode_name = t.stock_mode_name11 groupbya.stat_date, a.species_name,a.site_id,a.org_id) gk_bid_price,12 (selectnvl(sum(a.bid_price), 0)13 fromvb_pr_stat27_2 a14 wherea.stock_mode_name = 'BBBBBBBB'15 anda.stat_date = t.stat_date16 anda.species_name = t.species_name17 anda.stock_mode_name = t.stock_mode_name18 groupbya.stat_date, a.species_name) yq_bid_price,19 (selectnvl(sum(a.bid_price), 0)20 fromvb_pr_stat27_2 a21 wherea.stock_mode_name = 'CCCCCCCC'22 anda.stat_date = t.stat_date23 anda.species_name = t.species_name24 anda.stock_mode_name = t.stock_mode_name25 groupbya.stat_date, a.species_name) jz_bid_price,26 (selectnvl(sum(a.bid_price), 0)27 fromvb_pr_stat27_2 a28 wherea.stock_mode_name = 'DDDDDDDD'29 anda.stat_date = t.stat_date30 anda.species_name = t.species_name31 anda.stock_mode_name = t.stock_mode_name32 groupbya.stat_date, a.species_name) xj_bid_price,33 (selectnvl(sum(a.bid_price), 0)34 fromvb_pr_stat27_2 a35 wherea.stock_mode_name = 'EEEEEEEE'36 anda.stat_date = t.stat_date37 anda.species_name = t.species_name38 anda.stock_mode_name = t.stock_mode_name39 groupbya.stat_date, a.species_name) dy_bid_price,40 (selectnvl(sum(a.bid_price), 0)41 fromvb_pr_stat27_2 a42 wherea.stock_mode_name = 'FFFF'43 anda.stat_date = t.stat_date44 anda.species_name = t.species_name45 anda.stock_mode_name = t.stock_mode_name46 groupbya.stat_date, a.species_name) qt_bid_price,47 t.site_id,48 t.agency_id,49 t.org_id,50 t.org_name51 fromvb_pr_stat27_2 t;
就是死活报 ORA-00979 ,由于这个查询涉及其他视图,其他视图又涉及多张表,一时没有办法拿到其他版本的数据库中测试,并没有意识到这个BUG。
后来我同事在会话级别设定参数 _complex_view_merging 为 false 之后,就没有再报 ORA-00979 了。查阅了一些相关资料,在这位仁兄的blog中找到了对这个BUG的描述,据说10.2.0.5的Fixed Bug List中能找到这个BUG,但是一直搞不到这份List。
以下是基本上就是摘录这位仁兄的内容了,让我们重现一下这个BUG,首先是建表语句,不用测试数据了:
01----02CREATE TABLEpers_dinner03(04 "PER_ID"NUMBER(10) NOTNULL,05 "PERS_DINNER_COUNT" NUMBER(3) NOTNULL,06 "PERS_DINNER_DATE"DATENOTNULL,07 "UPD_TS"DATEDEFAULT SYSDATE NOTNULL,08 "UPD_UID"NUMBER(10),09 "PERS_DINNER_GROUP" CHAR(1 byte) NOTNULL,10 "ID"NUMBER(10) NOTNULL,11 "STATUS" NUMBER(1) 12 DEFAULT9 NOTNULL,13 "UCETNI_ROK"NUMBER(4) 14 DEFAULTto_number(to_char(sysdate,'YYYY')) NOTNULL,15 "UCETNI_MESIC"NUMBER(2) 16 DEFAULTto_number(to_char(sysdate,'MM')) NOTNULL,17 CONSTRAINT"PK_PERS_DINNER2"18 PRIMARYKEY("ID"),19 CONSTRAINT"UQ_PERS_DINNER2"20 UNIQUE("PER_ID", "PERS_DINNER_GROUP", "PERS_DINNER_DATE", "UCETNI_ROK")21)22LOGGING23MONITORING;
然后一个比较复杂的查询:
view sourceprint?01select02 xx.ucetni_rok || xx.mesic asid,03 xx.ucetni_rok asrok,04 xx.mesic,05 (06 selectnvl(sum(d2.pers_dinner_count), 0) ascnt07 frompers_dinner d208 whered2.per_id = '27052'09 andd2.status in(0, 9)10 andd2.pers_dinner_group = 'U'11 andd2.ucetni_rok = xx.ucetni_rok12 andto_char(d2.pers_dinner_date, 'MM.YYYY') = xx.mesic13 ) as suma_u14 from(15 select16 d.pers_dinner_group,17 d.ucetni_rok,18 to_char(d.pers_dinner_date, 'MM.YYYY') asmesic,19 sum(d.pers_dinner_count) ascnt20 frompers_dinner d21 whered.per_id = '112378'22 andd.status in(0,9)23 groupbyd.pers_dinner_group, d.ucetni_rok, to_char(d.pers_dinner_date, 'MM.YYYY') 24) xx;
马上就会报: ORA-00979: not a GROUP BY expression 了。
如果,将 _complex_view_merging 这个参数设定为 false 就可以马上得到结果。
1altersession set"_complex_view_merging"=false;
在 10gR2 的第一个版本,也就是 10.2.0.1 没有这个问题,所以可以认为是 10.2.0.4 这个补丁包引入的BUG。
出处:http://www.cnblogs.com/killkill/archive/2010/08/02/1790381.html
Oracle 10g 10.2.0.4的group by BUG |ORA-00979 not a GROUP BY expression|的更多相关文章
- Oracle 10g 10.2.0.1 在Oracle Linux 5.4 32Bit RAC安装手冊(一抹曦阳)
Oracle 10g 10.2.0.1 在Oracle Linux 5.4 32Bit RAC安装手冊(一抹曦阳).pdf下载地址 ,step by step http://download.csdn ...
- oralce 10g(10.2.0.1) 冷备份从64位恢复到32位
环境描述:windows 2003 企业版 64位 oracle版本:oracle 10g 10.2.0.1 64位 冷备恢复到 windows XP oracle 10g 10.2.0.1 32位( ...
- rac 10g 10.2.0.1升级到10.2.0.5具体解释
RAC 10.2.0.1 升级到 10.2.0.5 一. 准备: Patch 包:p8202632_10205_LINUX.zip 节点数:3个节点 RAC1 RAC2 ...
- Apply Bug10010310 On Oracle RAC 10.2.0.5
9月24日数据库上频繁出现例如以下错误 Errors in file /u04/admin/njord/udump/njord_ora_25895.trc: ORA-27300: OS system ...
- OEM无法启动:oracle/product/10.2.0/dbhome_1/oc4j/j2ee/OC4J_DBConsole_localhost.localdomain_orcl not found.
配置OEM环境变量 ORACLE_UNQNAME=$ORACLE_SID 要想打开OEM的web管理程序,必须先启动Database listener,再启动Datebase Control端口监控程 ...
- ojdbc15-10.2.0.4.0.jar maven 引用报错 Dependency 'com.oracle:ojdbc15:10.2.0.4.0' not found
ojdbc15-10.2.0.4.0.jar maven 引用报错 问题现象 在 Maven 工程中引用 ojdbc15-10.2.0.4.0.jar 报错,报错信息:Dependency 'com. ...
- 【Oracle】10.2.0.1升级到10.2.0.5
升级数据库到10.2.0.5 因是测试环境,不需要备份:如是生产系统,建议进行全备份后再进行升级操作,预防数据丢失造成不必要的影响. 步骤: 上传并解压补丁,安装前准备,安装补丁,预升级检查, ...
- Oracle 10gR2 & 10.2.0.5 的百度网盘下载地址 :)
如题: https://pan.baidu.com/s/1eSI770m
- Oracle 10g DataGuard手记之基础配置
DataGuard为企业数据的高可用性,数据安全以及灾难恢复提供支持,一般由一个primary db与几个物理或逻辑standby db组成一个DataGuard配置. 系统环境 操作系统为windo ...
随机推荐
- Ajax的特点
[传统提交方式] 客户端提交请求后,服务器会找到相应的资源进行执行.并将执行结果重新发送给客户端.客户端接收到服务器端的响应会进行重新解释并显示.此时的页面是一个全新的页面. [Ajax提交] 客户端 ...
- input输入框的readonly属性-----http://www.w3school.com.cn/tags/tag_input.asp
http://www.w3school.com.cn/tags/tag_input.asp input输入框的readonly属性 查询方法: 1.先找官方的文档,api 2.官方的有看不懂的再百度相 ...
- UVALive 6507 Passwords
Passwords Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Original ...
- 【HDOJ6118】度度熊的交易计划(费用流)
题意: 度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题: 喵哈哈村以及周围的村庄可以看做是一共由n个片区,m条公路组成的地区. 由于生产能力的区别,第i个片区能够花费a[i]元生产1个 ...
- 【BZOJ3669】魔法森林(LCT)
题意:有一张无向图,每条边有两个权值.求选取一些边使1和n连通,且max(a[i])+max(b[i])最小 2<=n<=50,000 0<=m<=100,000 1<= ...
- 解决Android Studio2.0不能使用HttpClient
在build.gradle中的android {}中加上useLibrary 'org.apache.http.legacy'
- linux shell 获得当前程序的路径
filepath=$(cd "$(dirname "$0")"; pwd) 脚本文件的绝对路径存在了环境变量filepath中,可以用 echo $filepa ...
- POJ 3276 Face The Right Way【枚举】
题意: N头牛站成一条线,分别朝向前后两个方向,机器可以使连续K头牛同时改变方向,要求所有牛最终朝向前方,问机器操作次数的最小值及此时的最小K值. 分析: 第一眼看感觉是二分搜索K,再仔细读题, pl ...
- Ubuntu 16.04安装TortoiseSVN(基于CrossOver)
基于CrossOver的TortoiseSVN有如下缺点: 1.不能像Windows下实现右键菜单提交,但是可以通过TortoiseSVN实现迁出代码. 可以解决的问题: 1.可以通过Tortoise ...
- spring依赖注入中获取JavaBean
一.这个接口有什么用? 当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得ApplicationContext中的所有bean.换句话说,就是这个类可以 ...