我在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/