Oracle中的面向對象OOP
?1?
創建對象類型
?2?create?or?replace?type?ADDRESS?as ?object
?3? (
?4?????PROVINCE?varchar(10 ),
?5?????CITY?varchar(20 ),
?6? );
?7?
?8? 創建ADDRESS可變數組
?9?create?or?replace?type?ADDRESS_LIST?as?varray(3)?of ?ADDRESS;
10?
11? 創建表并使用可變數組ADDRESS_LIST
12?create?table ?STUDENT?
13? (
14?????STUNAME?varchar(20 ),
15? ????STUADDS?ADDRESS_LIST
16? );
17?
18? 向表中插入數據
19?insert?into?STUDENT?values('improviser',ADDRESS_LIST(ADDRESS('廣東省','廣州市','江海大道' ),
?????????????????????????????????????????? ADDRESS( ' 廣東省 ' , ' 潮州市 ' , ' 潮楓路 ' )));
20?
21? 查詢(使用table函數將數據表格形式輸出)
22?select?*from?table(select?s.STUADDS?from?STUDENT?where?STUNAME='improviser');
?2?create?or?replace?type?ADDRESS?as ?object
?3? (
?4?????PROVINCE?varchar(10 ),
?5?????CITY?varchar(20 ),
?6? );
?7?
?8? 創建ADDRESS可變數組
?9?create?or?replace?type?ADDRESS_LIST?as?varray(3)?of ?ADDRESS;
10?
11? 創建表并使用可變數組ADDRESS_LIST
12?create?table ?STUDENT?
13? (
14?????STUNAME?varchar(20 ),
15? ????STUADDS?ADDRESS_LIST
16? );
17?
18? 向表中插入數據
19?insert?into?STUDENT?values('improviser',ADDRESS_LIST(ADDRESS('廣東省','廣州市','江海大道' ),
?????????????????????????????????????????? ADDRESS( ' 廣東省 ' , ' 潮州市 ' , ' 潮楓路 ' )));
20?
21? 查詢(使用table函數將數據表格形式輸出)
22?select?*from?table(select?s.STUADDS?from?STUDENT?where?STUNAME='improviser');
4、嵌套表
嵌套表是表中之表,一個嵌套表是某些行的集合,它在主表中表示為其中的一列。對主表中的每一條記錄,嵌套表可以包含多個行。
?1?
定義嵌套表方法:
?2?create?or?replace?type?ADDRESS_TABLE?as?table?of ADDRESS;
?3?
?4? 基本對象類型、創建表、查詢和插入數據都跟上面可變數組一樣
?5?
?6?嵌套表更新(table轉化為表再利用表別名操作列進行更新)
?7?update?table(select?S.STUADDS?from?STUDENT?S?where
? 8 ? S.STUNAME? = ? ' improviser ' )?AD set ?AD.PROVINCE? = ? ' 北京 ' ? where ?city? = ? ' 廣州 ' ;
?9
10 刪除嵌套表記錄
11 delete ? from ? table ( select ?S.STUADDS? from ?STUDENT?S
12 ? where ?S.STUNAME? = ? ' improviser ' )?AD where ?AD.city? = ? ' 潮州 市' ;
13
?2?create?or?replace?type?ADDRESS_TABLE?as?table?of ADDRESS;
?3?
?4? 基本對象類型、創建表、查詢和插入數據都跟上面可變數組一樣
?5?
?6?嵌套表更新(table轉化為表再利用表別名操作列進行更新)
?7?update?table(select?S.STUADDS?from?STUDENT?S?where
? 8 ? S.STUNAME? = ? ' improviser ' )?AD set ?AD.PROVINCE? = ? ' 北京 ' ? where ?city? = ? ' 廣州 ' ;
?9
10 刪除嵌套表記錄
11 delete ? from ? table ( select ?S.STUADDS? from ?STUDENT?S
12 ? where ?S.STUNAME? = ? ' improviser ' )?AD where ?AD.city? = ? ' 潮州 市' ;
13
??? 比較:可變數組,查詢速度快,但是更新困難得整體更新,適用與數據不修改情況,如醫生處方。使用嵌套表可以對表中的表內容進行修改而無需進行整體更新操作。
4、對象表
?1?
首先創建對象類型
?2?create?or?replace?type?OFFICETYPE?as ?object
?3? (
?4?????id?varchar(10 ),
?5?????typename?varchar(20 )
?6? );
?7?
?8? 將對象類型轉化為對象表
?9?create?table?office?of ?officetype;
10?
11? 創建對象關系表(使用ref?,指示OID進行對象表關聯)
12?create?table ?worker
13? (
14?????workerid?varchar(10)?primary?key ,
15?????workername?varchar(20 ),
16?????workeroffice?ref?officetpey?scope?is ?office,
17?????phone?varchar(20 )
18? );
19?
20? 使用deref?取得關聯對象表相關內容
21?select?workerid,workername,deref(w.workeroffice),phone?from ?worker?w
?? where ?workerid? = ? ' C001 ' ;
22? 結果為
23?C001???張小明??OFFICETYPE('0001',?'財務科')????? 010-12345
24?
25? 使用VALUE(別名)查詢對象內容
26?select?value(o)?from ?office?o;
27?
?2?create?or?replace?type?OFFICETYPE?as ?object
?3? (
?4?????id?varchar(10 ),
?5?????typename?varchar(20 )
?6? );
?7?
?8? 將對象類型轉化為對象表
?9?create?table?office?of ?officetype;
10?
11? 創建對象關系表(使用ref?,指示OID進行對象表關聯)
12?create?table ?worker
13? (
14?????workerid?varchar(10)?primary?key ,
15?????workername?varchar(20 ),
16?????workeroffice?ref?officetpey?scope?is ?office,
17?????phone?varchar(20 )
18? );
19?
20? 使用deref?取得關聯對象表相關內容
21?select?workerid,workername,deref(w.workeroffice),phone?from ?worker?w
?? where ?workerid? = ? ' C001 ' ;
22? 結果為
23?C001???張小明??OFFICETYPE('0001',?'財務科')????? 010-12345
24?
25? 使用VALUE(別名)查詢對象內容
26?select?value(o)?from ?office?o;
27?
5、對象視圖
1?
創建對象視圖(通過OID連接dept)
2?create?view?deptview?of?deptype?with?object?oid(deptno)?as?select?*from ?dept;
3?create?view?emp_view?as?select ?make_ref(deptview,deptno)?deptoid,empno,ename
4?? from ?emp;
2?create?view?deptview?of?deptype?with?object?oid(deptno)?as?select?*from ?dept;
3?create?view?emp_view?as?select ?make_ref(deptview,deptno)?deptoid,empno,ename
4?? from ?emp;
好了,有關Oracle中面向對象的內容就簡要敘述這么多了,雖然現在很少使用到,但在以后有用到之處有一定的參考作用。
? (轉載請注明出處)?
?
鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
???? 隱姓埋名/低調華麗/簡單生活/完美人生
posted on 2007-10-02 11:44 poetguo 閱讀(3532) 評論(0) 編輯 收藏 所屬分類: Oracle