[ 登录 ][ 注册 ] 天极传媒: 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

有关PIPE函数的例子

作者: 杨廷琨,  出处:blog, 责任编辑: 王晓晨, 
2008-07-25 08:00
  本文介绍了在研究树形查询,通过PL/SQL实现CONNECT BY NOCYCLE的时候,使用PIPE函数的最佳解决方法。

  很早之前,大概2、3年以前,就看到过PIPE函数,当时由于没有什么具体的需求需要使用这种函数,所以就没有深究。

  同样是由于没有具体的需求,也就没有写过关于这种函数的例子。因为我认为为了PIPE函数而写PIPE函数的意义不大,而当时又没有找到除了PIPE函数而使用其他方法解决不了的案例,所以一直没有描述过这种函数。

  这两天在研究树形查询,自己通过PL/SQL实现CONNECT BY NOCYCLE的时候,意外的碰到了一种情况,感觉使用PIPE函数是最佳解决方法,于是有了这篇文章。

  由于这篇文章的例子来源于下面两篇文章,所以单独看这篇文章可能无法理解文章中例子的含义,建议先阅读下面两个链接,然后再看这篇文章。

  10g树形查询新特性CONNECT_BY_ISCYCLE的9i实现方式(一):http://database.ctocio.com.cn/tips/420/8232920.shtml

  10g树形查询新特性CONNECT_BY_ISCYCLE的9i实现方式(二):http://database.ctocio.com.cn/tips/467/8232967.shtml

  10g新增了一些树形查询的伪列和操作,使得树形查询的功能更加强大。而9i中由于没有对应的功能,可能会导致很多问题很难实现。于是写了几篇文章描述10g中的一些功能如何在9i中实现。

  其中最难实现的功能莫过于CONNECT BY NOCYCLE了。由于必须自己来实现树形查询的功能,因此选择通过PL/SQL编写函数,通过递归调用的方式实现CONNECT BY NOCYCLE的功能。又因为PL/SQL获取的是一个ID的列表,因此还需要将其转为为表函数关联原表来获取详细的记录。

  一个简单的例子如下:

SQL> CREATE TABLE T_TREE
  2 (
  3 PK NUMBER PRIMARY KEY,
  4 ID NUMBER,
  5 FATHER_ID NUMBER,
  6 NAME VARCHAR2(30)
  7 );

  表已创建。

SQL> INSERT INTO T_TREE VALUES (1, 1, 0, 'A');
  已创建 1 行。
  SQL> INSERT INTO T_TREE VALUES (2, 2, 1, 'BC');
  已创建 1 行。
  SQL> INSERT INTO T_TREE VALUES (3, 3, 1, 'DE');
  已创建 1 行。
  SQL> INSERT INTO T_TREE VALUES (4, 4, 1, 'FG');
  已创建 1 行。
  SQL> INSERT INTO T_TREE VALUES (5, 5, 2, 'HIJ');
  已创建 1 行。
  SQL> INSERT INTO T_TREE VALUES (6, 6, 4, 'KLM');
  已创建 1 行。
  SQL> INSERT INTO T_TREE VALUES (7, 7, 6, 'NOPQ');
  已创建 1 行。
  SQL> INSERT INTO T_TREE VALUES (8, 0, 0, 'ROOT');
  已创建 1 行。
  SQL> INSERT INTO T_TREE VALUES (9, 4, 7, 'FG');
  已创建 1 行。
  SQL> COMMIT;

  

共5页。 1 2 3 4 5 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。

邮件订阅