with t as (select 1 id, 'leiyu,tonghua,jia' book_nm from dual union all select 2 id, 'jia' book_nm from dual union all select 3 id, 'chun;' book_nm from dual union all select 4 id, 'jia;chun;qiu' book_nm from dual) select * from (select id, REGEXP_SUBSTR(book_nm, '[^,]+', 1, LEVEL) STR from (select id, replace(book_nm, ';', ',') book_nm from t) t1 connect by level <= REGEXP_COUNT(book_nm, ',') + 1 and id = prior id and prior dbms_random.value is not null) t2