想写一个函数,参数是数据表类型,然后用for循环遍历这个表中的某个字符型字段,将其进行拼接然后返回,请问如何实现?

解决方案 »

  1.   

    看需求感觉用sql似乎就能实现,lz可以说的在详细点吗,最好举个例子
      

  2.   

    以下我本人的伪代码
    create or replace function CONCATSTR (tb in table_type) return varchar2 
    is 
       str varchar2(4000); 
    begin 
      for i in 1..tb.count loop 
         str := str || ',' || tb.col; 
       end loop; 
      return str; 
    end; tb: 表类型参数
    table_type: 不知道Oracle有没有表类型?
    str:拼接字符串
    tb.col:代表该表的字段
    tb.count:代表该表的行数就是这个逻辑,用函数是因为考虑到重用,具体如何实现在Oracle中?还有一个小问题,如果我用的分隔符不是','而是换行符,应该怎样做?
      

  3.   

    table_type: 不知道Oracle有没有表类型? 
    ----------------------------------------自己定义类型create type t_air  as object(id int ,name varchar(20));
      

  4.   

    lz啊,oracle本身就有这样的函数,不用自己写了,你参考一下下面的帖子
    http://topic.csdn.net/u/20090409/15/d82a6ebc-5345-4755-8fb9-7ce10b0448b4.html
      

  5.   

    刚才试验了一下用sys_connect_by_path方法,
    但是报了个错:ORA-01489: result of string concatenation is too long 
    似乎是我连接字符串超长了,请问如何解决?
      

  6.   

    那个字段是用于表述性的信息,长度为4000字节。
    我估计拼接以后早就超过这个限制了,我试了下用substr截取前4000个字符,但是没用。。至于function的写法,有哪位高手有更好的意见?
      

  7.   

    只要超4000就报错了,substr是在报错后执行的肯定不行,你可以从rownum下手,在里曾查询里加上rownum<=N