Domanda

Vorrei solo ascoltare opinioni diverse sull'uso del tipo Rowid come parametro di input di qualsiasi funzione o procedura.

Normalmente ho usato e visto le chiavi primarie usate come parametri di input, ma esiste una sorta di svantaggi per utilizzare RowID come parametro di input? Penso che sia un po 'semplice e selezionati siano piuttosto rapidi se usati nella clausola dove.

Per esempio:

FUNCTION get_row(p_rowid IN ROWID) RETURN TABLE%ROWTYPE IS...
È stato utile?

Soluzione

Dal Guida concettuale:

I rowid fisici forniscono l'accesso più rapido possibile a una riga di una determinata tabella. Contengono l'indirizzo fisico di una riga (fino al blocco specifico) e consentono di recuperare la riga in un singolo blocco. Oracle garantisce che fintanto che esiste la riga, il suo rowid non cambia.

Lo svantaggio principale di un Rowid è che mentre è normalmente stabile, può cambiare in alcune circostanze:

  • Il tavolo viene ricostruito (ALTER TABLE MOVE...)
  • Esportazione / importazione ovviamente
  • Tabella delle partizioni con movimenti della riga Abilita

Una chiave primaria identifica una riga logicamente, troverai sempre la riga corretta, anche dopo un eliminazione+inserto. Un rowid identifica la riga fisicamente e non è persistente come una chiave primaria.

È possibile utilizzare in sicurezza RowID in una singola istruzione SQL poiché Oracle garantirà che il risultato è coerente, ad esempio per rimuovere i duplicati in una tabella. Per essere al sicuro, ti suggerirei di usare solo il rowid dichiarazioni di accordo Quando si dispone di un blocco sulla riga (seleziona ... per l'aggiornamento).

Da un punto di vista delle prestazioni, l'accesso alla chiave principale è un po 'più costoso, ma normalmente lo noterai solo se si esegue molto accesso a riga singola. Se le prestazioni sono fondamentali, di solito, è possibile ottenere maggiori benefici in tal caso dall'utilizzo dell'elaborazione set rispetto all'elaborazione a riga singola con RowID. In particolare, se ci sono molti roundttrips tra il DB e l'applicazione, il costo dell'accesso alla riga sarà probabilmente trascurabile rispetto al costo di andata e ritorno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top