Первичный ключ типа Date, вызывающий проблемы при обновлении строки
У нас есть таблица с составным ключом (varchar(64) и Date). Это отлично работало в других наших средах тестирования, но в нашей среде приемочного тестирования (и базе данных) при обновлении строки мы получаем ошибку, сообщающую, что ни одна строка не была затронута. Насколько мы можем сказать, все в среде и базе данных так же, как и любой другой. Вызывающим клиентом является.NET (с использованием ODP.NET), а база данных - Oracle 11g. Есть идеи?
1 ответ
Тип данных Oracle DATE хранит как DATE, так и TIME. Если вы выполняете обновление с предложением WHERE, в котором указывается только DATE, для компонента времени по умолчанию используется полночь.
Таким образом, DATE, который вы предоставляете для обновления в предложении WHERE, может не совпадать с сохраненным DATE в таблице из-за изменения времени.
Я думаю, что это может быть проблемой. Можете ли вы подтвердить это.
Если вы просто хотите проверить компонент DATE без значения TIME, то вы можете использовать функцию TO_CHAR, чтобы просто получить его, как здесь -
ОБНОВЛЕНИЕ... УСТАНОВИТЬ... ГДЕ TO_CHAR(SYSDATE,'DD-MON-YYYY') = '10-DEC-2014'