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

Hvorfor ændrer denne Oracle DROP COLUMN standardværdien for en anden kolonne?

Dette er en Oracle-fejl.

Den udløses ved at tilføje en kolonne med både en NOT NULL begrænsning og en DEFAULT værdi til en eksisterende tabel.

For hurtigt at tilføje kolonnen gemmer Oracle 11g standardværdien i dataordbogen. Oracle kalder dette "tilføj kolonneoptimering".

Dette er hurtigere end at skrive standardværdien ud i hver tabelrække. Forespørgselsmotoren skal derefter erstatte enhver NULL i tabelrækken med standardværdien fra dataordbogen. Desværre er der flere fejl relateret til dette. Din ser ud til at være en forekomst af:

Du kan kontrollere, hvilke kolonner der er blevet tilføjet på denne måde:

 select owner, object_name, name 
 from dba_objects, col$
 where bitand(col$.PROPERTY,1073741824)=1073741824
 and object_id=obj#;

I vores tilfælde blev vi stukket af en anden fejl, som returnerede de forkerte resultater for en SELECT FOR UPDATE .

Vi indstiller parameteren _add_col_optim_enabled=FALSE at slå denne "optimering" fra. Alternativt kan du muligvis opgradere til en senere Oracle-version, hvor disse fejl er løst.

Opgradering eller indstilling af ovenstående parameter vil ikke rette din eksisterende tabel, som er korrupt. Du skal genskabe den tabel.




  1. Hvordan vælger man minimum UUID med venstre ydre joinforbindelse?

  2. Brug LIKE %..% med feltværdier i MySQL

  3. Antallet af parametre stemmer ikke overens med antallet af værdier for lagret procedure

  4. forhindre duplikerede indgange til databasen