Oracle
 sql >> Database >  >> RDS >> Oracle

INSERT con ORDINE su Oracle

Puoi non controllare in modo affidabile in quale ordine Oracle recupera la riga di una tabella senza un ORDER BY .

Inoltre, senza il /*+APPEND*/ suggerimento, Oracle memorizzerà le righe fisicamente in una tabella heap dove c'è spazio, che potrebbe non essere alla fine della tabella! Potresti pensare che Oracle li inserisca in sequenza, ma qualsiasi attività DML o simultanea (inserimento di 2+ sessioni) potrebbe produrre un'organizzazione fisica diversa.

È possibile utilizzare una tabella INDEX ORGANIZED per archiviare le righe nell'ordine del PK. La maggior parte delle query semplici successive su quella tabella produrrà un insieme ordinato di righe. Ciò non garantirebbe tuttavia che Oracle selezioni le righe in quell'ordine se non specifichi un ORDER BY (a seconda della query e del percorso di accesso, le righe possono venire in qualsiasi ordine).

Potresti anche usare una vista con un ordine di, questa è probabilmente la soluzione migliore se non puoi toccare l'applicazione (rinominare il tavolo, creare una vista con il nome del tavolo, lasciare che l'applicazione pensi che interroghi il tavolo). Non so se è fattibile nel tuo caso.