En la mayoría de los problemas es necesario hacer comparaciones entre tipos de datos, ordenarlos, etc. Sin embargo, los tipos de objetos no tienen orden predefinido por lo que no podrán ser comparados ni ordenados (x>y
, DISTINCT
, ORDER BY
, ...). Nosotros podemos definir el orden que seguirá un tipo de objeto por medio de las funciones mapa y las funciones de orden.
Una función miembro mapa es una función sin parámetros que devuelve un tipo de dato: DATE
, NUMBER
o VARCHAR2
y sería similar a una función hash. Se definen anteponiendo la palabra clave MAP
y sólo puede haber una para el tipo de objeto.
CREATE TYPE Familia AS OBJECT (
identificador NUMBER,
nombre VARCHAR2(20),
familia_ NUMBER,
oficina_ NUMBER,
MAP MEMBER FUNCTION orden RETURN NUMBER,
...
);
CREATE TYPE BODY Familia AS
MAP MEMBER FUNCTION orden RETURN NUMBER IS
BEGIN
RETURN identificador;
END;
...
END;
Una función miembro de orden es una función que acepta un parámetro del mismo tipo del tipo de objeto y que devuelve un número negativo si el objeto pasado es menor, cero si son iguales y un número positivo si el objeto pasado es mayor.
CREATE TYPE Oficina AS OBJECT (
identificador NUMBER,
nombre VARCHAR2(20),
...
ORDER MEMBER FUNCTION igual ( ofi Oficina ) RETURN INTEGER,
...
);
CREATE TYPE BODY Oficina AS
ORDER MEMBER FUNCTION igual ( ofi Oficina ) RETURN INTEGER IS
BEGIN
IF (identificador < ofi.identificador) THEN
RETURN –1;
ELSIF (identificador = ofi.identificador) THEN
RETURN 0;
ELSE
RETURN 1;
END IF;
END;
...
END;