我們知道現在大部分流行的程式設計語言都是物件導向的.物件導向裡一切皆是對象.也就是說一個個的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));