如何覆盖ORDER方法PL / SQL?

前端之家收集整理的这篇文章主要介绍了如何覆盖ORDER方法PL / SQL?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我必须定义一个具有一些属性的对象类型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;
原文链接:https://www.f2er.com/mssql/76827.html

猜你在找的MsSQL相关文章