create or replace function fn_CDXH (CDXH in varchar2 )
return varchar2 is Results varchar2(4000);temp varchar2(4000);
begin
    Results := CDXH;
    select FCDXH into temp from t_admin_rms_cd where CDXH= CDXH;
    while(temp <> 'ROOT')
        loop
            Results := temp || ',' || Results;
            select FCDXH into temp from t_admin_rms_cd where CDXH=temp;
        end loop;
    return Results;
end fn_CDXH;select fn_CDXH(c.CDXH) as pxl,c.* from t_admin_rms_cd c;
  
  为什么我调用的时候无任何数据展示 、?

解决方案 »

  1.   

     最上级菜单 fcdxh 是 ‘ROOT’
      

  2.   

    -- 养成这个习惯:将字段名和变量名区分开来!
    where CDXH= CDXH;-- 上面这个:会让人摸不着头脑!
      

  3.   

    create or replace function fn_CDXH (BLCDXH in varchar2 )
    return varchar2 is Results varchar2(4000);temp varchar2(4000);
    begin
        Results := BLCDXH;
        select FCDXH into temp from t_admin_rms_cd where CDXH= BLCDXH;
        while(temp <> 'ROOT')
            loop
                Results := temp || ',' || Results;
                select FCDXH into temp from t_admin_rms_cd where CDXH=temp;
            end loop;
        return Results;
    end fn_CDXH;
      

  4.   


    -- 如果我定义一个与某个字段相关的变量,我习惯在字段名前加个v_
    -- 例如:emp表的sal字段,我要定义这个字段相关的变量,我会定义名为:v_sal 的变量!
      

  5.   

       没有数据 我是第一次弄oracle  以前弄的sql的 所以有些方面不太懂 
      

  6.   


      sql  里面可以加@ oracle好像不可以 命名自己就乱了   不过语句好像是没错的  
      可是达不到我要的结果 
      

  7.   


    create or replace function fn_CDXH (CDXH in varchar2 )
    return varchar2 is Results varchar2(4000);temp varchar2(4000);
    begin
      Results := CDXH;
      select FCDXH into temp from t_admin_rms_cd where CDXH= CDXH;
      dbms_output.put_line('temp===='||temp);  -- 输出看看这有数据没?
      while(temp <> 'ROOT')
      loop
      Results := temp || ',' || Results;
      dbms_output.put_line('Results===='||Results);  -- 输入看看这有数据没?
      select FCDXH into temp from t_admin_rms_cd where CDXH=temp;
      end loop;
      return Results;
    end fn_CDXH;
      

  8.   

        好像是我的变量的问题 
       oracle  不可以用字符串进行排序么?
    while(temp is not null and trim(temp) <> '' and temp <> 'ROOT')
      这样写 为什么不可以啊?
      

  9.   

    '' ;NULL ; 都是空
    空只能以is null 或 is not null 判断
    trim(temp) <> '' 这样写是不对的。
      

  10.   

    顶2楼,将
    create or replace function fn_CDXH (CDXH in varchar2 )
    中的in参数CDXH 改为CDXH_I