数据库异常---ORA-01436: 用户数据中的 CONNECT BY loop in user data 循环
发布日期:2021-06-29 17:56:06 浏览次数:2 分类:技术文章

本文共 2790 字,大约阅读时间需要 9 分钟。

数据库

ORA-01436: 用户数据中的 CONNECT BY  loop in user data  循环
技术qq交流群:JavaDream:251572072
 教程下载,在线交流:创梦IT社区:____以前的网站现在不弄了,抱歉
-------------------------------------------------------
1.
在使用start with ... connect by 层次查询的用法报错:ORA-01436: CONNECT BY loop in user data
产生这个错误的原因,产生了死循环,解决办法有两种如下:
2.产生死循环的原因:
  比如查找数据发现,数据region_id为1的parent_id为24684,而region_id为24684的parent_id为1,
  这样就产生了循环后来我把数据改过来就运行正常了。
-------------------------------------------------------------------
1、使用 connect by nocycle  (不推荐),该方法得不到正确的结果。
2、修改基础数据 。
create table automobiles(
       part_id number(5)
         constraint pk_auto_part_id primary key,
       parent_id number(5)
         constraint fk_auto_ppid_ references  automobiles(part_id),
       part_cname varchar2(30) not null,
       part_ename varchar2(30) not null,
       mp_cost number(9,2),
       desribe varchar2(20)    
);
--插入数据
insert into automobiles values( 1,1,'汽车','mobile',84321.99,'Assembly');
insert into automobiles values( 2,1,'车身','bodywork',19892.99,'Manufacture');
insert into automobiles values( 3,1,'发送机','engine',42128,'Purchase');
insert into automobiles values( 4,1,'附件','attached',15212,'Assembly');
insert into automobiles values( 5,2,'保险杠','bumper',4812.95,'Purchase');
insert into automobiles values( 6,2,'底盘','chassis',12795.11,'Manufacture');
insert into automobiles values( 7,2,'行李箱','Boot',812.11,'Manufacture');
insert into automobiles values( 8,6,'车轮','Wheel',2062.2,'Manufacture');
insert into automobiles values( 9,6,'挡泥板','Mudguard',990,'Manufacture');
insert into automobiles values( 10,8,'轮胎','Tyre',300,'Purchase');
insert into automobiles values( 11,3,'发送机盘','Bonnet',3212,'Manufacture');
insert into automobiles values( 12,3,'活塞','Piston',1112.2,'Manufacture');
insert into automobiles values( 13,3,'汽化器','Carburetter',712.29,'Manufacture');
insert into automobiles values( 14,4,'变速器','Gearbox',5712.25,'Manufacture');
insert into automobiles values( 15,4,'仪表板','Dashboard',538.92,'Manufacture');
insert into automobiles values( 16,14,'制动器','Carburetter',712.29,'Manufacture');
insert into automobiles values( 17,14,'变速杆','Gearshift',2001,'Manufacture');
insert into automobiles values( 18,17,'传动轴','Shaft',1101,'Manufacture');
insert into automobiles values( 19,15,'里程表','Milometer',350.28,'Purchase');
/
--分层sql脚本语句练习
select level,part_id,parent_id,part_cname,part_ename,mp_cost,desribe
from automobiles
start with part_id=1
connect by prior part_id=parent_id
order by level;
--缩进显示
select level,
    lpad(' ',2*level-1)||part_cname||' '||part_ename as partName
from automobiles
start with part_id=1
connect by prior part_id=parent_id
order by level;

上面两个sql执行的时候都会报ORA-01436: CONNECT BY loop in user data

解决方案入下:
方案1:在connect by  后面加上nocycle  ,不循环。得到的结果可能就不是你想要的了。
方案2:把第一条记录的parent_id 置为null ,这样做就不会产生死循环。
--------------------------------------------------------------------------------------

 

转载地址:https://credream.blog.csdn.net/article/details/15470525 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:数据库学习笔记---connect by的简单用法
下一篇:网络技巧---能上网但是网页打不开,网页打开速度慢解决方法

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月21日 18时50分42秒