返回顶部
关闭软件导航
位置:首页 > 资讯 > 其他>下面的是oracle10g新增特性

  3.2 CONNECT_BY_ISLEAF

  在oracle9i的时候,查找指定root 下的叶子节点,是很复杂的,oracle10g引入了一个新的函数,connect_by_isleaf,如果行的值为0 表示不是叶子节点,1表示是叶子节点。

  找出s_emp 中找出manager_id=2 开始的行为root,表示叶子节点和非叶子节点,那么语句如下:

无限层次树形笔记本

  select level,

  id,

无限层次树形笔记本

  manager_id,

  last_name,

  title,

无限层次树形笔记本

  (case --使用case表达式判断是否是叶子节点

  when connect_by_isleaf = 1 then

  叶子

  else

  不是叶子

无限层次树形笔记本   end) isleaf

  from s_emp

  start with manager_id = 2

  connect by prior id = manager_id;

  3.3 CONNECT_BY_ISCYCLE和NOCYCLE关键字

  如果从root 节点开始找其子孙,找到一行,结果发生和祖先互为子孙的情况,则发生循环,oracle会报ORA-01436: CONNECT BY loop in user data,在9i 中只能将发生死循环的不加入到树中或删除,在10g中可以用nocycle 关键字加在connect by之后,避免循环的参加查询操作。并且通过connect_by_iscycle得到哪个节点发生循环。0表示未发生循环,1表示发生了循环,如:

  create table family1(

  fatherid number,

  childid number

  );

  insert into family1 values(null,1);

无限层次树形笔记本   insert into family1 values(1,2);--父节点为1

  insert into family1 values(1,3);

  insert into family1 values(2,4);--发生循环

  insert into family1 values(4,1);--子节点为1

  insert into family1 values(4,5);

  commit;

  select connect_by_iscycle, fatherid,childid,sys_connect_by_path(childid,/)

  from family1

  start with fatherid is null

  connect by nocycle prior childid=fatherid;

  结果是:

  3.4 CONNECT_BY_ROOT

如果您觉得 下面的是oracle10g新增特性 这篇文章对您有用,请分享给您的好友,谢谢
文章地址:https://www.tianxianmao.com/article/other/xmdsoraclegxztx.html
解放双手无尽可能,有问题添加天线猫微信