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

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

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

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
    繼承
    ?
    ??? 1、創建父類型
    ?

    ??? create or replace type person as object

    ????? (

    ??????? NAME varchar2 ( 10 ),

    ??????? SEX char ( 2 ),

    ??????? BIRTHDATE date ,

    ??????? PLACE varchar2 ( 100 ),

    ??????? member function get_name return varchar2

    ????? ) not final ; -- 必須注明,默認為 final

    ???? ?

    ??? create or replace type body person is

    ???? ? member function get_name return varchar2 is

    ??????? begin

    ????????? return self.name;

    ??????? end get_name;

    ??? end ;

    ?
    ??? 2、創建person的子類
    ?

    ??? create or replace type employee under person

    ????? (

    ??????? emp_id varchar2 ( 10 ),

    ??????? dep_id varchar2 ( 10 ),

    ??????? job varchar2 ( 20 )

    ????? );

    ?
    ??? 3、應用父類和子類
    ?

    ??? declare

    ????? person_one person;

    ????? employee_one employee;

    ??? begin

    ????? person_one:=person( ' 李四 ' , ' ' , date '2008-10-20' , ' 上海 ' );

    ????? employee_one:=employee( ' 小張 ' , ' ' , date '2008-10-11' , ' 杭州 ' , '123456' , null , null );

    ????? dbms_output.put_line(person_one.get_name);

    ????? dbms_output.put_line(employee_one.get_name);

    ??? end ;

    ?
    ??? 注:與其他OOP一樣,子類繼承父類的參數及函數,但注意子類的參數順序,都在父類之后順序排列。
    ?
    ??? 4、父類可引用子類實例:
    ?

    ??? declare

    ????? person_one person;

    ????? employee_one employee;

    ??? begin

    ????? person_one:=employee( ' 小張 ' , ' ' , date '2008-10-11' , ' 杭州 ' , '123456' , null , null ); -- 正確!

    ????? employee_one:=person( ' 李四 ' , ' ' , date '2008-10-20' , ' 上海 ' ); -- 錯誤,子類不可引用父類實例!

    ????? dbms_output.put_line(person_one.name); -- 正確!

    ????? dbms_output.put_line(person_one.emp_id); -- 錯誤,父類忽略子類參數!

    ??? end ;

    ?
    ?
    重寫
    ?
    ??? 1、建立父類
    ?

    ??? create or replace type person as object

    ????? (

    ??????? NAME varchar2 ( 10 ),

    ??????? SEX char ( 2 ),

    ??????? BIRTHDATE date ,

    ??????? PLACE varchar2 ( 100 ),

    ??????? member procedure show_msg

    ????? ) not final ;

    ???? ?

    ??? create or replace type body person is

    ???? ? member function show_msg return varchar2 is

    ??????? begin

    ????????? dbms_output.put_line( name || '/' ||sex|| '/' ||birthdate);

    ??????? end show_msg;

    ??? end ;

    ?
    ??? 2、創建子類
    ?

    ??? create or replace type employee under person

    ????? (

    ??????? emp_id varchar2 ( 10 ),

    ??????? dep_id varchar2 ( 10 ),

    ??????? job varchar2 ( 20 ),

    ??????? overriding member procedure show_msg--關鍵字overriding

    ????? );

    ?

    ??? create or replace type body employee is

    ???? ? overriding member procedure show_msg is

    ??????? begin

    ????????? dbms_output.put_line(emp_id|| '/' ||dep_id|| '/' ||job);

    ??????? end show_msg;

    ??? end ;

    ?
    ??? 3、重寫方法的調用
    ?

    ??? declare

    ????? person_one person;

    ????? employee_one employee;

    ??? begin

    ????? person_one:=person( ' 李四 ' , ' ' , date '2008-10-20' , ' 上海 ' );

    ????? employee_one:=employee( ' 小張 ' , ' ' , date '2008-10-11' , ' 杭州 ' , '123456' , '11' , '22' );

    ????? person_one.show_msg; -- 李四 / /20-OCT-08

    ????? employee_one.show_msg; --123456/11/22

    ??? end ;

    ?
    ??? 4、類多態
    ?

    ??? declare

    ????? person_one person;

    ????? person_two person;

    ??? begin

    ????? person_one:=person( ' 李四 ' , ' ' , date '2008-10-20' , ' 上海 ' );

    ????? person_two:=employee( ' 小張 ' , ' ' , date '2008-10-11' , ' 杭州 ' , '123456' , '11' , '22' );

    ????? person_one.show_msg; -- 李四 / /20-OCT-08

    ????? person_two.show_msg; --123456/11/22

    ??? end ;

    ?
    ?
    對象表
    ?
    ??? 要區分對象表和將對象作為字段的表。
    ??? 對象表是基于對象類型創建的表,對象表的每一行都代表一個對象。
    ?
    ??? 1、創建對象表
    ?

    ??? create or replace type person as object

    ????? (

    ??????? NAME varchar2 ( 10 ),

    ??????? SEX char ( 2 ),

    ??????? BIRTHDATE date ,

    ??????? PLACE varchar2 ( 100 )

    ????? ) ;

    ?

    ??? create table t_person of person; -- 注意格式!

    ?
    ??? 2、插入數據(2種方法)
    ?

    ??? insert into t_person values ( ' 張三 ' , ' ' , date '2008-10-11' , ' 杭州 ' ); -- 直接插入

    ?

    ??? insert into t_person values (person( ' 李四 ' , ' ' , date '2008-10-20' , ' 上海 ' )); -- 插入實例

    ?
    ??? 注:其實第一種方法是由系統隱式創建了對象實例,然后插入
    ?
    ??? 3、查詢數據(2種方法)
    ?

    ??? SQL > select * from t_person;

    ?

    ??? NAME ???? SEX? BIRTHDATE PLACE

    ??? -------- ---- --------- --------

    ??? 張三 ????? ?? 11 -OCT- 08 ? 杭州

    ??? 李四 ???? ?? 20 -OCT- 08 ? 上海

    ?
    ?

    ??? SQL > select value (a) from t_person a;

    ?

    ??? VALUE (A)( NAME , SEX, BIRTHDATE, PLACE)

    ??? ----------------------------------------

    ??? PERSON( ' 張三 ' , ' ' , '11-OCT-08' , ' 杭州 ' )

    ??? PERSON( ' 李四 ' , ' ' , '20-OCT-08' , ' 上海 ' )

    ?
    ?
    對象表外鍵
    ?
    ??? 1、對象表之間外鍵通過REF指針實現創建,首先創建外部表
    ?

    ??? create table t_person_f(

    ????? emp_id integer ,

    ????? emp_msg ref person scope is t_person

    ????? );

    ?
    ??? 注1:定義字段emp_msg為person對象類型的ref指針
    ??? 注2:scope表示實例來源,只能從表t_person中獲取
    ?
    ??? 2、向外部表中插入數據
    ?

    ??? insert into t_person_f

    ??? select 123 , ref (a) from t_person a

    ??? where a.name= ' 張三 ' ;

    ?
    ??? 注:必須使用select語句通過ref獲取實例
    ?
    ??? 3、查詢外部表,通過deref來解析
    ?

    ??? SQL > select * from t_person_f; -- 無法查詢真實信息

    ?

    ?????EMP_ID????? EMP_MSG

    ??? ----------?? ----------------------------------------------

    ???? ? 123 ???????? 0000220208 C 5A 9B48F328840D7BF1B44EA41B24A11F8

    ?
    ?

    ??? SQL > select emp_id, deref (emp_msg) from t_person_f;

    ?

    ????? EMP_ID???? DEREF (EMP_MSG)( NAME , SEX, BIRTHDATE, PLACE)

    ??? ---------?? -------------------------------------------------

    ?????? 123 ?????? PERSON( ' 張三 ' , ' ' , '11-OCT-08' , ' 杭州 ' )

    ?
    ??? 4、外鍵管理
    ?
    ??? 對象表要求外鍵引用的行必須存在,而ref則沒有這個限制,刪除時會指向空值,解析為NULL。
    ?

    ??? delete from t_person where name = ' 張三 ' ; -- 刪除對象

    ?
    ?

    ??? SQL > select emp_id,deref(emp_msg) from t_person_f;

    ?

    ????? EMP_ID???? DEREF(EMP_MSG)(NAME, SEX, BIRTHDATE, PLACE)

    ??? ---------?? -------------------------------------------------

    ?????? 123??????

    ?
    ??? 可以使用dangling關鍵字,查詢所有被懸空的ref
    ?

    ??? SQL >? select emp_id from t_person_f where emp_msg is dangling ;

    ?

    ??????? EMP_ID

    ??? ----------

    ?????????? 123

    ?
    ?
    ?




    -The End-

    posted on 2008-10-17 20:13 decode360-3 閱讀(480) 評論(0)  編輯  收藏 所屬分類: Oracle
    主站蜘蛛池模板: 亚洲国产精品无码久久久久久曰| 67194国产精品免费观看| 日本免费一本天堂在线| 亚洲www在线观看| 国产一卡二卡3卡四卡免费| 亚洲欧洲日本国产| 黄色片在线免费观看| 亚洲av无码不卡久久| 一二三四免费观看在线电影 | 亚洲aⅴ无码专区在线观看| 免费无码AV片在线观看软件| 亚洲熟妇无码AV不卡在线播放 | 中文字幕手机在线免费看电影 | 四虎精品免费永久免费视频| 亚洲国产精品自在拍在线播放| 一级毛片视频免费观看| 亚洲综合网站色欲色欲| 日韩人妻无码精品久久免费一| 亚洲日本在线免费观看| 最近中文字幕免费mv视频7| 国产精品亚洲专区无码唯爱网| yy6080久久亚洲精品| 18禁在线无遮挡免费观看网站| 亚洲天堂中文资源| 最近的中文字幕大全免费版| 蜜臀亚洲AV无码精品国产午夜.| 国产a v无码专区亚洲av| 无人在线观看免费高清| 最新亚洲卡一卡二卡三新区| 一本久久综合亚洲鲁鲁五月天| 99久久婷婷免费国产综合精品| 亚洲一级毛片免观看| 亚洲AV中文无码乱人伦| 污视频在线免费观看| 亚洲妇女无套内射精| 亚洲精品无码mv在线观看网站| 无码国产精品一区二区免费| 羞羞漫画小舞被黄漫免费| 亚洲AV无码久久精品狠狠爱浪潮| 在线观看成人免费视频| 日本免费A级毛一片|