当我尝试在属于我正在使用的用户的表上插入值时,会发生此错误:
SQL Error: ORA-01732: data manipulation operation not legal on this view
*Cause:
*Action:
在所有地方,人们都说在尝试在视图上插入/更新/删除时会发生这种情况,但它肯定是一个表,并且用户具有所需的权限。
那么,除了尝试使用视图进行非法操作之外,还有其他原因吗?
答案 0 :(得分:4)
另一种答案:当我尝试将记录插入物化视图表时,我遇到了这个错误。
答案 1 :(得分:3)
第一件事:你真的确定它是一张桌子吗?从您构建问题的方式来看,遇到此问题的用户可能不拥有该表。在这种情况下,也许有一个同义词或某种真正指向视图的东西。
它可能是第二件事,就是如果桌子上有一个触发器,它就是它引发问题的动作。
答案 2 :(得分:3)
我会激活SQL跟踪并再次尝试插入,然后查看跟踪文件以确定导致错误的SQL语句。
如果像其他人所建议的那样,它是由针对某个其他对象的触发器执行的SQL,您将在跟踪中看到它作为递归SQL,并且将清楚涉及到哪个对象。
如果跟踪中没有递归SQL,那么很可能您没有访问您认为自己的对象,并且跟踪应该显示正在使用的实际对象ID,您可以根据数据字典进行检查。
如果它真的只是一个表,并且没有涉及递归SQL,那么听起来你有一个Oracle支持的案例。
答案 3 :(得分:2)
My guess is that you are most likely looking at a materialized view and not a table. Search for
Select from user_objects
in the dictionary to see the object type.
答案 4 :(得分:1)
在表格上使用明确的标识进行尝试,如下所示:
insert into myschema.mytable () values ()...
以防本地还有另一个..
答案 5 :(得分:1)
我知道这是一个超级老帖子,但仅供参考,“表格”实际上是物化视图(mview)。 mview未配置为允许更新,因此您无法在其上插入/更新/删除。
您可以通过运行以下内容获取所有实体化视图的列表:
select * from user_mviews
答案 6 :(得分:0)
发出此错误的另一种情况是,当您尝试使用不存在的列更新数据时:
update house set color = 'blue' where street = 'ABC';
表street
中不存在
house
列
答案 7 :(得分:0)
由于您无法对实例化视图执行删除操作,因此需要从被推送的表中删除更新实例化视图的数据,然后刷新这些表。
示例: 我想从表1和表2中删除它们是实例化视图的数据。当前,这2个表的数据是从表3推送的。我将需要从表3删除数据,然后刷新表1和2的视图。
刷新视图后,该数据不应再出现在表1、2和3中。
希望这对2020年有所帮助!