在Oracle中,是否可以通过视图插入或更新记录(一行)?在Oracle中,是否可以通过视图插入或更新记录?
26
A
回答
38
Oracle中的视图可能在特定条件下可更新。这可能会非常棘手,通常不建议使用。
注意事项可更新视图
更新视图是一个可以用来插入,更新或删除基表行。您可以创建一个视图以固有更新,或者您可以在任何视图上创建INSTEAD OF触发器以使其可更新。
要了解是否以及如何修改固有可更新视图的列,请查询USER_UPDATABLE_COLUMNS数据字典视图。此视图显示的信息仅对固有可更新的视图有意义。为了本质上更新视图,必须满足以下条件:
- 视图中的每一列必须映射到单个表的列。例如,如果一个视图列映射到一个TABLE子句的输出(一个非内置集合),那么这个视图并不是固有的可更新的。
- 视图必须不包含任何下列构建体:
- 一组操作者
- DISTINCT运算符
- 一个聚集或解析函数
- 甲GROUP BY,ORDER BY,MODEL,CONNECT BY或WITH子句
- START在SELECT列表
- 在SELECT列表中的子查询的集合表达
- WITH READ指定的子查询ONLY
- 加入,也有一些例外,如Oracle数据库管理员指南
此外中记录,如果固有可更新视图包含伪列或表达式,那么你就不能更新基地使用引用任何这些伪列或表达式的UPDATE语句的表行。
如果你想连接视图是可更新的,那么所有的以下条件必须为真:
- 的DML语句必须影响只有一个表背后的加入。
- 对于INSERT语句,不得使用WITH CHECK OPTION创建视图,并且插入值的所有列必须来自保存键的表。保存键的表格是基表中的每个主键或唯一键值在连接视图中都是唯一的。
- 对于UPDATE语句,所有更新的列必须从保存键的表中提取。如果视图是使用WITH CHECK OPTION创建的,那么连接从视图中多次引用的表中获取的列和列必须从UPDATE屏蔽。
- 对于DELETE语句,如果连接生成多个保留键的表,那么Oracle数据库将从FROM子句中指定的第一个表中删除该视图是否已创建WITH CHECK OPTION。
3
有两个时候,你可以通过视图更新记录:
- 如果视图没有加入或过程调用,并从一个底层表中选择数据。
- 如果视图有与视图关联的INSTEAD OF INSERT trigger。
一般来说,除非您专门为它编写了INSTEAD OF触发器,否则不应该依赖于能够对视图执行插入操作。请注意,INSTEAD OF UPDATE触发器也可以写入以帮助执行更新。
+2
大部分都是如此,但在某些情况下可以更新连接视图。 – DCookie 2009-10-31 02:20:18
9
0
YES,您可以更新和插入到视图和编辑将反映在原始表 ....
但
1 - 视图所应有的一切NOT NULL表上的值
2-更新应该有与表相同的规则......“更新与其他外键相关的主键......等等......”
相关问题
- 1. 是否可以通过Linq-to-sql从视图更新记录?
- 2. 更新记录是否存在;否则在Oracle中插入
- 3. 知道Oracle中是否更新记录?
- 4. NHibernate如何确定是否插入或更新记录?
- 5. 是否可以在Oracle中以表格的形式返回DML(插入,更新)?
- 6. 在新记录插入特定表格时更新视图
- 7. 是否插入/更新/删除记录自动更新索引?
- 8. 是否可以更新简单视图?
- 9. Sails.js模型 - 插入或更新记录
- 10. laravel插入或更新相关记录
- 11. 是否有可能通过节点JS在几分钟内在MySQL中插入/更新8,000,00条记录
- 12. 检查是否插入或更新Postgres查询(通过upsert)
- 13. 在oracle中使用游标插入和更新记录
- 14. 插入或更新是否存在MYSQL
- 15. 如何知道在Oracle中更新,删除或插入了哪些记录
- 16. SQLite - 是否可以通过插入语句插入BLOB?
- 17. Oracle中的条件插入或更新
- 18. 是否可以部分刷新Oracle中的物化视图?
- 19. 是否可以通过COM插入图像到excel单元?
- 20. 是否可以在单个sqlite语句中插入和更新?
- 21. 如何检查记录是否已经存在,然后更新或插入laravel?
- 22. 如果可能,如何更新,否则在oracle中插入
- 23. 是否可以通过更新为iPhone-App引入iPad功能?
- 24. 在Oracle中,我可以执行“插入或更新到TABLE中的值”
- 25. 在Oracle中,是否可以将一列插入表中?
- 26. 如何通过更新两个字段来插入记录?
- 27. 在python中插入或更新peewee记录
- 28. 在HighScore表中插入或更新记录
- 29. 在oracle中插入多条记录
- 30. 如果存在,更新,否则插入新记录
我的意思是记录。我编辑了这个问题。 – 2009-10-31 01:01:49