Können wir haben eine where-Klausel für das löschen von <tab> partition <part.>?
Ich habe eine Tabelle partitioniert basierend auf Zeitstempel (wie partition1
haben 9 Monate alte Daten partition2
haben 6 Monate alte Daten partition3
3 Monate alten Daten und so weiter)
Brauche ich zum löschen von Daten auf Grundlage einer Bedingung, die auf eine bestimmte partition.
delete from table1 partition partition3
where group id in ( select * from table1 where group_code='pilot');
Ist dieser Vorgang löscht nur aus partiton3
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst die syntax ist:
Zweitens, Sie sollte nicht beziehen sich auf die Partitionsnamen. Es schafft eine Abhängigkeit, die auf das physische layout der Tabelle. Es kann partitioniert werden monatlich heute, aber es kann neu partitioniert werden, auf Wochen oder Tage irgendwann in der Zukunft. Wenn dies geschieht, Ihren code zu brechen. Oracle ableiten kann, die partition einfach gut aus ein Prädikat für die Partitionierungsspalte. Versuchen zu vergessen, die Tabelle partitioniert wird.
Dritten, Ihre untergeordneten select-Anweisung schlägt fehl, weil der
select *
im Vergleich zu ID.Die Aussage, die Sie suchen für wahrscheinlich in etwa so Aussehen:
Partitionierung arbeitet transparent, was bedeutet, dass Sie können einfach tun eine regelmäßige
Der Optimierer wissen, dass die zweite Prädikat bedeutet, dass nur Daten von partition3 Bedarf löschen.
Grüße,
Rob.