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

Hvordan genereres oracle rowid internt?

Den "minimum" række vil sandsynligvis ikke angiv altid den første indsatte række fra tabellen. For at citere fra dokumentationen :

"og så videre" angiver, at der er mange grunde til, at en rowid ændrer sig. Dette kan let demonstreres med et lille eksempel:

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

Du vil bemærke det efter en alter table operation den eneste række er ændret.

Hvis rækken kan ændres, og da Oracle ikke eksplicit garanterer, at den "laveste" række altid vil være den første indsatte række, bør du have en anden måde at spore dette på, hvis det kræves. Et tidsstempel eller en stigende sekvens ville være normalt.

Det må være et ret usædvanligt krav at finde den første indsatte række uden reference til nogen data. Hvis dette er noget, du overvejer at bruge, vil jeg tage et kig på hvorfor igen du skal gøre dette.



  1. Jdbc-driver ikke fundet

  2. psql ugyldig kommando \N under gendannelse af sql

  3. Konverter alle mysql-tabeldata til JSON i spring boot

  4. få tidligere værdi på plads for nul rækker