sql >> Database >  >> RDS >> Oracle

Hoe wordt orakel rowid intern gegenereerd?

De "minimale" rowid zal waarschijnlijk niet Geef altijd de eerste ingevoegde rij uit de tabel op. Om te citeren uit de documentatie :

De "enzovoort" geeft aan dat er veel redenen zijn waarom een ​​rowid zou veranderen. Dit kan eenvoudig worden aangetoond met een klein voorbeeld:

create table tmp_test ( a number );
insert into tmp_test values (1);
select rowid, a from tmp_test;

ROWID                       A
------------------ ----------
AABo3AAFvAAAda6AAA          1
alter table tmp_test move;
select rowid, a from tmp_test;

ROWID                       A
------------------ ----------
AABo3BAFvAAAdbjAAA          1

U zult merken dat na een alter table operatie de enige rowid is veranderd.

Als de rowid kan veranderen en aangezien Oracle niet expliciet garandeert dat de "laagste" rowid altijd de eerste ingevoegde rij zal zijn, zou u, indien nodig, een andere manier moeten hebben om dit te volgen. Een tijdstempel of een oplopende volgorde zou normaal zijn.

Het moet een vrij ongebruikelijke vereiste zijn om de eerste ingevoegde rij te vinden zonder verwijzing naar gegevens. Als dit iets is dat je overweegt te gebruiken, zou ik nog eens kijken naar waarom je moet dit doen.



  1. linker buitenste join met null-waarden

  2. vergrendel de rijen tot de volgende selecteer postgres

  3. PL/SQL-procedure:Hoe een select-statement retourneren?

  4. 4 functies die het secondengedeelte van een tijdwaarde in MariaDB retourneren