merge into 没有序列问题插入问题 max(id)

Posted uniles

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了merge into 没有序列问题插入问题 max(id)相关的知识,希望对你有一定的参考价值。

最近接到一个需求,要写一个脚本来同步两个库的数据

前提:没有序列,所以主键自增 不能使用序列。

           而代码里对该表的数据插入的操作,主键是使用max(id)+1来实现的。

merge into 执行insert操作时,里面的value值不能使用子查询。所以要在using中把主键的值查出来。

但是不能直接使用 using (select (select max(id)+1 from my_table@dblink) nextId,t.* from my_table t ,这样所有新插入的id都是max(id)+1。

我们使用rownum来区分。

 1 merge into mp_up_apply@TO_QWPT t1
 2 using (select (select max(id) from mp_up_apply@TO_QWPT)+rownum nextId,t.* from mp_up_apply t where app_class=2) t2
 3 on (t1.POWER_ID = t2.POWER_ID)
 4 when not matched then
 5 insert(t1.ID,
 6 t1.DEVELOP_APP_ID,
 7 t1.POWER_ID)
 8 values(t2.nextId,
 9 t2.DEVELOP_APP_ID,
10 t2.POWER_ID);

 

以上是关于merge into 没有序列问题插入问题 max(id)的主要内容,如果未能解决你的问题,请参考以下文章

在oracle中使用merge into实现更新和插入数据

ORCAL Merge into用法总结

如何知道 Hsqldb "MERGE INTO" 是不是进行了插入或更新

Oracle根据临时表使用merge into如何实现

Oracle中merge into的使用

Oracle中merge into的用法