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;
备注
-
begin 和 end; 在语句中是必需的。
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区别