复制表的(create table table1 as select * from table2 )问题

今天跟罗哥交流了下复制表结构,而产生的问题,下面是详细的列子,

以及问题所在(复制表结构没有把默认值复制,也就是没有完全拷贝)

 

1.原表

 

SQL> edi
已写入 file afiedt.buf

  1  CREATE TABLE USER_SIGNONLINE_TIME_TJ
  2     (    "MOBILE" VARCHAR2(20),
  3          "SIGN_DATE" DATE DEFAULT SYSDATE,           ---SIGN_DATE字段有默认值为sysdate
  4          "LOGOUT_DATE" DATE DEFAULT SYSDATE,         ---LOGOUT_DATE字段有默认值为sysdate
  5          "SECONDS" NUMBER(18,0)
  6     ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  7    STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  8*   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
SQL> /

表已创建。

 

 

2.复制表

 

SQL> create table old_table as select * from USER_SIGNONLINE_TIME_TJ
  2  /

表已创建。

 

3.看复制的表的结构

SQL> select dbms_metadata.get_ddl('TABLE','OLD_TABLE') FROM DUAL;

DBMS_METADATA.GET_DDL('TABLE','OLD_TABLE')
--------------------------------------------------------------------------------

  CREATE TABLE "SCOTT"."OLD_TABLE"
   (    "MOBILE" VARCHAR2(20),
        "SIGN_DATE" DATE,                     ---SIGN_DATE字段没有默认值为sysdate  
        "LOGOUT_DATE" DATE,                ---LOGOUT_DATE字段没有默认值为sysdate
        "SECONDS" NUMBER(18,0)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"

 

4.添加默认值

 

SQL> alter table old_table modify SIGN_DATE default sysdate
  2  /

表已更改。

 

SQL> alter table old_table modify LOGOUT_DATE default sysdate
  2  /

表已更改。

 

 

 

 

5.查看添加的表字段的默认值

 

SQL> select dbms_metadata.get_ddl('TABLE','OLD_TABLE') from dual;

DBMS_METADATA.GET_DDL('TABLE','OLD_TABLE')
--------------------------------------------------------------------------------

  CREATE TABLE "SCOTT"."OLD_TABLE"
   (    "MOBILE" VARCHAR2(20),
        "SIGN_DATE" DATE DEFAULT sysdate,
        "LOGOUT_DATE" DATE DEFAULT sysdate,
        "SECONDS" NUMBER(18,0)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS"

 

 

 

 

总结对于大数据量的表结构的操作,尤其是涉及到大数据量的表的复制一定要先查看, 被复制表的结构 ,在进行复制

上面也演示了因为复制表结构的时候默认值没有被复制进来,所以的像上面的第4骤手动添加默认值

--下面的就是忽略了表的复制带来的默认值的问题,所以切记 复制之前查看表结构

create table newtab nologging as  select * from oldtab where 需要的数据条件;

truncate table oldtab;


drop table oldtab;

alter table newtab rename to oldtab



  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

心中的彩虹

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值