我在varchar字符上使用ODCIVARCHAR2LIST和ODCINUMBERLIST,并且两个函数均起作用,并且结果是相同的。我想知道您是否可以解释为什么使用ODCINUMBERLIST时没有收到错误消息?我使用ODCIVARCHAR2LIST的动机是什么?

谢谢

抱歉,没有添加我的代码。我使用以上功能作为将xml值分解为行的一种方式。提取它们并从所有不必要的字符中“清除”它们后,每个单个值都应如下所示:abc-xyz-aaa-ab1-2db-a-bbb。然后我使用以下代码:

select *
from TABLE(CAST (MULTICAST (SELECT LEVEL FROM DUAL
CONNECT BY LEVEL < REGEX_COUNT (my_field, 'regex_exp')) as SYS.ODCIVARCHAR2LIST

如果我使用SYS.ODCINUMBERLIST,则会得到相同的结果:

abc-xyz-aaa-ab1-2db-a-bbb
abc-www-ffs-cvx-azx-a-ggg
...
...

最佳答案

您的代码段中可能有错别字,我假设您使用的是MULTISET而不是MULTICAST
这是您的简化示例

select dump(COLUMN_VALUE,16)
from TABLE(CAST (MULTISET(SELECT LEVEL FROM DUAL
CONNECT BY LEVEL <= 2) as SYS.ODCIVARCHAR2LIST ))

返回
Typ=1 Len=1: 31
Typ=1 Len=1: 32

typ = 1表示已返回VARCHAR2
OdciNumberList的类似示例
select dump(COLUMN_VALUE,16)
from TABLE(CAST (MULTISET(SELECT LEVEL FROM DUAL
CONNECT BY LEVEL <= 2) as SYS.OdciNumberList ))

退货
Typ=2 Len=2: c1,2
Typ=2 Len=2: c1,3

在这里,类型2是预期的NUMBER。

隐式转换规则在这里也有效,即,具有格式正确的数字的字符串可以作为数字处理。
SELECT dump(COLUMN_VALUE,16)
FROM TABLE(sys.OdciNumberList('42','43'));

Typ=2 Len=2: c1,2b
Typ=2 Len=2: c1,2c

关于oracle - ODCIVARCHAR2LIST和ODCINUMBERLIST有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34479090/

10-13 04:18