我知道如何使用 utl_file 从文件中读取数据,但我遇到了以下数据的问题。我们不能假设哪个位置的数据会为空。我们该如何处理呢?
样本数据:apple|bat|cat|"dog | dog"||||eee||abc
预期输出:
col1:apple
col2:bat
col3:cat
col4:dog dog
col5:
col6:
col7:
col8:eee
col9:
col10:abc
我试过下面的代码,但它没有处理空值
declare
list varchar2(3500) :='apple|bat|cat|"dog | dog"||||eee||abc';
pattern varchar2(20) := '(" [^"]*"|[^|]+)';
i number:=0;
j number;
f varchar2(3500);
c sys_refcursor;
begin
dbms_output.put_line('Raw list: ' || list);
open c for
select level as col,
trim(regexp_substr(replace(list,'|','|'), pattern, 1, rownum))split
from dual
connect by level <= length(regexp_replace(list, pattern)) + 1;
loop
fetch c into j, f;
exit when c%notfound;
dbms_output.put_line('Column ' || i || ': ' || replace(f, '"'));
i:=i+1;
end loop;
close c;
end;
我的输出低于预期,但我需要预期的输出。
原始列表:apple|bat|cat|"dog|dog"||||eee||abc
第 0 列:apple
第 1 列:bat
第 2 列:cat
第 3 列:dog
第 4 列:dog
第 5 列:eee
第 6 列:abc
第 7 栏:
第 8 栏:
第 9 栏:
第 10 栏: