在SQL Server上使用同义词来存储Oracle存储过程

时间:2016-03-10 16:58:38

标签: sql-server oracle stored-procedures synonym

是否可以在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]

返回与上面完全相同的错误。所以问题不一定是同义词本身,而是使用执行该过程的语法。

1 个答案:

答案 0 :(得分:1)

您可以在本地数据库中创建执行操作的存储过程

`EXECUTE ('BEGIN PROCEDURE1; END;') AT [LinkedOracleServer];`

这将解决在链接的Oracle服务器上直接执行存储过程的错误,同时仍然屏蔽确切的执行语言。