oracle裡視圖可以update

來源:互聯網
上載者:User

 
Oracle裡視圖可以update嗎?
如果在網上做出這樣一個問題調查,我想很多的網友朋友,都會不假思索的回答到,不行,視圖是邏輯記錄,並不是物理記錄,而且很多的朋友在印象深處都有這樣一個潛意識影響或者是經驗。
但是在這裡,我要告訴大家的是,視圖是可以update的,不過,這是視圖不是一個普通視圖。
以下這樣的視圖是可以update的
 
1. view的欄位只涉及一個表。

2. 如果涉及多個表的話,被(涉及到的)view列所映射table列(或列的組合)必須是有主健約束的

3. 強制執行,方法是加上hint /*+ BYPASS_UJVC */
 
我們做一下實驗,OS window xp profession,Oracle 10.2.0.1

 CREATE TABLE test1 ( id integer primary key, num integer ); INSERT INTO test1 VALUES (1,0); INSERT INTO test1 VALUES (2,0); CREATE TABLE test2 ( id integer, num integer, upd integer ); INSERT INTO test2 VALUES (1,10, 0); INSERT INTO test2 VALUES (2,20, 1);
 UPDATE ( SELECT t1.id id1, t1.num num1, t2.id id2, t2.num num2 FROM test1 t1, test2 t2 WHERE t1.id=t2.id AND t2.upd=1) SET    num1=num2;ORA-01779: cannot modify a column which maps to a non key-preserved table 
CREATE UNIQUE INDEX test2_idx_001 ON test2 (id); UPDATE ( SELECT t1.id id1, t1.num num1, t2.id id2, t2.num num2 FROM test1 t1, test2 t2 WHERE t1.id=t2.id AND t2.upd=1) SET num1=num2;1 row updated. UPDATE ( SELECT /*+ BYPASS_UJVC */t1.id id1, t1.num num1, t2.id id2, t2.num num2 FROM test1 t1, test2 t2 WHERE t1.id=t2.id AND t2.upd=1) SET num1=num2;

大家看到了,通過這裡的實驗,我們看到了,並不是所有的視圖都不能update的,有時我們的潛意識和經驗對於我們的學習很有協助,不過
有時這樣的淺意思和經驗對我們的學習也有一些不好的影響,多思考,多懷疑,多驗證,是一個學習中的好習慣,很多的固化下來的思想,並不一定是正確的,紮實的學習,不放過學習中的疑問,學會做一個正確的離經叛道者。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.