小编5to*_*on3的帖子

Oracle - 当只对不同的匹配感兴趣时,优化CLOB列上所有正则表达式匹配的循环

我正在创建一个循环遍历表(具有数千行)的存储过程,并且对于每一行,都有一个CLOB列,我想从中获取正则表达式上的所有匹配项(sa"FNR").此后,我想在新表中插入每个不同的匹配.单个CLOB列可能包含数千个匹配,但通常它是在CLOB中重复的相同"FNR" - 即不同的正则表达式匹配少得多,并且这些是我唯一感兴趣的.但是,我制作的程序花了很长时间,我怀疑在所有比赛中循环是最耗时的部分.

我的程序看起来像这样:

CREATE OR REPLACE PROCEDURE SP_MTV_FINN_FNR AS
BEGIN
DECLARE 
  v_n NUMBER;
  v_cnt NUMBER;
  v_mtrid NUMBER;
  v_regex_fnr VARCHAR2(54) := '(((0[1-9]|[12]\d|3[01])(0[1-9]|1[012])(\d{2}))(\d{5}))';
  v_doc CLOB;
  v_fnr VARCHAR2(11);

  BEGIN
    -- Get all rows from table --
    SELECT COUNT(*) INTO v_n FROM TABLE;
    IF v_n > 0 THEN
      -- Loop over all rows --
      FOR i IN 1..v_n LOOP
        SELECT doc, mtrid
          INTO v_doc, v_mtrid
          FROM (SELECT DOC doc, ID mtrid, ROWNUM rnum
            FROM TABLE
            WHERE ROWNUM <=i)
          WHERE rnum >= …
Run Code Online (Sandbox Code Playgroud)

regex oracle performance loops distinct

2
推荐指数
1
解决办法
1732
查看次数

标签 统计

distinct ×1

loops ×1

oracle ×1

performance ×1

regex ×1