Oracle的物件類型,Oracle物件類型
Oracle的物件類型物件類型
在PL/SQL中,物件導向的程式設計師基於物件類型來完成的。物件類型是使用者自訂的一種複合資料型別,它封裝了資料結構和用於操縱這些資料結構的過程和函數。
資料庫的物件類型與JAVA和C#中德類相似,都可以包含屬性(用於儲存物件的狀態)和方法(用於建立對象的行為模型)。物件類型有時也為使用者自訂類型。
物件類型包括物件類型規範(Object Type Specification)和物件類型體(Object Type Body)兩個部分:
- 物件類型規範 對象與應用的介面,用於定義對象的公有屬性和方法。
- 物件類型體 用於實現物件類型規範所定義的公有方法。
建立簡單物件類型
建立單一資料型別的文法如下:
CREATE [OR REPLACE] TYPE type_name AS OBJECT( column_name data_type [,column_name data_type,...])
物件類型屬性用於描述對象所具有的特徵,每個物件類型至少有一個屬性,至多包含1000個屬性。屬性類型可以是除以下類型外的任何Oracle資料類型(包括物件類型):LONG、LONG RAW、NCHAR、NCLOB、NVARCHAR2、ROWID、UROWID、以及PL/SQL的特定類型%TYPE和%ROWTYPE。
例1:
首先賦予使用者建立對象的許可權:
GRANT CREATE ANY TYPE TO siege;
然後建立對象:
CREATE TYPE stu AS OBJECT( name VARCHAR2(20), sex VARCHAR2(2), birthday DATE, note VARCHAR2(300))
我們也可以將一個對象當作一個普通類型來使用:
CREATE TYPE stu2 AS OBJECT( sid NUMBER(4), student stu)
同樣,我們可以在建立表的時候使用自訂的類型:
CREATE TABLE student2( sid NUMBER(4), student stu)
建立帶有函數的物件類型
建立帶有函數的物件類型文法如下:
CREATE [OR REPLACE] TYPE type_name AS OBJECT( column_name data_type [,column_name data_type,...], member function method_name(args_list) return_type, ...)
其中,function表示一個函數,建立物件類型的member語句中,也可以使用member procedure代替member function,只不過不再有傳回值。
如果對象中帶有函數,還需要聲明一個對象體(BODY),對象體定義了函數的實際代碼,其建立文法如下:
CREATE [OR REPLACE] TYPE BODY type_name AS MEMBER FUNCTION method_name RETURN return_type {AS|IS} variable declareations...; BEGIN ... RETURN return_value; END;END; column_name data_type [,column_name data_type,...]
例2:
首先建立物件類型:
CREATE TYPE stu3 AS OBJECT( name VARCHAR2(20), sex VARCHAR2(2), birthday DATE, note VARCHAR2(300), MEMBER FUNCTION get_age RETURN NUMBER)
然後建立對象體:
CREATE TYPE BODY stu3 AS MEMBER FUNCTION get_age RETURN NUMBER AS v_months NUMBER; BEGIN SELECT FLOOR(MONTHS_BETWEEN(SYSDATE,birthday)/12) INTO v_months FROM dual; RETURN v_months; END; END;
然後我們建立student3表:
CREATE TABLE student3( sid NUMBER(4), student stu3)
現在插入一條資料:
INSERT INTO student3 VALUES(1,stu3('siege','M',TO_DATE('19910228','YYYYMMDD'),'my notes'));
現在我們查詢剛才插入的語句:
SELECT s.sid,s.student.name,s.student.sex,s.student.birthday,s.student.note,s.student.get_age() FROM student3 s
其結果如下:
SID STUDENT.NAME STUDENT.SEX STUDENT.BIRTHDAY STUDENT.NOTE S.STUDENT.GET_AGE()
1 siege M 28/02/1991 my notes 24
擷取物件類型資訊
在使用物件類型之前,需要明確物件類型的結構(主要包括屬性的資料類型和資料範圍),查看對象的結構可以使用DESCRIBE命令。
在PL/SQL developer的command window開啟一個視窗,輸入如下語句來設定資訊深度:
SET DESCRIBE [DEPTH {1|n|ALL}]
深度的取值範圍為1-50,預設值為1。深度表示對象的層次,類似JAVA中包的層次,本例中STU2的深度為2
DESCRIBE STU2;
即可查詢物件類型的資訊了。