Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Kopieren von Datenbanktabelle

Dieses Thema im Forum "Oracle" wurde erstellt von mindhunter, 16 Mai 2017.

  1. mindhunter

    mindhunter Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Das Rezept paßt schon, es muß zum Schluß nur ausgeführt werden. EXEC $sql ist Dein Freund (ich kenne die exakte Ora-Syntax nicht)
     
  3. unficyp

    unficyp Fleissiger Benutzer

    spar dir das auslesen der spalten.

    im loop über die Tabellennamen mach ein
    execute immediate 'create table x as select * from '||tab;
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden