用mssql表加入oracle

时间:2015-01-14 16:04:06

标签: sql sql-server oracle join

当我执行以下行时,我得到结果:

select * from my_table@link; 

但是,当我尝试将链接表与其他表连接时,例如在选择中,我会收到错误,其中包含" z.id - 无效标识符"

SELECT

                e.USER_NAME,e.FULL_NAME,r.RFC_NUMBER,r.TYPE, 

                TO_CHAR(TRUNC(a.TOTAL_TIME/3600),'FM9900') || ':' ||
                TO_CHAR(TRUNC(MOD(a.TOTAL_TIME,3600)/60),'FM00') || ':' ||
                TO_CHAR(MOD(a.TOTAL_TIME,60),'FM00') as TOTAL_TIME,

                a.ASSIGN_DATE,a.TIME_START,a.TIME_STOP,
                r.SUBMITTED_BY,r.REGISTER_DATE,r.DESCRIPTION 


                FROM table_a a 
                JOIN table_r ON a.REQ_ID = r.REQ_ID 
                JOIN table_e e ON e.emp_id = a.emp_id

                LEFT JOIN my_table@link z ON e.emp_id = z.id

                WHERE a.ASSIGN_DATE > '01-JAN-2013' and a.ASSIGN_DATE < '01-JAN-2015'

                ORDER BY r.RFC_NUMBER;

table_a,table_r和table_e是oracle表。 table my_table是通过链接访问的mssql表。

所以我的问题是如何使用链接的mssql表加入oracle表?

1 个答案:

答案 0 :(得分:1)

从您的评论中我认为问题是SQL Server默认情况下使用区分大小写的列名称(更具体的信息can be found at this link),而Oracle只会使用区分大小写的列名称(如果它们用双引号括起来) "。因此,如果SQL Server表中的列id为小写,则需要在Oracle中使用此列名称周围的引号。也就是说,如果您不在Oracle中的列名称周围添加引号,则它将采用大写。因此,z.id将查找名为ID的列,而z."id"将查找名为id的列。具体来说,这一行:

LEFT JOIN my_table@link z ON e.emp_id = z.id

应该是这样的:

LEFT JOIN my_table@link z ON e.emp_id = z."id"

希望这有帮助。