首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > Oracle初学者笔记(九)--Oracle中的对象(可变数组)
【标  题】:Oracle初学者笔记(九)--Oracle中的对象(可变数组)
【关键字】:Oracle,--Oracle
【来  源】:http://blog.csdn.net/format_jade/archive/2005/10/20/510175.aspx

Oracle初学者笔记(九)--Oracle中的对象(可变数组)

面向对象数据库中存储的是对象,对象有自己的行为和属性;
行为体现为类型的函数或者过程;属性体现为字段;

对象表确实有优势吗?

基于抽象类型创建关系表:和其他表的创建一样;
基于抽象类型创建对象表:create table 对象表名 of 抽象数据类型;
抽象类型可以复用:也就是说一个抽象类型中可以包含另一个抽象类型做为一个字段;
构造函数是默认创造的,参数包括类型的字段;

如果要插入数据到对象表,有两种方式:
一种就是insert into tablename values(字段1,字段2,....);
另一种就是我们如果想直接用构造函数构造一个大字段直接插入,
这时候不需要values,但必须用slect:
 insert into tablename select 构造函数(字段1,字段...) from xxx;
创建带方法的类型:
   首先说方法的定义:如果有返回值,用member function...
       没有返回值,member procedure...
       ****以后再说;
       
    可变数组
声明一下Oralce的oop中使用下列的对象类型:
·抽象数据类型;
·可变数组;
·嵌套表;
·对象表;
·对象视图;

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

关系型理论中不允许一个表中的一个记录中存储其他表记录,
而Oracle中是支持的;这不是违反了数据的原子性原则吗?
但是这样有好处:
 在用户查询的时候比两个表进行关联查询效率高;
所以说可变数组也可以做为一条记录的一个字段被存储在一个表中,
当然这是违反关系数据理论的;

创建可变数组的例子:
create or replace type mingxitype as object
(
 goodsid varchar(15),
 incount int,
 providerid varchar(15)
);
/

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

create table instock
(
 orderid int primary key,
 indate date,
 mingxi arrmingxitype
)
/

insert into instock
values(1001,to_date('2005-10-19','yyyy-mm-dd'),
       arrmingxitype(mingxitype('101',10,'so1'),
                     mingxitype('193',30,'j02'),
                     mingxitype('104',32,'i92')
                    )
      )
/

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

select * from table(select s.mingxi from instock s where orderid=1001)
GOODSID            INCOUNT PROVIDERID
--------------- ---------- ---------------
101                     10 so1
193                     30 j02
104                     32 i92

可变数组的元素不能单独改,必须全部改;
所以可变数组适合的场合是:
 用户不会修改的数据,历史性的数据就适合用可变数组;
 
删除数据是通用的;

//可变数组的基类型是用户定义的;所以这个基类型也可以是一般数据类型,比如int;
create or replace type arrayint as varray(30) of int;

Oracle初学者笔记(十)--Oracle中的对象(嵌套表与对象表):【上一篇】
SQL快马加鞭:【下一篇】
【相关文章】
  • Oracle初学者笔记(十)--Oracle中的对象(嵌套表与对象表)
  • Oracle初学者笔记(十一)--Oracle中的安全
  • Oracle初学者笔记(十二)--PL/SQL1_基础
  • Oracle初学者笔记(十三)--PL/SQL2_异常处理和游标
  • Oracle初学者笔记(十四)--子程序和程序包
  • Oracle初学者笔记(十五)--触发器和内置程序包
  • Oracle初学者笔记终结篇--集合和成员函数
  • Oracle专家调优秘密(转)
  • 动态SQL——EXPERT ONE-ON-ONE ORACLE
  • Oracle HowTo:如何快速杀死占用过多资源(CPU,内存)的数据库进程
  • 【随机文章】
  • 以技术采用工具推进CMMI实施
  • DAS、NAS和SAN存储方案的比较
  • 基于VB6.0射击游戏的实现
  • 转载:C/C++深层探索(三)
  • JSP Struts之HTML标签库详解
  • Linux 上 Apache2 + PHP4 + Zend3 的安装
  • 微软Office使用技巧赛作品选登
  • 浙江『博硕数据』专业服务器租用,服务器托管,虚拟主机,域名注册,网站建www.85bs.com设!
  • 专家解惑 使用杀毒软件存在的几大误区
  • Eclipse+WTP+Tomcat开发的几点注意事项
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.