【问题标题】:How to eliminate the extra character at the end of line in plsql using regex如何使用正则表达式消除plsql中行尾的多余字符
【发布时间】: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;

【问题讨论】:

    标签: regex parsing plsql


    【解决方案1】:

    设置 v_hold 的行中的正则表达式错误。它应该以.*$ 结尾。你有*.

    在其他新闻中,请将您的 REGEXP_SUBSTR 格式更改为此,因为您的表单不处理 NULL 元素。更多信息请看这里:https://stackoverflow.com/a/31464699/2543416

    REGEXP_SUBSTR(v_input_string, '(.*?)(,|$)', 1, 1, NULL, 1);
    REGEXP_SUBSTR(v_input_string, '(.*?)(,|$)', 1, 2, NULL, 1);
    etc...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 1970-01-01
      相关资源
      最近更新 更多