【问题标题】:How to duplicate a table with all its constrains in SQL*Plus?如何在 SQL*Plus 中复制具有所有约束的表?
【发布时间】:2011-04-13 03:17:16
【问题描述】:

使用create table tab2 as select * from tab1;,我可以复制数据但不能复制主键约束:

SQL> desc tab1;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER
 NAME                                               VARCHAR2(20)

SQL> select * from tab1;

        ID NAME
---------- --------------------
         1 A

SQL> create table tab2 as select * from tab1;

Table created.

SQL> desc tab2;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER
 NAME                                               VARCHAR2(20)

SQL> select * from tab2;

        ID NAME
---------- --------------------
         1 A

SQL> 

如何复制包含所有约束的表?

【问题讨论】:

    标签: database oracle sqlplus


    【解决方案1】:

    我会从类似的东西开始

    set long 100000
    select dbms_metadata.get_ddl('TABLE', 'TAB1', '<schemaname'>) from dual
    

    这将返回TAB1create table 语句(在模式schemaname> 中)。你可以 然后复制该语句并将标识符 TAB1 更改为 TAB2。你应该确保 您还可以更改所有约束的名称,因为它们在 Oracle 中必须是唯一的。

    最后,你会想做一个insert into TAB2 select * from TAB1

    【讨论】:

    • LONG 设置控制 SQL*Plus 从查询返回的任何 LONG 列中显示的字符数。 oreilly.com/library/view/oracle-sqlplus-the/0596007469/…
    • 这并没有从原始表中复制索引,知道如何复制它(最好在同一个命令中)? DBeaver 将新创建的表的索引显示为空,而原始表有一个(空间)索引。
    猜你喜欢
    • 2010-12-04
    • 2013-05-21
    • 2023-04-04
    • 2018-10-23
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多