Oracle数据复制,insert into select复制“表1”的数据到“表2”

 语法: 

insert into 表2(表2的字段1,表2的字段2....) select 表1的字段1,表1的字段2.... from 表1 (此处也可left join关联其他表) where 条件

例子:

我新建了一张表,需要把以前的表的数据全部迁移过来,但是只需要部分字段。

insert into t_ref_order_sku (id, order_no, goods_id, sku_id, sku_price, sku_num, prm_amt, status, remarks, del, ct, cu, lmt, lmu)

select t1.id, t1.order_no, t1.goods_id, t1.sku_id, t2.c_price, 1, 0, '0', '', 0, t1.ct, t1.cu, t1.lmt, t1.lmu

from t_order t1 left join t_sku t2 on t2.id = t1.sku_id

where t1.goods_id is not null and t1.sku_id is not null

order by t1.id;

注意:执行了记得提交事务 !!!

问题: 

但是这里遇到一个问题,就是新表的主键sequence,如果不插入id,那么数据就会因为主键约束的原因插入不进去,如果把上方的select 后面的 t1.id 改成 seq_t_ref_order_sku.nextval(新表sequence自增),语法是不支持的。

所以我就将原表的id值直接插入到新表的id中,那么新表的sequence怎么办呢?其实很简单,只需要全部更新一下就好了:

语法:update 表2 set id = 表2的sequence名称.nextval;

例子:update t_ref_order_sku set id = seq_t_ref_order_sku.nextval;

注意:执行了记得提交事务 !!!

 附:

 新建sequence

语法:

        create sequence 名称

        minvalue 最小值

        maxvalue 最大值

        start with 起始值

        increment by 每次增量,可以为负数

        cache 10

        order;

例子:

        create sequence seq_t_ref_order_sku

        minvalue 1000

        maxvalue 9999999999

        start with 1000

        increment by 1

        cache 10

        order;

创建了一个名字为 seq_t_ref_order_sku 的sequence,最小值为1000,最大值为9999999999,从1000开始,每次递增量为1

 查看当前sequence值:

select seq_t_ref_order_sku.nextval from dual;

 修改sequence值:

修改sequence值不能直接修改到指定值,只能修改增量然后执行一次,让sequence值达到我们的目标值。

 修改sequence示例:假如当前sequence值1500,我们要改成1200

 select seq_t_ref_order_sku.nextval from dual;

先执行一次,看看当前sequence值,假如当前是1500

 alter sequence seq_t_ref_order_sku increment by -300;

1500要变成1200,那就需要减少300,所以修改步长为-300

 select seq_t_ref_order_sku.nextval from dual;

再执行一次,sequence减300变为1200

 alter sequence seq_t_ref_order_sku increment by 1;

然后再将步长设置成每次加1,如果不设置,你每次执行将都是在原值上-300,设置后,每次执行都是在原值上+1

 select seq_t_ref_order_sku.nextval from dual;

最后再执行一次,sequence变为1201,ok了

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值