【发布时间】:2016-05-28 10:08:03
【问题描述】:
我找不到有关如何在 ORACLE 中拆分逗号分隔字符串的解决方案。搜索了很多,对我的情况没有任何帮助
代码
DECLARE
TYPE T_ARRAY_OF_VARCHAR IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
MY_ARRAY T_ARRAY_OF_VARCHAR;
MY_STRING VARCHAR2(2000) := '12 3,456,,abc,def';
BEGIN
FOR CURRENT_ROW IN (
with test as
(select MY_STRING from dual)
select regexp_substr(MY_STRING, '[^,]+', 1, rownum) SPLIT
from test
connect by level <= length (regexp_replace(MY_STRING, '[^,]+')) + 1)
LOOP
DBMS_OUTPUT.PUT_LINE('>' || CURRENT_ROW.SPLIT || '<');
--DBMS_OUTPUT.PUT_LINE(CURRENT_ROW.SPLIT);
MY_ARRAY(MY_ARRAY.COUNT) := CURRENT_ROW.SPLIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Array Size:' || MY_ARRAY.COUNT);
END;
/
输出是:
>12 3<
>456<
>abc<
>def<
><
Array Size:5
空值乱码!!!
【问题讨论】:
-
我希望结果集中的 null 结果以正确的顺序排列。标题中“空格”的相关性是,如果空格在要拆分的字符串中,我发现的许多解决方案都不起作用(即stackoverflow.com/questions/3819375/…)
-
我可以在单个查询中编写此代码,而无需创建任何用户定义的函数。你想知道答案吗?
-
是的。那会更好,我现在有