Когда новый столбец добавляется с помощью DEFAULT xxx NULL
в Oracle 12, происходит волшебство словаря данных и создается скрытый столбец:
CREATE TABLE bar (i NUMBER);
ALTER TABLE bar ADD (d NUMBER DEFAULT 1 NULL);
SELECT column_name, data_type, hidden_column
FROM user_tab_cols WHERE table_name = 'BAR';
COLUMN_NAME DATA_TYPE HIDDEN_COLUMN
I NUMBER NO
SYS_NC00002$ RAW YES
D NUMBER NO
Согласно Оптимизация DDL в Oracle Database 12c, скрытый столбец помогает с этой новой функцией.
Как удалить этот скрытый столбец?
Я пытался:
CREATE TABLE newbar AS SELECT * FROM bar;
, который работает, но все зависимые объекты (комментарии, триггеры, индексы грантов и т. Д.) Должны быть воссозданы, что плохо.
Удаление неиспользуемых столбцов не помогает:
ALTER TABLE bar DROP UNUSED COLUMNS;
SELECT column_name, data_type, hidden_column
FROM user_tab_cols WHERE table_name = 'BAR';
COLUMN_NAME DATA_TYPE HIDDEN_COLUMN
I NUMBER NO
SYS_NC00002$ RAW YES
D NUMBER NO
Перемещение таблицы также не помогает:
ALTER TABLE bar MOVE;
Согласно Doc Id 2277937.1, эта функция может быть заранее отключена с помощью
ALTER SESSION SET "_add_col_optim_enabled" = FALSE;
Но я действительно ищу заявление вроде
ALTER TABLE bar MOVE ...
чтобы остановить магию и убрать скрытый столбец.