zusammenfassen - sql summe mehrere zeilen




Kopieren einer Zeile in derselben Tabelle, ohne die 50+ Spaltennamen eingeben zu müssen(während 2 Spalten geändert werden müssen) (4)

Entschuldigung - es ist eine Alles oder Nichts-Affäre.
Es gibt nichts zwischen SELECT * und listet die spezifischen Spalten auf, es ist das eine oder das andere.

Während meiner Arbeit muss ich normalerweise Zeilen kopieren, während ich ihren Primärschlüssel ändere und ihnen einen neuen Stempel gebe und vielleicht den Fremdschlüssel ändere.

Das Problem ist, dass ich nicht alle Spaltennamen eingeben möchte.

insert into table_name
select pk_seq.nextval, 
       'foreign-key', 
       col3,
       col4...col51
  from table_name
 where pk_id = "original_primary_key"

Und wenn ich * in der Select-Anweisung mache, kann ich die ersten 2 Spalten nicht aktualisieren ...

Gibt es eine Möglichkeit zu tun, wie ich es machen möchte?


Sie können eine einfache gespeicherte Prozedur erstellen, die einen Tabellennamen verwendet und mit dem Data Dictionary den Select-Anweisungstext für Sie schreibt (den Text der Auswahl). Dann kopieren, einfügen und ändern.


Sie können eine 'Temp'-Tabelle erstellen, zwei Spalten aktualisieren und eine Insert-Auswahl aus dieser' Temp'-Tabelle treffen.

Eaxple:

create table temptemp as 
select *
  from table_name
 where pk_id = "original_primary_key"

update temptemp
set col1 = ...
,   col2 =....

insert into table2
select * from temptemp;

Nun, es ist vielleicht nicht viel weniger wortreich, aber dieses PL / SQL ist eine Option:

begin
  for r in (select *
              from table_name
             where pk_id = 'original_primary_key')
  loop
    r.pk := pk_seq.nextval;
    r.fk := 'foreign-key';
    insert into table_name values r;
  end loop;
end;




oracle