Kopieren von Datenbanktabelle

mindhunter

Benutzer
Beiträge
22
Hallo,

suche eine Möglichkeit Tabellen zu kopieren. Jetzt nicht auf dem herkömmlichen Weg mit (INSERT INTO new_table SELECT * from old_table;), sondern über ein Array oder eine Schleife über die Tabellen.

Bei einem Array wollte ich die Tabellennamen vorgeben und dann in einer Schleifen die Tabelle aufrufen, die Spaltennamen auslesen, eine Select-Anweisung zusammenbauen und in eine andere Tabelle kopieren.

Das Kochrezept habe ich zwar, aber die richtige Zubereitung fehlt mir noch!


/* Vorbereitung…Tabellen erstellen*/

/* Tabelle erstellen */
CREATE TABLE NEW_TABLE01
(
COLUMN1 VARCHAR2(20),
COLUMN2 VARCHAR2(20)
);


/* Tabelle erstellen */
CREATE TABLE NEW_TABLE02
(
COLUMN1 VARCHAR2(20),
COLUMN2 VARCHAR2(20),
COLUMN3 VARCHAR2(20)
);


/* Tabelle erstellen */
CREATE TABLE OLD_TABLE01
(
COLUMN1 VARCHAR2(20),
COLUMN2 VARCHAR2(20)
);


/* Datensatz einfügen */
INSERT INTO OLD_TABLE01 (column1, column2) VALUES ('A1', 100);
INSERT INTO OLD_TABLE01 (column1, column2) VALUES ('A2', 200);
INSERT INTO OLD_TABLE01 (column1, column2) VALUES ('A3', 300);
INSERT INTO OLD_TABLE01 (column1, column2) VALUES ('A4', 400);


/* Tabelle OLD_TABLE02 erstellen */
CREATE TABLE OLD_TABLE02
(
COLUMN1 VARCHAR2(20),
COLUMN2 VARCHAR2(20),
COLUMN3 VARCHAR2(20)
);


/* Datensatz einfügen */
INSERT INTO OLD_TABLE02 (column1, column2, column3) VALUES ('A1', 100, 11);
INSERT INTO OLD_TABLE02 (column1, column2, column3) VALUES ('A2', 200, 22);
INSERT INTO OLD_TABLE02 (column1, column2, column3) VALUES ('A3', 300, 33);

INSERT INTO OLD_TABLE02 (column1, column2, column3) VALUES ('A4', 400, 44);
/* ----------------------------------------------------------------------- */




create or replace
procedure copyds


arr :=tablearray ('OLD_TABLE01', 'OLD_TABLE02');


BEGIN

/* Tabellen auflisten für den zweiten Fall */
select table_name from all_tables;


For each tab in tablearray

/* Spaltennamen auslesen */
SELECT column_name FROM all_tab_columns WHERE table_name= tab;

For each col in tab
sql := 'INSERT INTO ' || tab || col
next

next


END
 
Werbung:
Werbung:
spar dir das auslesen der spalten.

im loop über die Tabellennamen mach ein
execute immediate 'create table x as select * from '||tab;
 
Zurück
Oben