数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

Oracle中构造包含数组的表


发布日期:2022年11月02日
 
Oracle中构造包含数组的表

面向对象数据库中存储的是对象对象有自己的行为和属性

行为体现为类型的函数或者过程属性体现为字段

对象表确实有优势吗?

基于抽象类型创建关系表和其他表的创建一样

基于抽象类型创建对象表create table 对象表名 of 抽象数据类型

抽象类型可以复用也就是说一个抽象类型中可以包含另一个抽象类型做为一个字段

构造函数是默认创造的参数包括类型的字段

如果要插入数据到对象表有两种方式

一种就是insert into tablename values(字段字段);

另一种就是我们如果想直接用构造函数构造一个大字段直接插入

这时候不需要values但必须用slect:

insert into tablename select 构造函数(字段字段) from xxx;

创建带方法的类型

首先说方法的定义如果有返回值用member function

没有返回值member procedure

****以后再说

可变数组

声明一下Oralce的oop中使用下列的对象类型

·抽象数据类型

·可变数组

·嵌套表

·对象表

·对象视图

可变数组会根据存储数据的大小来真正存储数据而不是占用固定的空间这类似

Java中的ArraryList类

关系型理论中不允许一个表中的一个记录中存储其他表记录

而Oracle中是支持的这不是违反了数据的原子性原则吗?

但是这样有好处

在用户查询的时候比两个表进行关联查询效率高

所以说可变数组也可以做为一条记录的一个字段被存储在一个表中

当然这是违反关系数据理论的

创建可变数组的例子

create or replace type mingxitype as object

(

goodsid varchar()

incount int

providerid varchar()

);

/

create or replace type arrmingxitype as varray() of mingxitype;

/

create table instock

(

orderid int primary key

indate date

mingxi arrmingxitype

)

/

insert into instock

values(to_date(yyyymmdd)

arrmingxitype(mingxitype(so)

mingxitype(j)

mingxitype(i)

)

)

/

//table函数可以把可变数组转换为关系表的形式显示出来

select * from table(select smingxi from instock s where orderid=)

GOODSID INCOUNT PROVIDERID

so

j

i

可变数组的元素不能单独改必须全部改

所以可变数组适合的场合是

用户不会修改的数据历史性的数据就适合用可变数组

删除数据是通用的

//可变数组的基类型是用户定义的所以这个基类型也可以是一般数据类型比如int;

create or replace type arrayint as varray() of int;

上一篇:Ibatis调用Oracle存储过程

下一篇:ORACLE入门之查看数据库的SQL