oracle面向对象的数据类型,Oracle面向对象编程OOP
1.2.6? 嵌套表AS TABLE OF
嵌套表是表中之表,一個嵌套表是某些行的集合,它在主表中表示為其中的一列。對主表中的每一條記錄,嵌套表可以包含多個行。
語法如下:
CREATE OR REPLACE TYPE table_name AS TABLE OF type;
語法說明:
1.? table_name :嵌套表名。
2. type:數組的類型,可以是基本變量,如varchar2,integer等,也可以是自定義的對象類型,如上面定義的NAME_TYPE。
1.2.7? 繼承-Oracle中面向對象特征
繼承父類的子類對象類型將有父類的所有屬性、方法和過程。 父類型必須聲明為NOT FINAL,子類型使用關鍵字UNDER。
舉例:
--創建父類型
CREATE TYPE animal_type AS OBJECT(
name? ? VARCHAR2(50),
hair? ? VARCHAR2(50),
foot? ? VARCHAR2(50)
) NOT FINAL;
--子類型繼承父類型
CREATE TYPE cat_type UNDER animal_type(
paw? ? VARCHAR2(50)
);
如果父類沒有聲明為NOT FINAL,子類在繼承的時候將報錯:Error: PLS-00590: attempting to create a subtype UNDER a FINAL type。
1.2.8 重寫overriding
重寫就是在子類中對父類又有的方法或過程重新實現。重寫關鍵字為overriding,在子類中把要重寫的方法或過程聲明和實現之前加上該關鍵字。
舉例:
定義頭部:
CREATE OR REPLACE TYPE cat_type UNDER annimal_type
(
paw VARCHAR2(50),
OVERRIDING MEMBER PROCEDURE PROC_RUN
)
定義主體:
CREATE OR REPLACE TYPE BODY cat_type
IS
OVERRIDING MEMBER PROCEDURE PROC_RUN
IS
BEGIN
//重新實現
END;
END;
1.2.9? 對象表
對象表是指該表的一行都是一個對象(對象類型的實例),每個對象有一個OID(object ID)。
1.2.9.1 對象表的創建
創建對象表的語法:
CREATE TABLE table_name OF object_type;
語法說明:
1.table_name:對象表名稱,執行創建對象表語句后,數據庫中將會生成一個名字為table_name的表。
2.object_type:對象類型,生成的表的字段和對象類型時對應的。
舉例:
CREATE TABLE t_name OF NAME_TYPE;
執行上面語句后,數據庫將生成一個t_name表,這個表就是對象表。
1.2.9.2? 對象表的關聯
對象表之間沒有主外鍵關聯的概念,為了體現這層關系,oracle中用了ref對象來實現。
下面介紹下相關操作法和函數:
1.? ref操作符:聲明引用類型。如 name ref NAME_TYPE, 變量或字段name就是引用類型,存儲NAME_TYPE型對象的OID。
2.? ref(表的別名)函數:獲得對象表中對象OID值,如select ref(a) from otable a。
3.? deref(OID)函數:通過OID找到并返回行對象表中對象。
下面通過一個例子說明對象表直接的關聯:
--員工對象類型
CREATE OR REPLACE TYPE employee AS OBJECT(
cardId? VARCHAR2(100),
address? VARCHAR2(100),
sex? ? ? VARCHAR2(1),
name? ? REF NAME_TYPE,? --通過REF操作符,表示該字段引用NAME_TYPE對象,該字段實際存儲的時對象的OID
age? ? ? INTEGER
);
--創建t_employee對象表
CREATE TABLE t_employee OF employee;
--向NAME_TYPE的對象表t_name插入數據
INSERT INTO t_name VALUES('LI', 'KUI');
INSERT INTO t_name VALUES('ZHANG', 'LAN');
INSERT INTO t_name VALUES('CHEN', 'MING');
COMMIT;
--向員工表插入數據
INSERT INTO t_employee VALUES(
'101',
'beijing',
'1',
(SELECT REF(n) FROM t_name n where n.firstname = 'LI'), --通過ref(表別名)獲得對象的引用
23
);
INSERT INTO t_employee VALUES(
'102',
'shanghai',
'0',
(SELECT REF(n) FROM t_name n where n.firstname = 'ZHANG'),--通過ref(表別名)獲得對象的引用
23
);
COMMIT;
--通過聲明一個引用變量,新增數據
DECLARE
-- 聲明NAME_TYPE類型的引用
name_ref REF NAME_TYPE;
BEGIN
SELECT REF(n) INTO name_ref FROM t_name n where n.firstname = 'CHEN';
INSERT INTO t_employee VALUES(
'103',
'chengdu',
'1',
name_ref,
24
);
COMMIT;
END;
--查詢員工的信息,使用deref來獲得對象字段的值
SELECT t.cardId, t.address, deref(t.name) from t_employee t;
--更新引用類型,即賦予新的對象的OID值
UPDATE t_employee t SET name = (SELECT ref(n) FROM t_name n WHERE n.firstname = 'ZHANG') WHERE t.cardId = '103';
DELETE FROM t_employee WHERE name = (SELECT ref(n) FROM t_name n WHERE n.firstname = 'ZHANG');
總結
以上是生活随笔為你收集整理的oracle面向对象的数据类型,Oracle面向对象编程OOP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在计算机桌面上添加小工具日历,实用桌面小
- 下一篇: 有机晶体数据库_Cambridge St