将字符串参数传递给SQL Server中的链接Oracle Server过程

时间:2013-11-19 16:53:30

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

我有一个名为P_CREATE_USER的Oracle程序。它需要一个varchar2参数:

create or replace PROCEDURE 
P_CREATE_USER (P_USERID varchar2)
...

我可以通过EXEC P_CREATE_USER('MyUserId')

从Oracle运行它

我们将Oracle服务器链接到我们的SQL Server。

我试过了:

EXECUTE('P_CREATE_USER(''MyUserId'')') AT ORACLE_SERVER

对于我的麻烦,我得到:

  

链接服务器“ORACLE_SERVER”的OLE DB提供程序“OraOLEDB.Oracle”返回消息“ORA-00900:无效的SQL语句”。
  消息7215,级别17,状态1,行1   无法在远程服务器'ORACLE_SERVER'上执行语句。

我尝试了许多变体,使用P_CREATE_USER和参数之间的空格而不是括号。我尝试过使用@P_USERID=''MyUserId''。我没有问题以这种方式运行无参数程序,但我看不出如何传递字符串......

更新:用于链接服务器的UserId具有运行此过程的权限,可以直接从Oracle运行。这不是权限问题。我可以说,参数是造成问题的唯一原因。

1 个答案:

答案 0 :(得分:2)

该解决方案需要检查SQL Server(服务器对象/链接服务器/提供程序/ OraOLEDB.Oracle)中的OraOLEDB.Oracle驱动程序中的Dynamic Parameters属性。

然后,要调用该过程,我必须执行以下操作:

DECLARE @userid varchar(50)
SET @userid = 'MyUserId'
EXECUTE ('BEGIN P_CREATE_USER(?); END;', @userid) AT ORACLE_SERVER