【发布时间】:2016-03-10 16:58:38
【问题描述】:
是否可以在 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”返回消息“未指定错误”。
消息 7323,第 16 级,状态 2,第 1 行
向链接服务器“LinkedOracleServer”的 OLE DB 提供程序“OraOLEDB.Oracle”提交查询文本时出错。
仅供参考,链接服务器上的表的同义词可以正常工作,那么为什么不使用存储过程呢?
CREATE SYNONYM ORA_TABLE1 FOR [LinkedOracleServer]..[MYSCHEMA].[TABLE1];
GO
SELECT * FROM ORA_TABLE1;
编辑
经过进一步测试,我发现
EXECUTE [LinkedOracleServer]..[MYSCHEMA].[PROCEDURE1]
返回与上面完全相同的错误。所以问题不一定出在同义词本身,而在于执行该过程的语法。
【问题讨论】:
-
请包含错误信息
-
@JonathonOgden 完成。 (总是好的建议!)
-
为了清楚起见,您可以直接执行您的这个SP,而不是通过同义词? (在您的开幕式中,我似乎还不够清楚)
-
@JonathonOgden 是的,问题中的第一个执行语句按预期工作。
-
您可以在当前数据库中创建一个存储过程来执行操作
EXECUTE ('BEGIN PROCEDURE1; END;') AT [LinkedOracleServer];
标签: sql-server oracle stored-procedures synonym