【问题标题】:INSERT INTO table RETURNING trigger-generated primary key from SQL Server linked server to Oracle (11g)INSERT INTO table RETURNING 触发器生成的主键从 SQL Server 链接服务器到 Oracle (11g)
【发布时间】:2014-04-16 20:19:52
【问题描述】:

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

给定

  1. 包含 PRIMARY_KEY_ID、FIELD1、FIELD2、CREATE_DATE 列的 Oracle 11g 表。表有“BEFORE INSERT”触发器,从序列中选择 NEXTVAL 到 PRIMARY_KEY_ID 字段。

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

当我在 Oracle 表中插入一条记录时,我想检索触发器生成的主键。

我该怎么做?

【问题讨论】:

    标签: sql-server oracle


    【解决方案1】:
    1. 确保在 SQL Server 链接服务器上设置了这些属性:
      • RPC=真
      • RPC 输出=真
    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;
      

    备注

    1. beginend; 在语句中是必需的。
    2. SQL Server 中声明的@PrimaryKeyValue 变量与:PrimaryKeyValue 输出参数相同; Oracle 对参数使用冒号前缀。
    3. 请参阅 Calling Oracle stored procedure with output parameter from SQL Server,它为这个答案提供了灵感。

    【讨论】:

    • 好吧,无法将 SQL 格式化为代码。如果有人愿意并且有能力,将不胜感激......
    • 在一个列表中你需要缩进8个空格的代码,而不仅仅是4个
    猜你喜欢
    • 1970-01-01
    • 2016-06-21
    • 2021-11-16
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多