要把一个表的数据覆盖要另外一个表,将被覆盖表中有的数据UPDATE,没有的数据执行INSERT,用的是merge into,但是insert操作的主键如何生成?用 max(rownum)+1会报违反唯一约束,好像insert操作不是一个一个执行而是所有insert操作一起执行的?不知道如何解决。

解决方案 »

  1.   


    --create sequence
    create sequence seq_t;
    --test
    select seq_t.nextval from dual;
      

  2.   

    参考下昨天的帖子http://topic.csdn.net/u/20081224/10/60e00690-252f-421c-b3d7-7e99641b4bbf.html
    我再5楼的例子
      

  3.   

    ID一般是通过触发器和SEQUENCE来解决的.
    报违反唯一约束是应为你的主键有重复。
    把这个max(rownum)+1换成MAX(ID)+ROWNUM试试
      

  4.   

    提两种解决方案:
    1,先去除主键,数据插入后再加上,去除sql语句:
    ALTER   TABLE   table_name   drop   CONSTRAINT   CONS_NAME;
    2,将重复数据过滤,做成一个视图,然后在插入表中
    insert into 
    select * from v_view
      

  5.   

    数据库中已经有数据,没有用序列生成主键,生成方式是MAX(ID)+1