`
123003473
  • 浏览: 1073242 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java.sql.SQLException: ORA-01436: 用户数据中的 CONNECT BY 循环

 
阅读更多
SELECT r1.region_id,parent_id
          FROM cnl_region r1
         WHERE r1.region_id =1         START WITH r1.region_id = 1
        CONNECT BY PRIOR r1.region_id = r1.parent_id

在运行上面的SQL语句时它会报ORA-01436的错误,报这个错误原因是因为产生了循环。后来查找我的数据发现,数据region_id为1的parent_id为24684,而region_id为24684的parent_id为1,这样就产生了循环后来我把数据改过来就运行正常了。

不改变数据将下面的SQL语句改为让它不产生循环

SELECT r1.region_id,parent_id
          FROM cnl_region r1
         WHERE r1.region_id =1         START WITH r1.region_id = 1
        CONNECT BY NOCYCLE PRIOR r1.region_id = r1.parent_id




--start with ... connect by 层次查询的用法
--建表语句
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;

在执行select level语句的时候,报如下错误:ORA-01436: CONNECT BY loop in user data
解决方案:
将第一条数据中的parent_id改为null,否则loop循环找parent_id就找不到了!

【转载地址】http://blog.csdn.net/weikaifenglove/article/details/4206979
分享到:
评论

相关推荐

    ORA-01436 与 层次查询CONNECT BY

    开发遇到一个报错 ORA-01436: CONNECT BY loop in user data (ORA-01436: 用户数据中的 CONNECT BY 循环)。 1. 报错原因 根据网上的资料,产生这个错误的原因是数据形成了循环。例如下面这个语句: SELECT r1....

    Connect Oracle

    在IT行业中,数据库管理系统是数据存储和管理的关键组件,而Oracle是全球领先的数据库解决方案之一。"Connect Oracle"这个主题涉及到如何与Oracle数据库建立连接,这通常是任何需要与Oracle交互的应用程序的第一步。...

    ORACLE 驱动(无效的)

    Oracle驱动是Oracle数据库连接Java应用程序的关键组件,它允许Java程序通过JDBC(Java Database Connectivity)接口与Oracle数据库进行交互。然而,在你所描述的问题中,标题提到“ORACLE 驱动(无效的)”,这可能...

    基于Weblogic连接池获取SQL语句的实现.pdf

    在数据库操作中,对数据库的增删改查等操作几乎都会涉及到SQL语句的执行,特别是在调试和诊断问题时,了解系统运行期间执行了哪些SQL语句非常关键。在常规方式下,通常需要修改程序代码通过添加调试日志来获得SQL...

    myeclipse下配置jdbc驱动(oracle)1

    import java.sql.SQLException; public class ConnectOracle { private Connection con; private String user = "scott"; private String password = "18233188050"; private String className = "oracle.jdbc....

    java 用jdbc方式以 sys账号连接oracle数据的问题

    - **Oracle服务名**:在URL中指定的服务名应与Oracle TNSNAMES.ORA配置文件中的定义一致,或者使用Easy Connect字符串直接指定主机、端口和服务名。 - **环境变量**:确保正确设置了TNS_ADMIN环境变量,指向包含...

    java 连接oracle代码

    `<数据库主机>`是运行Oracle实例的服务器地址,`<端口号>`通常是1521,`<服务名>`是Oracle服务的名称,可以在tnsnames.ora文件中找到或者直接使用Easy Connect字符串格式。 `Class.forName()`方法用于加载Oracle ...

    oracle 存储过程 databaselink 收集

    在Java中,可以通过以下方式调用该存储过程: ```java package com.hyq.src; public class TestProcedureTWO { public static void main(String[] args) { String driver = "oracle.jdbc.driver.OracleDriver"; ...

    java基于JDBC连接Oracle 11g Release2实例分析

    在Java编程中,JDBC(Java Database Connectivity)是用于与各种数据库进行交互的标准API。本篇文章将深入探讨如何使用JDBC连接Oracle 11g Release 2数据库,并提供一个具体的实例来解决可能遇到的问题。 首先,...

Global site tag (gtag.js) - Google Analytics