【问题标题】:Insert duplicate records in the same table in OracleOracle在同一张表中插入重复记录
【发布时间】:2021-12-31 22:46:43
【问题描述】:

我必须从表中取出一条记录,增加一列并再次将记录插入同一个表中。

这是我的表例如:

TEST(id, name, city)
      1, john, NY

我想选择这条记录并在同一个表中插入 1250 次,预期的输出是:

id, name, city
2, john, NY
3, john, NY
4, john, NY
5, john, NY
6, john, NY
7, john, NY

...

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    使用IDENTITY 列创建您的表(或者,如果您使用的是Oracle 11 或更早版本,则使用SEQUENCE):

    CREATE TABLE test(
      id   INTEGER
           GENERATED ALWAYS AS IDENTITY
           CONSTRAINT test_id__pk PRIMARY KEY,
      name VARCHAR2(20),
      city VARCHAR2(20)
    )
    

    然后插入你的行:

    INSERT INTO test (name, city) VALUES ('john', 'NY');
    

    (注意:ID 列是自动生成的,您不应包含它。)

    然后你可以克隆你的行:

    INSERT INTO test (name, city)
    SELECT name, city
    FROM   test
    WHERE  id = 1
    CONNECT BY LEVEL <= 1249;
    

    (同样,您无需为 ID 列执行任何操作,因为它将自动生成。)

    然后:

    SELECT * FROM test;
    

    输出:

    ID NAME CITY
    1 john NY
    2 john NY
    3 john NY
    ... ... ...
    1249 john NY
    1250 john NY

    db小提琴here

    【讨论】:

    • @Talib 这个答案是在回答您针对TEST 表提出的问题。您的评论似乎将pos_trans_collection 表与许多不同的列和约束相关联,我们不知道该表的结构或约束。如果您 ask a new question 包含一个 minimal reproducible example 以及该表的 CREATE TABLE 语句和您的示例数据的 INSERT 语句以及完整的错误消息,那会更好,因为您没有收到该表的错误这个问题,我们无法复制。
    【解决方案2】:

    表:

    SQL> create table test (id number, name varchar2(10), city varchar2(10));
    
    Table created.
    

    它的初始内容:

    SQL> insert into test values (1, 'John', 'NY');
    
    1 row created.
    

    添加更多行的代码:

    SQL> insert into test
      2  select id + level, name, city
      3  from test
      4  connect by level <= 5;     --> would be 1250 in your case
    
    5 rows created.
    
    SQL> select * from test;
    
            ID NAME       CITY
    ---------- ---------- ----------
             1 John       NY
             2 John       NY
             3 John       NY
             4 John       NY
             5 John       NY
             6 John       NY
    
    6 rows selected.
    
    SQL>
    

    【讨论】:

    • 您作为评论发布的代码与示例表没有任何关系。我不知道违反了哪个约束。我建议您重写问题并提供可能有助于我们帮助您的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 2018-09-15
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多