字段guard"/>
ORACLE 12C 增加defualt 并且为空字段guard
ORACLE 12C 增加带default值的允许为空字段 的处理与之前版本(11G)不一样,会自动增加一个hidden的字段,运行如下的SQL
drop table testuser.auto_hidden_test;create table testuser.auto_hidden_test
(v1 varchar2(20),
i1 number(14,0));alter table testuser.auto_hidden_testadd constraint PK_auto_hidden_test primary key (v1)using index ;declare
v_sql varchar2(4000);
begin
for i in 1..10000 loop
v_sql:='insert into testuser.auto_hidden_test values(''k'||i||''','||i||')';
execute immediate(v_sql);
end loop;
end;
/alter table testuser.auto_hidden_test add new_default varchar2(20) default 'new_default' ;select column_id, column_name, data_type, data_length, data_default, hidden_column, a.USER_GENERATEDfrom dba_tab_cols awhere A.OWNER='TSTIBSSRMLO' and a.table_name=upper('auto_hidden_test');
会得到如下结果:
COLUMN_ID COLUMN_NAME DATA_TYPE DATA_LENGTH DATA_DEFAULT HIDDEN_COLUMN USER_GENERATED
---------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ----------- -------------------------------------------------------------------------------- ------------- --------------1 V1 VARCHAR2 20 NO YES2 I1 NUMBER 22 NO YESSYS_NC00003$ RAW 126 YES NO3 NEW_DEFAULT VARCHAR2 20 'new_default' NO YES
这个这个SYS_NC00003$的USER_GENERATED=NO,代表是系统自动产生的。
使用
alter table TESTUSER.auto_hidden_test drop column SYS_NC00003$;
将会得到
ERROR at line 1:
ORA-14148: DML and DDL operations are not directly allowed on the guard-column.
需要额外注意的是,拥有隐藏字段后有些SQL行为与11g下非隐藏字段是不一样的,尤其是range类查询上性能不一致。
更多推荐
ORACLE 12C 增加defualt 并且为空字段guard
发布评论