2016-07-21 20 views
0

Ich habe diese Anfrage:Ändern Partitionsnamen dynamisch

INSERT INTO table1 
SELECT * FROM table partition partition1 

Ich mag würde eine for Schleife oder etwas machen, die auf die nächste Partition automatisch nach dem Ende jeder Iteration erhöhen würden.

+0

Welche DBMS bist du? Soll die Tabelle, die eingefügt wird, ebenfalls inkrementiert werden? Hast du schon etwas probiert? – Nicarus

+0

Ich bin auf Orakel, Nein, ich habe noch nichts probiert. nicht nur die Partition, sagen wir die Tabelle ist partitioniert von Monaten, so dass es von Partition1 nach Partition12 geht –

+0

Fügen Sie die ganze Zeit in 'table1' ein, oder erhöht sich das mit den Partitionen? – Nicarus

Antwort

1

Verwenden Sie dynamisches SQL, fragen Sie user_tab_partitions ab, um die Partitionsnamen abzurufen, und führen Sie anschließend eine Schleife aus, um die Abfrage mit den zurückgegebenen Partitionsnamen zu erstellen, und führen Sie SQL aus. Ich bin ein wenig eingerostet, aber so etwas wie:

DECLARE 
    CURSOR cPart IS 
     SELECT partition_name 
     FROM user_tab_partitions 
     WHERE table_name = 'THE_TABLE'; 
    vSql VARCHAR2(200); 
BEGIN 
    FOR rPart in cPart LOOP 
     vSQL := 'INSERT INTO table1 SELECT * FROM the_table partition ' || rPart.partition_name; 
     EXECUTE IMMEDIATE (vSQL); 
    END LOOP; 
END; 
/