乍看 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|的更多相关文章

  1. 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 ...

  2. 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位( ...

  3. 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  ...

  4. 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 ...

  5. 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端口监控程 ...

  6. 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. ...

  7. 【Oracle】10.2.0.1升级到10.2.0.5

    升级数据库到10.2.0.5   因是测试环境,不需要备份:如是生产系统,建议进行全备份后再进行升级操作,预防数据丢失造成不必要的影响.   步骤: 上传并解压补丁,安装前准备,安装补丁,预升级检查, ...

  8. Oracle 10gR2 & 10.2.0.5 的百度网盘下载地址 :)

    如题: https://pan.baidu.com/s/1eSI770m

  9. Oracle 10g DataGuard手记之基础配置

    DataGuard为企业数据的高可用性,数据安全以及灾难恢复提供支持,一般由一个primary db与几个物理或逻辑standby db组成一个DataGuard配置. 系统环境 操作系统为windo ...

随机推荐

  1. history.go history.back()

    转http://www.mikebai.com/Article/2009-11/757.html <input type=button value=刷新 onclick="window ...

  2. 19-看图理解数据结构与算法系列(Radix树)

    Radix树 Radix树,即基数树,也称压缩前缀树,是一种提供key-value存储查找的数据结构.与Trie不同的是,它对Trie树进行了空间优化,只有一个子节点的中间节点将被压缩.同样的,Rad ...

  3. 易维信(EVTrust)支招五大技巧识别钓鱼网站

    网上购物和网上银行凭借其便捷性和通达性,在互联网上日渐流行.在互联网上,你可以随时进行转账汇款或进行交易.据艾瑞咨询发布<2008-2009年中国网上支付行业发展报告>显示:中国互联网支付 ...

  4. Mac 共享无线网络

    dock栏启动『设置』进入下一步.   进入设置后,点击『共享』进入下一步.   进入共享后 1.选择左边框中『互联网共享』,就会看到截图右边的样子 2.『共享以下来源链接』一项选择『以太网』(默认应 ...

  5. MVC系统学习6—Filter

    Mvc的过滤器是特性类,可以使我们在执行Action之前,执行Action之后,执行Action发生异常时,编写相关的处理代码实现某些逻辑.下面是四个基本的Filter接口. 上面这四个基本的Filt ...

  6. 洛谷 P2285 BZOJ 1207 [HNOI2004]打鼹鼠

    题目描述 鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的.根据这个特点阿牛编写了一个打鼹鼠的游戏:在一个n*n的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气. ...

  7. poj1984并查集的相对偏移

    #include<stdio.h>//典型题 #include<math.h> #define N 40010 struct node { int x,y,z; }pre[N] ...

  8. jQuery的观察者模式详解 转载

    jQuery的观察者模式详解 投稿:hebedich 本文主要是介绍了jQuery中on方法及trigger方法,以及围绕这个方法来体验的观察者模式,是篇非常不错的文章,对我们理解观察者模式很有帮助. ...

  9. Thinkphp5.0 的使用模型Model删除数据

    Thinkphp5.0 的使用模型Model删除数据 一.使用destory()删除数据 //删除id为3的记录 $res = User::destroy(3); //返回影响的行数 dump($re ...

  10. 获取webview的截图

    设置webview可以获取截图: webView.setDrawingCacheEnabled(true); 当要进行多次截图时,先要清除之前的缓存: webview.setDrawingCacheE ...