INSERT INTO表RETURNING触发器生成的主键从SQL Server链接服务器到Oracle(11g)

时间:2014-04-16 20:19:52

标签: sql-server oracle

场景:从SQL Server链接服务器调用INSERT INTO到Oracle时获取触发器生成的主键

鉴于

  1. Oracle 11g表,其列为PRIMARY_KEY_ID,FIELD1,FIELD2,CREATE_DATE。表具有“BEFORE INSERT”触发器,可以从序列中选择NEXTVAL到PRIMARY_KEY_ID字段。

  2. 带有链接服务器的SQL Server 2008 R2到包含上表的Oracle数据库。

  3. 当我将记录插入Oracle表时,我想检索触发器生成的主键。

    我该怎么做?

1 个答案:

答案 0 :(得分:0)

  1. 确保在SQL Server链接服务器上设置了这些属性:
    • RPC =真
    • RPC Out = True
  2. 在SQL Server中执行此代码:

    DECLARE @Field1 NVARCHAR(42);
    DECLARE @Field2 NVARCHAR(42);
    DECLARE @PrimaryKeyValue INT;
    EXECUTE (
        'begin INSERT INTO MYSCHEMA.MYTABLE (
            FIELD1
            ,FIELD2
            ,CREATE_DATE
            )
        VALUES (
            ?
            ,?
            ,sysdate
            ) RETURNING PRIMARY_KEY_ID INTO :PrimaryKeyValue; end;'
        ,@Field1
        ,@Field2
        ,@PrimaryKeyValue OUTPUT
        ) at oracle_linked_server;
    
  3. 备注

      声明中需要
    1. 开始结束;
    2. SQL Server中声明的 @PrimaryKeyValue 变量与:PrimaryKeyValue 输出参数相同; Oracle对参数使用冒号前缀。
    3. 请参阅Calling Oracle stored procedure with output parameter from SQL Server,其中提供了此答案的灵感。