"FRM-40602: Cannot insert into or update data in a view" 错误

"FRM-40602: Cannot insert into or update data in a view" error

在我们的 Oracle Forms 应用程序中,我们有几个块,其中查询数据源名称是从多个 table 查询的视图,DML 数据目标名称是 table 之一在那个视图中。这些块允许所有 DML(插入、更新、删除),并且工作正常。

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

但是,那些基于包含此 table 的视图的块现在会在用户尝试添加、修改或删除现有记录时立即给出 "FRM-40602: Cannot insert into or update data in a view" 错误。请注意,这些块的 DML table 不是具有策略的 table。

通过实验,我们发现问题不在于策略函数,因为我尝试将其简化为一个 RETURN 语句,将谓词返回为“1=1”。在我们禁用该策略之前,错误一直存在。

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

关于导致这种情况的原因有什么想法,是否有解决方法而不完全重建这些表单块?

谢谢, 旦

一位同事最终提出了解决方案:对于有问题的块,将 "Key Mode" 属性 从 "Automatic"(默认值)更改为 "Non-Updateable",并确保 table 的主键字段的 "Primary Key" 属性 设置为 "Yes".