- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
Чудеса от Oracle.
--------- работает:
select to_number(null) from dual union all
select to_char(null) from dual
------------- меняем строчки местами - не работает
select to_char(null) from dual union all
select to_number(null) from dual
а вот char --> number - не всегда удается ('xyz' --> ??? )
Результат обычно преобразуется к тому что уже было перед union.
В рабочем варианте первый операнд - number вот к нему по логике и должно конвертироваться.
Может оракл приведение типов начинает с последнего sql в union?
У меня как и предполагалось отваливается именно второе. С таким посланием.
select to_char(null) from dual union all
select to_number(null) from dual union all
select to_char(null) from dual
и такое
select to_number(null) from dual union all
select to_number(null) from dual union all
select to_char(null) from dual
не работает только когда to_number в конце стоит
Вот например брать и неявно использовать их для сортировки - надо найти тот запрос и положить отдельным постом.
Нигде ведь в стандартах такого не написано. Просто побочный эффект.
То же, ясное дело, касается также distinct и group by.
У Oracle же в доке яснее некуда "в запросах использующих set операторы, Oracle не выполняет неявных преобразование между типами данных".
А SELECT to_lob(NULL) FROM dual считает что NULL имеет тип CHAR (в одной из версий).
Ну и что?
Это неправильное использование to_lob (она может быть применена только к LONG и LONG RAW столбцам).