<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 60,comments - 71,trackbacks - 0

    本文來自:http://m.tkk7.com/improviser/archive/2007/10/02/150166.html

        關(guān)系數(shù)據(jù)庫在不斷地發(fā)展時,許多數(shù)據(jù)庫引入了面向?qū)ο蟮乃枷耄@其中以O(shè)racle為代表,Oracle9i就號稱面向?qū)ο髷?shù)據(jù)庫。 自O(shè)racle9i以來,Oracle就不再是單純的關(guān)系數(shù)據(jù)庫管理系統(tǒng),它在關(guān)系數(shù)據(jù)庫模型的基礎(chǔ)上,添加了一系列面向?qū)ο蟮奶匦浴racle的對象體系遵從面向?qū)ο笏枷氲幕咎卣鳎S多概念同C++,JAVA中類似,具有繼承,重載,多態(tài)等特征,但又有自己的特點。

    1、
    Oracle面向?qū)ο蟮淖罨驹厥撬膶ο箢愋汀?strong>Type。
    下面開始寫自定義對象類型(
    as object 必須關(guān)鍵字)

    1 create or replace type ADDRESS as object
    2 (
    3      PROVINCE varchar(10),
    4      CITY varchar(20),
    5      STREET varchar(30)
    6 );


    創(chuàng)建表并使用以上對象類型ADDRESS

    1 create table STUDENTOBJ 
    2 (
    3     STUNAME varchar(20),
    4     STUADD  ADDRESS
    5 );
    6 
    7 向表中插入數(shù)據(jù):
    8 insert into STUDENTOBJ values('improviser',ADDRESS('廣東省','廣州市''江海大道');


    通過別名對表進行查詢

    1 select S.STUNAME S.ADDRESS.PROVINCE S.ADDRESS.CITY
    2 S.ADDRESS.STREET 
    from STUDENTOBJ S;


    從上面的測試代碼,可以很容易看到其與面向?qū)ο笳Z言(比如Java)的差異,不必使用new創(chuàng)建實例,也沒有了默認無參數(shù)構(gòu)造器,默認使用定義的屬性作為構(gòu)造器參數(shù),足以描述各種實體。另外,Type的屬性沒有private,protected,public的說法,所有的屬性調(diào)用者都可以訪問,即都是public。

    2、Oracle中面向?qū)ο筇卣鳌?strong>繼承(父類型必須聲明為NOT FINAL,子類型使用關(guān)鍵字UNDER)

     1 創(chuàng)建父類型
     2 create or replace type PERSON as object
     3 (
     4     PERNAME varchar(10),
     5     PERSEX varchar(2)
     6 )not final;
     7 
     8 子類型繼承父類型
     9 create or replace type STUDENT under PERSON
    10 (
    11     STUNO varchar(8),
    12     STUSCORE varchar(10)
    13 );

    由以上定義,其子類型中屬性包含了父類型中所有屬性。

    3、可變數(shù)組
    可變數(shù)組,是一種集合。一個可變數(shù)組是對象的一個集合,其中每個對象都具有相同的數(shù)據(jù)類型。可變數(shù)組的大小由創(chuàng)建時決定。在表中建立可變數(shù)組后,可變數(shù)組在主表中作為一個列對待。

     1 創(chuàng)建對象類型
     2 create or replace type ADDRESS as object
     3 (
     4     PROVINCE varchar(10),
     5     CITY varchar(20),
     6 );
     7 
     8 創(chuàng)建ADDRESS可變數(shù)組
     9 create or replace type ADDRESS_LIST as varray(3of ADDRESS;
    10 
    11 創(chuàng)建表并使用可變數(shù)組ADDRESS_LIST
    12 create table STUDENT 
    13 (
    14     STUNAME varchar(20),
    15     STUADDS ADDRESS_LIST
    16 );
    17 
    18 向表中插入數(shù)據(jù)
    19 insert into STUDENT values('improviser',ADDRESS_LIST(ADDRESS('廣東省','廣州市','江海大道'),
                                               ADDRESS(
    '廣東省','潮州市','潮楓路')));
    20 
    21 查詢(使用table函數(shù)將數(shù)據(jù)表格形式輸出)
    22 select *from table(select s.STUADDS from STUDENT where STUNAME='improviser');


    4、嵌套表
    嵌套表是表中之表,一個嵌套表是某些行的集合,它在主表中表示為其中的一列。對主表中的每一條記錄,嵌套表可以包含多個行。

     1 定義嵌套表方法:
     2 create or replace type ADDRESS_TABLE as table of ADDRESS;
     3 
     4 基本對象類型、創(chuàng)建表、查詢和插入數(shù)據(jù)都跟上面可變數(shù)組一樣
     5 
     6 嵌套表更新table轉(zhuǎn)化為表再利用表別名操作列進行更新
     7 update table(select S.STUADDS from STUDENT S where
     
    8  S.STUNAME = 'improviser') AD set AD.PROVINCE = '北京' where city = '廣州';
     9
    10刪除嵌套表記錄
    11delete from table(select S.STUADDS from STUDENT S
    12  
    where S.STUNAME = 'improviser') AD where AD.city = '潮州市';
    13



        比較:可變數(shù)組,查詢速度快,但是更新困難得整體更新,適用與數(shù)據(jù)不修改情況,如醫(yī)生處方。使用嵌套表可以對表中的表內(nèi)容進行修改而無需進行整體更新操作。

    4、對象表

     1 首先創(chuàng)建對象類型
     2 create or replace type OFFICETYPE as object
     3 (
     4     id varchar(10),
     5     typename varchar(20)
     6 );
     7 
     8 將對象類型轉(zhuǎn)化為對象表
     9 create table office of officetype;
    10 
    11 創(chuàng)建對象關(guān)系表(使用ref ,指示OID進行對象表關(guān)聯(lián))
    12 create table worker
    13 (
    14     workerid varchar(10primary key,
    15     workername varchar(20),
    16     workeroffice ref officetpey scope is office,
    17     phone varchar(20)
    18 );
    19 
    20 使用deref 取得關(guān)聯(lián)對象表相關(guān)內(nèi)容
    21 select workerid,workername,deref(w.workeroffice),phone from worker w
      
    where workerid = 'C001';
    22 結(jié)果為
    23 C001   張小明  OFFICETYPE('0001''財務(wù)科')      010-12345
    24 
    25 使用VALUE(別名)查詢對象內(nèi)容
    26 select value(o) from office o;
    27 


    5、對象視圖

    1 創(chuàng)建對象視圖(通過OID連接dept)
    2 create view deptview of deptype with object oid(deptno) as select *from dept;
    3 create view emp_view as select make_ref(deptview,deptno) deptoid,empno,ename
    4   from emp;


    好了,有關(guān)Oracle中面向?qū)ο蟮膬?nèi)容就簡要敘述這么多了,雖然現(xiàn)在很少使用到,但在以后有用到之處有一定的參考作用。

    posted on 2008-06-18 17:42 henry1451 閱讀(345) 評論(0)  編輯  收藏 所屬分類: Oracle技術(shù)
    主站蜘蛛池模板: 亚洲综合精品香蕉久久网| 亚洲国产片在线观看| 红杏亚洲影院一区二区三区| 亚洲热妇无码AV在线播放| 亚洲一区二区影视| 一级特黄录像视频免费| 在线美女免费观看网站h| 免费v片在线观看品善网| 精品无码一区二区三区亚洲桃色| AV激情亚洲男人的天堂国语| 777成影片免费观看| 亚洲美女视频一区二区三区| 中文字幕在线观看免费| 国产精品免费视频播放器| 亚洲天堂一区二区三区四区| 中文无码日韩欧免费视频| 亚洲av永久无码精品国产精品| 亚洲av最新在线观看网址| 色se01短视频永久免费| 亚洲成色WWW久久网站| 一级视频在线免费观看| 亚洲AV无码码潮喷在线观看| 7m凹凸精品分类大全免费| 亚洲色少妇熟女11p| www.999精品视频观看免费| 亚洲AV无码成人专区片在线观看| 久久国产高潮流白浆免费观看 | 黄色免费在线网址| 歪歪漫画在线观看官网免费阅读| 亚洲国产精品无码久久九九大片| 婷婷综合缴情亚洲狠狠尤物| 亚洲精品无码中文久久字幕| 在线观看日本免费a∨视频| 狠狠综合亚洲综合亚洲色| 久久亚洲精品视频| 成人免费看吃奶视频网站| 亚洲深深色噜噜狠狠网站| 中文字幕av无码无卡免费| 特黄特色的大片观看免费视频| 亚洲А∨精品天堂在线| 免费国产a理论片|