133.Oracle数据库SQL开发之 数据库对象——通用调用

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

通用调用是11g新增加的特性,利用这一特性可以从子类型中调用超类型的方法。

创建超类型如下:

CREATETYPE t_person AS OBJECT (

  id         INTEGER,

  first_nameVARCHAR2(10),

 last_name  VARCHAR2(10),

  MEMBERFUNCTION display_details RETURN VARCHAR2

) NOT FINAL;

/

CREATETYPE BODY t_person AS

  MEMBERFUNCTION display_details RETURN VARCHAR2 IS

  BEGIN

    RETURN'id=' || id ||

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

  END;

END;

/

创建t_person的子类型t_business_person

CREATETYPE t_business_person UNDER t_person (

  title   VARCHAR2(20),

  companyVARCHAR2(20),

  OVERRIDINGMEMBER FUNCTION display_details RETURN VARCHAR2

);

/

CREATETYPE BODY t_business_person AS

  OVERRIDINGMEMBER FUNCTION display_details RETURN VARCHAR2 IS

  BEGIN

    -- usegeneralized invocation to call display_details() in t_person

    RETURN (SELF AS t_person).display_details||

      ',title=' || title || ', company=' || company;

  END;

END;

/

创建表object_business_customers,并向此表中添加一个对象:

CREATE TABLE object_business_customers OFt_business_person;

 

INSERTINTO object_business_customers VALUES (

 t_business_person(1, 'John', 'Brown', 'Manager', 'XYZ Corp')

);

查询如下,通过objecct_business_customers调用display_details():

object_user2@PDB1> select o.display_details() fromobject_business_customers o;

 

O.DISPLAY_DETAILS()

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

id=1, name=John Brown