《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > Oracle內嵌表及應用
Oracle內嵌表及應用
來源:微型機與應用2014年第3期
蔣 楠1,于紅業(yè)1,葛利俊1,但石泉2,馮 昊3,徐 浩1等
(1.渤海石油裝備承德石油機械公司,河北 承德 067000; 2.中國石油四川石化南充煉油化工總廠
摘要: 范式是關系數(shù)據(jù)庫設計的理論基礎,也是設計數(shù)據(jù)庫中所要遵循的規(guī)則和指導方法。但在實際情況中,經常出現(xiàn)某條記錄中某個值必須是集合類型,通常情況會建立新表,然后再通過關系來實現(xiàn)多值的保存。但連接查詢會嚴重影響數(shù)據(jù)庫性能。Oracle數(shù)據(jù)庫中通過內嵌表實現(xiàn)了不符合第一范式的數(shù)據(jù)庫設計,詳細研究了Oracle中內嵌表的創(chuàng)建、查詢以及修改的過程。
關鍵詞: 軟件 Oracle 內嵌表 范式
Abstract:
Key words :

摘  要: 范式是關系數(shù)據(jù)庫設計的理論基礎,也是設計數(shù)據(jù)庫中所要遵循的規(guī)則和指導方法。但在實際情況中,經常出現(xiàn)某條記錄中某個值必須是集合類型,通常情況會建立新表,然后再通過關系來實現(xiàn)多值的保存。但連接查詢會嚴重影響數(shù)據(jù)庫性能。Oracle數(shù)據(jù)庫中通過內嵌表實現(xiàn)了不符合第一范式的數(shù)據(jù)庫設計,詳細研究了Oracle中內嵌表的創(chuàng)建、查詢以及修改的過程。
關鍵詞: Oracle;內嵌表;范式

 在關系數(shù)據(jù)庫中,存在以下定義:“在任何一個關系數(shù)據(jù)庫中,第一范式1NF(1 Normal Form)是對關系模式的基本要求,不滿足第一范式的數(shù)據(jù)庫就不是關系數(shù)據(jù)庫”[1]。
 第一范式是指數(shù)據(jù)庫表的每一列都是不可分割的基本數(shù)據(jù)項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重復的屬性。如果出現(xiàn)重復的屬性,就可能需要定義一個新的實體,新的實體由重復的屬性構成,新實體與原實體之間為一對多關系。在第一范式中表的每一行只包含一個實例的信息。例如,對于員工信息表,不能將員工信息都放在一列中顯示,也不能將其中的兩列或多列在一列中顯示;員工信息表的每一行只表示一個員工的信息,一個員工的信息在表中只出現(xiàn)一次。簡而言之,第一范式就是無重復的列。
 實際情況中,卻常常出現(xiàn)某條記錄中某個值必須是集合類型(多值),通常情況會通過新建一張新表,然后再通過關系(一對一,一對多,多對多)來實現(xiàn)多值的保存。但是,這樣也同樣存在一個問題:查詢速度會變慢。由于涉及不同的兩個表,查詢時就會涉及連接(JOIN)操作,連接操作是最為耗費資源(時間,空間)的操作,當查詢量一旦增加超過某個閾值,數(shù)據(jù)庫就可能會因為資源被耗盡而拒絕服務。為了減少連接操作的次數(shù),Oracle有一種這樣的特性,可以將某一列的類型設置為一個集合類型(數(shù)組—VARRAY,內嵌表—Nested Table),這樣就可以在一個單元格中存放多個結構相同的數(shù)據(jù)[2-5]。
 在使用內嵌表的時候,需要先建立一個數(shù)據(jù)類型(Type),然后設置對應列的類型為之前新建的類型。建立完成后,則對應列的數(shù)據(jù)會變?yōu)楸眍愋停瑢ζ洳僮餍枰褂胻able函數(shù)將其轉為表后才可操作。具體實現(xiàn)過程如下文所述。
1 創(chuàng)建內嵌表類型
 (1)簡單類型內嵌表,這樣會創(chuàng)建出一個有且只有一列的內嵌表(可看作數(shù)組)
 create or replace
TYPE
  TP_ENC_TBL
AS
  TABLE OF NUMBER
(2)復雜類型內嵌表
①創(chuàng)建表結構
create or replace
TYPE
  TP_ENC_TYP
