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

Posted

技术标签:

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

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

给定

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

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

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

我该怎么做?

【问题讨论】:

【参考方案1】:
    确保在 SQL Server 链接服务器上设置了这些属性: RPC=真 RPC 输出=真

    在 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;
    

备注

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

【讨论】:

好吧,无法将 SQL 格式化为代码。如果有人愿意并且有能力,将不胜感激...... 在一个列表中你需要缩进8个空格的代码,而不仅仅是4个

以上是关于INSERT INTO table RETURNING 触发器生成的主键从 SQL Server 链接服务器到 Oracle (11g)的主要内容,如果未能解决你的问题,请参考以下文章

Hive-insert into table 与 insert overwrite table 区别

select into from 与insert into select from区别

SELECT INTO 和 INSERT INTO SELECT比较

insert into的用法

insert into table 插入多条数据

SELECT INTO 和 INSERT INTO SELECT 两种表复制语句