我在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
答案 0 :(得分:1)
错误很明显,检查约束似乎已禁用并得到验证。
默认情况下,禁用约束时,其约束novalidated
,但是您可以通过validated
指定约束,但是您必须了解为什么要对此进行验证?通常,当您要防止在表上执行DML时,可以添加一个已禁用并带有validated的检查约束。
因此,似乎此限制是为特定目的而创建的,尤其是检查条件(1 = 1)始终为true,因此它不会做任何事情。
要解决此错误:您可以运行以下命令,检查约束仍处于禁用状态,但可以对其进行dml更改。
alter table
AM_DATA
DISABLE novalidate constraint
CK_AM_DATA;