`
tangqi609567707
  • 浏览: 36329 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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

SQL code 
--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/archive/2009/05/21/4206979.aspx

分享到:
评论

相关推荐

    ORA-01436 与 层次查询CONNECT BY

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

    oracle中用户连接问题.docx

    在Oracle数据库系统中,用户连接问题是一个常见的管理任务,特别是在多用户环境中。本文将详细解释如何查看和管理Oracle中的用户连接,以及如何获取客户端的IP地址。 首先,要查看当前Oracle数据库中的用户连接,你...

    Oracle 11GR2的递归WITH子查询方法

    与传统的`CONNECT BY`层次查询相比,递归WITH子查询提供了更直观的语法,更容易理解和调试,同时也支持更复杂的逻辑,比如在递归过程中进行计算、应用条件等。 总的来说,Oracle 11GR2的递归WITH子查询为处理层级...

    OracleEBS开发汇总文档

    - **方法**: 通过循环遍历数据块中的每一项。 - **应用场景**: 数据处理或分析。 29. **LOV动态确保从块记录唯一** - **方法**: 在LOV查询中加入条件限制。 - **应用场景**: 避免数据冗余。 30. **Form实现...

    学习SQL常用方法

    在执行 Connect By 语句时,如果出现循环关系,系统将抛出 ORA-01436 错误。可以使用 NOCYCLE 语句来避免循环关系。 查询命令:select CONNECT_BY_ISCYCLE, dirindex, fatherindex, RPAD(' ',2*(LEVEL-1)) || ...

    oracle常用命令大全

    - `CONNECT`:连接到数据库,格式为`CONNECT username/password@database`。 - `SPOOL`:将SQL*Plus的输出重定向到文件,如`SPOOL filename`。 - `QUIT`:退出SQL*Plus。 - `\t`:显示当前时间。 - `\d`:显示...

    Oracle经典教程4——表空间和数据库对象

    然后为SCOTT用户的EMP表创建同义词`MyEmp`,最后通过`MyEmp`同义词查询数据。 ```sql CREATE USER XiaoMei IDENTIFIED BY XiaoMei; GRANT CONNECT TO XiaoMei; GRANT RESOURCE TO XiaoMei; GRANT CREATE SYNONYM TO...

    sql面试题\oracle面试题目

    - `CONNECT`权限允许用户连接到数据库。 #### 39. 在Tablespace中增加数据文件 - 使用`ALTER DATABASE ADD DATAFILE ... TO TABLESPACE ...`命令。 #### 40. 变动数据文件的大小 - 使用`ALTER DATABASE DATAFILE ....

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 层次结构模型: 层次结构模型实质上是一种有根结点的定向有序树,IMS...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    2.4 数据类型 PHP支持整数、浮点数、字符串、数组和对象。变量类型通常不由程序员决定而由PHP运行过程决定(真是好的解脱!)。但是类型也可以被函数cast或者settype()明确的设定。 数值 数值类型可以是整数或是...

    ORACLE9I函数帮助(英文)

    7. **连接和分组函数**:`CONNECT_BY_ROOT`用于层次查询,`GROUP BY`和`ROLLUP`用于数据分组,`UNION`和`INTERSECT`用于合并或交集不同查询的结果,这些函数在数据汇总和分析中发挥重要作用。 8. **系统信息函数**...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    10.3.1 一个CONNECT BY的例子 274 10.3.2 使用RSF的例子 275 10.3.3 RSF的限制条件 276 10.3.4 与CONNECT BY的不同点 276 10.4 复制CONNECT BY的功能 277 10.4.1 LEVEL伪列 278 10.4.2 SYS_CONNECT_BY_PATH...

Global site tag (gtag.js) - Google Analytics