999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Oracle數據庫應用中的可更新視圖設計

2011-12-31 00:00:00趙書慧
科技創新導報 2011年14期

摘 要:Oracle數據庫管理系統在許多領域都有著廣泛的應用,本文主要介紹Oracle數據庫應用當中對可更新視圖的設計方法,著重分析了單表視圖和多表視圖在更新操作的時候需要注意的問題,并根據實例提出了實現可更新視圖的具體解決方案。

關鍵詞:Oracle可更新視圖觸發器

中圖分類號:TP311文獻標識碼:A文章編號:1674-098X(2011)05(b)-0030-02

Oracle是一個適用于大中型企業、功能強大且較為復雜的對象-關系型數據庫管理系統,它在銀行、電信、航空、保險、證券等領域都有著非常廣泛的應用。在Oracle數據庫的應用當中,經常需要涉及到對視圖的操作。Oracle對視圖的查詢操作沒有任何的限制,但是對視圖的更新操作往往受到一定的約束。下面介紹如何實現對Oracle可更新視圖的設計。

1 視圖的概念

視圖(View)是從一個或多個基表(或視圖)中導出的表,是一個查詢定義,也可認為是一個存儲的查詢(Stored Query)或是一個虛表(Virtual Table)。視圖不同于表,一個視圖不分配任何存儲空間,不真正地包含數據,視圖只在數據字典中存儲其定義。視圖是數據庫開發中應用非常廣泛的一種數據庫對象。由于它具有限制數據訪問、簡化查詢、提供獨立數據、允許多個視圖使用相同數據、刪除視圖時不影響基表等特點,使得我們在開發數據庫應用時,降低了數據操作的復雜性、減少了數據層和應用層之間的耦合,最終提高了開發效率。

可更新視圖是指可以進行插入、修改和刪除數據操作的視圖。Oracle對視圖的更新操作有一定的限制,在Oracle數據庫中,基于單個基表的視圖是可更新的,但對于多表聯合的視圖,由于它的復雜性,往往受到一定的限制。本文以一個簡單的例子說明了視圖的基本設計方法,并分析了在Oracle數據庫中如何實現對視圖的更新。

建立兩個表students和teachers結構。

其中students表1中的t_id為任課教師編號,與teachers中t_id相關聯,在做多表連接時可以認為teachers表為主表(即連接表),students表為從表(被連接表)。下面以 students 表和teachers表為例,設計實現了單表視圖 s_view1和多表視圖s_view2。

2 單表視圖的設計

若一個視圖是從單個基表導出的,并且只是去掉了基表的某些行和列,且保留了基表的主碼,這樣的視圖被稱為行列子集視圖,又稱為單表視圖。創建單表視圖的方法如下:

create view s_view1 as select s_id, s_name, s_sex from students;

創建的視圖 s_view1 只涉及到一張表students,并且只是這張表的一部分,將一些不必要的數據隱藏起來,使得部分數據對用戶是透明的,增強了系統的安全性。這種方法創建出來的視圖是可更新視圖,如果在創建視圖時加上with read only子句,將其創建為只讀視圖,則視圖即為不可更新。

3 多表視圖的設計

3.1 主鍵連接方式

若一個視圖是從多個基表中導出,滿足一定的連接條件,這樣的視圖就是多表聯合視圖。Oracle數據庫中多表視圖的更新操作受到了一定的限制,普通的無主鍵連接將不能進行視圖的更新操作,只有主表為鍵值保存表,并且連接條件中包含主表的主鍵列時,才能夠實現視圖非主表列的更新創建方法為:

alter table teachers add primary key(t_id);

create view s_view2 as select s.s_id,s.s_name,t.t_name,t.t_course from students s,teachers t where s.t_id=t.t_id;

如果主表無主鍵列、主鍵列沒有當作連接條件或是更新主表列時都將提示錯誤。

用上述方法創建的多表視圖,并不是所有的列都可更新,只有非主表的列(即 s_id,s_name)才可以進行更新操作,如果想知道視圖中具體哪一列可以更新,可以通過查看SYS方案中DBA_UPDATABLE_COLUMNS視圖得到相關信息。

從上面可以看出,這種創建可更新視圖的方法還是有一定局限性的,不能對主表列進行更新操作。本文采用Oracle數據庫提供的 instead of 觸發器能夠很好的解決這一問題。

3.2 觸發器方式

觸發器(Database Trigger)是存儲在數據庫中的過程,當表或視圖被修改時它隱式地被執行。在Oracle中允許在對表或視圖發出Insert、Update或Delete語句時隱式地執行所定義的過程,這些過程稱為數據庫觸發器。

創建觸發器的語法如下:

CREATE [OR REPLACE] TRIGGER trigger_name [BEFORE|AFTER|INSTEAD OF] event

ON table_or_view_name [FOR EACH ROW[WHEN condition]]

