在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. Oracle 11g - 是否可以確定更新或插入函數/過程?
- 5. 知道Oracle中是否更新記錄?
- 6. 更新或插入取決於記錄是否已存在
- 7. NHibernate如何確定是否插入或更新記錄?
- 8. 是否可以在Oracle中以表格的形式返回DML(插入,更新)?
- 9. 在新記錄插入特定表格時更新視圖
- 10. 是否插入/更新/刪除記錄自動更新索引?
- 11. 是否可以更新簡單視圖?
- 12. 是否可以使用Anorm在VARCHAR PK表中插入記錄?
- 13. 是否有可能通過節點JS在幾分鐘內在MySQL中插入/更新8,000,00條記錄
- 14. Sails.js模型 - 插入或更新記錄
- 15. laravel插入或更新相關記錄
- 16. 檢查是否插入或更新Postgres查詢(通過upsert)
- 17. 我可以使用視圖來插入或更新兩個表
- 18. 插入或更新是否存在行
- 19. 插入或更新是否存在MYSQL
- 20. 在oracle中使用遊標插入和更新記錄
- 21. 如何知道在Oracle中更新,刪除或插入了哪些記錄
- 22. SQLite - 是否可以通過插入語句插入BLOB?
- 23. Oracle過程是否可以生成輸出記錄?
- 24. Oracle - 通過加入更新
- 25. 是否可以部分刷新Oracle中的物化視圖?
- 26. 是否可以通過COM插入圖像到excel單元?
- 27. Oracle中的條件插入或更新
- 28. 是否可以在單個sqlite語句中插入和更新?
- 29. 如何檢查記錄是否已經存在,然後更新或插入laravel?
- 30. 在SQL Server中插入新記錄並更新現有記錄存儲過程
我的意思是記錄。我編輯了這個問題。 – 2009-10-31 01:01:49