我在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-嘧菌酯-A-GGG
...
...
答案 0 :(得分:8)
您的代码段中可能存在拼写错误,我假设您使用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