Sql 返回奇怪值的Oracle链接查询

Sql 返回奇怪值的Oracle链接查询,sql,tsql,linked-server,pass-through,Sql,Tsql,Linked Server,Pass Through,我正在开发存储过程,该过程查询Oracle链接服务器并返回值。 如果复制屏幕上打印并在Oracle SQL Developer上运行的语句,它将正确返回该图 但是当我运行这个链接查询时,它返回了错误的数字。我完全迷路了 DECLARE @MDX NVARCHAR(MAX) DECLARE @stmt NVARCHAR(MAX) SET @MDX = dbo.fnCrseReviewDiversityDataStarts(117) Set @stmt = 'SELECT * FROM Open

我正在开发存储过程,该过程查询Oracle链接服务器并返回值。 如果复制屏幕上打印并在Oracle SQL Developer上运行的语句,它将正确返回该图

但是当我运行这个链接查询时,它返回了错误的数字。我完全迷路了

DECLARE @MDX NVARCHAR(MAX)
DECLARE @stmt NVARCHAR(MAX)

SET @MDX = dbo.fnCrseReviewDiversityDataStarts(117) 
Set @stmt = 'SELECT * FROM OpenQuery(ORA_Link, ''' + REPLACE(@MDX, '''', '''''') + ''')'
PRINT @MDX

EXEC (@stmt)
请忽略上面的SQL语句。我只是直接使用了下面的SQL,但它不起作用。我发现函数在OracleServer中无法正常工作

SELECT * FROM OpenQuery(ORA_LINK, 'select t2.s_studentreference "Student reference",
to_char(t3.e_start,''YYYY'') "Start",
t1.p_dob,
''31-Aug-''||to_char(t3.e_start,''YYYY'') "StartDate",
months_between(t1.p_dob,''31-Aug-''||to_char(t3.e_start,''YYYY'')) "DifferenceMonths"    
from capd_student t2,capd_person t1,capd_moduleenrolment t3 
where t2.s_id(+)=t1.p_id and (t3.e_student=t1.p_id) and (t3.e_reference=to_char(1109315)) 
and t3.e_status = ''L'''
);

我找到了答案

在Oracle中,如果我们使用“01-AUG-2010”,它会自动识别为日期

但是,在传递查询中,我们必须使用to_date('01-AUG-2010','DD-MON-YYYY'),并明确需要告诉您这是一个日期


我不知道为什么,但很有趣。如果你知道答案,请告诉我。非常感谢大家。

请将spI的代码上传到aF。谢谢。