Как убрать скрытый столбец в Oracle 12c? - PullRequest
0 голосов
/ 30 мая 2018

Когда новый столбец добавляется с помощью 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 ... 

чтобы остановить магию и убрать скрытый столбец.

1 Ответ

0 голосов
/ 30 мая 2018

Ничего, кроме alter table BAR drop column D;

(я выдал DB ver. 12.1.0.2)

...