Передача строковых параметров в связанные процедуры Oracle Server из SQL Server
У меня есть процедура Oracle называется P_CREATE_USER
, Требуется один varchar2
параметр:
create or replace PROCEDURE
P_CREATE_USER (P_USERID varchar2)
...
Я могу запустить это из Oracle как EXEC P_CREATE_USER('MyUserId')
У нас есть сервер Oracle, связанный с нашим сервером SQL.
Я пробовал:
EXECUTE('P_CREATE_USER(''MyUserId'')') AT ORACLE_SERVER
За мои неприятности я получаю:
Поставщик OLE DB "OraOLEDB.Oracle" для связанного сервера "ORACLE_SERVER" вернул сообщение "ORA-00900: недопустимый оператор SQL".
Msg 7215, уровень 17, состояние 1, строка 1
Не удалось выполнить оператор на удаленном сервере 'ORACLE_SERVER'.
Я пробовал несколько вариантов, используя пробел между P_CREATE_USER
и параметр вместо круглых скобок. Я пытался использовать @P_USERID=''MyUserId''
, У меня нет проблем с запуском процедур без параметров, но я не могу понять, как передать строку...
Обновление: UserId, используемый для связанного сервера, имеет разрешения для запуска этой процедуры и может запускать его непосредственно из Oracle. Это не проблема с разрешениями. Насколько я могу судить, параметр является единственной причиной проблемы.
1 ответ
Решение требовало проверки Dynamic Parameters
свойство в драйвере OraOLEDB.Oracle в SQL Server (Объекты сервера / Связанные серверы / Провайдеры /OraOLEDB.Oracle).
Затем, чтобы вызвать процедуру, мне нужно было сделать следующее:
DECLARE @userid varchar(50)
SET @userid = 'MyUserId'
EXECUTE ('BEGIN P_CREATE_USER(?); END;', @userid) AT ORACLE_SERVER