, выполнив следующую команду в SQL Developer:Oracle "ORA-00932: несовместимые типы данных: ожидаемое число получил TIMESTAMP" на INSERT INTO, но не ВЫБРАТЬ
insert into table2
select *
from table1
where id_ in (select fileid
from table3
where status in ('DELETED', 'TODELETE')
and softdeletedate < to_date('11/08/2015 01:00:00 AM', 'mm/dd/yyyy hh:mi:ss AM'))
and id_ not in (select id_ from table2);
Результаты в этой ошибки:
ORA-00932: inconsistent datatypes: expected NUMBER got TIMESTAMP
Если я удаляю первую часть (insert into table2
), команда select работает нормально и, как ожидается, не возвращает никаких записей.
Таблица 1 и таблица2 имеют более 70 столбцов VARCHAR2, TIMESTAMP и NUMBER.
Таблица 1 и таблица2 создаются APP, который проходит через столбцы table1 и создает таблицу2, единственное отличие состоит в том, что таблица1 имеет много индексов, а таблица2 имеет единственный индекс.
Я проверил, что таблица1 и таблица2 имеют одинаковые точные столбцы и типы данных. Однако вывод «desc table1» и «desc table2» перечисляет столбцы в другом порядке, но все они соответствуют.
Когда я запускаю команду на других таблицах, которые были созданы аналогичным образом, но имеют меньше столбцов (они все еще имеют одинаковые типы столбцов), вставка работает и не отображает ошибки. Запуск команды «desc» в отношении этих таблиц перечисляет столбцы в том же порядке.
Я прошел через многие поисковые запросы Google, но не смог найти ответ. Моя версия Oracle - 11g.
Любая идея, почему эта ошибка возвращена и как ее обойти?
Я пошел бы дальше, чем даже просто * * предполагая явные имена столбцов. Каждый раз, когда вы: а) заботитесь о порядке столбцов и б) используйте 'select * from ...' для получения столбцов в неявном порядке - это ошибка, ожидающая только того, что произойдет. Он * может * не укусить вас сегодня или даже вообще, но это очень хрупкая и плохая идея. – Gerrat
Благодарим вас за очень быстрый ответ. Указание столбцов явно заботится об этой проблеме. – user3722575