create or replace function getvaluebytab(in_tabname in varchar2,in_colname in varchar2)
return varchar2
is
v_sql varchar2(300);
v_str varchar2(50);
v_return varchar2(4000);
type t_cur_ref is ref cursor;
vc_value t_cur_ref;
begin 
  v_return :=' ';-- 初始化 v_return
  v_sql:='select '||in_colname||' from '||in_tabname;
  open vc_value for v_sql;  loop
      fetch vc_value into v_str;
      exit when vc_value%NOTFOUND;        
      if length(v_return)=1 then
         v_return := v_str;
      else
         v_return := v_return ||','||v_str;
      end if;
  end loop;
  close vc_value;
  return v_return;
end getvaluebytab;
/

解决方案 »

  1.   

    非常感谢,已经可以用了,还有两个小疑问,请高手顺便解惑.
    1.
    fetch vc_value into v_str; 如果我想取两个字段应该怎么写?2.
    v_return :=' ' if length(v_return)=1 then好像直接赋空值会取不到长度为0,是否必须这样设置一个空格才好判断?
      

  2.   

    1.
    fetch vc_value into v_str1,v_str2;
    2.
    如果v_return:='';
    则length(v_return)会等于null,所以要初值为' '(一个空格)
      

  3.   

    非常感谢,结贴.最后发现一个bug,就是按以上写函数,如果该字段的第一个长度刚好为1就会出错,所以我改了改.if length(v_return)=1 and v_return = ' ' then