在Oracle 12中添加DEFAULT xxx NULL
新列时,会发生一些数据字典魔法,并创建一个隐藏列:
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 Optimization in 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 ...
停止魔法并删除隐藏的列。
答案 0 :(得分:1)
只有alter table BAR drop column D;
(我在DB ver. 12.1.0.2
发出)