Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблемы с double при выгрузке/загрузке базы / 11 сообщений из 11, страница 1 из 1
27.07.2006, 14:32
    #33882350
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с double при выгрузке/загрузке базы
Всем добрый день!
ASA 7.04 патч 3541

1) Делаю выгрузку базы
2) Создаю новую базу
3) Выполняю скрипт для загрузки в новую
При загрузке данных одной из таблиц оператор INPUT INTO выдает ошибку, что загружаемое значение в строке такой-то не проходит по диапазону
5.13273425920143604E-313
Смотрю в выгруженный текстовый dat-файл этой таблицы - все верно, там 5.13273425920143604E-313.
Поле double. Минимум что там можно хранить, по документации 2.22507385850721e-308 (0 не в счет)
Смотрю в базу(откуда выгружал) там 5.13273425920143604E-313
Это как понимать? Откуда в базе может быть такое значение, если есть указанные ограничения по значениям.

Проблема усугубляется, что эти неверные значения выгрузились по нескольким полям и нескольким таблицам. Вручную dat-файлы править, естественно запаришься.
Пока единственное что приходит в голову,
выдать Update =0.0 на эти поля по этим таблицам перед выгрузкой.
Примерно так
Update t1 set price=0.0 where price<0.00000000000000001 and price<>0.0

Может кто сталкивался?
...
Рейтинг: 0 / 0
27.07.2006, 15:51
    #33882625
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с double при выгрузке/загрузке базы
Вот те раз!!!
При экспериментах над полем double обнаружилось следующее:
Таблица t, поле price(double)
Если выполнить
1) Update t set price=2.22507385850721e-308
price=2.22507385850721e-308. Все правильно, самое минимальное значение проходит
2) Update t set price=2.22507385850720e-308
price=0.0 Все правильно, меньше минимально возможного значение = 0.0

А вот:
3) Update t set price=0.1/1.79769313486231e+308
price=5.56268464626788E-311. Т.е. меньше минимально возможного значения по базе!!!

Отсюда и моя проблемка описанная выше.

Тут мне кажется попахивает ошибочкой от Sybase
Проверьте кто может у себя в разных версиях.
Можно просто: оператор select .01/1.79769313486231e+308 что возвратит?
...
Рейтинг: 0 / 0
27.07.2006, 16:13
    #33882712
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с double при выгрузке/загрузке базы
...
Рейтинг: 0 / 0
27.07.2006, 16:46
    #33882842
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с double при выгрузке/загрузке базы
ASCRUSASA9 = вернула 0
SA10 = вернула 0
--
www.rusug.ru - портал русскоязычной группы пользователей Sybase
Значит поправили.

А я вот сижу думаю.
Либо update по полям с double перед выгрузкой
Либо dat-файлы править в редакторе.
Хорошо что ошибка только в 3 таблицах.
...
Рейтинг: 0 / 0
27.07.2006, 23:46
    #33883780
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с double при выгрузке/загрузке базы
Ужаз. Кто жи price хранит в double ? Это же не average price ?
...
Рейтинг: 0 / 0
28.07.2006, 05:10
    #33883916
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с double при выгрузке/загрузке базы
Похоже на отсутствие нормализации мантисы. Только в этом случае можно выскочить за минимальное значение. Такое иногда наблюдается, если арифметика double реализуется программно.
...
Рейтинг: 0 / 0
28.07.2006, 10:22
    #33884310
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с double при выгрузке/загрузке базы
MasterZivУжаз. Кто жи price хранит в double ? Это же не average price ?
Да я понимаю, что price надо обрезать до нужного кол-ва цифр после запятой.
Но в данном случае не в этом дело.
У меня ведь ошибка не только в колонке price. И вычисления в базе не мои.
Меня сам факт смущает.
Как может попасть в double число выходящее за пороговые значения по Sybase???
Про идее должно обрезаться всегда либо по максимальному либо по минимальному либо выдавать ошибку.
...
Рейтинг: 0 / 0
28.07.2006, 11:05
    #33884475
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с double при выгрузке/загрузке базы
...
Рейтинг: 0 / 0
28.07.2006, 11:11
    #33884504
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с double при выгрузке/загрузке базы
ASCRUSА что стоит в опциях БД PRECISION и SCALE ?
--
www.rusug.ru - портал русскоязычной группы пользователей Sybase
SCALE=12
PRECISION=40
...
Рейтинг: 0 / 0
28.07.2006, 14:13
    #33885263
antand
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с double при выгрузке/загрузке базы
Что касается выгрузки/загрузки базы, то проблему победил, выдав
update price=0.0 и т.д. на ошибочные записи перед выгрузкой базы.

Но проблема осталась.
Нельзя гарантировать, что это не повториться.
Сейчас проведу анализ кода(клиента и сервера), где эти значения меняются
вероятно надо будет дополнительные проверки в вычислениях вставить.

Так что кто ASA 7 пользуется, будьте внимательны в этом вопросе.
...
Рейтинг: 0 / 0
16.08.2006, 17:47
    #33922846
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с double при выгрузке/загрузке базы
Проверил в АСА9.0.2 3320.
результат селекта 5.56268464626788497E-311
Мда, странно, по докам меньше чем 2.22507385850721e–308 быть не должно.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Проблемы с double при выгрузке/загрузке базы / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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