1. 程式人生 > >PLSQL編程面向對象的操作

PLSQL編程面向對象的操作

static 面向對象 member

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編程面向對象的操作