Увы, в 11g нам все равно придется использовать наши собственные токенизаторы PL / SQL, используя типы SQL. В 11gR2 Oracle предоставила нам агрегирующую функцию для объединения результатов в строку CSV, поэтому, возможно, в 12i они предоставят обратную возможность.
Если вы не хотите создавать тип SQL, вы можете использовать встроенный SYS.DBMS_DEBUG_VC2COLL, например:
create or replace function string_tokenizer
(p_string in varchar2
, p_separator in varchar2 := ',')
return sys.dbms_debug_vc2coll
is
return_value SYS.DBMS_DEBUG_VC2COLL;
pattern varchar2(250);
begin
pattern := '[^('''||p_separator||''')]+' ;
select trim(regexp_substr (p_string, pattern, 1, level)) token
bulk collect into return_value
from dual
where regexp_substr (p_string, pattern, 1, level) is not null
connect by regexp_instr (p_string, pattern, 1, level) > 0;
return return_value;
end string_tokenizer;
/
Здесь он находится в действии:
SQL> select * from table (string_tokenizer('one, two, three'))
2 /
COLUMN_VALUE
----------------------------------------------------------------
one
two
three
SQL>
Подтверждение: этот код является вариантом кода I найденный в блоге Tanel Poder .