如何使用regex解析plsql中具有两个分隔符的字符串
我有一个类似于0:1的字符串;2:3. 列用冒号分隔,行用分号分隔 我正在尝试实现一个可以拆分字符串的正则表达式,然后将其用于其他目的 我已经写了下面的代码,但不确定它有什么问题。它继续执行,然后耗尽内存 我是PL/SQL新手,所以不确定出了什么问题。有人能推荐一下吗如何使用regex解析plsql中具有两个分隔符的字符串,plsql,oracle11g,Plsql,Oracle11g,我有一个类似于0:1的字符串;2:3. 列用冒号分隔,行用分号分隔 我正在尝试实现一个可以拆分字符串的正则表达式,然后将其用于其他目的 我已经写了下面的代码,但不确定它有什么问题。它继续执行,然后耗尽内存 我是PL/SQL新手,所以不确定出了什么问题。有人能推荐一下吗 DECLARE vfirstpos NUMBER; vsecondpos NUMBER; vkey VARCHAR2 (32767); vvalue VARCHAR2
DECLARE
vfirstpos NUMBER;
vsecondpos NUMBER;
vkey VARCHAR2 (32767);
vvalue VARCHAR2 (32767);
vclob CLOB;
vgroup VARCHAR2 (32767);
BEGIN
vclob := '0:1;2:3';
IF vclob IS NOT NULL
THEN
LOOP
vgroup :=
REGEXP_SUBSTR (vclob,
'[^;]+',
1,
1);
BEGIN
vfirstpos :=
INSTR (vgroup,
':',
1,
1);
vsecondpos :=
INSTR (vgroup,
':',
1,
2);
vkey := (SUBSTR (vgroup, 1, vfirstpos - 1));
vvalue :=
(SUBSTR (vgroup, vfirstpos + 1, (vsecondpos - vfirstpos) - 1));
vclob := SUBSTR (vclob, LENGTH (vgroup) + 2);
EXIT WHEN LENGTH (vclob) = 0;
END;
END LOOP;
END IF;
END;
我通过修改查询解决了这个问题。好像我把它分成了第三层,这就是问题的根源 更改代码
DECLARE
vclob CLOB;
vgroup VARCHAR2 (32767);
vfirstpos NUMBER;
vkey VARCHAR2 (32767);
vvalue VARCHAR2 (32767);
vid number;
BEGIN
--this should come from an input parameter
vclob := '1:1;2:hello@hello.com';
IF vclob IS NOT NULL
THEN
LOOP
vgroup :=
REGEXP_SUBSTR (vclob,
'[^;]+',
1,
1);
BEGIN
vfirstpos :=
INSTR (vgroup,
':',
1,
1);
vkey := (SUBSTR (vgroup, 1, vfirstpos - 1));
vvalue :=
(SUBSTR (vgroup, vfirstpos + 1));
END;
vclob := SUBSTR (vclob, LENGTH (vgroup) + 2);
EXIT WHEN LENGTH (vclob) = 0;
END LOOP;
commit;
END IF;
END;