Oracle數據庫中提供了一種INSTEAD OF觸發器,對于包含多個基表的視圖,可以通過使用INSTEAD OF觸發器來支持基表中數據的插入、更新和刪除操作。INSTEAD OF觸發器的實質就是阻止Oracle去嘗試解釋更新操作的視圖定義,而是使Oracle執行該觸發器的主體,依靠觸發器的定義來得出有意義的語義。INSTEAD OF觸發器總是為視圖而創建的,它始終是FOR EACH ROW觸發器,這意味著針對每個可以對視圖進行刪除、更新或插入操作的行,都要執行一次這個觸發器。使用INSEAD OF觸發器的主要優點就是可以使不能更新的視圖支持更新,從而擴大了視圖的應用范圍,對視圖的操作更加直接、方便。該觸發器中轉換表和轉換變量的概念與普通觸發器中的概念一致。

下面以s_view2為例采用INSTEAD OF方式創建update觸發器如下:

create or replace trigger s_tri instead of update on s_view2 for each row

begin

update teachers set t_name=:new.t_name,t_course=:new.t_course

where t_name=:old.t_name;

update students set s_id=:new.s_id,s_name=:new.s_name

where s_id=:old.s_id;

end;

用上述方法創建的觸發器直接作用在視圖s_view2上,當對視圖進行update操作時,將自動轉去執行觸發器s_tri,該觸發器能夠根據不同的sql語句對視圖的所有列s_id,s_name,t_name和t_course都可以進行 update操作,彌補了普通主鍵連接方式只能修改從表的缺陷。Insert觸發器和delete觸發器的設計方法與上述update觸發器的設計方法相似。

4 結語

本文講述了Oracle數據庫應用當中可更新視圖的基本設計方法,說明了單表視圖和多表視圖在設計時需要注意的問題,并以簡單易懂的實例加以描述,使得Oracle視圖的可更新操作不再受到限制。

參考文獻

[1]薩師煊,王珊.數據庫系統概論(第3版)[M].高等教育出版社,2000.

[2]王曉娜,朱德海,楊永俠.Oracle中基于多表的可更新視圖的實現與應用[J].應用技術,2004(4).

[3]王杰文,李赫男.Oracle數據庫觸發器及其應用[J].計算機應用研究,2001(9).

主站蜘蛛池模板: 综合社区亚洲熟妇p| 成人在线第一页| 国产精品入口麻豆| 免费看av在线网站网址| 欧美特黄一级大黄录像| 成年看免费观看视频拍拍| 国产在线无码一区二区三区| AV色爱天堂网| 成年人福利视频| 免费国产无遮挡又黄又爽| 999国产精品永久免费视频精品久久| 亚洲IV视频免费在线光看| 被公侵犯人妻少妇一区二区三区 | 高潮毛片无遮挡高清视频播放| 9啪在线视频| 国产精欧美一区二区三区| 久久国产精品影院| 欧美一级色视频| 不卡午夜视频| 亚州AV秘 一区二区三区| 亚洲美女一区| 国产区网址| 国产网站一区二区三区| 亚洲精品成人福利在线电影| 最新日韩AV网址在线观看| 中文字幕在线观| 亚洲免费三区| 免费国产一级 片内射老| 97无码免费人妻超级碰碰碰| 性激烈欧美三级在线播放| 国产麻豆精品在线观看| 亚洲国产一成久久精品国产成人综合| 国产精品短篇二区| 国产不卡国语在线| 综合社区亚洲熟妇p| 国内老司机精品视频在线播出| 97成人在线观看| 久久国产拍爱| 国产主播福利在线观看| 亚洲青涩在线| 久久久受www免费人成| 亚洲欧美一级一级a| 色婷婷在线影院| 国产黄在线免费观看| 88av在线| 久久久精品久久久久三级| 欧美精品黑人粗大| 亚洲精品手机在线| 欧美自慰一级看片免费| 国产成人精品日本亚洲| 亚洲国产在一区二区三区| 国产男人天堂| 国产亚洲精品精品精品| 国产亚洲欧美在线人成aaaa| 激情网址在线观看| 在线国产91| 久久男人资源站| 99在线视频免费| 久久男人视频| 亚洲国产欧美自拍| 欧美不卡视频一区发布| 国产精品丝袜在线| 国产一区二区丝袜高跟鞋| 国产高清免费午夜在线视频| 热99re99首页精品亚洲五月天| 天堂成人在线视频| 欧美区一区| 国产在线欧美| 亚洲精品老司机| 免费一级成人毛片| 国产亚洲一区二区三区在线| 亚洲欧洲日产国产无码AV| 毛片大全免费观看| 喷潮白浆直流在线播放| 国产爽妇精品| 国产一区二区视频在线| 国产精品伦视频观看免费| 国产区精品高清在线观看| 88国产经典欧美一区二区三区| 国产精品思思热在线| 亚洲天堂首页| 免费A级毛片无码免费视频|