在用户表中发生“在此视图上不合法的数据操作操作”

时间:2011-09-16 12:53:31

标签: oracle

当我尝试在属于我正在使用的用户的表上插入值时,会发生此错误:

SQL Error: ORA-01732: data manipulation operation not legal on this view
*Cause:    
*Action:

在所有地方,人们都说在尝试在视图上插入/更新/删除时会发生这种情况,但它肯定是一个表,并且用户具有所需的权限。

那么,除了尝试使用视图进行非法操作之外,还有其他原因吗?

8 个答案:

答案 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年有所帮助!