Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Informix [игнор отключен] [закрыт для гостей] / 32 января, или где искать проблему!!! / 14 сообщений из 14, страница 1 из 1
16.07.2007, 13:10
    #34660851
RuslanAdm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
Здравствуйте!

При обновлении поля таблицы получаю шокирующую ошибку:

SQL Error (-1206): Invalid day in date

32 января???

Запрос вот такой:

update table1 set date1 = (select date1 from table2 where table1.RecID = table2.RecID)
where year(date1) < 1960

Первая мысль - щелкает триггер таблицы table1 и формирует при этом некорректную дату. Триггер удалил для верности. Ошибка осталась. Второе предположение - в таблице table2 поле date1 имеет неверный формат изначально. Но как? Тип данных DATE.

Поиски запросами кривых дат с днем, который не соответствует месяцу, в обеих таблицах дают отрицательный результат.

В обеих таблицах поле date1 имеет тип DATE not NULL

Как быть? Уже сбился с ног. Где искать проблему?

Сервер: IBM Informix Dynamic Server Version 9.40.UC3
...
Рейтинг: 0 / 0
16.07.2007, 13:29
    #34660931
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
Попробуйте всё-таки найти строку, вызывающую ошибку, при помощи наложения допфильтров типа
Код: plaintext
and date(date1) >  1900 
или
Код: plaintext
and <pk_field> between  120  and  2312 
...
...
Рейтинг: 0 / 0
16.07.2007, 13:42
    #34661000
RuslanAdm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
Беда в том, что обе таблицы я выгрузил в файл, а потом залил их в MSSQL. Все записи легли чудно. Ни одна запись не браковалась из-за неверного формата даты.
...
Рейтинг: 0 / 0
16.07.2007, 13:45
    #34661010
RuslanAdm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
Еще парадокс! dbexport и последующий dbimport отработали без ошибок.
...
Рейтинг: 0 / 0
16.07.2007, 14:02
    #34661101
Andron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
Обновите информикс - в ветке 9.4 есть и более новые
...
Рейтинг: 0 / 0
16.07.2007, 14:08
    #34661134
RuslanAdm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
Ну что же! Попробую развернуть базу не триальной десятке, скажем.
Но если возникают такие вопросы, поневоле стремишься найти ответ. Даже если заработает на десятке, то до истины докопаться в любом случае хочется.
...
Рейтинг: 0 / 0
16.07.2007, 14:17
    #34661196
Алексан
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
RuslanAdmБеда в том, что обе таблицы я выгрузил в файл, а потом залил их в MSSQL. Все записи легли чудно. Ни одна запись не браковалась из-за неверного формата даты.Это наводит на мысль, что данные в таблицах правильные, а некорректность возникает во время выполнения запроса. Можно попробовать собрать дополнительную информацию, сохранив новую дату в дополнительном - целочисленном - столбце, а не модифицируя существующий столбец. Кроме того, локализована ли база данных и каким именно образом выполняется запрос (в смысле локализации клиента)? Что известно про переменные, заведующие датами (DBDATE, GL_DATE, etc.)?
...
Рейтинг: 0 / 0
16.07.2007, 14:47
    #34661352
RuslanAdm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
Переменные:

DBDATE=DMY4/
DBTIME='%y - %m - %d %H:%M:%S'


GL_DATE - не задана

Локаль ru_RU.866
...
Рейтинг: 0 / 0
16.07.2007, 16:01
    #34661689
Daugava
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
Я бы все таки доп условиями, например через rowid, постарался бы вычислить конкретную строк с данными.
...
Рейтинг: 0 / 0
16.07.2007, 18:37
    #34662330
Boya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
В самом крайнем случае можно прокрутить по всем записям цикл и через обработчик ошибок получить rowid строки в которой неправильная дата.
...
Рейтинг: 0 / 0
17.07.2007, 16:38
    #34664817
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
RuslanAdmПеременные:
DBDATE=DMY4/
DBTIME='%y - %m - %d %H:%M:%S'
GL_DATE - не задана
Локаль ru_RU.866
Эти параметры были при выгрузке или загрузке БД ?
Или на клиенте при выполнении запросов ? Откуда вы их взяли ?
Странноватый формат разделителя для русской локали.
И в стандарте и в жизни используется . (точка).
Я не очень понял из предыдущего, при чем тут MS SQL, но загрузка данных туда без ошибок, также как и загрузка dbimport-ом, вовсе не обозначает, что данные (даты) легли именно такие, какие нужно. Например, вы могли ошибиться с форматом даты при загрузке или выгрузке (т.е. просто не указать его) и будет использоваться формат по умолчанию для этой локали (а он у вас сильно не совпадает).
Опять таки, при чем здесь 32 января ? Или это образно ? :)
Скорее всего, 29 февраля не в высокосном году, а год мог получиться неверным по простой причине загрузки двух символов года вместо четырех (получим другое столетие)...
Проверьте параметр DBCENTURY, если он установлен...
Причин может быть много.

Еще один момент.
С такой ситуацией (неверная дата в поле) я все же встречался несколько раз и причины были следующие:
- битый индекс на этой таблице (легко проверяется oncheck -cI -s)
- проблемы в приложении, которое умудрялось как то запихнуть кривые данные в таблицу во время сбоев (отрубалось насильно приложение или сервак)
Но во всех этих случаях сами данные из столбца не читались, т.е. ошибки возникали уже на этапе простого чтения таблицы. А вы говорите, что выгрузка данных таблицы проходит нормально, значит мало похоже на этот случай...
...
Рейтинг: 0 / 0
19.07.2007, 10:19
    #34669126
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
я бы сначала сделал oncheck -pd потом проверил индексы как указано выше
...
Рейтинг: 0 / 0
19.07.2007, 17:14
    #34671114
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
cprя бы сначала сделал oncheck -pd потом проверил индексы как указано выше
Может все таки oncheck - с d ? Тогда можно и все сразу oncheck -cDI -sqy
...
Рейтинг: 0 / 0
19.07.2007, 18:31
    #34671404
cpr
cpr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
32 января, или где искать проблему!!!
vasilis cprя бы сначала сделал oncheck -pd потом проверил индексы как указано выше
Может все таки oncheck - с d ? Тогда можно и все сразу oncheck -cDI -sqy

я бы индексы не чинил, а пересоздавал заново. Вроде бы Informix так рекомендует.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / 32 января, или где искать проблему!!! / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]