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

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

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

    即興的靈感

    思維是一種藝術; 藝術需要靈感。

    博客好友

    最新評論

    Oracle中的面向對象OOP

    ??? 關系數據庫在不斷地發展時,許多數據庫引入了面向對象的思想,這其中以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(3)?of
    ?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 刪除嵌套表記錄
    11 delete ? 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(10)?primary?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 2007-10-02 11:44 poetguo 閱讀(3530) 評論(0)  編輯  收藏 所屬分類: Oracle

    主站蜘蛛池模板: 一二三四在线观看免费中文在线观看| 午夜私人影院免费体验区| 成人亚洲网站www在线观看| 亚洲人成色4444在线观看| 可以免费看的卡一卡二| 亚洲天堂男人影院| 在线观看人成视频免费| 亚洲AV无码一区二区三区性色 | 亚洲福利一区二区| 亚洲成年人免费网站| 亚洲制服丝袜一区二区三区| 91香蕉成人免费网站| 亚洲欧美成aⅴ人在线观看| 我要看免费的毛片| 免费播放美女一级毛片| 中文字幕亚洲电影| 老司机午夜在线视频免费| 国产VA免费精品高清在线| 国产成人高清亚洲| 日韩精品在线免费观看| 亚洲国产美女精品久久久久| 成年私人影院免费视频网站| 午夜亚洲国产理论片二级港台二级 | 亚洲中文字幕在线观看| 久久青草免费91观看| 亚洲一区二区免费视频| 四虎永久成人免费影院域名| 国产中文字幕在线免费观看| 亚洲福利视频导航| 午夜寂寞在线一级观看免费| 全部一级一级毛片免费看| 亚洲国产精品无码av| 最近最新的免费中文字幕| 一区视频免费观看| 亚洲人成在线免费观看| 亚洲五月午夜免费在线视频| 亚洲免费一级视频| 免费在线人人电影网| 亚洲国产综合在线| 亚洲精品视频在线播放| 67pao强力打造高清免费|