oracle中的Unnest(String_to_array)转换

Unnest(String_to_array) conversion in oracle

我正在将 PostgreSQL 代码的过程结构迁移到 Oracle。对于 PostgreSQL 的 unnest(string_to_array)?

,Oracle 中是否存在任何替代函数
select a.finalval
from   (select unnest(string_to_array(vturs_id, ',')) as finalval)

使用 table 集合表达式,而不是使用定界字符串,而是使用集合或 VARRAY(如 SYS.ODCINUMBERLIST):

SELECT COLUMN_VALUE as finalval
FROM   TABLE( SYS.ODCINUMBERLIST( 1, 2, 4 ) )

输出:

| FINALVAL |
| -------: |
|        1 |
|        2 |
|        4 |

db<>fiddle here

如果您必须使用定界字符串(不要),那么您可以使用递归子查询分解子句来解析字符串:

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<>fiddle here