[Moscow.pm] Глюки работы с MSSQL2005 + DBD
STork Loginoff Николай Александрович
STork2000 на yandex.ru
Пн Дек 21 04:44:59 PST 2009
Привет...
Я как бы полный нуб в перл и боюсь мой совет примут за "идиотизм", но я сталкивался почти с похожей проблемой в самих числах integer.
Проблема в том, что 2 - 1 != 1
Т.е. на самом деле при вычислительных операциях 2 - 1 = 0.999999999999999999999999999999999 но Перл все ровно показывает 1
Поэтому нужно было переводить его в текст, а потом делать int и после этого заносить в БД.
Вот пример, где мы используем такую конструкцию. Вряд ли поможет вам, но чем черт не шутит.
sub minus_money {
my ($self, $money, $uis)=shift;
$money = "$money";
$money = int ($money * 100);
DBLib::db_do("update users_stats set money=money-? where uid=?",$money,$uid);
}
21.12.09, 12:47, "Павел Купцов" <pavel на kuptsov.info>:
> Привет всем!
> Бьюсь уже два дня над неожиданно всплывшей проблемой в одном из старых своих
> скриптов.
> Скрипт получает от пользователя номер вида: 911011, и затем:
> 1. Ищет этот номер в таблице
> 2. Вставляет в другую таблицу этот номер и еще кое-какие данные.
> Все это работает на DBI + DBD::ODBC + MSSQL2005 + ActivePerl 5.10
> На некоторых данных обнаружил что DBD выдает ошибку:
>
> [Mon Dec 21 12:19:10 2009] inv.pl: DBD::ODBC::st execute failed:
> [Microsoft][ODBC SQL Server Driver]Недопустимое значение точности
> (SQL-HY104) at WebDB.pm line 122, line 10.
>
> В первом случае решением проблемы оказалось замена конструкции:
> $sth->prepare('здесь код с знакоместами ? ? ?');
> $sth->execute($var1,$var2,...);
> на код без знакомест, т.е.:
> $sth->prepare('здесь код $var1 $var2');
> $sth->execute();
>
> А во втором случае имеем дело с SP, И такая замена не помогает...
> Сделал trace - (в аттаче)...
>
> Что за ошибка - помогите идентифицировать?
> Все типы входных параметров совпадают с типами БД, то есть везде вообще
> только цифры, которые идут в int поля.
> Удивляет еще и то что случается такое раз от разу на SQL2000, а на 2005 на
> данный момент валится каждый раз.
> Задача запустить все это именно на 2005.
> Спасибо.
>
>
>
>
--
С Уважением, Login|off Николай Александрович.
Подробная информация о списке рассылки Moscow-pm