查看: 1803|回复: 9

发现个CTE的bug 版本11.2.0.1

[复制链接]
论坛徽章:
289
蛋疼蛋
日期:2013-03-29 13:46:58优秀写手
日期:2013-12-24 06:00:12福特
日期:2014-02-17 17:30:59生肖徽章:兔
日期:2012-05-24 19:03:36SQL极客
日期:2013-12-09 14:13:35ITPUB季度 技术新星
日期:2014-02-24 11:00:06IT宝贝
日期:2014-08-27 10:32:17马上加薪
日期:2014-08-05 09:18:33SQL数据库编程大师
日期:2016-01-13 10:30:43玉石琵琶
日期:2014-03-04 16:46:07
发表于 2013-11-29 14:25 | 显示全部楼层 |阅读模式
今天干活遇到这个问题,然后我用scott能重现这个bug
这个版本CTE好像bug很多啊

测试一 触发bug
with t as
(select e.* from emp e,dept d where e.deptno=d.deptno and d.dname='SALES')
select job dim,count(distinct empno) measure from t group by job
union all
select e.ename,count(distinct t.empno) from t,emp e where t.mgr=e.empno group by e.ename


with t as
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 23280
Session ID: 149 Serial number: 1437


ERROR:
ORA-03114: not connected to ORACLE


测试二 没触发
with t as
(select /*+inline*/e.* from emp e,dept d where e.deptno=d.deptno and d.dname='SALES')
select job dim,count(distinct empno) measure from t group by job
union all
select e.ename,count(distinct t.empno) from t,emp e where t.mgr=e.empno group by e.ename

DIM           MEASURE
---------- ----------
CLERK               1
MANAGER             1
SALESMAN            4
BLAKE               5
KING                1

5 rows selected.

测试三 没触发
with t as
(select /*+materialize*/e.* from emp e,dept d where e.deptno=d.deptno and d.dname='SALES')
select job dim,count(distinct empno) measure from t group by job

DIM           MEASURE
---------- ----------
CLERK               1
MANAGER             1
SALESMAN            4

3 rows selected.

with t as
(select /*+materialize*/e.* from emp e,dept d where e.deptno=d.deptno and d.dname='SALES')
select e.ename dim,count(distinct t.empno) measure from t,emp e where t.mgr=e.empno group by e.ename

DIM          MEASURE
--------- ----------
BLAKE              5
KING               1

2 rows selected.




论坛徽章:
289
蛋疼蛋
日期:2013-03-29 13:46:58优秀写手
日期:2013-12-24 06:00:12福特
日期:2014-02-17 17:30:59生肖徽章:兔
日期:2012-05-24 19:03:36SQL极客
日期:2013-12-09 14:13:35ITPUB季度 技术新星
日期:2014-02-24 11:00:06IT宝贝
日期:2014-08-27 10:32:17马上加薪
日期:2014-08-05 09:18:33SQL数据库编程大师
日期:2016-01-13 10:30:43玉石琵琶
日期:2014-03-04 16:46:07
 楼主| 发表于 2013-11-29 14:26 | 显示全部楼层
执行计划没问题,hint都生效,就没贴

使用道具 举报

回复
论坛徽章:
289
蛋疼蛋
日期:2013-03-29 13:46:58优秀写手
日期:2013-12-24 06:00:12福特
日期:2014-02-17 17:30:59生肖徽章:兔
日期:2012-05-24 19:03:36SQL极客
日期:2013-12-09 14:13:35ITPUB季度 技术新星
日期:2014-02-24 11:00:06IT宝贝
日期:2014-08-27 10:32:17马上加薪
日期:2014-08-05 09:18:33SQL数据库编程大师
日期:2016-01-13 10:30:43玉石琵琶
日期:2014-03-04 16:46:07
 楼主| 发表于 2013-11-29 14:33 | 显示全部楼层
本帖最后由 demonat 于 2013-11-29 15:05 编辑

最简化触发bug的sql
with t as
(select e.* from emp e,dept d where e.deptno=d.deptno and d.dname='SALES')
select count(distinct empno) measure from t  where sal<=2000
union all
select count(distinct empno) measure from t where sal>2000

with t as
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 23172
Session ID: 125 Serial number: 4717


ERROR:
ORA-03114: not connected to ORACLE


这样就可以
with t as
(select e.* from emp e,dept d where e.deptno=d.deptno and d.dname='SALES')
select * from t  where sal<=2000
union all
SELECT * from t where sal>2000

     EMPNO ENAME     JOB               MGR HIREDATE                  SAL       COMM     DEPTNO
---------- --------- ---------- ---------- ------------------ ---------- ---------- ----------
      7499 ALLEN     SALESMAN         7698 20-FEB-81                1600        300         30
      7521 WARD      SALESMAN         7698 22-FEB-81                1250        500         30
      7654 MARTIN    SALESMAN         7698 28-SEP-81                1250       1400         30
      7844 TURNER    SALESMAN         7698 08-SEP-81                1500          0         30
      7900 JAMES     CLERK            7698 03-DEC-81                 950                    30
      7698 BLAKE     MANAGER          7839 01-MAY-81                2850                    30

6 rows selected.



下面这个最简
with t as
(select /*+materialize*/e.* from emp e)
select count(distinct empno) measure from t  where sal<=2000
union all
select count(distinct empno) measure from t where sal>2000

