127.Oracle数据库SQL开发之 数据库对象——类型继承

127.Oracle数据库SQL开发之 数据库对象——类型继承

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50087077

9i引入了对象类型的继承。可以定义层次化的对象类型。

定义一个业务员对象类型,而这个类型从t_person中继承已有的属性。可以对t_person 的属性进行扩展,用来存储人员的业务头衔和供职公司的名字。

对于被继承的t_person而言,定义中必须使用NOT FINAL子句。

如下:

CREATETYPE t_person AS OBJECT (

  id         INTEGER,

  first_nameVARCHAR2(10),

 last_name  VARCHAR2(10),

  dob        DATE,

  phone      VARCHAR2(12),

  address    t_address,

  MEMBERFUNCTION display_details RETURN VARCHAR2

) NOT FINAL;

/

定义主体如下,注意display_details函数返回一个包含业务员id和name的VARCHAR2:

CREATETYPE BODY t_person AS

  MEMBERFUNCTION display_details RETURN VARCHAR2 IS

  BEGIN

    RETURN'id=' || id || ', name=' || first_name || ' ' || last_name;

  END;

END;

/

新类继承属性和方法如下,关键词是UNDER子句。

CREATE TYPE t_business_person UNDER t_person (

  title   VARCHAR2(20),

  companyVARCHAR2(20)

);

/

创建对象表如下:

CREATE TABLE object_business_customers OFt_business_person;

插入记录:

INSERTINTO object_business_customers VALUES (

 t_business_person(1, 'John', 'Brown', '01-FEB-1955', '800-555-1211',

   t_address('2 State Street', 'Beantown', 'MA', '12345'),

    'Manager', 'XYZ Corp'

  )

);

查询如下:

object_user2@PDB1> select * fromobject_business_customers where id=1;

         ID FIRST_NAME LAST_NAME  DOB          PHONE

---------- ---------- ---------- ---------------------

ADDRESS(STREET,CITY, STATE, ZIP)

----------------------------------------------------------------------------------------------------

TITLE                       COMPANY

-------------------- --------------------

          1 John      Brown    01-FEB-55 800-555-1211

T_ADDRESS('2 State Street', 'Beantown','MA', '12345')

Manager              XYZ Corp

查询使用display_details函数:

object_user2@PDB1> select o.display_details() fromobject_business_customers o where id=1;

 

O.DISPLAY_DETAILS()

----------------------------------------------------------------------------------------------------

id=1, name=John Brown

调用方法时,数据库现在子类型中搜索此方法,如果未找到此方法,则搜索超类型。如果有层次化类型,则向上搜索此方法。如果未找到方法,则数据库报告一个错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值