首页 > 解决方案 > “FRM-40602:无法插入或更新视图中的数据”错误

问题描述

在我们的 Oracle Forms 应用程序中,我们有几个块,其中 Query Data Source Name 是从多个表中查询的视图,而 DML Data Target Name 是该视图中的表之一。这些块允许所有 DML(插入、更新、删除),并且工作正常。

我们最近在这些视图中的一个表上添加了一项数据库策略,以将一小部分记录限制为特定人群,直到可以查看这些记录以获取个人身份信息并在必要时进行编辑。该策略适用于直接基于该表的所有块,以及 TOAD、SQL*Plus 等。

但是,当用户尝试添加、修改或删除现有记录时,这些基于包含此表的视图的块现在会给用户一个“FRM-40602:无法插入或更新视图中的数据”错误。请注意,这些块的 DML 表不是带有策略的表。

通过实验,我们发现问题不在于策略函数,因为我尝试将其剥离为只返回一条返回谓词为“1=1”的语句。该错误一直存在,直到我们禁用该策略。

请注意,在 Oracle 11g 数据库上运行的 11g Forms 和 12c 数据库上运行的 12c Forms 都会发生这种情况。

关于导致这种情况的任何想法,以及是否有办法在不完全重建这些表单块的情况下解决它?

谢谢,丹

标签: oracleoracle11goracle12coracleforms

解决方案


一位同事最终提出了解决方案:对于有问题的块,将“键模式”属性从“自动”(默认值)更改为“不可更新”,并确保表的“主键”属性主键字段设置为“是”。


推荐阅读