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

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

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

    瘋狂

    STANDING ON THE SHOULDERS OF GIANTS
    posts - 481, comments - 486, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    oracle中的對象及測試

    Posted on 2011-08-21 15:38 瘋狂 閱讀(1613) 評論(2)  編輯  收藏 所屬分類: database

     oracle8 發布的時候,數據庫中就可以使用對象了,可以定義自己的類,也就是對象類型,和java里面的類相似,都可以包含構造函數,屬性和方法。,對象類型有時候也成為用戶自定義類型。以下是相關使用說明和測試:

     

    /**//**
     oracle對象實例及測試
    */

    ---(1)測試對象
    create or replace type PERSON as Object(
       name 
    varchar2(100),
       sex 
    char(2),
       birth date,
       pwd 
    varchar2(32),
       member 
    function geName return varchar2
    )
    create or replace type body PERSON  as 
     member 
    function geName return varchar is 
     
    begin
     
    return self.birth;--self表示當前對象如同java里面的this
     end;
    end ;

    --(2)在plsql中使用對象
    declare
    tuser person;
    begin
      tuser :
    = person('joe2','01',sysdate,'123456');
      dbms_output.put_line(tuser.geName);
    --調用方法
    end;


    ---(3)在對象中使用構造函數,過程和靜態屬性和方法
    /*
    1  構造函數使用constructor聲明
    2  構造函數return self as result聲明結尾, 
    3  構造函數屬性不需要定義長度 eg:varchar2
     static 不能用member聲明
     sttatic 不能聲明屬性,只能聲明function和procedure
     static 的方法和函數使用的時候直接用 對象類型.XX
    */

    create or replace type testm as OBJECT(
      name 
    varchar2(10),
      sex 
    char(2), 
      constructor 
    function testm(--一個參數的構造函數
        p_name varchar2
      ) 
    return self as result,
      
      constructor 
    function testm(--二個參數的構造函數
        p_name varchar2,
        p_sex 
    char
      ) 
    return self as result,
      member 
    function getSex return char,
      static 
    function getSexByCode(code in charreturn varchar2,
      member 
    procedure getSexCN ,
      static  
    procedure getSexCNByCode(code in char,str out varchar2)
    );
    create or replace type body testm is
     constructor 
    function testm(--一個參數的構造函數
        p_name varchar2
      ) 
    return self as result is
     
    begin
        self.name:
    =p_name;
        
    return;
     
    end ;
       constructor 
    function testm(--一個參數的構造函數
        p_name varchar2,
        p_sex 
    char
      ) 
    return self as result is
     
    begin
        self.name:
    =p_name;
        self.sex:
    =p_sex;
        
    return;
     
    end ;
      member 
    function getSex return char as
      
    begin
         
    return self.sex;
       
    end getSex;
       member 
    procedure getSexCN  as
        
    begin
          
    if self.sex='01' then
            dbms_output.put_line(
    '');
         
    else
            dbms_output.put_line(
    '');
          
    end if;
        
    end getSexCN;
        static 
    function getSexByCode(code in charreturn varchar2 as
        
    begin
          
    if code='01' then
            
    return '';
         elsif code 
    ='02' then
            
    return '';
          
    else return '中性';
          
    end if;
        
    end getSexByCode;
        static  
    procedure getSexCNByCode(code in char,str out varchar2as
        
    begin
          
    if code='01' then
            
    str:= '';
         elsif code 
    ='02' then
            
    str:= '';
          
    else str:= '中性';
          
    end if;
         
    end getSexCNByCode;

    end;

    --測試
    declare
    obj testm;
    sexstr 
    varchar2(4);
    begin
      obj :
    = testm('01');
      dbms_output.put_line(obj.getSex);
      obj.getSexCN;
       dbms_output.put_line(testm.getSexByCode(
    '03'));
       testm.getSexCNByCode(
    '03',sexstr);
       dbms_output.put_line(sexstr);
    end;
    --------------------------------
    --
    (4)類型繼承---------------------------
    /**//*
     使用 under標示
     被繼承的對象必須定義為 NOT FINAL
     如果類型僅僅作為超類,不被實例化(類似于java中的abstract)定義為:not instantiable
    */

    create or replace type PARENTOBJ as Object(
       name 
    varchar2(100),
       sex 
    char(2),
       member 
    function geName return varchar2
    NOT FINAl;
    create type body PARENTOBJ is
       member 
    function geName return varchar2 as
       
    begin
        
    return self.name;
       
    end;
    end;
    create or replace type SUB_OBJ under PARENTOBJ(
     birth date
    )
    --測試
    declare
    obj SUB_OBJ;
    begin
      obj :
    = SUB_OBJ('joe2','01',sysdate);
      dbms_output.put_line(obj.geName);
    --調用繼承的方法,和繼承的屬性
    end;
    ---------------------------------------
    --
    (5)重寫------------------------------
    /**//*
     重寫方法和過程需要在聲明和body里面聲明為overriding
    */

    create or replace type SUB_OBJ2 under PARENTOBJ(
     birth date,
    overriding member 
    function geName return varchar2--重寫父類的方法
    )
    create or replace type body SUB_OBJ2 is
       member 
    function geName return varchar2 as
       
    begin
        
    return '我的名字是:'||self.name;
       
    end;
    end;
    --測試
    declare
    obj SUB_OBJ2;
    begin
      obj :
    = SUB_OBJ2('joe2','01',sysdate);
      dbms_output.put_line(obj.geName);
    --調用繼承的方法,和繼承的屬性
    end;
    --(6)使用對象定義表中的列----------
    create table test00(
     tuser person,
     remark 
    varchar2(100)


    --insert into test00 values(person('joe','01',sysdate,'123456'),/*參數個數必須夠*/'remarkcontent');
    --
    select t.tuser.name  from test00 t;--必須使用表別名
    --
    delete from test00 t where t.tuser.name='joe';
    --
    --------------------------------------------
    --
    (7)使用對象定義整個表
    create table testoo1 of person;
    --insert into testoo1 values(person('joe2','01',sysdate,'123456'));
    --
    select t.*  from testoo1 t;
    --
    delete from testoo1 where name='joe';
    --
    ----------------------------------------------
    --
    (8)對象引用,每一列都是目標表中的列的引用
    create table testoo2(
       id 
    number primary key,
       tuesr ref person scope 
    is testoo1
    )
    --insert into testoo2 values(1,(select ref(oo1) from testoo1 oo1 where oo1.name='joe'));
    --
    update testoo2 o2 set o2.tuesr=(select ref(oo1) from testoo1 oo1 where oo1.name='joe2') where o2.id=1
    --
    -----------------------------------------------

     


    評論

    # re: oracle中的對象及測試  回復  更多評論   

    2011-08-22 17:20 by 站長工具
    不錯的開源。

    # re: oracle中的對象及測試  回復  更多評論   

    2011-08-22 17:21 by 站長工具
    http://tool.zbole.com/
    主站蜘蛛池模板: ww在线观视频免费观看| 国产色爽女小说免费看| 亚洲精品一二三区| 免费a级毛片无码av| 久久久久久免费一区二区三区| 亚洲精品mv在线观看| 日本免费一本天堂在线| 中文字幕免费在线看电影大全| 亚洲欧洲日本精品| 免费jjzz在线播放国产| 免费视频成人片在线观看| 亚洲1区2区3区精华液| 亚洲国产精品无码久久一区二区 | 91麻豆精品国产自产在线观看亚洲| 久久久免费的精品| 亚洲av中文无码乱人伦在线观看| 国产成A人亚洲精V品无码| 在线视频免费国产成人| 久久久久高潮毛片免费全部播放| 99亚洲精品卡2卡三卡4卡2卡| 综合自拍亚洲综合图不卡区| 免费二级毛片免费完整视频| 91精品免费在线观看| 日韩a毛片免费观看| 亚洲 欧洲 自拍 另类 校园| 国产亚洲一区二区手机在线观看 | 亚洲午夜国产精品无码老牛影视 | eeuss影院免费直达入口| 亚洲an日韩专区在线| 亚洲国产精品乱码一区二区| 国产精品免费视频网站| 国产免费丝袜调教视频| 中文字幕无码毛片免费看| 国产精品亚洲色婷婷99久久精品| 亚洲国产精品人久久电影| 亚洲AV第一页国产精品| 国产亚洲美日韩AV中文字幕无码成人 | 免费真实播放国产乱子伦| 国产妇乱子伦视频免费| 日本不卡免费新一区二区三区 | 免费黄色app网站|