是否可以在SQL Server中使用同义词在链接的Oracle服务器中执行存储过程?
我知道我可以直接执行SP,并且以下语句可以正常工作:
EXECUTE ('BEGIN PROCEDURE1; END;') AT [LinkedOracleServer];
但是我希望能够使用同义词,这样如果链接服务器名称发生变化,我就不必更新所有代码,只需更新同义词。我已经像这样创建了一个同义词:
CREATE SYNONYM dbo.ORA_PROC1 FOR [LinkedOracleServer]..[MYSCHEMA].[PROCEDURE1];
同义词已正确创建,但使用EXECUTE dbo.ORA_PROC1
调用它会返回错误消息:
链接服务器“LinkedOracleServer”的OLE DB提供程序“OraOLEDB.Oracle”返回消息“未指定的错误”。
Msg 7323,Level 16,State 2,Line 1
将查询文本提交到OLE DB提供程序“OraOLEDB.Oracle”时,链接服务器“LinkedOracleServer”发生错误。
仅供参考,链接服务器上的表的同义词工作正常,为什么不存储过程?
CREATE SYNONYM ORA_TABLE1 FOR [LinkedOracleServer]..[MYSCHEMA].[TABLE1];
GO
SELECT * FROM ORA_TABLE1;
经过进一步测试,我发现了
EXECUTE [LinkedOracleServer]..[MYSCHEMA].[PROCEDURE1]
返回与上面完全相同的错误。所以问题不一定是同义词本身,而是使用执行该过程的语法。
答案 0 :(得分:1)
您可以在本地数据库中创建执行操作的存储过程
`EXECUTE ('BEGIN PROCEDURE1; END;') AT [LinkedOracleServer];`
这将解决在链接的Oracle服务器上直接执行存储过程的错误,同时仍然屏蔽确切的执行语言。