对象类型
看此章节之前,我对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应用行对象,何以是不同的表共享相同的对象,从而降低了内存的占用。