在 SQL 服务器上为 Oracle 存储过程使用同义词

Use a Synonym on SQL Server for an Oracle Stored Procedure

是否可以在 SQL 服务器中使用同义词在链接的 Oracle 服务器中执行存储过程?

我知道我可以直接执行SP,下面的语句是正确的:

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

但我希望能够使用同义词,这样如果链接的服务器名称发生变化,我就不必更新我的所有代码,只需更新同义词。我创建了一个同义词,如下所示:

CREATE SYNONYM dbo.ORA_PROC1 FOR [LinkedOracleServer]..[MYSCHEMA].[PROCEDURE1];

已正确创建同义词,但使用 EXECUTE dbo.ORA_PROC1 returns 调用它时出现错误消息:

OLE DB provider "OraOLEDB.Oracle" for linked server "LinkedOracleServer" returned message "Unspecified error".
Msg 7323, Level 16, State 2, Line 1
An error occurred while submitting the query text to OLE DB provider "OraOLEDB.Oracle" for linked server "LinkedOracleServer".

仅供参考,链接服务器上表的同义词工作正常,那么为什么不使用存储过程?

CREATE SYNONYM ORA_TABLE1 FOR [LinkedOracleServer]..[MYSCHEMA].[TABLE1];
GO
SELECT * FROM ORA_TABLE1;

编辑

经过进一步测试,我发现

EXECUTE [LinkedOracleServer]..[MYSCHEMA].[PROCEDURE1]

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

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

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

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