As it is now, Oracle's comment already mentions that Oracle does not provide such a function. So, as a quick workaround, you can write a similar query:
with t1(user_id, degree_fi, degree_en, degree_sv) as ( select 3601464, '3700', '1600', '2200' from dual union all select 1020 , '100' , '0' , '0' from dual union all select 3600520, '100,3200,400', '1300, 800, 3000', '1400, 600, 1500' from dual union all select 3600882, '0', '100', '200' from dual ), Occurence(ocr) as( select Level as ocr from (select max(greatest(regexp_count(degree_fi, '[^,]+') , regexp_count(degree_en, '[^,]+') , regexp_count(degree_sv, '[^,]+') ) ) mx from t1 ) connect by level <= mx ) select * from ( select User_id , regexp_substr(degree_fi, '[^,]+', 1, o.ocr) as degree_fi , regexp_substr(degree_en, '[^,]+', 1, o.ocr) as degree_en , regexp_substr(degree_sv, '[^,]+', 1, o.ocr) as degree_sv from t1 t cross join Occurence o ) where degree_fi is not null or degree_en is not null or degree_sv is not null
Result:
User_Id Degree_Fi Degree_En Degree_Sv ------------------------------------------------------------ 3601464 3700 1600 2200 1020 100 0 0 3600520 100 1300 1400 3600882 0 100 200 3600520 3200 800 600 3600520 400 3000 1500