CREATE or replace    function   bustemp.funGetAllModuleFunctions(id varchar2(30))
returns AllModuleFunctions table(ModuleFunctionID varchar2(30) primary key not null,
                                  SuperModuleFunctionID varchar2(30) ,Depth numeric(2,0),
                                  ModuleFunctionName varchar2(30),SNInNode numeric(2,0) )
as
begin
     declare ModuleFunctions table(ModuleFunctionID varchar2(30) primary key not null,
                                    SuperModuleFunctionID varchar2(30) ,Depth numeric(2,0),
                                    ModuleFunctionName varchar2(30),SNInNode numeric(2,0) )
     declare Depth numeric(2,0)
     declare ModuleFunctionID varchar2(30)
     
     --初始化ModuleFunctionID,Depth   
     select Depth:=1
     select ModuleFunctionID:=id
     if len(ltrim(ModuleFunctionID))=0 
          select ModuleFunctionID=ModuleFunctionID from LibModuleFunction where len(ltrim(SuperModuleFunctionID))=0 or SuperModuleFunctionID is null
     --初始化第一个节点  
     insert into ModuleFunctions 
     select ModuleFunctionID,SuperModuleFunctionID,Depth,ModuleFunctionName,SNInNode from LibModuleFunction where ModuleFunctionID=ModuleFunctionID
     
     --展开所有子节点
     while exists(select * from  LibModuleFunction where 
                  SuperModuleFunctionID in(select  ModuleFunctionID from ModuleFunctions where Depth=Depth))
     begin        
          
          insert into ModuleFunctions 
          select ModuleFunctionID,SuperModuleFunctionID,Depth+1,ModuleFunctionName,SNInNode from LibModuleFunction
          where SuperModuleFunctionID in(select  ModuleFunctionID from ModuleFunctions where Depth=Depth)          
          select Depth:=Depth+1
     end
     
     insert into AllModuleFunctions
     select * from ModuleFunctions
     return
end

解决方案 »

  1.   

    declare
     Depth numeric(2,0);
    ModuleFunctionID varchar2(30);
    begin
    --初始化ModuleFunctionID,Depth   
    ......
      

  2.   

    2;PLS-00103:出现符号“TABLE”在需要下例之一时:@%;is authidascluster....
      

  3.   

    下载:
    pl/sql edit
    pl/sql developer
      

  4.   

    returns AllModuleFunctions table(ModuleFunctionID varchar2(30) primary key not null,
    返回一个表?能这样用么,没见过这样的用法
      

  5.   

    那我返回returns AllModuleFunctions 
    然后再定义这个表变量呢?
    怎么样,可以吗?
    ORACLE没有理由不支持表变量吧
      

  6.   

    什么叫表变量??
    oracle中可以支持pl/sql表,而没有“表变量”