我想实现的效果很简单
一个查询语句有可能返回多个记录时,用‘;’隔开并连接到一个字符串变量上如:记录1;记录2;记录3
最后一个记录的话还加‘;’会很难看且引起歧义以为后面还有,如:记录1;于是想这样编写
FOR REC_N IN (SELECT TBGC_NO FROM ……
WHERE ……
            )LOOP    --定义游标循环输出
V_TBGCNO:=V_TBGCNO||REC_N.TBGC_NO;       --每条记录连接到字符变量V_TBGCNO
EXIT WHEN REC_N%LAST_RECORD=TRUE      --最后一条记录时退出,不进行下一步(此处不知道PL/SQL怎么写
V_TBGCNO:=V_TBGCNO||';';  --不为最后记录时,分号隔开  
END LOOP;
求解……

解决方案 »

  1.   

    FOR REC_N IN (SELECT TBGC_NO FROM ……
    WHERE ……
      )LOOP --定义游标循环输出
    V_TBGCNO:=V_TBGCNO||REC_N.TBGC_NO; --每条记录连接到字符变量V_TBGCNO
    EXIT WHEN REC_N%LAST_RECORD=TRUE --最后一条记录时退出,不进行下一步(此处不知道PL/SQL怎么写)
    V_TBGCNO:=V_TBGCNO||';'; --不为最后记录时,分号隔开   
    END LOOP;
    这个后面再加个
    V_TBGCNO:=tirm(V_TBGCNO,';');
      

  2.   


    --应该这样
    V_TBGCNO:=tirm(';' from V_TBGCNO);--例如
    select trim(';' from ';sdfds;') from dual;TRIM(
    -----
    sdfds
      

  3.   

    你其实不用判断 再循环完后把最后一个分号去掉就行
    select rtrim(';sdfds;',';') from dual 
      

  4.   

    1楼 应该这样:V_TBGCNO:=rtirm(V_TBGCNO,';'); 或
                 V_TBGCNO:=tirm(leading ';' FROM V_TBGCNO);
      

  5.   

    我错了 应该是trailing 
      

  6.   

    直接用SQL语句,里面用wmsys.wm_concat函数去拼接,然后再用replace替换
    with  a as (
    select 1 a from dual
    union all
    select 2  from dual
    union all select 3 from dual) 
    select replace(wmsys.wm_concat(a),',',';')
    from a结果
    1;2;3
      

  7.   

    还可以开始判断下串是否为null,如果为null则拼装name,如果不为null,拼装‘;’||name
      

  8.   

    sys_connect_by_path()select rtrim(sys_connect_by_path(name,','),',')
           max(decode(level,1,name))as reason1, max(decode(level,2,name))as reason2,max(decode(level,3,name))as reason3, max(decode(level,4,name))as reason4
           from       (select an.name,
            row_number()over(partition by cb.id order by cb.id)as numcount       from bill cb
           left join cnodle cn on(cb.id=cn.id)
           left join anodle an on(cn.id=an.id)
           inner join t_staff ss on(cb.staff=ss.staff)       where
                 (to_char(cb.begin_time,'hh24')>'22' or to_char(cb.begin_time,'hh24')<'09')
             
           )join1
      start with numcount=1
      connect by numcount-1 = prior numcount
      group by join1.id