Cuối cùng đã tìm ra một vài giải pháp - mấu chốt của vấn đề (đối với chúng tôi) là theo mặc định RPC bị vô hiệu hóa đối với các máy chủ được liên kết. Các tham số cho Rpc, Rpc Out và Use Remote Collation cần được đặt thành true. Thông tin thêm:
Giải pháp bạn sử dụng sẽ phụ thuộc vào các yêu cầu đầu ra của thủ tục. Ví dụ đầu tiên trả về một giá trị đầu ra. Ví dụ thứ hai không có giá trị đầu ra nào được trả về (dữ liệu được thu thập trong một truy vấn tiếp theo).
Ví dụ 1
Thủ tục T2T_collect_all có hai tham số đầu vào (ngày bắt đầu và ngày kết thúc) và một tham số đầu ra (số hàng).
DECLARE @ l_i_parameter1 varchar (10)
DECLARE @ l_i_parameter2 varchar (10)
DECLARE @ l_i_parameter3 varchar (10)
DECLARE @ l_i_parameter4 varchar (10)
DECLARE @ l_o_parameter1 số nguyên
SET @ l_i_parameter1 ='2009/10/01'
SET @ l_i_parameter2 ='yyyy / mm / dd'
SET @ l_i_parameter3 ='2009/12/31'
SET @ l_i_parameter4 ='yyyy / mm / dd'
SET @ l_o_parameter1 =0
EXECUTE ('begin T2T_collect_all (to_date (?,?), To_date (?,?),?); End;',
@l_i_parameter1,
@l_i_parameter2,
@l_i_parameter3,
@l_i_parameter4,
@l_o_parameter1 OUTPUT
) TẠI ORA_DB;
Thông tin khác: http://blogs.msdn.com/joaquinv/archive/2008/10/23/execute-oracle-stored-procedure-in-sql-server.aspx
Ví dụ 2a
Thủ tục T2T_collect_allx chỉ có hai tham số đầu vào (ngày bắt đầu và ngày kết thúc).
EXECUTE ('begin T2T_collect_allx (SYSDATE - 40, SYSDATE); end;') ORA_DB;
Ví dụ 2b
CHỌN * TỪ OPENQUERY (ORA_DB, 'begin T2T_collect_allx (SYSDATE - 40, SYSDATE); end;')