将一个字段的若干行转为一个字串(Oracle)

1、使用for
/*----------------------------------------------------------*/
declare v_str varchar2(4000) := '';
        v_rowcount number := 0;
        v_top_n number := 3;
       
begin
    select count(*)
    into v_rowcount
    from test;

    for x in 1..v_rowcount loop
        select v_str || t.username || ','
        into v_str
        from (select rownum as tempid, username from test) t
        where t.tempid = x;
       
        exit when x = v_top_n;
    end loop;

    v_str := substr(v_str, 1, (length(v_str) -1));
    dbms_output.put_line(v_str);
end;
/*----------------------------------------------------------*/

2、使用loop
/*----------------------------------------------------------*/
declare
    v_str varchar2(2000):='';
    v_rownumber number :=0;
    v_top_n number := 3;
    v_i number:=1;

begin
    select count(*)
    into v_rownumber
    from test;
   
    if (v_top_n > v_rownumber) then
        v_top_n := v_rownumber;
    end if;
   
    loop
        begin          
            select v_str || t.username || ','
            into v_str
            from (select rownum as id, username from test) t
            where t.id = v_i;           
                                 
            v_i := v_i + 1;           
            exit when (v_i > v_top_n);
        end;                
    end loop; 
   
    v_str := substr(v_str, 1, length(v_str) - 1);
    dbms_output.put_line(v_str);  
end;
/*----------------------------------------------------------*/


/*----------------------------------------------------------*/
The syntax for the substr function is:
substr( string, start_position, [ length ] )

说明:
string is the source string.
start_position is the position for extraction. The first position in the string is always 1.
length is optional. It is the number of characters to extract. If this parameter is omitted, substr will return the entire string.
/*----------------------------------------------------------*/

你可能感兴趣的:(oracle)