嗨 甲骨文【5】

对象类型

看此章节之前,我对 JDO 有一点了解,能联想起 JDO 是因为它将数据以对象来操作,不知这一章将带给我什么。听说原来 Oracle 还是蛮支持 JDO 的,只是后来以 Hibernate 为首的 Mapping 模式更加流行, JDO 却不尽如人意,才使之对 JDO 有所冷淡…不管怎样,面对复杂的商业逻辑,关系型数据库在现今是非变不可的,只是变向哪里去的问题。

** 对象组件包括属性和方法 **

属性 是 Attribute 的翻译。通常在高级语言里,属性通常是 Property 的翻译,而 Attribute 被译为特征。在 Oracle 里, Attribute 和 java 里的 Property 是对应的。即拥有描述对象所具有的属性。

方法 ( Method )用于实现对象所执行的操作。

构造方法在 9i 后,允许重载了 .

MEMBER 方法就是高级语言里的实例方法 ,

MEMBER PROCEDURE fangfa1 ()

MEMBER FUNCTION fangfa2() RETURN simple_type

使用:

DECLARE

a_shili a_lei;

BEGIN

a_shili.fangfa1()

而 STATIC 方法就是类方法,全局方法。

A_lei.staticfangfa();

MAP 方法用于将对象实例映射为标量数值

ORDER 方法用于比较两个对象实例的大小

MAP 和 ORDER 不能同时使用。

** 对象类型 **

包括 对象类型规范 (Object Type Specification) 和 对象类型体 (Object Type Body)

就是定义和实现部分。对于熟悉 delphi 的人,也许会认为这样的方式才显得很得体。

建立对象类型规范的语法:

CREATE OR REPLACE TYPE type_name AS OBJECT(

Attribute1 datatype,[,attribute2 datatype,…],

[MEMBER|STATIC method1 spec,

MEMBER|STATIC method2 spec,…]);

建立对象类型体的语法:

CREATE OR REPLACE TYPE BODY type_name AS

MEMBER|STATIC method1 body;

MEMBER|STATIC method2 body;

…]);

建立对象类型时,至少定义一个属性,可以不定义方法(这是不需要建立对象类型体)。

** 对象表 **

就象高级语言里的对象 / 实例,是对类的实现。

分为行对象和列对象

行对象是直接给予对象类型所建立的表

CREATE TABLE table_name OF type_name

列对象是包含多个列的对象表

CREATE TBALE table_name{

Mynum number(6),

Mytype type_name ,

Mychar varchar2(10)

);

** REF ** ** 数据类型 **

通过 REF 应用行对象,何以是不同的表共享相同的对象,从而降低了内存的占用。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus