拆分字符串不适用于 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:]
在正则表达式中的意思吗?我敢打赌答案是“否”,否则你不会在你的解决方案中尝试它。
我有以下查询,我试图按“名称:”拆分。输出将被插入到 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:]
在正则表达式中的意思吗?我敢打赌答案是“否”,否则你不会在你的解决方案中尝试它。