Oracle 檢視可以DML操作的條件

mengbing1990發表於2018-04-28

條件一:在連線檢視中不能有Order by、Group by、connetc by等語句排序語句。
條件二:基礎表中所有的NOT NULL列都必須在這個檢視中。
條件三:需要更新的列不是虛擬列。
條件四:不能夠具有分組函式。

除了以上幾個限制條件之外,若需要在檢視上進行DML操作的話,則在建立檢視的Select語句中,還不能夠有集合運算子、子查詢等等。以上這些是一些必須要滿足的基本條件,缺一不可。否則的話,針對檢視的DML操作,就會以失敗告終。

但是,並不是說符合了上面這個幾個條件後,檢視就可以暢所無阻的進行資料更新了,其仍然必須符合一定的規則。這其中,最重要的就是鍵值儲存表規則。

如果連線檢視中的一個基礎表的鍵在他的檢視中仍然存在,並且在連線檢視中仍然是主鍵,則這個基礎表就為鍵值儲存表。在連線檢視上,對檢視進行插入、刪除、更新等操作時,一次只能夠對檢視中的一個鍵值儲存表進行更新。

with check option對於違反檢視選擇範圍的資料行被插入,將受WITH CHECK OPTION檢查


檢視上的DML 操作:
DML操作應遵循的原則:
1.簡單檢視可以執行DML操作;
2.在檢視包含GROUP 函式,GROUP BY子句,DISTINCT關鍵字時不能刪除資料行;
3.在檢視不出現下列情況時可透過檢視修改基表資料或插入資料:
a.檢視中包含GROUP 函式,GROUP BY子句,DISTINCT關鍵字;
b.使用表示式定義的列;
c.ROWNUM偽列。
d.基表中未在檢視中選擇的其他列定義為非空且無預設值。
WITH CHECK OPTION 子句
透過檢視執行的INSERTS和UPDATES操作不能建立該檢視檢索不到的資料行, 因為它會對插入或修改的資料行執行完整性約束和資料有效性檢查。 (也就是說在執行INSERTS、UPDATES時,WHERE條件中除需要INSERT、UPDATE本身的限制條件之外,還需要加上檢視建立時的WHERE條件。)

 

 


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29551564/viewspace-2153484/,如需轉載,請註明出處,否則將追究法律責任。

相關文章