Skip to content

Instantly share code, notes, and snippets.

@xtender
Created September 29, 2023 17:10
Show Gist options
  • Save xtender/003dcedcf3e6e451e50983f9f782ed5e to your computer and use it in GitHub Desktop.
Save xtender/003dcedcf3e6e451e50983f9f782ed5e to your computer and use it in GitHub Desktop.
Example of splitting strings using SQL_MACRO for Oracle 19
with t as (select 'aaa,asdf,2,3,3,4,5,,123,,,zz' s from dual)
select *
from t outer apply str_split(t.s, ',')
/
create or replace function str_split(str varchar2, delimiter varchar2)
return varchar2 sql_macro
is
begin
return q'{
select
level as n
,regexp_substr(
s
,'([^'||delimiter||']*)['||delimiter||']'
,1
,level
,''
,1) as substring
from (select str||delimiter as s from dual) v
connect by level<=regexp_count(s,delimiter)
}';
end;
/
@xtender
Copy link
Author

xtender commented Sep 29, 2023

with t as (select 'aaa,asdf,2,3,3,4,5,,123,,,zz' s from dual)
select *
from t
     outer apply
        xmltable(
           'tokenize($STR, $DELIM)'
           passing t.s as str
                 , ',' as delim
           columns
             n for ordinality 
            ,substring varchar2(100) path '.'
        )
/

https://dbfiddle.uk/DBcKnVBJ

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment