- 1
- 2
- 3
- 4
- 5
select to_char(null) from dual
union
select to_number(null) from dual
ORA-01790: expression must have same datatype as corresponding expression
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−864.2
select to_char(null) from dual
union
select to_number(null) from dual
ORA-01790: expression must have same datatype as corresponding expression
Когда смотришь на пустую чашку, то можно сказать, что в ней нет, например, чая или ,например, нет кофе. Но нельзя сказать, что в нет ни чая ни кофе.
guest 16.11.2009 19:04 # +4
Oleg_quadro 16.11.2009 23:02 # +1
dim1r 17.11.2009 10:04 # 0
Oleg_quadro 17.11.2009 11:49 # 0
dim1r 17.11.2009 15:25 # 0
Oleg_quadro 17.11.2009 15:57 # 0
Тут оракл не этапе разбора запроса определяет тип столбца. И ораклу нужно, чтобы везде в этом столбце этот тип был.
С одной стороны это ведет к тому, что запросы будут выполняться быстрее (не будет преобразования типов находу).
С другой стороны это защищает от ошибок, а то если у программиста один запрос возвращает строку букв, а другой - числа, то надо предупредить его, может он ошибается.
Oleg_quadro 17.11.2009 15:58 # +1
dim1r 17.11.2009 16:37 # +1
with SampleData as(
select '1' N from dual
union select '01' from dual
)
select * from SampleData where N=1
Oleg_quadro 18.11.2009 13:14 # 0
guest 18.11.2009 20:43 # 0
number(1) varchar('A') ?
Oleg_quadro 20.11.2009 11:31 # 0
как я понял, в скуэльных запросах в Оракле число может рассматриваться как строка, строка из цифр - как число.
Пример:
Во вложенном запросе столбец содержит число, во внешнем с этим столбцом обращаются как-будто там строка.
Но не может быть, похоже, такого, чтобы на одном уровне (например на уровне вложенного запроса) столбец двояко рассматривался.