'Bulk collect RTRIMs strings to fit VARCHAR2 length

I have encountered the following interesting behavior with the following code:

create or replace type schema1.t_varchar2_tab force as table of varchar2(8 byte);

declare
    v_list schema1.t_varchar2_tab;
begin
    
    select col1 
    bulk collect into v_list
    from (
        select '12345678' col1 from dual
        union all
        select '12345678                    ' from dual
    );
    
    for idx in 1..v_list.count
    loop
        dbms_output.put_line('val = #'||v_list(idx)||'#');
    end loop;

end;
/

It returns:

val = #12345678#
val = #12345678#

It looks like when you bulk collect into a nested table and a selected string is longer than the what is set in the type and if the extra characters are spaces, Oracle RTRIMs the spaces to make it fit in the VARCHAR2 size.

Is this behavior normal? Have you encountered this? I've checked the Oracle on-line documentation, but so far could not find anything related.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source