<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://www.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ū)ο蟮奶匦?。Oracle的對象體系遵從面向?qū)ο笏枷氲幕咎卣?,許多概念同C++,JAVA中類似,具有繼承,重載,多態(tài)等特征,但又有自己的特點(diǎn)。

    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('廣東省','廣州市''江海大道');


    通過別名對表進(jìn)行查詢

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


    從上面的測試代碼,可以很容易看到其與面向?qū)ο笳Z言(比如Java)的差異,不必使用new創(chuàng)建實(shí)例,也沒有了默認(rèn)無參數(shù)構(gòu)造器,默認(rèn)使用定義的屬性作為構(gòu)造器參數(shù),足以描述各種實(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)化為表再利用表別名操作列進(jì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)容進(jìn)行修改而無需進(jìn)行整體更新操作。

    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進(jìn)行對象表關(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 閱讀(336) 評論(0)  編輯  收藏 所屬分類: Oracle技術(shù)
    主站蜘蛛池模板: 亚洲综合免费视频| 亚洲av纯肉无码精品动漫| 日韩在线视频线视频免费网站| 最近最好的中文字幕2019免费 | 亚洲精品自在在线观看| 国产高潮流白浆喷水免费A片 | 免费一级肉体全黄毛片| 一级**爱片免费视频| 无码乱人伦一区二区亚洲| 久久91亚洲精品中文字幕| 亚洲?v无码国产在丝袜线观看| 免费夜色污私人影院网站电影| 亚洲自偷自偷图片| 99re视频精品全部免费| 亚洲大香伊人蕉在人依线| 好男人视频社区精品免费| 国产亚洲福利一区二区免费看| 亚洲精品麻豆av| 亚在线观看免费视频入口| 亚洲成av人片在线看片| 西西人体44rt高清亚洲| 久久亚洲AV无码西西人体| 亚色九九九全国免费视频| 亚洲成av人片天堂网无码】| 在线观看午夜亚洲一区| 亚洲国产中文v高清在线观看| 在线观看免费精品国产| 大地影院MV在线观看视频免费 | 永久免费不卡在线观看黄网站| 一区二区免费电影| yellow免费网站| 亚洲天堂免费在线视频| 久久国产乱子伦精品免费午夜| 亚洲国产高清美女在线观看| 亚洲好看的理论片电影| 国产在线播放免费| 69国产精品视频免费| 99国产精品视频免费观看| 5g影院5g天天爽永久免费影院| 99久9在线|免费| 无人在线直播免费观看|