<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

        關系數據庫在不斷地發展時,許多數據庫引入了面向對象的思想,這其中以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技術
    主站蜘蛛池模板: 久久亚洲精品无码av| 久久精品国产免费一区| 色噜噜亚洲精品中文字幕| 国产偷伦视频免费观看| 亚洲日韩中文字幕| 国产国产成年年人免费看片| 免费网站观看WWW在线观看| 亚洲免费视频观看| 亚洲 自拍 另类小说综合图区| 最近免费mv在线观看动漫| 亚洲人成影院77777| 亚洲国产婷婷香蕉久久久久久| 久久久久国产精品免费免费不卡| 亚洲国产熟亚洲女视频| 国产精品亚洲二区在线观看| 日本免费网站视频www区| 特色特黄a毛片高清免费观看| 亚洲视频手机在线| 亚洲成a人片在线观看久| 6080午夜一级毛片免费看| 国产精品亚洲精品日韩电影| 亚洲欧洲日本国产| 丁香五月亚洲综合深深爱| 成人毛片免费网站| 日韩中文字幕免费视频| 成年免费a级毛片| 亚洲三级在线免费观看| 亚洲成A人片在线观看无码不卡| 免费无码黄网站在线观看| 69av免费观看| 国产午夜无码片免费| 亚洲AV无码资源在线观看| 91亚洲精品视频| 亚洲国产精华液网站w| 午夜亚洲av永久无码精品| 中文字幕影片免费在线观看| 免费人成在线观看视频高潮| 粉色视频成年免费人15次| 亚洲粉嫩美白在线| 亚洲剧场午夜在线观看| 久久精品亚洲综合一品|