sql >> Database >  >> RDS >> Oracle

Waarom is het gegevenstype Long in Oracle vervangen door LOB?

LOB's zijn eigenlijk vier verschillende datatypes:CLOB voor LONG en BLOB voor LONG RAW, plus BFILE en XMLType. Oracle heeft deze typen in de jaren negentig geïntroduceerd omdat LANG (en LANG RAW) Teh Suck! en verschrikkelijk moeilijk om mee te werken. Er is geen reden om LONG in plaats van LOB te gebruiken als de databaseversie 8.0 of hoger is.

Dus waarom hebben we nog steeds LONG's?

LONG en CLOB zijn primitieve datatypes. Dus hoewel het theoretisch waar is dat Oracle LONG had kunnen wijzigen om "de extra speciale functies" van CLOB in de praktijk te hebben, zou dat in de praktijk een catastrofale impact hebben gehad op het upgraden van databases naar 8.0 (de versie die LOB's introduceerde).

Catastrofaal zeggen is misschien hyperbolisch, maar het feit is dat het aanpassen van CLOB-achtige functies aan LONG's betekent het veranderen van datatypes . De upgrade had dus een automatische gegevensconversie moeten bevatten. Bovendien zijn er waarschijnlijk allerlei routines op laag niveau waarvan het gedrag zou moeten veranderen. Het is gewoon een enorme vector voor gegevenscorruptie. Het is veel eenvoudiger (en dus veiliger) om een ​​nieuw datatype te introduceren en individuele sites de migratie te laten afhandelen.

Oracle heeft LONG sinds 8.0 afgeschaft en heeft mechanismen geleverd voor het converteren van LONG's naar CLOB's, dus in een ideale wereld zou iedereen verder zijn gegaan en zou Oracle de LONG-datatypes uit de database kunnen verwijderen. In het echte leven gebruiken veel winkels echter nog steeds LONG's en zou te veel kapot gaan.

Dus Oracle moet ze behouden. De omvang van het probleem kan worden afgeleid uit het feit dat Oracle nog steeds LONG zelf gebruikt in de datadictionary (zoals USER_/ALL_/DBA_VIEWS).




  1. Top N per Group Sql-probleem in mysql

  2. Recursieve SQL en informatie op verschillende niveaus

  3. mysql dump - enkele tabelgegevens uitsluiten

  4. Hoe te bestellen op datum in PostgreSQL of Oracle