2015-06-12 23 views
5

Im cố gắng để thực hiện một thủ tục oracle lưu trữ từ SQL Server 2008 R8 máng DB LINK, tiêu đề của thủ tục lưu trữ là như thế này:thực hiện một thủ tục lưu trữ oracle từ Sql Server 2008

tHỦ TỤC THI (X OUT NOCOPY VARCHAR2, Y OUT NOCOPY SỐ, Z TRÊN SỐ)

thủ tục này sẽ cần cập nhật một bảng "mytable" và trả về kết quả một

My T-SQL là:

  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; 

Các thủ tục lưu trữ được thực hiện, vì tôi có thể thấy rằng các bảng "mytable" được cập nhật, nhưng vấn đề được im mà nhận được một lỗi:

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

đó dịch trong

Cannot execute the instruction at the distant server 'DB_ORACLE' 

NB: Các thông số cho RPC, RPC Out, và sử dụng từ xa Collation được kích hoạt

Nhờ sự giúp đỡ

+0

Có lẽ một số whiz bang cách hiện đại, vì vậy tha thứ cho tôi để hỏi folks này, nhưng điều này có thể được thực hiện bằng cách sử dụng INSERT INTO remTble @ DBlink VALUES ('proc call được lưu trữ'), sau đó tại rigger trên bảng từ xa THỰC HIỆN cuộc gọi proc được lưu trữ, trả về kết quả trong một bảng/UPDATE remTble, làm việc? Tôi chắc rằng tôi đã nhìn thấy một nơi nào đó trước đây. – TenG

+0

Cảm ơn câu trả lời, nhưng vấn đề tôi không thể chỉnh sửa các thủ tục được lưu trữ hoặc thêm một kích hoạt cho bảng đó, bởi vì tôi không có sự kiểm soát trên cơ sở dữ liệu oracle bảng. Bạn phải thấy điều này giống như tiêu thụ một webservice vì vậy nếu bạn là khách hàng bạn không thể chỉnh sửa webservice. – aminedev

Trả lời

0

cho một Oracle gọi thủ tục đơn giản từ SQL Server

exec ('bắt đầu sproc_name; cuối; ') tại linked_server_name

gọi thủ tục với các biến

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

này hoạt động tốt đối với tôi sử dụng

+0

Cảm ơn câu trả lời, nhưng giải pháp không hiệu quả đối với tôi, tôi có thông báo lỗi bổ sung: PLS-00363: biểu thức '' ne peut être utilisée comme cible d'affectation ORA-06550: Ligne 1, colonne 53: PLS-00363: biểu thức '0' ne peut être utilisée comme cible d'affectation ORA-06550: Ligne 1, colonne 7: PL/SQL: Tuyên bố bị bỏ qua ". Msg 7215, Niveau 17, État 1 , Ligne 11 Bạn có thể dịch nó không? ' – aminedev

+0

bạn có thể dịch nó không? –

+0

Nhà cung cấp OLE DB "OraOLEDB.Oracle "" DB_ORACLE "máy chủ liên kết trả về thông báo" ORA-06550: dòng 1, cột 50: PLS-00363: biểu thức " 'không thể được sử dụng làm mục tiêu chuyển nhượng ORA-06550: dòng 1, cột 53: Không thể sử dụng PLS-00363: Biểu thức '0' làm mục tiêu chuyển nhượng ORA-06550: dòng 1, cột 7: PL/SQL: Tuyên bố bị bỏ qua ". Msg 7215, Cấp 17, Tiểu bang 1, Dòng 10 Không thể thực hiện lệnh trên máy chủ từ xa 'DB_ORACLE'. Tôi nghĩ rằng vấn đề là tham số OUTPUT – aminedev

0

Đi qua các biến đầu ra thông qua tập kết quả nên làm việc:

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; 
Các vấn đề liên quan