Oracle的物件類型,Oracle物件類型

來源:互聯網
上載者:User

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;

即可查詢物件類型的資訊了。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.