Homer316
Дата: 24.11.2009 20:09:18
Здрваствуйте, уважаемые.
Было:
Win2003x32(ру) -- Oracle 11.1.0.6.0 x32 -- D.Gateways 11.1.0.6.0 x32 -- MSSQL2005
Все работало.
Стало:
Win2003x64(eng) -- Oracle 11.1.0.6.0 x64 -- D.Gateways 11.1.0.6.0 x32(как я понял х64 еще нет) -- MSSQL2005
Впринципе dbLink работает, select'ы работают все, а вот такая процедурка(упрощенная из рабочей для скорости и наглядности) вылетает с ошибкой:
ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
[Oracle][ODBC SQL Server Driver]Invalid character value for cast specification
Процедура:
create or replace procedure test is
cursor upd_list is
select "ID_PP","DT_ASTRO","DT_SEAZON","CREATE_TIME" from Exp_Changes_ENF@SFERA
where "ID_PP"=5
order by "CREATE_TIME";
del_mark number;
begin
del_mark:=0;
FOR i IN upd_list
LOOP
if i.create_time>del_mark then
del_mark:=i.create_time;
DBMS_OUTPUT.put_line(i.create_time);
end if;
END loop;
commit;
DBMS_OUTPUT.put_line(del_mark);
begin
DELETE FROM dbo.Exp_Changes_ENF@SFERA
where "CREATE_TIME"<=del_mark
and "ID_PP"=5;
commit;
exception when others
then
DBMS_OUTPUT.put_line(sqlerrm);
end;
end test;
"CREATE_TIME" получаю C O N V E R T ( f l o a t , G E T D A T E ( )), чтобы не терять милисекунды в Оракле
Вылетает на DELETE.
Причем если руками писать
DELETE FROM dbo.Exp_Changes_ENF@SFERA
where "CREATE_TIME"<='123.123'
and "ID_PP"=5;
все работает, не работает только если '123.123' берется из переменной.
Пробовал разные варианты с nls_lang, HS_LANGUAGE и десятичным разделителем, не помогает.
andrey_anonymous
Дата: 24.11.2009 20:42:03
Форматировать надо...
Попробуйте для чистоты эксперимента
....
DELETE FROM dbo.Exp_Changes_ENF@SFERA
where "CREATE_TIME"<= TO_CHAR(del_mark,'99999999999.9999999999');
and "ID_PP"=5;
....
...а для того, чтобы "не терять миллисекунды в оракле" в этом самом оракле есть тип данных timestamp.
Homer316
Дата: 24.11.2009 20:49:39
При передаче через Gateways милисекунды в любом случае пропадут, суть не в этом. Меня устраивало как оно работало, почему не работает сейчас?
С уважением.
Homer316
Дата: 24.11.2009 21:31:10
Пробовал NLS_LANG и HS_LANGUAGE и американский, и русский, менял разделитель в настройках сервера...
Не помогает.
Я просто не так выразился, не "почему не работает сейчас?" а "как решить проблему?"
Homer316
Дата: 25.11.2009 21:17:06
Результат работы процедуры с
where "CREATE_TIME"<= TO_CHAR(del_mark,'99999999999.9999999999');
:
start
40138.3699296682
40138.3699296682
ORA-02070: database SFERA does not support TO_NUMBER in this context