例如: T表对应SEQ_T.NEXTVAL= 100W;
T1表对应SEQ_T.NEXTVAL= 10W;
TRUNCATE TABLE T1
INSERT TABLE T1 SELECT * FROM T
数据同步但T1表对应SEQ_T.NEXTVAL= 10W序列不变;
此时T1调用序列INSERT到T1表时就会报错 ( ORA-00001 : 违反唯一约束条件 (LOTTERY.PK_T1))
(若批量同步很多表就可能会引起很多表序列需要更新成主键最大值+ 1才能保证不报错
(可以用把源库的SEQUENCE同步过来①或者如下存储解决② ))
两个方法:1,重新创建一个表,然后创建一个序列,把老数据导入新表,删除老表,修改新表名字为老表
2,直接在原来表上增加一个字段,创建一个序列,通过更新的方式修改老数据的这个字段。
具体 *** 作主要是2点,首先是创建一个序列名sequence;
然后是,insert语句的时候:将自增的字段的位置,写成序列名.nextval。
从创建表开始,然后创建sequence,到insert语句
1.首先创建表
CREATE TABLE "FLOWCAL"."T_USERINFO"
( "C_ID" NUMBER(*,0),
"C_USER" VARCHAR2(20 BYTE),
"C_PASSWORD" VARCHAR2(20 BYTE),
"C_ROLE" VARCHAR2(20 BYTE),
"C_COMMENT1" VARCHAR2(20 BYTE),
"C_COMMENT2" VARCHAR2(20 BYTE)
)
把#id#直接换成rolemenu_id_sequence.nextval 就行了,不需要额外查出来,额外查出来在批量的时候只查了一次,用于多次,肯定出错。也可以看下面的:
<insert id="...">
insert into sys_role_menu(id,role_id,menu_code)
(
<foreach item="r" collection="list" separator="union all">
select rolemenu_id_sequence.nextval ,#{r.role_id},#{r.menu_code} from dual </foreach>
</foreach>
)
</insert>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)