此错误有什么问题?
alter table INFO add constraint chk_app check (例如,当应用程序为空时,应用程序='A');
如果是因为 app ='A'我调用了两次,那么如何检查app是否为null,那么它应该有值A
答案 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);