拆分字符串不适用于 Oracle 中的以下查询

Split string not working for following query in Oracle

我有以下查询,我试图按“名称:”拆分。输出将被插入到 table 中,如下所示。但它并没有像预期的那样工作。

jsab
sim
karksd,ad

create or replace procedure p_ins (par_string in varchar2) is
    begin
    insert into TBL_TEST (Name)
    select trim(regexp_substr(par_string, '[^Name:]+', 1, level))
       from dual
         connect by level <= regexp_count(par_string, 'Name:') + 1;
  end;
  
  exec p_ins('Name:jsab,Name:sim,Name:karksd,ad');
create table tbl_test (name varchar2(40));

create or replace procedure p_ins (par_string in varchar2) is
    begin
    insert into TBL_TEST (Name)
      select  regexp_substr(par_string,
                  '(Name:)?(.*?)(,Name:|$)', 1, level, null, 2)
      from    dual
      connect by level <= regexp_count(par_string, 'Name:');
  end;
/ 

exec p_ins('Name:jsab,Name:sim,Name:karksd,ad')

select * from tbl_test;


NAME                                    
----------------------------------------
jsab
sim
karksd,ad

注意事项

除了正则表达式本身(显然不正确)之外,您的代码中还有几个错误。

PL/SQL 代码 - 过程 - 必须以正斜杠结束;您发布的内容中缺少它。

名字的个数:应该等于'Name:'的出现次数,为什么要加1? (答案:因为你从某处复制了答案,没看懂就修改了)

exec 是一个 SQL*Plus 命令;因此,它不需要在末尾使用分号。只有 SQL 语句和 PL/SQL 代码才需要分号。一些 IDE 会忽略分号,但其他人会在上面抛出错误。

不需要 trim 字符串中的标记 - 至少在您使用的示例字符串中不需要。您希望字符串中有可选空格吗?

您试图适应您的情况的解决方案仅在分隔符是单个字符(例如逗号)时才有效。它不适用于您的情况。你明白 [^Name:] 在正则表达式中的意思吗?我敢打赌答案是“否”,否则你不会在你的解决方案中尝试它。