Oracle
 sql >> Datenbank >  >> RDS >> Oracle

INSERT mit ORDER auf Oracle

Das können Sie nicht zuverlässig steuern, in welcher Reihenfolge Oracle die Zeile einer Tabelle ohne ORDER BY abruft .

Außerdem ohne /*+APPEND*/ Hinweis, Oracle speichert die Zeilen physisch in einer Heap-Tabelle, wo Platz ist, der sich möglicherweise nicht am Ende der Tabelle befindet ! Sie denken vielleicht, dass Oracle sie nacheinander einfügt, aber jede DML- oder gleichzeitige Aktivität (2+ Einfügen von Sitzungen) kann zu einer anderen physischen Organisation führen.

Sie könnten eine INDEX ORGANIZED-Tabelle verwenden, um die Zeilen in der Reihenfolge des PK zu speichern. Die meisten einfachen Abfragen danach in dieser Tabelle erzeugen einen sortierten Satz von Zeilen. Dies würde jedoch nicht garantieren, dass Oracle die Zeilen in dieser Reihenfolge auswählt, wenn Sie kein ORDER BY angeben (Je nach Abfrage und Zugriffspfad können die Zeilen in beliebiger Reihenfolge kommen).

Sie könnten auch eine Ansicht mit einer Reihenfolge verwenden, dies ist wahrscheinlich die beste Wahl, wenn Sie die Anwendung nicht berühren können (benennen Sie die Tabelle um, erstellen Sie eine Ansicht mit dem Namen der Tabelle, lassen Sie die Anwendung glauben, dass sie die Tabelle abfragt). Ich weiß nicht, ob es in Ihrem Fall machbar ist.