<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/
    主站蜘蛛池模板: 国产精品免费视频一区| 最近最新的免费中文字幕| 四虎永久精品免费观看| 亚洲精品综合在线影院| 国产精品视频免费| 亚洲日韩国产精品无码av| 2019中文字幕在线电影免费 | 日本免费一本天堂在线| 在线aⅴ亚洲中文字幕| 免费观看成人毛片a片2008| 亚洲人成网站看在线播放| 久久精品免费全国观看国产| 中文字幕亚洲男人的天堂网络| 免费无码黄十八禁网站在线观看| 国产精品亚洲片在线va| 在线免费观看中文字幕| 美女无遮挡免费视频网站| 亚洲日韩中文字幕日韩在线| 国产色无码精品视频免费| 久久99亚洲网美利坚合众国| 国产成人午夜精品免费视频| 亚洲AV色无码乱码在线观看| 亚洲一区日韩高清中文字幕亚洲| 色播在线永久免费视频网站| 亚洲精品视频在线观看免费| 女人18特级一级毛片免费视频| 免费人成大片在线观看播放电影| 亚洲色爱图小说专区| 成人免费观看一区二区| 国产精品久久久久久亚洲小说| 亚洲精品无码永久在线观看你懂的| 日韩精品人妻系列无码专区免费 | 亚洲av永久无码一区二区三区| 免费看小12萝裸体视频国产| 国产啪精品视频网站免费尤物 | 亚洲精品国产精品乱码不卡 | 成人免费无码大片a毛片软件| 精品女同一区二区三区免费播放 | 亚洲日韩av无码| 91精品成人免费国产片| 麻豆亚洲AV成人无码久久精品 |