本帖最后由 this__ 于 2011-08-13 20:05:34 编辑

解决方案 »

  1.   

    单独执行这一条有几行显示
    select t.left ,t.right  from filetree t where t.fileid=fileid;
      

  2.   

    只有一条结果,因为fileid是主键。
      

  3.   


    只有一条结果,因为fileid是主键。
      

  4.   

    将参数fileid另外改一个名字,不要和表里字段名一样。
      

  5.   

    --正解,这属于写存储过程常犯的错误,参数名字和表中字段名字起的一样,导致oracle在执行的时候,将参数名字当做表名使用。
    select t.left ,t.right into Lnum ,Rnum from filetree t where t.fileid=fileid;
    --就是上面这句话中的 = 号后面的参数名称问题。create or replace function countLayer(i_fileid in varchar2) return number is
    Lnum filetree.left%type;
    Rnum filetree.right%type;
    layerNum number;
    begin
         select t.left ,t.right into Lnum ,Rnum from filetree t where t.fileid=i_fileid;
         select count(*) into layerNum from filetree f where f.left <= Lnum and f.right >= Rnum;
         return layerNum;
    end;