从Sql Server 2008

时间:2015-06-12 08:22:03

标签: sql-server oracle tsql stored-procedures linked-server

我试图通过DB LINK从SQL Server 2008 R8执行oracle存储过程, 存储过程的标题是这样的:

  
    
      

程序测试(X OUT NOCOPY VARCHAR2,Y OUT NOCOPY NUMBER,Z in NUMBER)

    
  

此程序将更新表格" MYTABLE"并返回结果

我的T-SQL是:

           DECLARE @X nvarchar(255)              
           DECLARE @Y INTEGER   
           DECLARE @Z INTEGER


           SET @X= ''
           SET @Y = 0
           SET @Z = 2

           EXEC('begin USER.PKG.TEST(?,?,?); end;',@X OUTPUT, @Y OUTPUT,@Z ) AT DB_ORACLE;

执行存储过程是因为我可以看到表" MYTABLE"已更新,但问题是即时收到错误:

Msg 7215, Niveau 17, État 1, Ligne 10
Impossible d'exécuter l'instruction sur le serveur distant 'DB_ORACLE'.

转换为

Cannot execute the instruction at the distant server 'DB_ORACLE'

注意:启用了Rpc,Rpc Out和Use Remote Collat​​ion的参数

感谢帮助

2 个答案:

答案 0 :(得分:0)

从SQL Server进行简单的Oracle过程调用

exec('begin sproc_name; end;')在linked_server_name

使用变量调用过程

<B>declare @z int<B>
<B>set @z = 10 <B>
exec ('begin sproc_name(''' + @z + '''); end;') at 
linked_server_name;

这对我来说很好 使用

答案 1 :(得分:0)

通过结果集传递输出变量应该有效:

DECLARE @X nvarchar(255) = '';
DECLARE @Y int = 0;
DECLARE @Z int = 2;

DECLARE @Result As Table (X nvarchar(255), Y int);

INSERT INTO @Result (X, Y)
    EXEC('declare X nvarchar(255) = ?; Y int = ?; Z int = ?; begin USER.PKG.TEST(X, Y, Z); select X, Y from DUAL; end;', @X, @Y, @Z) AT DB_ORACLE;

SELECT @X = X, @Y = Y FROM @Result;