PLSQL編程面向對象的操作
PLSQL編程面向對象的操作
1)了解對象類型組成及其組成部分的作用
2)建立簡單的對象類型,並使用
3)建立復雜的對象類型,並使用
4)學會建立參照對象類型,並使用
一、對象類型是用戶自定義的一種復合數據類型,封裝了數據結構和數據結構的過程和函數,為了描述顯示世界對象所抽象出來的具體特征,既有屬性又有方法,應該涵蓋對象所具有的公共特性,如每個雇員都有編碼,姓名,工資,所以定義employee_type類型時就應該包含這些特征,對象實例是對象類型的具體實現,就是根據模型抽象出一個具體的東西,模型造了一輛汽車。
如雇員scott和smith就是對象類型employee_type的兩個對象實例。
create or replace type employee_type is
( ename varchar2(20),eno varchar2(20),sal number(6,3));
create table employee_tab of employee_type;
如果想創建一個對象類型,必須完成對象類型規範(屬性和方法的書寫)和對象類型體(完善方法的實現)兩部分,
首先頂一個對象類型規範需要註意以下幾點
1)不能有默認值,不能not null 即 default 4not null是不允許的
2)一些數據類型也不能使用如PLSQL特有的類型,binary_integer %TYPE,%ROWTYPE,ref_cursor record pls_integer等
二、對象類型體裏邊可以有三類方法默認的為構造方法,
而一個就是member方法,用戶訪問對象實例的數據,employ employe_type ; employ.method()
static方法,employe_type.method(); 用於訪問對象類型,object_type.method();
map方法,order方法只能比較兩個對象實例的大小。
http://www.cnblogs.com/lanzi/archive/2011/03/30/1999790.html
對象表是包含對象類型的表 有兩種,
一個是行對象,即類型存儲的數據做為一行
create table employe_tab of employe_type;即type的屬性即表的列
一個是列對象,即類型存儲的數據為表的某幾列
create table employtable(
id number,dname varchar2(10),
employee employe_type ,salary number(6,2));
參照型REF數據類型,原理是指向行對象的邏輯指針,Oracle內置數據類型,可以使用不同表共享對象從而降低內存使用。
create table department(
dno number(2), dname varchar2(10),emp REF employee_type);
三、正式開始編寫對象類型 首先建立對象類型規範,然後再寫建立對象類型體如果類型規範裏邊沒有方法,那麽就不用書寫對象類型體了。
create or replace type type_name as object(
attribute1 datatype[,attribute2 datetype,...],
[member|static method1 ,]
create or replace type body type_name as|is
member|static method1 body;
member|static method2 body;
...
eg:
create or replace type person_type1 as object( 創建不帶方法的對象類型規範,所以不需要完善body
name varchar2(2),gender varchar2(2),birthdate date);
使用對象類型,即用類型創建表
create table person_tab1 of person_type1 ;用的行對象
create table person_tab2 (;用的列對象
eno number(6),person person_type1,
sal number(6,2)
);
eg:
create or replace type person_type2 as object(
name varchar2(2),gender varcahr2(22),birthdate date,
member procedure change_address(new_addr varchar2),
member function get_info return varchar2
);帶方法的對象類型規範
完善body對象類型體
create or replace type body person_type2 is
member procedure change_address(new_addr varchar2)
is
begin
address:=new_addr;
end;
member function get_info return varchar2
is
v_info varchar2(100);
begin
v_info:=‘姓名:‘||name||‘,出生日期‘||birthdate;
return v_info;
end;
end;
使用對象類型,即用類型創建表
create table employee_tab2(
eno number(6,2) ,person person_type2,
sal number(6,2),job varchar2(10)
);
insert into employee_tab2 values(person_type2(‘王楠‘,‘男‘,to_date(‘20141212‘,‘YYYYMMDD‘),‘呼和浩特‘),1,2000,‘高級技工‘);
PLSQL檢索行對象數據時,如果將數據放到對象類型變量中,必須使用vlue函數
declare
person person_type1;
begin
select vlue(p) into person from emp p
where p.name = ‘&name‘;
dbms_output.put_line(‘sex is ‘||person.gender);
end;
創建的列對象的表,檢索數據的時候一樣要將只放到類對象變量中
declare
person2 person_type1;
begin
select person,sal into person2,salary from emp where empno=‘&no‘;
end;
declare
v_person person_type2;
begin
select person into v_person from employee_tab2
where eno=&no;
v_person.change_address(‘aaaa‘); 實例訪問的原數據
dbms_output.put_line(v_person.get_info); 實例訪問的
end;
本文出自 “運維邦” 博客,謝絕轉載!
PLSQL編程面向對象的操作