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).

主站蜘蛛池模板: 日韩精品无码一级毛片免费| 在线亚洲天堂| 日韩高清欧美| 91久久偷偷做嫩草影院| 全部毛片免费看| 国产欧美精品午夜在线播放| 国产欧美在线视频免费| 这里只有精品在线播放| 91精品在线视频观看| 久久狠狠色噜噜狠狠狠狠97视色| 亚洲午夜久久久精品电影院| 欧美日韩国产高清一区二区三区| 自拍偷拍一区| 9cao视频精品| 国产素人在线| 无套av在线| 国产爽歪歪免费视频在线观看| 尤物视频一区| 91成人免费观看在线观看| 无码免费的亚洲视频| 九九热这里只有国产精品| jijzzizz老师出水喷水喷出| 日本不卡免费高清视频| 视频二区亚洲精品| 久久亚洲黄色视频| 91啪在线| 色国产视频| 亚洲精品无码AⅤ片青青在线观看| 国产日本欧美亚洲精品视| 亚洲男女在线| 亚洲美女视频一区| 国产福利影院在线观看| 久操线在视频在线观看| 99国产在线视频| 日韩国产亚洲一区二区在线观看| 99尹人香蕉国产免费天天拍| 国产小视频免费观看| 欧美精品另类| 日韩高清无码免费| 一边摸一边做爽的视频17国产| 亚洲国产欧美自拍| 精品免费在线视频| a色毛片免费视频| 天天摸天天操免费播放小视频| 亚洲黄网视频| 国产精品99久久久| 亚洲二区视频| 青青青草国产| 在线色综合| 中文字幕调教一区二区视频| 国产国语一级毛片| 成AV人片一区二区三区久久| 77777亚洲午夜久久多人| 日韩毛片视频| 日本三级欧美三级| 国产成年女人特黄特色大片免费| 国产青青草视频| 美女被躁出白浆视频播放| 久久黄色小视频| 国产福利小视频在线播放观看| 色婷婷在线影院| 国产97视频在线| 国产在线一二三区| 免费观看三级毛片| 91国内在线观看| 国产美女91视频| 国产欧美中文字幕| 亚国产欧美在线人成| 欧美成在线视频| 黄色网站不卡无码| 日韩免费毛片视频| a级毛片网| 午夜免费小视频| 黄色网在线免费观看| 国产小视频a在线观看| 久久伊人操| 色综合天天视频在线观看| 九九热视频在线免费观看| 一级毛片网| 欧美啪啪网| 久久99国产精品成人欧美| 在线免费不卡视频|