Copying a row in the same table without having to type the 50+ column names (while changing 2 columns)

后端 未结 6 826
青春惊慌失措
青春惊慌失措 2021-01-31 09:35

During my job, I usually have to copy rows while changing their primary key and giving them a new stamp and maybe changing the foreign key.

The problem is I don\'t want

6条回答
  •  轮回少年
    2021-01-31 09:55

    Based on Tony's answer:

    We know that at most one row will be returned since we are searching on primary key. And assuming that a valid key value is specified, at least one row will be returned. So we don't need the loop:

    declare
        r table_name%ROWTYPE;
    begin
        select *
        into r
        from table_name
        where pk_id = "original_primary_key";
    -- 
        select pk_seq.nextval into r.pk_id from dual;
         -- For 11g can use instead: r.pk_id := pk_seq.nextval;
        r.fk_id := "new_foreign_key";
        insert into table_name values r;
    end;
    

提交回复
热议问题