with t as
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 23600
Session ID: 149 Serial number: 1507


ERROR:
ORA-03114: not connected to ORACLE




去掉 count 或者 distinct 都没问题
with t as
(select /*+materialize*/e.* from scott.emp e)
select distinct empno measure from t  where sal<=2000
union all
select distinct empno measure from t where sal>2000

with t as
(select /*+materialize*/e.* from scott.emp e)
select count( empno) measure from t  where sal<=2000
union all
select count( empno)measure from t where sal>2000


使用道具 举报

回复
论坛徽章:
289
蛋疼蛋
日期:2013-03-29 13:46:58优秀写手
日期:2013-12-24 06:00:12福特
日期:2014-02-17 17:30:59生肖徽章:兔
日期:2012-05-24 19:03:36SQL极客
日期:2013-12-09 14:13:35ITPUB季度 技术新星
日期:2014-02-24 11:00:06IT宝贝
日期:2014-08-27 10:32:17马上加薪
日期:2014-08-05 09:18:33SQL数据库编程大师
日期:2016-01-13 10:30:43玉石琵琶
日期:2014-03-04 16:46:07
 楼主| 发表于 2013-11-29 14:39 | 显示全部楼层
本帖最后由 demonat 于 2013-11-29 14:39 编辑


解析就完蛋:
explain plan for with t as
(select /*+materialize*/e.* from emp e)
select count(distinct empno) measure from t  where sal<=2000
union all
select count(distinct empno) measure from t where sal>2000


ERROR:
ORA-03114: not connected to ORACLE

explain plan for with t as
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 22676
Session ID: 22 Serial number: 1337

悲剧

使用道具 举报

回复
论坛徽章:
289
蛋疼蛋
日期:2013-03-29 13:46:58优秀写手
日期:2013-12-24 06:00:12福特
日期:2014-02-17 17:30:59生肖徽章:兔
日期:2012-05-24 19:03:36SQL极客
日期:2013-12-09 14:13:35ITPUB季度 技术新星
日期:2014-02-24 11:00:06IT宝贝
日期:2014-08-27 10:32:17马上加薪
日期:2014-08-05 09:18:33SQL数据库编程大师
日期:2016-01-13 10:30:43玉石琵琶
日期:2014-03-04 16:46:07
 楼主| 发表于 2013-11-29 14:48 | 显示全部楼层
11.2.0.3 经测试没有

使用道具 举报

回复
论坛徽章:
289
蛋疼蛋
日期:2013-03-29 13:46:58优秀写手
日期:2013-12-24 06:00:12福特
日期:2014-02-17 17:30:59生肖徽章:兔
日期:2012-05-24 19:03:36SQL极客
日期:2013-12-09 14:13:35ITPUB季度 技术新星
日期:2014-02-24 11:00:06IT宝贝
日期:2014-08-27 10:32:17马上加薪
日期:2014-08-05 09:18:33SQL数据库编程大师
日期:2016-01-13 10:30:43玉石琵琶
日期:2014-03-04 16:46:07
 楼主| 发表于 2013-11-29 15:08 | 显示全部楼层
不知道跟这个有没有关联
http://www.itpub.net/thread-1829323-1-1.html

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2013-11-29 15:09 | 显示全部楼层
demonat 发表于 2013-11-29 15:08
不知道跟这个有没有关联
http://www.itpub.net/thread-1829323-1-1.html

我贴的这个不是递归的

使用道具 举报

回复
论坛徽章:
289
蛋疼蛋
日期:2013-03-29 13:46:58优秀写手
日期:2013-12-24 06:00:12福特
日期:2014-02-17 17:30:59生肖徽章:兔
日期:2012-05-24 19:03:36SQL极客
日期:2013-12-09 14:13:35ITPUB季度 技术新星
日期:2014-02-24 11:00:06IT宝贝
日期:2014-08-27 10:32:17马上加薪
日期:2014-08-05 09:18:33SQL数据库编程大师
日期:2016-01-13 10:30:43玉石琵琶
日期:2014-03-04 16:46:07
 楼主| 发表于 2013-11-29 15:11 | 显示全部楼层
本帖最后由 demonat 于 2013-11-29 15:12 编辑
〇〇 发表于 2013-11-29 15:09
我贴的这个不是递归的

我这个也不是递归sf,不过跟你贴的那个有点区别

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
484
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
发表于 2013-11-29 15:11 | 显示全部楼层
第一个小版本的问题确实会很多

使用道具 举报

回复
论坛徽章:
1088
金色在线徽章
日期:2007-04-25 04:02:08金色在线徽章
日期:2007-06-29 04:02:43金色在线徽章
日期:2007-03-11 04:02:02在线时间
日期:2007-04-11 04:01:02在线时间
日期:2007-04-12 04:01:02在线时间
日期:2007-03-07 04:01:022008版在线时间
日期:2010-05-01 00:01:152008版在线时间
日期:2011-05-01 00:01:342008版在线时间
日期:2008-06-03 11:59:43ITPUB年度最佳技术原创精华奖
日期:2013-03-22 13:18:30
发表于 2013-11-29 15:44 | 显示全部楼层
有BUG正常,毕竟不是稳定的版本啊

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表