我有以下查詢,我試圖按“名稱:”拆分。輸出將插入到表中,如下所示。但它沒有按預期作業。
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');
uj5u.com熱心網友回復:
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 會忽略分號,但其他 IDE 會拋出錯誤。
無需從您的字串中修剪標記 - 至少在您使用的示例字串中不需要。您希望字串中有可選空格嗎?
您嘗試適應您的情況的解決方案僅在分隔符為單個字符(如逗號)時才有效。它不適用于您的情況。你了解[^Name:]正則運算式中的含義嗎?我敢打賭答案是“不”,否則你不會在你的解決方案中嘗試過。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/486121.html
上一篇:為什么這2個查詢從Oraclehr資料庫回傳不同的結果?
下一篇:如何獲得下一個季度