AS
  OBJECT(
    SN VARCHAR2(32),
    C VARCHAR2(512),
    N VARCHAR2(512)

 ②創(chuàng)建表類型
create or replace
TYPE
  TP_ENC_TBL
AS
  TABLE OF T_ENC_TYP
2 創(chuàng)建一個表,其中COL列為內嵌表類型
 CREATE TABLE
T_NESTED_TABLE(
   ID INTEGER PRIMARY KEY,
   COL TP_ENC_TBL DEFAULT TP_ENC_TBL()

NESTED TABLE
  COL
STORE AS
  NT_COL
RETURN AS VALUE;
3 查看T_NESTED_TABLE表
 desc t_nested_table
 名稱 空值    類型
 ID NOT NULL NUMBER(38)
 COL          T_ENC_TBL()
 可以看出,列的類型已經是一個復雜的類型TP_ENC_TBL,至此,內嵌表新建成功。
4 對內嵌表的操作
4.1 向內嵌表列增加數(shù)據(jù)

 INSERT INTO
TABLE(SELECT nt.col FROM t_nested_table nt WHERE nt.ID=1)
VALUES
(′val′,′val′,′val′)
首先必須選擇向內嵌表插入數(shù)據(jù),由于表是內嵌的,所以必須先從某個單元格中將內嵌表選擇出來,然后使用table函數(shù)進行轉換。
4.2 修改內嵌表中的數(shù)據(jù)
 UPDATE
 TABLE(SELECT nt.col FROM t_nested_table nt WHERE nt.ID=1)t
 SET
 t.sn=′new_val′,
 t.c=′new_val′,
 t.n=′new_val′
 首先必須選擇需要修改的內嵌表,由于表是內嵌的,所以必須先從某個單元格中將內嵌表選擇出來,然后使用table函數(shù)進行轉換。
4.3 查詢內嵌表中的數(shù)據(jù)
 SELECT
t.*
FROM
TABLE(SELECT nt.col FROM t_nested_table nt WHERE nt.ID=1)t
SN         C          N
new_val     new_val    new_val
4.4 刪除內嵌表中的數(shù)據(jù)
DELETE FROM
TABLE(SELECT nt.col FROM t_nested_table nt WHERE nt.ID=1)t
WHERE
t.SN=′new_val′
 嵌套表是表中之表。一個嵌套表是某些行的集合,它在主表中表示為其中的一列。對主表中的每一條記錄,嵌套表可以包含多個行。在某種意義上,它是在一個表中存儲一對多關系的一種方法。通過嵌套表,在不影響數(shù)據(jù)庫性能的情況下,通過Oracle實現(xiàn)不遵循范式的存儲。
參考文獻
[1] 王珊,薩師煊.數(shù)據(jù)庫系統(tǒng)概論.第四版[M].北京:高等教育出版社,2006.
[2] THOMAS KYTE(美).Oracle高級專家編程[M].美國加州:Wrox Press,2001.
[3] 吳孝麗,周焱,耿驚濤.ORACLE數(shù)據(jù)庫安全策略和方法[J].煤炭技術,2011,30(5):113-115.
[4] 俞盤祥.Oracle數(shù)據(jù)庫系統(tǒng)基礎[M].北京:清華大學出版社,1995.
[5] 余以勝.Oracle數(shù)據(jù)庫備份解決方案的研究[J].計算機與數(shù)字工程,2006,34(1):118-121.

此內容為AET網站原創(chuàng),未經授權禁止轉載。
主站蜘蛛池模板: 青苹果乐园在线高清| 大香伊蕉在人线国产最新75| 精品亚洲综合在线第一区| 精品久久久久久无码人妻蜜桃 | 99精品国产在热久久无毒不卡 | 北条麻妃一本到高清在线观看 | 黄色免费网址大全| 美国大片免费收看| 西西人体44rt大胆高清日韩| 精品国产自在在线在线观看| 欧美黑人疯狂性受xxxxx喷水 | 含羞草实验研究所入口免费网站直接进入 | 亚洲欧美日韩图片| 久别的草原电视剧免费观看| 中文字幕精品一区二区2021年 | 亚洲av之男人的天堂| 三级伦理在线播放| 67194线路1(点击进入)| 青青操视频在线免费观看| 色偷偷人人澡人人爽人人模| 白嫩少妇喷水正在播放| jizz18高清视频| 天堂网在线资源www最新版| 精品视频一区二区三区在线播放 | av毛片免费看| 青草娱乐极品免费视频| 欧美黄色免费在线观看| 成年人在线免费观看网站| 少妇人妻av无码专区| 日本xxxxx高清视频| 国内自拍成人网在线视频| 国产**毛片一级视频| 亚洲a∨无码精品色午夜| aaa特级毛片| 给我个免费看片bd| 日韩a级片在线观看| 成人片黄网站色大片免费| 国产精品自产拍在线网站| 国产成人tv在线观看| 亚洲欧洲日产国码二区首页| 一个人免费视频观看在线www |