从SQL Server 2012执行Oracle存储过程

时间:2018-10-30 15:49:31

标签: sql-server oracle

我已经更改了变量名称以保护客户。 我正在尝试从我的SQL Server 2012数据库的远程Oracle 12c数据库执行存储过程。如果有帮助,则Oracle数据库pl / SQL过程的输入数据类型为:INPUT1 = CHAR(200),INPUT2 =(NUMBER),OUTPUT = SYS_REFCURSOR 我不断收到以下错误:   链接服务器“ testsrv1”的“ OLE DB提供程序” OraOLEDB.Oracle”返回消息“多步OLE DB操作生成错误。检查每个OLE DB状态值(如果有)。没有完成任何工作。“” 我的查询位于以下位置: 宣告@outputParameter int 宣告@inputParameter varchar(400) 宣告@ inputParameter1 varchar(400) 设置@ inputParameter1 ='SampleStringValue' 设置@inputparameter = SampleNumberValue EXEC('BEGINstoredProcedure(?,?); END;',@inputParameter,@ inputParameter1,@outputParameter OUTPUT)在testrv1

2 个答案:

答案 0 :(得分:0)

经过数小时的研究,我发现您无法通过数据库链接返回SYS_REF_CURSOR数据类型。甚至从一个Oracle数据库到另一个Oracle数据库。

https://asktom.oracle.com/pls/apex/asktom.search?tag=returning-result-set-from-stored-procedure-over-a-database-link

如果Oracle数据库A是产生SYS_REF_CURSOR的数据库,而数据库B是使用者-我在网上找到的唯一方法是检索数据库A内的数据并将其存储到表中,然后通过数据库链接传递该表

这真的是唯一的方法吗?我对oracle有点陌生,但这似乎应该已经可以完成。上面的链接来自10多年前。

答案 1 :(得分:0)

您可以使用SSIS和SSIS Data Streaming Destination连接到SSIS中的Oracle,并在SQL查询中使用SSIS包的输出。

在SSIS中,您可以使用Oracle的OleDB,ODBC,ADO.NET连接器,也可以使用.NET脚本连接到Oracle。