暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 隐形柱

askTom 2018-03-09
286

问题描述

嗨,汤姆,我有一个关于oracle 12c (字段不可见) 功能的问题。为什么如果我创建一个新的字段,条件不可见,而不是null约束这个失败时,插入值到表,但不启用设置值到语句的新字段。

示例我的实践:

create table temporal (campo1 number(12) not null,
                       campo2 varchar2(10) not null);

alter table temporal add (campo3 number(12) invisible not null);


insert into temporal values(1, 'ROW 1');

ORA-01400: cannot insert NULL into (squema.TEMPORAL.CAMPO3);


insert into temporal values(1, 'ROW 1', 1);

ORA-00913: too many values 

--

该功能是具有不可见属性的字段,始终连接到null值约束?还是我做错了什么?

专家解答

不可见列背后的目标通常是在不影响现有 (或可能是新的) 应用程序代码的情况下从表中添加或删除列。

显然,如果新列不为NULL,那么根据定义,您要求 * 所有 * 应用程序代码都知道它。通常情况下,情况并非如此,因为只有知道新列存在的 * new * 应用程序才会填充它。

如果您需要确保新应用程序没有在插入null时出错,则可以暂时有一个约束,该约束为 * just * 新应用程序实现nullness检查。例如,新应用程序可以设置上下文变量,并且约束条件为:

alter table T
  add constraint chk check ( new_col is not null or sys_context('MY_CONTEXT','APP_VERSION') = '[old version]' );


当所有应用程序代码都已迁移到 * 并且 * 历史数据已更新时,则可以将约束更改为标准not null约束。


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论