Para poder ordenar o comparar objetos en Sql se utilizan las claves "MAP" y "ORDER".
Oracle es incapaz de deducir si un objeto es mayor que otro, por lo tanto , es necesario implementar una de estas funciones (solo se puede implementar una o la otra, no ambas a la vez)
MAP, nos sirve para comparar objetos y es llamado automaticamente cuando en un SELECT se utiliza DISTINCT, ORDER BY y GROUP BY.
Ejemplo, creamos un objeto "melonT":
CREATE OR REPLACE TYPE melonT AS OBJECT
(
id_melon number(2);
nombre varchar2(20);
MAP MEMBER FUNCTION id_melon RETURN NUMBER; /*cabecera del metodo 'id_melon ' */
);
/* creamos el metodo 'id_melon ' */
CREATE OR REPLACE TYPE BODY melonT AS
MAP MEMBER FUNCTION id_melon RETURN NUMBER
BEGIN
RETURN id_melon; /*return: un atributo que sea clave primaria */
END;
END;
----------------------------------------------------
ORDER , a diferencia de MAP , solo puede comparar la diferencia entre 2 objetos y la sintaxis es más estricta. El resultado de "ORDER" tiene que ser un valor que se pueda comparar (un tipo primitivo), el retorno de la función es la resta del valor del propio objeto menos el valor del objeto pasado por parametro, es decir, si la salida es cero los dos objetos son son iguales, si la salida es negativa el objeto que es comparado es más pequeño y si la salida es positiva el objeto a comparar es mayor el objeto con el que se compara.
Ejemplo :
CREATE OR REPLACE TYPE melonT AS OBJECT
(
id_melon number(2);
nombre varchar2(20);
ORDER MEMBER FUNCTION equals(otroObj IN melonT ) RETURN INTEGER; /*cabecera del metodo 'equals' */
);
CREATE OR REPLACE TYPE BODY melonT AS
MAP MEMBER FUNCTION equals(otroObj IN melonT ) RETURN INTEGER
BEGIN
RETURN id_melon - ortroObj.id_melon;
END;
END;
No hay comentarios:
Publicar un comentario