【问题标题】:update table error as data manipulation operation not legal on this view更新表错误,因为数据操作操作在此视图上不合法
【发布时间】:2016-06-02 17:12:28
【问题描述】:

我写了如下简单的更新查询

update table_name set name = 'new name

这给了我错误

SQL Error: ORA-01732: data manipulation operation not legal on this view 01732. 00000 -  "data manipulation operation not legal on this view"

然后我检查

select * FROM USER_OBJECTS WHERE OBJECT_NAME='table_name'

那个列表 TABLE 和 MATERIALIZED VIEW 与 'table_name' 相同

我知道物化视图无法更新,但表应该更新

请告诉我如何使用上面的简单更新查询更新表格

【问题讨论】:

  • 更改他们的名字之一
  • @sagi 感谢您的反馈。是否可以在不更改任何对象名称的情况下进行更新?
  • 两个表是否在同一个模式中?我不确定它是否可能.. 如果没有,请使用 schema.TableName 或 schema.ViewName
  • 你也可以在这里阅读:stackoverflow.com/questions/33552237/…
  • @sagi - 由于 MV 由物理表支持,并且它们都可以/确实具有相同的名称(如您链接到的那样),因此更改其中一个不是一个好主意,也不会帮助。必须更新 MV 的基表,而不是 MV 或其后备表。

标签: sql oracle sql-update


【解决方案1】:

您无法更新物化视图或physical table it uses for storage。您只能更新视图构建的表反对。想必你知道这些;如果没有,您可以从数据字典或 dbms_metadata.get_ddl 获取视图定义。

无论如何更新视图或它的后备表是没有意义的。即使您被允许这样做,您所做的任何更改也会在下次刷新视图时丢失。

如果您不希望物化视图再次刷新,那么您可以使用preserve table 选项drop that,这将只留下物理表 - 然后您更新它。但是,如果您改变主意,则必须重新创建视图并指定现有表。

【讨论】:

  • 我不认为这是他问的。他想更新表而不是视图,但是由于视图和表都具有相同的名称,oracle 不允许这样做。 . 这就是为什么我建议改变他们的名字之一
  • @sagi - 但表格和视图是同一事物的不同方面。 OP 试图更新的表是逻辑 MV 的物理存储。更改名称(如果它允许您在创建后)不会改变它。即使您随后可以更新我从未尝试过的表格,这些更改仍然会在刷新时被覆盖。
  • 我认为我们对他的理解不同.. :) 我们将不得不等待 OP 澄清
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-11
  • 2021-02-28
  • 2013-02-05
相关资源
最近更新 更多