Когда я запускаю это, данные v_hold равны "AAA", что является длиной моего поля SQL, однако длина (v_hold) равна 4. Я знаю, что могу использовать substr () для получения необходимой длины. trim () тоже не справляется. Почему длина на один больше, чем должна быть? Есть ли решение, связанное с повторным вызовом функции, если правильно указать «все, что находится после последней запятой, ТОЛЬКО alphanumeri c». Как всегда, спасибо за вклад.
loop
UTL_FILE.GET_LINE(utl_fh_r, v_input_string);
dbms_output.put_line(v_input_string);
v_emplid := REGEXP_SUBSTR(v_input_string, '[^,]+', 1, 1);
n_empl_rcd := REGEXP_SUBSTR(v_input_string, '[^,]+', 1, 2);
n_goal_amt := REGEXP_SUBSTR(v_input_string, '[^,]+', 1, 3);
v_dedcd := REGEXP_SUBSTR(v_input_string, '[^,]+', 1, 4);
v_hold := REGEXP_SUBSTR(v_input_string, '[^,\\r\\n]*.$');
dbms_output.put_line(v_emplid || ' : ' || n_empl_rcd || ' : ' || n_goal_amt || ' : ' ||
v_dedcd || ' : ' || v_hold || 'len ' || length(v_hold));
end loop;
exception
when UTL_FILE.READ_ERROR then
UTL_FILE.FCLOSE(utl_fh_r);
--dbms_output.put_line('UTL_FILE read error after line ' || n_lines_read || ' ' || V_IN_FILE);
when NO_DATA_FOUND then
dbms_output.put_line('NO DATA');
end;