zoukankan      html  css  js  c++  java
  • Oracle中复制表的方法(create as select、insert into select、select into)

    转:

    Oracle中复制表的方法(create as select、insert into select、select into)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/weixin_39750084/article/details/81292774

    (作者:陈玓玏)

    在使用SQL的过程中,常常需要复制表,或者通过建立临时表来存储select语句生成的结果,这个在建模过程中造变量的时候用得尤其多。

    1、用create as select

     drop table tablename;
     create table tablename as
     select * from tab1;
    • 1
    • 2
    • 3

    Oracle中删除表格不能先用if exists做判断,所以如果表格不存在,直接运行这两句是会报错的。

    关于这种方法的缺点

    一说是在其他博客看到的,意思是这种方法不能把默认值一起复制过来,这个错误在进行表备份时可能会有较大影响,但是对于做挖掘的朋友们来说,应该不怎么会影响我们造变量。而且Oracle很智能,即使你没有设定新表的字段类型,表的字段还是会根据你的原始字段或者分析函数的计算结果来存储。

    二说这种方法的缺点是容易造成临时表空间不足。这种方法其实不是所有的数据库都会发生的,我碰到这种情况主要是因为数据库里写了很多触发器,每次drop table后再create table就会触发一次,而堡垒机上的数据库又常常反应不过来,就导致很多表已经删掉了,数据库以为还存在,结果可能就建不了表了。

    正是因为这个缺点,我现在已经投向了insert into select的怀抱。

    2、insert into select

    truncate table tablename;
    insert into tablename
    select * from tab1;
    commit;
    • 1
    • 2
    • 3
    • 4

    这种方法其实是通过truncate一行一行地清空数据,再通过insert into一行一行地写入的。你会发现用create as复制表,会提示你执行完成,而用insert into,软件会提示你成功插入多少多少行记录。

    再者,为什么要加commit? 如果不加commit,你会发现你的确能在Oracle中取到数据,但是如果你想用Python连接SQL来取数,会取到一个空表。所以如果你在Oracle中用了insert into来更新表的内容,请记得加commit,养成好习惯。

    这种方法虽然保证我不会因为频繁叨扰触发器而碰到问题,但是也有以下几个缺点

    一是这种方法只能向已经存在的表中插入数据,所以如果表不存在,还是得先用create as;

    二是这种方法只能插入相同字段的数据,也就是说如果你想新增或者删除字段,还是得用drop create as从头再来。

    所以我喜欢在调试阶段用这种方法,因为总是避免不了造变量时候出点幺蛾子,要反复去修改取数逻辑,重跑数据表,一上来就频繁用create as,总觉得怪怪的。

    3、select into

    SELECT *
    INTO tablename_backup
    FROM tablename
    • 1
    • 2
    • 3

    这种方法显而易见了,就是为复制表而存在,备份表时可用,但是造变量时怕还是用上面两种更方便了。

  • 相关阅读:
    Using AlloyTouch to control three.js 3D model
    AlloyTouch与three.js 3D模型交互
    移动Web触摸与运动解决方案AlloyTouch开源啦
    transformjs玩转星球
    swing with transformjs
    和transformjs一起摇摆
    getting started with transformjs
    移动Web利器transformjs入门
    腾讯AlloyTeam移动Web裁剪组件AlloyCrop正式开源
    Why AlloyFinger is so much smaller than hammerjs?
  • 原文地址:https://www.cnblogs.com/libin6505/p/11806151.html
Copyright © 2011-2022 走看看