Unnest (String_to_array) преобразование в оракуле - PullRequest
0 голосов
/ 23 октября 2019

Я перемещаю процедурную структуру кода PostgreSQL в Oracle. Есть ли в Oracle альтернативная функция для PostgreSQL unnest(string_to_array)?

select a.finalval
from   (select unnest(string_to_array(vturs_id, ',')) as finalval)

1 Ответ

1 голос
/ 23 октября 2019

Используйте выражение коллекции таблиц и вместо строки с разделителями используйте коллекцию или 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 <> скрипка здесь

...