我试图通过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 Collation的参数
感谢帮助
答案 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;