Синтаксис для regexp_split_to_table всегда сводит меня с ума.
select
*
from
table (regexp_split_to_table(<your db.table>.account_id,<your db.table>.packages, ' ','c')
returns (account_Id integer, tok_num integer,package varchar(100))) as t
Что даст вам:
account_Id tok_num package
123 1 AAA
123 2 BBB
123 3 CCC
Чтобы получить только разные значения, вы можете запустить:
select
distinct account_id,package
from
table (regexp_split_to_table(<your db.table>.account_id,<your db.table>.packages, ' ','c')
returns (account_Id integer, tok_num integer,package varchar(100))) as t
order by account_id,package
РЕДАКТИРОВАТЬ:
После того, как ваш комментарий о превышении длины, я немного покопался.STRTOK_SPLIT_TO_STRING, кажется, в состоянии обрабатывать более длинные строки, включая сгустки, чем REGEXP_SPLIT_TO_STRING (не спрашивайте меня, почему ...).Итак, немного пообщаемся с @DNoeth, вот что можно попробовать:
with cte as (
select account_id,
cast(packages as clob)
from your_table)
SELECT
DISTINCT account_Id, package
FROM TABLE (StrTok_Split_To_Table(cte.account_id,cte.packages, ' ')
RETURNS (account_Id INTEGER, tok_num INTEGER,package VARCHAR(100))) AS t
Я собрал огромную (60 КБ) строку и проверил эту логику с ней, это сработало для меня.Обратите внимание, что приведение к clob обязательно, иначе вы получите ту же ошибку.