ORA-25128:禁用并验证约束(... CK_AM_DATA)的表上没有插入/更新/删除

时间:2019-01-04 13:40:36

标签: oracle

我在SO中进行了搜索,发现没有覆盖此错误。

当我尝试进行DML更改时,数据库中有一个旧表(不是我创建的),它将引发该错误。

这是我下面复制的场景。

drop table AM_DATA
/
create table AM_DATA
(id number(4) null,
 name varchar2 (200) null)
/
alter table AM_DATA
 add constraint  CK_AM_DATA
 check (1=1)
 disable validate
/
insert into AM_DATA(id,name) values(1,'A')
/
insert into AM_DATA(id,name) values(2,'B')
/
insert into AM_DATA(id,name) values(3,'B')
/
delete AM_DATA where id =3
/
commit
/
select count(1) cnt from AM_DATA
/



SQL> 

Table dropped

Table created

Table altered

insert into AM_DATA(id,name) values(1,'A')

ORA-25128: No insert/update/delete on table with constraint (....CK_AM_DATA) disabled and validated

insert into AM_DATA(id,name) values(2,'B')

ORA-25128: No insert/update/delete on table with constraint (....CK_AM_DATA) disabled and validated

insert into AM_DATA(id,name) values(3,'B')

ORA-25128: No insert/update/delete on table with constraint (....CK_AM_DATA) disabled and validated

delete AM_DATA where id =3

ORA-25128: No insert/update/delete on table with constraint (.....CK_AM_DATA) disabled and validated

Commit complete

       CNT
----------
         0

1 个答案:

答案 0 :(得分:1)

错误很明显,检查约束似乎已禁用并得到验证。

默认情况下,禁用约束时,其约束novalidated,但是您可以通过validated指定约束,但是您必须了解为什么要对此进行验证?通常,当您要防止在表上执行DML时,可以添加一个已禁用并带有validated的检查约束。 因此,似乎此限制是为特定目的而创建的,尤其是检查条件(1 = 1)始终为true,因此它不会做任何事情。

要解决此错误:您可以运行以下命令,检查约束仍处于禁用状态,但可以对其进行dml更改。

alter table
   AM_DATA
DISABLE novalidate constraint
    CK_AM_DATA;