【问题标题】:Linked Server Stored Procedure call from MSSQL > ORACLE来自 MSSQL > ORACLE 的链接服务器存储过程调用
【发布时间】:2015-11-11 07:27:04
【问题描述】:

我正在尝试从 MSSQL 向 ORACLE 进行 SP 调用,它们都已成功设置在链接服务器环境中,我遇到的唯一问题是创建对 Oracle 的 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

请指教 非常感谢!

【问题讨论】:

    标签: sql-server oracle stored-procedures linked-server


    【解决方案1】:

    如果我没记错的话,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;
    

    【讨论】:

    • 感谢您的回复,好像快到了,但我也收到一条错误消息;
    • (1 行受影响)消息 7215,级别 17,状态 1,第 6 行无法在远程服务器“FACUAT”上执行语句。
    • 请查看以下链接 - link
    • 感谢 Abhishek 迄今为止的帮助,为了让事情更清楚,我已在此处发布了对我的查询进行了一些修改的查询; stackoverflow.com/questions/32075667/…
    • 感谢您的客气话,如果对您有所帮助会很高兴。无论如何,请您提供链接服务器(FACUAT)的详细信息。
    【解决方案2】:

    只是为了更新,下面是工作查询,加上我重新安装了 32 位 Oracle 驱动程序;

    EXECUTE('Call STP_CAF_PERSON(?,?,?)', @AVEMAIL OUTPUT, @ANCDPXID OUTPUT, @AVCDPURN OUTPUT) AT [CAFUAT]
    

    【讨论】:

      猜你喜欢
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      相关资源
      最近更新 更多