У меня есть следующая перегруженная функция в пакете oracle (10g).
function fnDaysFromNowToDate(dd_mon_yyyy date) return number is days number;
--d2 varchar2(11):=to_char(sysdate,ddf);
Begin
dbms_output.put_line( 'd='|| to_date(dd_mon_yyyy,'dd-mon-yyyy'));
dbms_output.put_line( 's='|| to_date(sysdate,'dd-mon-yyyy'));
return trunc(dd_mon_yyyy-trunc(sysdate));
--return 1;
end;
--- overload for varchar
function fnDaysFromNowToDate(dd_mon_yyyy varchar2) return number is days number;
Begin
dbms_output.put_line( 'd='|| to_date(dd_mon_yyyy,'dd-mon-yyyy'));
dbms_output.put_line( 's='|| to_date(sysdate,'dd-mon-yyyy'));
return trunc(to_date(dd_mon_yyyy,'dd-mon-yyyy')-trunc(sysdate));
end;
И оба они отлично работают при выполнении в Oracle Sql Developer, например,
select t$stdt,to_char(t$tdat,'dd-Mon-YYYY') t$tdat, t$cuno,T$CPGS,T$QANP,T$DISC
from baan.ttdsls031020
where
trim(t$cuno) = '000811'
and pkgUtils.fnDaysFromNowToDate(to_char(t$tdat,'dd-Mon-YYYY')) > 1
and t$qanp = pkgPriceWorx.fndefaultQanp
and trim(t$cpgs) = '1AM00';
но когда я выполняю тот же запрос через связанный SQL-сервер с помощью поставщика OraOLEDB.Oracle
select * from openquery(hades,"
select t$stdt,to_char(t$tdat,'dd-Mon-YYYY') t$tdat, t$cuno,T$CPGS,T$QANP,T$DISC
from baan.ttdsls031020
where
trim(t$cuno) = '000811'
and pkgUtils.fnDaysFromNowToDate(to_char(t$tdat,'dd-Mon-YYYY')) > 1
and t$qanp = pkgPriceWorx.fndefaultQanp
and trim(t$cpgs) = '1AM00'
");
, выдаются следующие ошибки
Поставщик OLE DB "OraOLEDB.Oracle" для связанного сервера "hades "вернуло сообщение
ORA-01861: литерал не соответствует строке формата
ORA-06512: в« SAAP.PKGUTILS », строка 29». Поставщик OLE DB «OraOLEDB.Oracle» для связанного сервера «hades» вернулсообщение "ORA-01861: литерал не соответствует строке формата ORA-06512: в" SAAP.PKGUTILS ", строка 29". Поставщик данных SqlClient .Net: сообщение 7320, уровень 16, состояние 2, строка 3, невозможно выполнить запрос "выберитеt $ stdt, to_char (t $ tdat, 'dd-Mon-YYYY') t $ tdat, t $ cuno, T $ CPGS, T $ QANP, T $ DISC из baan.ttdsls031020, где trim (t $ cuno) = '000811 'и pkgUtils.fnDaysFromNowToDate (to_char (t $ tdat,' dd-Mon-YYYY '))> 1 и t $ qanp = pkgPriceWorx.fndefaultQanp и trim (t $ cpgs) = '1AM00' 'для поставщика OLE DB "OraOLEDB.Oracle" для связанных серверов "hades". *
Есть идеи, почему такое поведение?