oracle中對象表,ref及deref的一個實例。

ORACLE在關係數據庫外,融入了面向對象的元素,比如可以創建type,type之間可以繼承,type可以帶構造函數、排序函數、各種各樣的成員函數、存儲過程等等。

對象表是指該表的一行就是一個對象,有一個OID(object ID),對象表之間沒有主外鍵關聯的概念,爲了體現這層關係,oracle中用了ref對象來實現。

 

下面例子,創建一個地址類型,一個人員類型,人員有地址屬性,所以在人員類型中設置一個ref address來確定指向他所在地址的指針。

--創建地址類型

create type address as object(
  street varchar2(35),
  city varchar2(15),
  state char(2),
  zip_code integer
);

 

create table addresses of address; --創建地址對象表

 

--創建人員類型
create type person as object(
  first_name varchar2(15),
  last_name varchar2(15),
  birthday date,
  home_address ref address, --指向對應的地址,該地址應該在另外一個對象表中的一行
  phone_number varchar2(15)
);

 

CREATE TABLE persons of person; --創建人員對象表

 

--插入一個地址

insert into addresses values(address('nanhai','shenzhen','gd','518054'));

insert into addresses values(address('shennan','shenzhen','gd','518057'));

 

--插入一個人員,注意這裏的home_address部分是如何插入一個ref address的。
insert into persons values(person('shitou','haha',to_date('1982-07-05','yyyy-mm-dd'),
 (select ref(a) from addresses a where street='nanhai'),
        '1355555555'));

 

--也可以用下面的過程來插入一個人員記錄

declare
  addref ref address ;
begin
  select ref(a) into addref from addresses a where street='nanhai';
  insert into persons
    values (person('shitou','haha',to_date('1982-07-05','yyyy-mm-dd'),
                     addref,'1355555555'));
  commit;
end;

 

--查詢某人的地址信息
select first_name,deref(home_address) from persons;

 

--修改地址
update persons set home_address=(select ref(a) from addresses a where street='shennan');

 

--刪除某個人員

delete from persons where first_name='shitou';


--刪除某個地址的相關人員記錄
delete from persons where home_address=(select ref(a) from addresses a where street='nanhai');

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章