Dear all,
I have a simple pl/sql procedure as follows:

PROCEDURE get_no_of_subunit
cursor subunit_cursor is
select x.airline_code airline_code,
x.flight_no flight_no,
x.aircraft_type aircraft_type,
x.dep_date dep_date,
x.material_group material_group,
x.unit_type unit_type
from elpunic x;

delete from elpunic where dep_date = to_char(sysdate, 'yyyy-mm-dd');
for c1 in subunit_cursor loop
insert into elpunic
(airline_code, flight_no, aircraft_type, dep_date, material_group, unit_type, subunit_type, no_of_unit)
(c1.airline_code, c1.flight_no, c1.aircraft_type, c1.dep_date,
c1.material_group, c1.unit_type, c1.unit, c1.unit_qty);
end loop;
end get_no_of_subunit;

However, when execute the procedure, errors occur:
ORA-01401: inserted value too large for column
ORA-06512: at line 85

I have tried to get the length of each field in the select statement by execute the select statement only, the length is ok to be inserted. However, when using the cursor, the length of the fields increase automatically, like aircraft type, it will increase to 4000.
This procedure was orginally in a 7.3.4 db and it is recompiled in a 9i db. Is there any tricky things in oracle 9i?