检查约束检查列两次

时间:2013-06-25 11:29:09

标签: oracle constraints

此错误有什么问题?

  

alter table INFO add constraint chk_app check   (例如,当应用程序为空时,应用程序='A');

如果是因为 app ='A'我调用了两次,那么如何检查app是否为null,那么它应该有值A

2 个答案:

答案 0 :(得分:3)

这是暂停检查约束只检查值,它无法更改它。

您可以简单地将默认值添加到app列,或者在插入或更新触发器之前写入

create or replace trigger info_briu
before insert or update of info
for each row
begin
  if :new.app is null then
    :new.app := 'A';
  end if;
end;

答案 1 :(得分:3)

如果要在插入具有NULL值的行时将列应用程序设置为“A”,我将使用DEFAULT构造:

 ALTER TABLE info MODIFY (app VARCHAR2(xxx) DEFAULT 'A');

如果在INSERT期间未指定任何值,则会在列app中插入“A”。当然,用户可以通过显式插入NULL值来覆盖此行为。这可以通过NOT NULL约束来阻止:

 ALTER TABLE info MODIFY (app VARCHAR2(xxx) DEFAULT 'A' NOT NULL);

从Oracle 12c版开始,您可以更清楚地指定所需的行为:

 ALTER TABLE info MODIFY (app VARCHAR2(xxx) DEFAULT ON NULL 'A' NOT NULL);