ORACLE 12C 增加defualt 并且为空字段guard

编程入门 行业动态 更新时间:2024-10-26 03:29:06

ORACLE 12C 增加defualt 并且为空<a href=https://www.elefans.com/category/jswz/34/1771443.html style=字段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

本文发布于:2024-03-14 17:18:03,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736959.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字段   为空   ORACLE   guard   defualt

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!