在 SQL Server 上为 Oracle 存储过程使用同义词
Posted
技术标签:
【中文标题】在 SQL Server 上为 Oracle 存储过程使用同义词【英文标题】:Use a Synonym on SQL Server for an Oracle Stored Procedure 【发布时间】: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];
【参考方案1】:
您可以在本地数据库中创建一个存储过程来执行操作
`EXECUTE ('BEGIN PROCEDURE1; END;') AT [LinkedOracleServer];`
这将解决在链接的 Oracle 服务器上直接执行存储过程的错误,同时仍然掩盖确切的执行语言。
【讨论】:
以上是关于在 SQL Server 上为 Oracle 存储过程使用同义词的主要内容,如果未能解决你的问题,请参考以下文章
sql server 怎么服务器连接调用oracle的存储过程
是否可以在 Microsoft SQL Server 上为 SQL 查询设置超时?
是否可以在Microsoft SQL Server上为SQL查询设置超时?
调用使用 Microsoft SQL Server 的输出参数的 Oracle 存储过程