Oracle Link Query返回奇怪的值

时间:2011-11-17 09:34:32

标签: sql tsql linked-server pass-through

我正在开发查询Oracle链接服务器并返回值的Store过程。 如果我复制在屏幕上打印并在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语句。我只是直接使用了以下sqls而且它不起作用。我发现months_between函数在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'''
);

1 个答案:

答案 0 :(得分:0)

我找到了答案。

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

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

我不知道为什么,但有趣的一个。如果您知道答案,请告诉我。非常感谢。