ORACLE嵌套表的使用
嵌套表是表中之表。一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。在某种意义上,它是在一个表中存储一对多关系的一种方法。考查一个包含部门信息的表,在任何时间内每个部门会有很多项目正在实施。在一个严格的关系模型中,将需要建立两个独立的表department和project。
嵌套表允许在department表中存放关于项目的信息。勿需执行联合操作,就可以通过department表直接访问项目表中的记录。这种不经联合而直接选择数据的能力使得用户对数据访问更加容易。甚至在并没有定义方法来访问嵌套表的情况下,也能够很清楚地把部门和项目中的数据联系在一起。在严格的关系模型中,department和project两个表的联系需要通过外部关键字(外键)关系才能实现。
下面以电信账单打印程序中的数据库设计来举例说明嵌套表的使用方法。
1、创建类型ITEM_TYPE:此类型中,对于每个ITEM_TYPE类型都包含有一个记录,记载
了其名称、类型、层次和数量信息。
CREATE OR REPLACE TYPE "ITEM_TYPE" As Object
(
Item_Seq Number,
Item_Name Varchar2tablet的用法(100),
Item_Type Varchar2(100),
Item_Level Varchar2(100),
Item_Amt Number
)
2、创建ITEM_LIST_TYPE:此类型将用作一个嵌套表的基础类型。
CREATE OR REPLACE TYPE "ITEM_LIST_TYPE" As Table Of item_type
3、创建表T_MAC_INFO:设备资费信息表
-- Create table
create table T_MAC_INFO
(
CHARGE_NO VARCHAR2(100),
MAC_TYPE VARCHAR2(100),
SUBTOTAL NUMBER,
ITEMS ITEM_LIST_TYPE,
MAC_SEQ NUMBER,
PRODUCT_SEQ NUMBER
)
nested table ITEMS store as ITEMS_TAB
4、向嵌套表中插入记录
主要代码以下:
变量声明:
Item_List1 Item_List_Type;
Item1 Item_Type;
For I in 1…10 to loop
Item_List1.Extend;
Item_List1(Item_List1.Count) := Item_Type(Item_List1.Count, Item1.Item_Name, Item1.Item_Type, Item1.Item_Level, Item1.Item_Amt);
End loop;
Insert Into t_Mac_Info
( --Cust_Id,
Product_Seq,
Mac_Seq,
Charge_No,
Mac_Type,
Subtotal,
Items)
Values
( --Mac_Info1.Cust_Id,
v_Seq_Product, -- Mac_Info1.Product_Seq,
Mac_Seq,
V_Charge_No,
V_Mac_Type,
V_Subtotal,
Item_List1);
commit;
其中ITEM_LIST1作为一嵌套表,被插入保存在T_MAC_INFO这个表里面。
5、查询嵌套表
Select * From t_Mac_Info d, Table(d.Items) Emp
三、嵌套表的特点:
对于嵌套表,在ORACLE 的OOP编程里面使用得多一点。在数据库中使用关系-对象模型,具体表现为对象复用、标准支持、定义访问路径等,这些都是OOP编程的好处:
1、对象复用:如果编写面向对象的代码,就提高了重用以前编写的代码模块的机会。同样,如果创建面向对象的数据库对象,也就提高了数据库对象能够被重用的机会。
2、标准支持:如果创建标准的对象,那么它们被重用的机会就会提高。如果有多个应用或多个表使用同一数据库对象集合,那么它就是既成事实的数据库对象标准。
3、定义访问路径:对于每一个对象,用户可定义在其上运行的过程和函数,从而可以使数据和访问此数据的方法联合起来。有了用这种方式定义的访问路径,就可以标准化数据访问的方法并提高对象的可复用性。
以上举例说明了嵌套表的简单使用,对于嵌套表的详细用法,可以参考相关书籍。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论