Oracle 巢狀表
本文轉自:http://www.cnblogs.com/starzhao/archive/2010/05/19/1739234.html
oracle巢狀表示例
----巢狀表:就是把一個表中的欄位定義為一個表,這個欄位表的資料儲存在外部的一個表中,
例如下例巢狀表中的資料儲存在required_tab表中。
----巢狀表可以有效地代替多個表之間的連線
create type bookobj as object(
title varchar2(40),
author varchar2(40),
catalog_number number(4)
);
/
create type booklist as table of bookobj; -----------定義一個巢狀表,該表可以被巢狀在其他表中,他的欄位就是bookobj中的欄位
/
create table course_material(
department char(3),
course number(3),
required_reading booklist -----在表中再定義一個表,即booklist表,他就是巢狀在course_material中的表,也就是巢狀表。
------他和主表course_material之間是主從關係,即一條主表記錄對應一個巢狀表中的多條記錄。
) nested table required_reading store as required_tab;
/
-----------------------給表和巢狀表輸入值,commit後被提交到資料庫裡儲存
declare
v_books booklist:=booklist(bookobj('ssss','www',444));-------定義一個booklist型別的巢狀表變數v_books,並給出初值。
begin
insert into course_material values('cs',101,booklist(bookobj('www','bbb',1),bookobj('aa','dd',33)));
insert into course_material values('his',301,v_books);
end;
或單獨插入一條記錄:
insert into course_material values('ss',102,booklist(bookobj('w','b',1),bookobj('a','d',3)));
-----------------------更新巢狀表操作,即將required_reading作為一個欄位
declare
v_books booklist:=booklist(bookobj('xyz','bbb',111),bookobj('zq','ccc',222));
begin
update course_material
set required_reading = v_books
where department = 'his' and course = 301;
end;
----執行結果為子記錄全部被刪除,新新增兩個bookobj記錄
-------------刪除巢狀表中的記錄
delete from course_material where department = 'his';----對應主表his的巢狀表中的記錄將被刪除
=============直接對巢狀表進行插入==================
insert into the(select required_reading from course_material where department='his' )
values('gog','ggg',999)
-----上面紅色的表示一個表,注意前面必須加上the,表示是巢狀表。
=============直接對巢狀表進行更新==================
update the(select required_reading from course_material where department='his' )
set catalog_number = catalog_number + 10 -----對巢狀表中的欄位進行操作
where catalog_number = 111;
=============直接對巢狀表進行刪除==================
delete from the(select required_reading from course_material where department='his' )
where catalog_number = 111;
=========================直接進行巢狀表的查詢,只能返回主表的一條記錄的子表,即如果course_material返回多於2條的記錄則報錯
select * from the(select required_reading from course_material where department='his');
或
select * from the(select required_reading from course_material where department='his') where catalog_number=999
報錯:select * from the(select required_reading from course_material where department in ('his','www'))
例如下例巢狀表中的資料儲存在required_tab表中。
----巢狀表可以有效地代替多個表之間的連線
create type bookobj as object(
title varchar2(40),
author varchar2(40),
catalog_number number(4)
);
/
create type booklist as table of bookobj; -----------定義一個巢狀表,該表可以被巢狀在其他表中,他的欄位就是bookobj中的欄位
/
create table course_material(
department char(3),
course number(3),
required_reading booklist -----在表中再定義一個表,即booklist表,他就是巢狀在course_material中的表,也就是巢狀表。
------他和主表course_material之間是主從關係,即一條主表記錄對應一個巢狀表中的多條記錄。
) nested table required_reading store as required_tab;
/
-----------------------給表和巢狀表輸入值,commit後被提交到資料庫裡儲存
declare
v_books booklist:=booklist(bookobj('ssss','www',444));-------定義一個booklist型別的巢狀表變數v_books,並給出初值。
begin
insert into course_material values('cs',101,booklist(bookobj('www','bbb',1),bookobj('aa','dd',33)));
insert into course_material values('his',301,v_books);
end;
或單獨插入一條記錄:
insert into course_material values('ss',102,booklist(bookobj('w','b',1),bookobj('a','d',3)));
-----------------------更新巢狀表操作,即將required_reading作為一個欄位
declare
v_books booklist:=booklist(bookobj('xyz','bbb',111),bookobj('zq','ccc',222));
begin
update course_material
set required_reading = v_books
where department = 'his' and course = 301;
end;
----執行結果為子記錄全部被刪除,新新增兩個bookobj記錄
-------------刪除巢狀表中的記錄
delete from course_material where department = 'his';----對應主表his的巢狀表中的記錄將被刪除
=============直接對巢狀表進行插入==================
insert into the(select required_reading from course_material where department='his' )
values('gog','ggg',999)
-----上面紅色的表示一個表,注意前面必須加上the,表示是巢狀表。
=============直接對巢狀表進行更新==================
update the(select required_reading from course_material where department='his' )
set catalog_number = catalog_number + 10 -----對巢狀表中的欄位進行操作
where catalog_number = 111;
=============直接對巢狀表進行刪除==================
delete from the(select required_reading from course_material where department='his' )
where catalog_number = 111;
=========================直接進行巢狀表的查詢,只能返回主表的一條記錄的子表,即如果course_material返回多於2條的記錄則報錯
select * from the(select required_reading from course_material where department='his');
或
select * from the(select required_reading from course_material where department='his') where catalog_number=999
報錯:select * from the(select required_reading from course_material where department in ('his','www'))
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26892340/viewspace-723597/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle巢狀表Oracle巢狀
- Oracle 巢狀表(轉)Oracle巢狀
- oracle 巢狀表 索引表 使用Oracle巢狀索引
- PLSQL Language Referenc-巢狀表-巢狀表和陣列間的重要區別(正確地使用巢狀表)SQL巢狀陣列
- 巢狀表的測試(一)巢狀
- 巢狀表的測試(二)巢狀
- Oracle的表連線方法(二)巢狀迴圈連線Oracle巢狀
- element-ui的----el-form表單校驗巢狀表單校驗(表單多層巢狀)+el-table和el-form巢狀使用表單校驗UIORM巢狀
- 巢狀表段的等同分割槽巢狀
- ORACLE_07445[_kill()+48][SIGIOT]錯誤_附巢狀表研究Oracle巢狀
- Oracle 巢狀事務 VS 自治事務Oracle巢狀
- vue elementUI 表單校驗(多層巢狀)VueUI巢狀
- less巢狀巢狀
- Datalist巢狀巢狀
- 巢狀表在表定義中的使用:一個例子巢狀
- 兩表連線一:巢狀迴圈連線巢狀
- 巢狀評論的資料庫表設計巢狀資料庫
- 集合框架-集合的巢狀遍歷(HashMap巢狀HashMap)框架巢狀HashMap
- 集合框架-集合的巢狀遍歷(HashMap巢狀ArrayList)框架巢狀HashMap
- 集合框架-集合的巢狀遍歷(ArrayList巢狀HashMap)框架巢狀HashMap
- 集合框架-集合的巢狀遍歷(多層巢狀)框架巢狀
- 【react】實現動態表單中巢狀動態表單React巢狀
- vue路由巢狀Vue路由巢狀
- angular 巢狀路由Angular巢狀路由
- 迴圈_巢狀巢狀
- 集合的巢狀巢狀
- 盒子的巢狀巢狀
- 列表巢狀操作巢狀
- 評論表設計 - 路徑列舉、巢狀集、閉包表巢狀
- oracle 雜湊查詢與巢狀查詢跟表的先後關係測試Oracle巢狀
- Locust 任務巢狀巢狀
- 巢狀子查詢巢狀
- vue(19)巢狀路由Vue巢狀路由
- SCSS 巢狀屬性CSS巢狀
- SCSS 巢狀規則CSS巢狀
- Blazor巢狀傳遞Blazor巢狀
- 巢狀動畫如何使用巢狀動畫
- java介面巢狀【Z】Java巢狀