oracle - “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 都会发生这种情况。
关于导致这种情况的任何想法,以及是否有办法在不完全重建这些表单块的情况下解决它?
谢谢,丹
解决方案
一位同事最终提出了解决方案:对于有问题的块,将“键模式”属性从“自动”(默认值)更改为“不可更新”,并确保表的“主键”属性主键字段设置为“是”。
推荐阅读
- c# - 自定义 TypeDescriptor 和 AddValueChange/OnValueChanged
- html - 绝对链接和相对链接
- altair - Altair 挂在这张图表上?
- javascript - React:在映射渲染中处理 onChange
- performance - 压力测试 - API Gateway + AWS Lambda
- primary-key - 如何通过 shadow DOM 访问元素
- azure-devops - 连接到 Azure DevOps 2019 时,Team Explorer Everywhere 中缺少 Git 存储库
- wpf - WPF:将我的 Checkbox IsChecked 事件绑定到我的模型
- python - SQLAlchemy 在过滤器中使用类似的关系
- python-3.x - 使用 Visual Studio 的 Box2D Python