首页 > 解决方案 > 我正在从视图中删除带有检查选项的约束,但它没有被强制执行

问题描述

所以我陷入了一个问题。我用 WITH CHECK OPTION 约束定义了一个视图,现在我想删除它,但即使在删除约束后我得到错误:=ora-01402: view WITH CHECK OPTION where- clause violation.这是我正在执行的 SQL 命令序列 -

$>>CREATE VIEW CHEAP_PRODUCTS AS SELECT * FROM PRODUCTS WHERE PRICE<15 WITH CHECK OPTION CONSTRAINT CHECK_OP;
modified
$>>ALTER VIEW CHEAP_PRODUCTS DROP CONSTRAINT CHECK_OP;
view altered
$>> INSERT INTO CHEAP_PRODUCTS(PRODUCT_ID,PRODUCT_TYPE_ID,NAME,PRICE) VALUES (50,1,'EASTERN FRONT',88);
ora-01402: view WITH CHECK OPTION where- clause violation.

我不知道为什么会这样,因为我已经放弃了约束。

标签: sqloraclevieworacle11gconstraints

解决方案


约束的存在更具注释性,即一种让了解视图限制的机制。您将看到 CHECK OPTION 的约束类型“V”和 READ ONLY 的“O”。

但仍然是视图定义决定了视图上允许的内容。删除约束不会改变这一点 - 但它会失去(简单的)机制来查看视图上有哪些约束。没有它,现在你必须在视图定义的文本中挖掘才能解决它。


推荐阅读