<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

        關系數據庫在不斷地發展時,許多數據庫引入了面向對象的思想,這其中以Oracle為代表,Oracle9i就號稱面向對象數據庫。 自Oracle9i以來,Oracle就不再是單純的關系數據庫管理系統,它在關系數據庫模型的基礎上,添加了一系列面向對象的特性。Oracle的對象體系遵從面向對象思想的基本特征,許多概念同C++,JAVA中類似,具有繼承,重載,多態等特征,但又有自己的特點。

    1、
    Oracle面向對象的最基本元素是它的對象類型——Type
    下面開始寫自定義對象類型(
    as object 必須關鍵字)

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


    創建表并使用以上對象類型ADDRESS

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


    通過別名對表進行查詢

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


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

    2、Oracle中面向對象特征——繼承(父類型必須聲明為NOT FINAL,子類型使用關鍵字UNDER)

     1 創建父類型
     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、可變數組
    可變數組,是一種集合。一個可變數組是對象的一個集合,其中每個對象都具有相同的數據類型。可變數組的大小由創建時決定。在表中建立可變數組后,可變數組在主表中作為一個列對待。

     1 創建對象類型
     2 create or replace type ADDRESS as object
     3 (
     4     PROVINCE varchar(10),
     5     CITY varchar(20),
     6 );
     7 
     8 創建ADDRESS可變數組
     9 create or replace type ADDRESS_LIST as varray(3of ADDRESS;
    10 
    11 創建表并使用可變數組ADDRESS_LIST
    12 create table STUDENT 
    13 (
    14     STUNAME varchar(20),
    15     STUADDS ADDRESS_LIST
    16 );
    17 
    18 向表中插入數據
    19 insert into STUDENT values('improviser',ADDRESS_LIST(ADDRESS('廣東省','廣州市','江海大道'),
                                               ADDRESS(
    '廣東省','潮州市','潮楓路')));
    20 
    21 查詢(使用table函數將數據表格形式輸出)
    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 基本對象類型、創建表、查詢和插入數據都跟上面可變數組一樣
     5 
     6 嵌套表更新table轉化為表再利用表別名操作列進行更新
     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



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

    4、對象表

     1 首先創建對象類型
     2 create or replace type OFFICETYPE as object
     3 (
     4     id varchar(10),
     5     typename varchar(20)
     6 );
     7 
     8 將對象類型轉化為對象表
     9 create table office of officetype;
    10 
    11 創建對象關系表(使用ref ,指示OID進行對象表關聯)
    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 取得關聯對象表相關內容
    21 select workerid,workername,deref(w.workeroffice),phone from worker w
      
    where workerid = 'C001';
    22 結果為
    23 C001   張小明  OFFICETYPE('0001''財務科')      010-12345
    24 
    25 使用VALUE(別名)查詢對象內容
    26 select value(o) from office o;
    27 


    5、對象視圖

    1 創建對象視圖(通過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;


    好了,有關Oracle中面向對象的內容就簡要敘述這么多了,雖然現在很少使用到,但在以后有用到之處有一定的參考作用。

    posted on 2008-06-18 17:42 henry1451 閱讀(336) 評論(0)  編輯  收藏 所屬分類: Oracle技術
    主站蜘蛛池模板: 成年人免费网站在线观看| 91青青国产在线观看免费 | 日韩精品无码免费专区午夜不卡| 成人免费无码精品国产电影| 亚洲最大中文字幕无码网站| 在线观看免费人成视频色9| 亚洲欧洲日韩在线电影| 亚洲一级毛片免费观看| 亚洲色偷偷av男人的天堂| 亚洲精品在线免费看| 亚洲国产成人精品无码一区二区 | 国产综合亚洲专区在线| free哆拍拍免费永久视频 | 亚洲综合久久久久久中文字幕| 一级毛片免费视频| 亚洲国产成人久久99精品| 免费无码又黄又爽又刺激| 亚洲欧美日韩国产精品一区| 国产在线观看www鲁啊鲁免费| 无忧传媒视频免费观看入口| 亚洲综合无码精品一区二区三区 | 免费高清在线影片一区| 亚洲AV无码成人精品区狼人影院 | 午夜免费福利影院| 一级毛片a女人刺激视频免费| 亚洲精品国产精品乱码不99| 59pao成国产成视频永久免费| 亚洲校园春色另类激情| 可以免费观看的一级毛片| 免费无码又爽又刺激高潮软件| 内射干少妇亚洲69XXX| 在线观看人成视频免费| sss日本免费完整版在线观看| 亚洲日本va午夜中文字幕一区| 成人免费毛片内射美女-百度| 特级毛片全部免费播放| 亚洲国产精品久久66| 波多野结衣久久高清免费 | 午夜亚洲国产理论秋霞| 在线免费观看a级片| 91视频免费网站|