2015-06-12 13 views
5

im próbuje wykonać oracle przechowywane procedury z SQL Server 2008 R8 koryta DB LINK, nagłówek procedury przechowywanej jest tak:wykonywania Oracle procedury przechowywanej z SQL Server 2008

Procedura testowa (X w NOCOPY VARCHAR2 Y OUT NOCOPY NR, Z LICZBY)

Procedura będzie powinny zaktualizować tabela „mojatabela” i powrócić wyniku

Mój T-SQL jest:

  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; 

Procedura składowana jest wykonywany, ponieważ widzę, że tabela „MOJA_TABELA” jest aktualizowana, ale problem jest to, że im się błąd:

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

które przekładają się

Cannot execute the instruction at the distant server 'DB_ORACLE' 

NB: Parametry RPC RPC, i korzystać z funkcji zdalnego Układanie są włączone

podziękowania za pomoc

+0

Prawdopodobnie jakiś świr bzyka się w nowoczesny sposób, więc wybacz mi, że pytam tych ludzi, ale można to zrobić za pomocą INSERT INTO remTble @ DBlink VALUES ("przechowywane wywołanie proc"), następnie rigger na zdalnym stole WYKONAJE zapisane wywołanie proc, zwraca wyniki w innej tabeli/UPDATE remTble, działa? Jestem pewien, że już kiedyś to widziałem. – TenG

+0

Dzięki za odpowiedź, ale problem nie mogę edytować procedura przechowywana lub dodać wyzwalacz do tej tabeli, ponieważ nie mam kontroli w bazie danych Oracle/tabel. Trzeba to postrzegać jako konsumowanie usługi internetowej, więc jeśli jesteś klientem, nie możesz edytować usługi internetowej. – aminedev

Odpowiedz

0

prostego Oracle procedury połączenia z SQL Server

exec ('rozpocząć sproc_name; end; ') w linked_server_name

wywołanie procedury ze zmiennymi

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

Działa to dobrze dla mnie użycie

+0

Dzięki za odpowiedź, ale rozwiązanie nie pracował dla mnie, mam źródło dodatkowego komunikat o błędzie: PLS-00363: Wyrażenie '' ne peut être utilisée comme Cible d'afektacji ORA-06550: Ligne 1, colonne 53: PLS-00363: wyrażenie '0' ne peut être utilisée comme Cible d'afektacji ORA-06550: Ligne 1 COLONNE 7: PL/SQL. Oświadczenie ignorowane” Msg 7215, Niveau 17 État 1 , Ligne 11 Niemożliwy d'exécuter l'instrukcji sur le serveur distant 'DB_ORACLE'. – aminedev

+0

możesz przetłumaczyć? –

+0

Dostawca OLE DB "OraOLEDB.Serwer połączony Oracle "DB_ORACLE" zwrócił komunikat "ORA-06550: wiersz 1, kolumna 50: PLS-00363: wyrażenie" "nie może być użyte jako cel przydziału ORA-06550: wiersz 1, kolumna 53: PLS-00363: Wyrażenie "0" nie może być używane jako cel przydziału ORA-06550: wiersz 1, kolumna 7: PL/SQL: Instrukcja ignorowana ". Msg 7215, poziom 17, Stan 1, wiersz 10 Nie można wykonać instrukcji na zdalnym serwerze "DB_ORACLE". Myślę, że problemem są parametry WYJŚCIA – aminedev

0

Przekazywanie zmiennych wyjściowych poprzez zestaw wyników powinno działać:

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; 
Powiązane problemy