Connect by得出的结果不能进行insert,也不能用来进行Join ?这个是为什么?
例如
insert into a
select * from b
connect by parent = prior child为什么总是死掉?或者说这个操作会很花费时间?如果光select得到结果5秒钟,insert加入以后就进程死掉.还有
select * from
(select * from b
connect by parent = prior child ) t
left outer join s
on t.col1 = s.col1为什么这样操作也不可以?,同上问题.

解决方案 »

  1.   

    oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询
    connect by 子句,它可以对具有家族树结构的分枝进行排序
      

  2.   

    首先回答你:
    Connect by得出的结果,是能进行insert和outer join的!
    至于你说的死掉,这个要看你connect BY 递归是不是耗时
    还有,递归本来就比较耗费时间
      

  3.   

    可以吗?那我的递归查询查询的时候使用5s (5秒钟,速度不慢了啊)
    但是当你要insert的时候,或者你要outer join的时候就不行了
      

  4.   

    做了实验,是可以的create table A
    (
      ID     NUMBER,
      NAME   VARCHAR2(10),
      PARENT NUMBER
    )然后插入几条数据
    1 a
    2 a1 1
    3 a2 1
    4 a11 2
    5 a12 2
    6 a3 1执行以下SQL可顺利完成create table b as
    select * from a
    connect by parent = prior id怀疑您的问题:
    connect by 一般是 和 start with  一起使用。  否则会穷举递推出很多杂乱的数据。
    是否漏了 start with
      

  5.   

    不是的,我说明一下:
    如果没有Insert into 表A 这一句,那么整个SQL运行时间是0.3s
    还有一点不知道有没有关系,select * from 表B@DBlink connect By *** Start with ***
    我使用了link,所以我怀疑是不是这个问题.
      

  6.   

    insert into a
    select * from b
    connect by parent = prior child死循环,递归操作