Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Dlaczego ta Oracle DROP COLUMN zmienia domyślną wartość innej kolumny?

To jest błąd Oracle.

Jest wyzwalany przez dodanie kolumny z NOT NULL ograniczenie i DEFAULT wartość do istniejącej tabeli.

Aby szybko dodać kolumnę, Oracle 11g przechowuje wartość domyślną w słowniku danych. Oracle nazywa to „optymalizacją dodawania kolumn”.

Jest to szybsze niż zapisywanie wartości domyślnej w każdym wierszu tabeli. Silnik zapytań powinien wtedy zastąpić dowolną wartość NULL w wierszu tabeli wartością domyślną ze słownika danych. Niestety jest z tym kilka błędów. Twój wydaje się być przykładem:

Możesz sprawdzić, które kolumny zostały dodane w ten sposób:

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

W naszym przypadku zostaliśmy ukąszeni przez inny błąd, który zwrócił nieprawidłowe wyniki dla SELECT FOR UPDATE .

Ustawiamy parametr _add_col_optim_enabled=FALSE aby wyłączyć tę "optymalizację". Alternatywnie możesz dokonać aktualizacji do nowszej wersji Oracle, w której te błędy zostaną naprawione.

Aktualizacja lub ustawienie powyższego parametru nie naprawi istniejącej tabeli, która jest uszkodzona. Musisz odtworzyć tę tabelę.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyjście zapytania SQL w VBA jest inne niż w SQL Oracle

  2. Jak naprawić błąd brakującego wyrażenia ORA 00936?

  3. Jak rozpoznać, czy wartość nie jest liczbowa w Oracle?

  4. Uzyskiwanie różnych wyników szyfrowania między C#.Net i Oracle

  5. wszystkie wartości wierszy w jednej kolumnie