0

这个错误有什么问题?

alter table INFO add constraint chk_app check (CASE WHEN app IS NULL THEN app = 'A');

如果它是因为 app = 'A'我调用了两次,那么如何有一个检查约束来检查 app 是否为空,那么它应该具有值 A

4

2 回答 2

3

这是因为检查约束只检查值,它不能改变它。

您可以像这样简单地将默认值添加到应用列或在插入或更新触发器之前写入

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;
于 2013-06-25T11:40:17.060 回答
3

如果您想在插入带有 NULL 值的行时将列 app 设置为“A”,我会使用 DEFAULT 构造:

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

如果在 期间未指定任何值INSERT,则将“A”插入到列app中。当然,用户可以通过显式插入 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); 
于 2013-06-25T11:43:47.897 回答