Вопрос:
Я использую ODCIVARCHAR2LIST и ODCINUMBERLIST для символов varchar, и обе функции работают, и результат тот же. Мне было интересно, можете ли вы объяснить, почему я не получаю сообщение об ошибке при использовании ODCINUMBERLIST? Какова моя мотивация использовать ODCIVARCHAR2LIST?
Спасибо
Извините, что не добавлял мой код. Я использую вышеуказанные функции как способ перетащить значения xml в строки. после извлечения их и “очистки” от всех ненужных символов, каждое значение singl должно выглядеть так: 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-ааа-ab1-2db-а-ГЭБ
а-WWW-FFS-CVX-AZX-а-ггг
…
…
Лучший ответ:
Вероятно, в вашем фрагменте есть опечатка, я предполагаю, что вы используете MULTISET not 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