从.sql文件导入Oracle SQL Developer,不包括重复项

时间:2014-08-25 21:41:49

标签: sql oracle

我使用Oracle SQL Developer作为.sql文件从一个数据库导出了一个表,并希望将其导入另一个具有完全相同表的数据库,但问题是某些条目出现在两个表中。

使用Oracle SQL Developer导入时是否有办法排除目标表中已存在的条目?

1 个答案:

答案 0 :(得分:0)

至少有两种方式:

  1. 您可以使用SQLLDR工具或外部表加载
  2. 您可以将sql文件加载到数据库中,然后删除重复项。
  3. 让我们使用这个文件:

    data.sql
    insert into test_table (id) values (1);
    insert into test_table (id) values (1);
    insert into test_table (id) values (2);
    insert into test_table (id) values (2);
    insert into test_table (id) values (2);
    insert into test_table (id) values (3);
    insert into test_table (id) values (3);
    

    SQLLDR: 首先,为表创建完整性约束,例如:

    SQL> create table test_table ( 
      2    id number(10) primary key
      3  );
    
    Table created.
    

    然后创建一个控制文件:

    LOAD DATA
    INFILE data.sql
    INTO TABLE test_table
    (
    id position(37:37)
    )
    

    跑步后你会看到:

    SQL> select * from test_table;
    
        ID
    ----------
         1
         2
         3
    

    坏文件(由于完整性违规,此行被拒绝):

    data.bad
    insert into test_table (id) values (1);
    insert into test_table (id) values (2);
    insert into test_table (id) values (2);
    insert into test_table (id) values (3);
    

    您可以使用此控制文件生成外部表格,因此我不会向您展示如何使用它。

    加载并删除重复项:

    让我们重新创建test_table表:

    SQL> create table test_table (
      2    id number(10)
      3  );
    
    Table created.
    

    使用SQL Developer加载您的sql文件并检查内容:

    SQL> select * from test_table;
    
        ID
    ----------
         1
         1
         2
         2
         2
         3
         3
    
    7 rows selected.
    

    然后删除重复项:

    SQL> delete test_table where rowid not in (select min(rowid) from test_table group by id);
    
    4 rows deleted.
    
    SQL> select * from test_table;
    
        ID
    ----------
         1
         2
         3
    

    我相信有更多方法可以完成你的任务,我只展示了我脑海里的方法。