ORA-54033: column to be modified is used in a virtual column expression(удалить виртуальный столбец)

При изменении типа столбца может выскочить ошибка ошибка ORA-54033: column to be modified is used in a virtual column expression

Оказывается Oracle в вашей таблице создал виртуальный столбец на базе вашего, который вы хотите изменить. 

Посмотреть наличие виртуальных столбцов в таблице можно запросом:

  1. SELECT TABLE_NAME, COLUMN_NAME, DATA_DEFAULT, HIDDEN_COLUMN
  2. FROM USER_TAB_COLS
  3. WHERE TABLE_NAME = UPPER('<ИМЯ ТАБЛИЦЫ>');
  4.  

Удалить системный столбец SYS_* обычной командой DROP COLUMN не получится. Выйдет ошибка: ORA-12996 cannot drop system-generated virtual column 

Поэтому удаляем скриптом ниже: 

  1. BEGIN
  2. dbms_stats.drop_extended_stats('<ИМЯ_СХЕМЫ>', '<ИМЯ_ТАБЛИЦЫ>', '<Содержимое строки из DATA_DEFAULT, после "SYS_OP_COMBINED_HASH">');
  3.  

Далее можем модифицировать нужный нам столбец.

Источники
https://stackoverflow.com/questions/32184331/error-ora-54033-when-calling-a-procedure
11:21
2.49K
Нет комментариев. Ваш будет первым!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.