如何覆盖ORDER方法PL / SQL?
发布时间:2020-05-24 04:36:22 所属栏目:MsSql 来源:互联网
导读:我必须定义一个具有一些属性的对象类型Employee,然后我必须定义一个将继承Employee类型的对象类型Manager,并且将具有一个名为nrEmp的aditional属性,该属性将包含每个经理在其下的员工数量.命令.此外,我必须为类型管理器实现方法ORDER,因此我可以按照他们拥有
|
我必须定义一个具有一些属性的对象类型Employee,然后我必须定义一个将继承Employee类型的对象类型Manager,并且将具有一个名为nrEmp的aditional属性,该属性将包含每个经理在其下的员工数量.命令.此外,我必须为类型管理器实现方法ORDER,因此我可以按照他们拥有的员工数量来命令管理员.首先我定义了这种类型: CREATE OR REPLACE TYPE Departament AS OBJECT (
deptno NUMBER(2),dname CHAR(14)
);
接下来我定义了Employee类型: CREATE OR REPLACE TYPE Employee AS OBJECT (
empno NUMBER(4),ename CHAR(10),dept REF Departament,sal NUMBER(7,2)
) NOT FINAL;
一切都很好,直到现在.接下来我尝试定义类型管理器: CREATE OR REPLACE TYPE Manager UNDER Employee ( nrEmp INTEGER,ORDER MEMBER FUNCTION compare(m Manager) RETURN INTEGER ); 当我这样做时,我收到以下错误: Error(1,1): PLS-00646: MAP or ORDER method must be defined in the root of the subtype hierarchy 据我所知,我必须在Employee类型中声明该方法.但我不确定如何以正确的方式做到这一点.找不到任何显示如何在继承时实现ORDER方法的示例.任何帮助,将不胜感激.谢谢. 解决方法我找到了一种方法来做到这一点.我不能说这是最好的解决方案或最优雅的解决方案,但它可以满足我的需求.这是代码.员工类型: CREATE OR REPLACE TYPE Employee AS OBJECT (
empno NUMBER(4),2),ORDER MEMBER FUNCTION match (other IN Employee) RETURN INTEGER
) NOT FINAL;
经理类型: CREATE OR REPLACE TYPE Manager UNDER Employee ( nrEmp INTEGER ); Employee类型的主体: CREATE OR REPLACE TYPE BODY Employee AS
ORDER MEMBER FUNCTION match(other IN Employee) Return INTEGER IS
v_mng_self Manager;
v_mng_other Manager;
BEGIN
v_mng_self := TREAT(self AS Manager);
v_mng_other := TREAT(other AS Manager);
IF v_mng_self.nrEmp < v_mng_other.nrEmp THEN
RETURN -1;
ELSIF v_mng_self.nrEmp > v_mng_other.nrEmp THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
END;
END;
如果要比较2个Manager对象,则需要执行此操作. ORDER方法将执行从Employee到Manager类型的类型转换.例如: DECLARE
manager1 Manager;
manager2 Manager;
BEGIN
manager1 := Manager(7823,'John',null,2000,10);
manager2 := Manager(7782,'Bob',3000,15);
IF manager1 < manager2 THEN
SYS.DBMS_OUTPUT.PUT_LINE('manager1 has less employees than manager2');
END IF;
END;
不要忘记在上面的代码块之前设置输出,这样就可以看到显示的结果. SET SERVEROUTPUT ON; (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
