Используйте выражение коллекции таблиц и вместо строки с разделителями используйте коллекцию или VARRAY
(например, SYS.ODCINUMBERLIST
):
SELECT COLUMN_VALUE as finalval
FROM TABLE( SYS.ODCINUMBERLIST( 1, 2, 4 ) )
выходные данные:
| FINALVAL |
| -------: |
| 1 |
| 2 |
| 4 |
дБ <> fiddle здесь
Если вам нужно использовать строку с разделителями (не), то вы можете использовать рекурсивныйусловие факторинга запроса для анализа строки:
WITH test_data ( delimited_string ) AS (
SELECT '1,2,40,-5,72' FROM DUAL
),
bounds ( delimited_string, start_idx, end_idx ) AS (
SELECT delimited_string,
1,
INSTR( delimited_string, ',', 1 )
FROM test_data
UNION ALL
SELECT delimited_string,
end_idx + 1,
INSTR( delimited_string, ',', end_idx + 1 )
FROM bounds
WHERE end_idx > 0
)
SELECT CASE end_idx
WHEN 0
THEN SUBSTR( delimited_string, start_idx )
ELSE SUBSTR( delimited_string, start_idx, end_idx - start_idx )
END AS finalval
FROM bounds;
выводит:
| FINALVAL |
| :------- |
| 1 |
| 2 |
| 40 |
| -5 |
| 72 |
db <> скрипка здесь