物件導向思想在Oracle表中的應用

來源:互聯網
上載者:User

我們知道現在大部分流行的程式設計語言都是物件導向的.物件導向裡一切皆是對象.也就是說一個個的class.在Oracle資料中其實也用到這種思想.我們大部分時候建立一個表時指定每一列的類型都是系統預設的類型.

但是有時候為了更加直觀,方便我們也可以自訂一些類型,然後建表時指定一列為自訂的類型.這樣的表叫對象表

例如我建立一個部門資訊表,包括員工姓名,年齡,部門.一般情況都是這樣建表:

CREATE TABLE deptInfo(ename varchar2(20),  home ,age int, dept varchar2(20));

但我們也可以建立一個對象person.它包括姓名和年齡.然後我們建表時指定這個表某列類型為這個自訂類型.

1.先建立一個自訂物件類型,

CREATE TYPE person AS OBJECT(ename varchar2(20), age int ); --除了在對象中建立幾個不同類型的成員外,還可以建立成員函數,等會再給樣本

物件類型建立好後也像建立表一樣會被儲存在資料庫中.以後我們就可以像使char,int這樣的類型一樣使用它.我們可以通過資料字典尋找相關資訊:

SELECT * FROM user_types;       --類型名字如果object,collection
SELECT * FROM user_types_attrs;     --類型的屬性(成員)
SELECT * FROM user_type_methods; --類型的方法(成員函數)

2.建立一個使用到對象的表

CREATE TABLE deptInfo(staff person,dept varchar2(20));

3.插入值到對象表中:

INSERT INTO deptInfo VALUES(person('arwen',18), 'mgr');--插入staff那一列值時有點像插入一個建構函式一樣.type_name(para1,para2...)

4.查詢對象表:

比如要查詢員工的名字:

SELECT d.staff.ename FROM deptInfo  d;--注意這裡一定要給表指定一個別名d.如果像這樣SELECT d.staff.ename FROM deptInfo;會出錯

或者尋找所有資訊:SELECT * FROM deptInfo;

5.更新對象表:

UPDATE deptInfo SET dept='dev' WHERE d.staff.ename='arwen';

 

建立一個帶方法的對象:

 

1.建立物件類型

CREATE OR REPLACE TYPE money AS OBJECT(

                          sal  int,

                          bonus int,

                      MEMBER FUNCTION sandb RETURN int);

這和PACKAGE類似,上面就像頭一樣,下面還得有對象體.

CREATE OR REPLACE TYPE BODY money AS

           MEMBER FUNCTION sandb RETURN int IS

                  BEGIN

                RETURN (sal + bonus);

                 END;

END;

2.建立對象表:

CREATE TABLE company(ename varchar2(20), pain money);

INSERT INTO company VALUES('arwen', money(200,100));

SELECT c.pain.sandb() FROM company  c;     --結果為300;

 

補充:怎麼使用數組array(跟其他程式設計語言中的數組基本一樣):

CREATE TYPE qq AS ARRAY(2) OF int; --qq為整數數組,大小為2

CREATE TABLE tecent (vname varchar(30), qqnumber qq);

INSERT INTO tecent VALUES('mygod',qq(1314520, 574752539));

 

                 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.