В чем разница между ODCIVARCHAR2LIST и ODCINUMBERLIST?

Вопрос:Я использую ODCIVARCHAR2LIST и ODCINUMBERLIST для символов varchar, и обе функции работают, и результат тот же. Мне было интересно, можете ли вы объяснить, почему я не получаю сообщение об ошибке при использовании ODCINUMBERLIST? Какова моя мотивация использовать ODCIVARCHAR2LIST? Спасибо Извините, что не добавлял мой код. Я использую вышеуказанные функции как способ перетащить значения xml в

Вопрос:

Я использую 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

Оцените статью
Добавить комментарий