CREATE function getTree(@idPart int,@idView int)returns @tabinfo table (OBJECT_ID int,CN_CID int,CN_PARID int)
as
 begindeclare @cid int
set @cid = 0insert @tabinfo
select OBJECT_ID2,@cid,OBJECT_ID1 from ITEMS_TREE where OBJECT_ID1 = @idPart while @@rowcount>0
     begin      set @cid = @cid + 1      insert @tabinfo
      select distinct OBJECT_ID2,@cid,OBJECT_ID1 
      from ITEMS_TREE as x join  @tabinfo as y
       on x.OBJECT_ID1=y.OBJECT_ID 
where y.CN_CID = @cid-1 and     endreturnend这是一个sql server 2000的函数,是查询一个零件树的结构ITEMS_TREE表存放零件和零件的父子关系(即链接关系),函数返回的是个表,哪位大哥能把这个函数转换成完整的oracle的函数小弟在此谢了

解决方案 »

  1.   


    Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
    创建示例表:
    CREATE TABLE TBL_TEST
    (
      ID    NUMBER,
      NAME  VARCHAR2(100 BYTE),
      PID   NUMBER                                  DEFAULT 0
    );
     
    插入测试数据:INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''1'''',''''10'''',''''0'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''2'''',''''11'''',''''1'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''3'''',''''20'''',''''0'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''4'''',''''12'''',''''1'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''5'''',''''121'''',''''2'''');
     
    从Root往树末梢递归
    select * from TBL_TEST
     start with id=1
     connect by prior id = pid
     
    从末梢往树ROOT递归
    select * from TBL_TEST
     start with id=5
     connect by prior pid = id
      

  2.   


    在Oracle中不需要函数的,Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用
    参考下面的方法
    Start with...Connect By子句递归查询一般用于一个表维护树形结构的应用。
    创建示例表:
    CREATE TABLE TBL_TEST
    (
      ID    NUMBER,    零件
      NAME  VARCHAR2(100 BYTE),   零件名
      PID   NUMBER  DEFAULT 0  父零件
    );
     
    插入测试数据:INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''1'''',''''10'''',''''0'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''2'''',''''11'''',''''1'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''3'''',''''20'''',''''0'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''4'''',''''12'''',''''1'''');
    INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(''''5'''',''''121'''',''''2'''');
     
    从Root往树末梢递归
    select * from TBL_TEST
     start with id=1
     connect by prior id = pid
     
    从末梢往树ROOT递归
    select * from TBL_TEST
     start with id=5
     connect by prior pid = id
      

  3.   

    我们的程序支持oracle和sqlserver两种数据库
    现在为了保证程序的一致性,必须写和sqlserver返回一个表的函数
    这个函数目前我就是不知道怎么返回一个表