来自 MSSQL > ORACLE 的链接服务器存储过程调用
Linked Server Stored Procedure call from MSSQL > ORACLE
我正在尝试从 MSSQL 向 ORACLE 发出 SP 调用,它们都在链接服务器环境中成功设置,我遇到的唯一问题是创建 SQL SP 调用甲骨文;
下面是我试图在 SQL 中作为 SP 调用重现的过程;
SET TIMING ON
SET SERVEROUTPUT ON
DECLARE
AVEMAIL VARCHAR2(255);
ANCDPXID NUMBER;
AVCDPURN VARCHAR2(12);
BEGIN
AVEMAIL := 'a@b.com';
ANCDPXID := NULL;
AVCDPURN := NULL;
STP_FAC_PERSON ( AVEMAIL, ANCDPXID, AVCDPURN );
DBMS_OUTPUT.Put_Line('ANCDPXID = ' || TO_CHAR(ANCDPXID));
DBMS_OUTPUT.Put_Line('AVCDPURN = ' || AVCDPURN);
END;
我已经尝试了很多次下面的例子,但都没有用;
SELECT * FROM OPENQUERY(FACUAT, '{Call FACUAT.CDBWEB.TACOMCDB.STP_FAC_PERSON( ''test@test.com'','''',''''}' )
EXEC ('CALL TACOMCDB.STP_FAC_PERSON(''test@test.com'','''','''')') at FACUAT
EXEC FACUAT.CDBWEB.TACOMCDB.STP_FAC_PERSON
请指教
非常感谢!
如果我没记错的话,OPENQUERY 在用于调用 Oracle 存储过程时将不起作用。
请尝试 -
DECLARE @param_in_1 VARCHAR(255);
DECLARE @param_out_1 INT;
DECLARE @param_out_2 VARCHAR(12);
SET @param_in_1 = 'test@test.com';
EXECUTE ('BEGIN TACOMCDB.STP_FAC_PERSON(?,?,?); END;', @param_in_1,@param_out_1 OUTPUT, @param_out_2 OUTPUT) AT FACUAT;
SELECT @param_out_1,@param_out_2;
只是为了更新,下面是工作查询,另外我重新安装了 32 位 Oracle 驱动程序;
EXECUTE('Call STP_CAF_PERSON(?,?,?)', @AVEMAIL OUTPUT, @ANCDPXID OUTPUT, @AVCDPURN OUTPUT) AT [CAFUAT]
我正在尝试从 MSSQL 向 ORACLE 发出 SP 调用,它们都在链接服务器环境中成功设置,我遇到的唯一问题是创建 SQL SP 调用甲骨文;
下面是我试图在 SQL 中作为 SP 调用重现的过程;
SET TIMING ON
SET SERVEROUTPUT ON
DECLARE
AVEMAIL VARCHAR2(255);
ANCDPXID NUMBER;
AVCDPURN VARCHAR2(12);
BEGIN
AVEMAIL := 'a@b.com';
ANCDPXID := NULL;
AVCDPURN := NULL;
STP_FAC_PERSON ( AVEMAIL, ANCDPXID, AVCDPURN );
DBMS_OUTPUT.Put_Line('ANCDPXID = ' || TO_CHAR(ANCDPXID));
DBMS_OUTPUT.Put_Line('AVCDPURN = ' || AVCDPURN);
END;
我已经尝试了很多次下面的例子,但都没有用;
SELECT * FROM OPENQUERY(FACUAT, '{Call FACUAT.CDBWEB.TACOMCDB.STP_FAC_PERSON( ''test@test.com'','''',''''}' )
EXEC ('CALL TACOMCDB.STP_FAC_PERSON(''test@test.com'','''','''')') at FACUAT
EXEC FACUAT.CDBWEB.TACOMCDB.STP_FAC_PERSON
请指教 非常感谢!
如果我没记错的话,OPENQUERY 在用于调用 Oracle 存储过程时将不起作用。 请尝试 -
DECLARE @param_in_1 VARCHAR(255);
DECLARE @param_out_1 INT;
DECLARE @param_out_2 VARCHAR(12);
SET @param_in_1 = 'test@test.com';
EXECUTE ('BEGIN TACOMCDB.STP_FAC_PERSON(?,?,?); END;', @param_in_1,@param_out_1 OUTPUT, @param_out_2 OUTPUT) AT FACUAT;
SELECT @param_out_1,@param_out_2;
只是为了更新,下面是工作查询,另外我重新安装了 32 位 Oracle 驱动程序;
EXECUTE('Call STP_CAF_PERSON(?,?,?)', @AVEMAIL OUTPUT, @ANCDPXID OUTPUT, @AVCDPURN OUTPUT) AT [CAFUAT]