我正在从视图中删除 with check 选项约束,但它没有被强制执行

Posted

技术标签:

【中文标题】我正在从视图中删除 with check 选项约束,但它没有被强制执行【英文标题】:I am dropping the with check option constraint from view but it is not being enforced 【发布时间】:2021-01-14 21:32:05 【问题描述】:

所以我陷入了一个问题。我用 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.

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

【问题讨论】:

【参考方案1】:

约束的存在更多的是注释性,也就是让知道对视图的限制的机制。您将看到 CHECK OPTION 的约束类型“V”和 READ ONLY 的“O”。

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

【讨论】:

以上是关于我正在从视图中删除 with check 选项约束,但它没有被强制执行的主要内容,如果未能解决你的问题,请参考以下文章

创建视图 - WITH CHECK OPTION

Swift - 从 UICollectionViewCell 内的视图中删除约束

ORA-00922:修改视图时缺少或无效选项 - Oracle [重复]

Swift:removefromSuperview 移除约束

sql server 对已有数据的表,添加核查约束 [失败],请使用with nocheck 子句

如何修改或删除mysql CHECK约束 constraint