ORACLE的物件操作

2021-08-11 04:49:32 字數 3590 閱讀 2655

--建立物件型別

create type object_type as object(

column_name type,

[column_name type,]

[member function fun_name return type]

[member procedure proc_name ]

);-- 其中member function 宣告了物件內部函式,member procedure 宣告了內部過程,新增物件體(body)

create type body object_type as

member function fun_name return type is

var_name type;

begin

null;

end;

end;

--獲取有關物件型別的資訊:desc[ribe] object_type;

--如果物件是巢狀物件,可以通過設定深度來輸出子物件,下面是輸出兩級的。

setdescribe depth 2

desc[ribe] object_type;

--使用物件型別定義列和物件表

create

table table_name(

column_name type,

column_name1 object_type

);/**

上面的 object_type 是通過之前的物件型別定義而來的。

create table object_tab_name of object_type;

上面定義的表跟普通的建立表沒有太大的分別(可能)。

物件引用和物件標示符

物件表的另一乙個不同之處在於可以使用物件引用(object reference)為物件表之間的關係建立模型,而不使用外來鍵達到外來鍵的效果。

使用ref型別進行定義,通常用作指向物件表中物件的指標。

**/create

table table_name(

column_name type,

obj_col_name ref object_type scope is obj_tab_name);

--如果 obj_tab_name 表已經存在,則可以不寫 scope is obj_tab_name

--注意:obj_tab_name 是用 object_type 建立的物件表

--向包含物件屬性的表插入資料

insert

into table_name(column_name, obj_col_name)

values('xx',object_type('xx','xx','xx') );

--or

insert

into table_name(column_name,obj_col_name)

values(x,(select ref(t) from obj_tab_name t where t.col=x) );

/**下面那個是通過直接插入識別符號,資料已經存在了物件表obj_tab_name 中,ref() 是獲得物件的識別符號,

查詢資料的時候,object_tpye 中的全部資料會合成乙個資料輸出,就是列名下面是很長的乙個下劃線,沒有斷開要用物件中的某個屬性作為查詢條件**/

select *

from table_name t

where t.obj_col_name.column_name= xx;

--對物件表的dml操作

--插入資料

insert

into obj_tab_name values(

object_type(x,xx,***,***x));

insert

into object_tab_name

(column_name1,column_name2)

values(x,xx);

--兩種方法一樣的。

--從物件表中選擇資料

select * from obj_tab_name;

--這樣得出的結果跟普通表一樣,每個列分開。

select

value(t) from obj_tab_name t;

--這樣得出的結果跟查詢包含物件型別的表的查詢結果一樣,全部資料合併成一樣。型別繼承 not final

create type obj_par_name as object(

column_name type

)not final;

create type obj_chi_name under obj_par_name(

column_name1 type

);--not instantiable物件型別,可以防止建立該型別的物件例項。

create type object_name as object(

column_name type

)not final not instantiable;

--not instantiable 物件不能為 final, 所以和not final 一起用。

--自定義建構函式

create

orreplace type object_name as object(

column_name type,

constructor function fun_name(

column_name1 number,

column_name2 varchar2

)return self as result,

constructor function fun_name(

column_name1 number,

column_name2 varchar2

column_name3 number

)return self as result

);--上面的物件包含兩個建構函式,注意是同名的,在呼叫型別是會自動按屬性來匹配

create

orreplace type body object_name as

constructor function fun_name(

p_name1 number,

p_name2 varchar2

)return self as result is

begin

self.column_name1 :=p_name1;

self.column_name2 :=p_name2;

self.column_name3 :=default_val;

return ;

end;

constructor function fun_name(

p_name1 number,

p_name2 varchar2,

p_name3 number

)return self as result is

begin

self.column_name1 :=p_name1;

self.column_name2 :=p_name2;

self.column_name3 :=p_name3;

return ;

end;

end;

ORACLE 物件的使用

建立物件型別 create or replace type emp typ as object id number,name varchar2 30 sal number,comm number,member procedure change comm new comm number member ...

Oracle其他物件

b 檢視 b b 建立檢視 b create or replace view as b 序列 b b 建立序列 b create sequence increment by n start with n maxvalue n minvalue n cycle nocycle cache n noca...

oracle 物件許可權

sys使用者查詢ww使用者建立的表 已經commited select from ww.wwtable 普通使用者lisi查詢ww使用者的表 grant select on wwtable to lisi select from ww.wwtable 物件授權操作 grant insert on w...