SQL  >  select  job,ename  from  emp;  
 
JOB              ENAME  
---------  ----------  
CLERK          SMITH  
SALESMAN    ALLEN  
SALESMAN    WARD  
MANAGER      JONES  
SALESMAN    MARTIN  
MANAGER      BLAKE  
MANAGER      CLARK  
ANALYST      SCOTT  
PRESIDENT  KING  
SALESMAN    TURNER  
CLERK          ADAMS  
 
JOB              ENAME  
---------  ----------  
CLERK          JAMES  
ANALYST      FORD  
CLERK          MILLER  
 
已选择14行。  
 
SQL  >  create  or  replace  function  f_ename(jobno  in  varchar2)  
   2    return  varchar2  is  
   3      
   4    str_return  varchar2(200);  
   5    cursor  c_ename(v_jobno  varchar2)  is  select  ename  from  emp  where  job=v_jobno;  
   6    begin  
   7    for  str_temp  in  c_ename(jobno)  loop  
   8    str_return:=str_return  |  |str_temp.ename;  
   9    end  loop;  
 10    return  str_return;  
 11    end;  
 12    /  
 
函数已创建。  
 
SQL  >  select  f_ename(job)  from  (  
   2    select  distinct  job  from  emp);  
 
F_ENAME(JOB)  
---------------------------------------  
 SCOTT  FORD  
 SMITH  ADAMS  JAMES  MILLER  
 JONES  BLAKE  CLARK  
 KING  
 ALLEN  WARD  MARTIN  TURNER  
 
SQL  >  
加上job列:  
SQL  >  select  job,f_ename(job)  from  (  
   2    select  distinct  job  from  emp);  
 
JOB            F_ENAME(JOB)  
-------------------------------------------------------  
ANALYST  SCOTT  FORD  
CLERK  SMITH  ADAMS  JAMES  MILLER  
MANAGER  JONES  BLAKE  CLARK  
PRESIDENT  KING  
SALESMAN  ALLEN  WARD  MARTIN  TURNER  

解决方案 »

  1.   

    当然,将查询定义成一个游标,用游标把记录的结果串起来放到一个字符串中,然后返回这个字符串。
    function getValueOfTab(p_id in number) is return varchar2 is 
    str varchar(300);
    cursor c is select id,value from your_table where id = p_id;
    rst c%rowtype;
    begin 
    str = ' ';
    open c
    loop
    fetch c into rst;
    exit when c%notfound;
    str = str || rst.value;
    end loop;
    close c;
    return trim(str);
    end;
      

  2.   

    o !只能通过游标吗?
    用游标我也作了,但是我的查询的记录相当多。我的目的其实和bzszp(www.bzszp.533.net)的差不多。就是为了在对主表查询的时候能够将只表的一个字段的数据作为主表的一部分输出。但是因为记录很多,所以我用游标以后,速度太慢了。
      

  3.   

    可以使用集合的方式。不过还有一部分使用游标。
    这样可以提高效率。
    请参见
    http://www.zdnet.com.cn/developer/code/story/0,2000081534,39252129,00.htm
    Creat or Replace Function fn_test(in_aa in number) return varchar2
    is
    v_out varchar2(2000);
    type tab_type is table of your_table%type index by binary_integer;
    main_tab tab_type;
    begin
       for row in (select * from your_table where id = in_aa) loop
          main_tab(main_tab.count+1) := row;
       end loop;
       
       v_out := '';
       for row in  main_tab.first .. main_tab.last loop
        v_out := v_out ||'<'||main_tab(row).value||'>'; 
       end loop;
       return v_out;
    end;
      

  4.   

    可以用游标嘛!~,呵!~在SQL中一般情况是不用游标的,难道oracle是有所不同的嘛?