132.Oracle数据库SQL开发之 数据库对象——重载方法
欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50087135
当创建一个超类型的子类型时,可以用子类型中的一个方法来重载超类类型中的方法。就可以非常灵活地定义层次化类型中的方法。
CREATETYPE t_person3 AS OBJECT (
id INTEGER,
first_nameVARCHAR2(10),
last_name VARCHAR2(10),
MEMBERFUNCTION display_details RETURN VARCHAR2
) NOT FINAL;
/
CREATETYPE BODY t_person3 AS
MEMBERFUNCTION display_details RETURN VARCHAR2 IS
BEGIN
RETURN'id=' || id ||
', name='|| first_name || ' ' || last_name;
END;
END;
/
创建超类型t_person3的子类型 t_business_person3.注意使用OVERRIDING关键字对 display_details()函数进行了重载,此函数返回一个包含对象的原始和扩展属性值的VARCHAR2。
CREATE TABLE object_customers3 OF t_person3;
CREATETYPE t_business_person3 UNDER t_person3 (
title VARCHAR2(20),
companyVARCHAR2(20),
OVERRIDINGMEMBER FUNCTION display_details RETURN VARCHAR2
);
/
CREATETYPE BODY t_business_person3 AS
OVERRIDINGMEMBER FUNCTION display_details RETURN VARCHAR2 IS
BEGIN
RETURN'id=' || id ||
', name='|| first_name || ' ' || last_name ||
',title=' || title || ', company=' || company;
END;
END;
/
使用OVERRIDING关键字指出t_business_person3中的display_details重载了t_person3中的display_details. 因此,当t_business_person3中的display_details被调用时,调用的是t_business_person3中的display_details,而不是t_person3中的display_details.
CREATETABLE object_business_customers3 OF t_business_person3;
INSERTINTO object_business_customers3 VALUES (
t_business_person3(1, 'John', 'Brown', 'Manager', 'XYZ Corp')
);
通过object_business_customers3调用display_details:
object_user2@PDB1> select o.display_details() fromobject_business_customers3 o where id=1;
O.DISPLAY_DETAILS()
----------------------------------------------------------------------------------------------------
id=1, name=John Brown, title=Manager,company=XYZ Corp