【发布时间】:2020-05-02 15:21:41
【问题描述】:
当我运行它时,v_hold 数据是“AAA”,这是我的 SQL 字段的长度,但是长度(v_hold)是 4。我知道我可以使用 substr() 来获取我需要的长度。 trim() 也不处理它。为什么长度比它应该的长一倍?是否有解决方案通过正确标注“最后一个逗号之后的所有内容仅是字母数字”来进行第二次函数调用。一如既往,感谢您的意见。
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;
【问题讨论】: