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