Las instancias de un tipo de objeto no tienen un orden predefinido. Si deseas establecer un orden en ellos, con el fin de hacer una ordenación o una comparación, debes crear un método MAP
.
Por ejemplo, si haces una comparación entre dos objetos Usuario, y deseas saber si uno es mayor que otro, ¿en base a qué criterio se hace esa comparación? ¿Por el orden alfabético de apellidos y nombre? ¿Por la fecha de alta? ¿Por el crédito? Hay que establecer con un método MAP
cuál va a ser el valor que se va a utilizar en las comparaciones.
Para crear un método MAP
debes declarar un método que retorne el valor que se va a utilizar para hacer las comparaciones. El método que declares para ello debe empezar su declaración con la palabra MAP
:
CREATE OR REPLACE TYPE Usuario AS OBJECT (
login VARCHAR2(30),
nombre VARCHAR2(30),
apellidos VARCHAR2(40),
f_ingreso DATE,
credito NUMBER,
MAP MEMBER FUNCTION ordenarUsuario RETURN VARCHAR2
);
/
En el cuerpo del método se debe retornar el valor que se utilizará para realizar las comparaciones entre las instancias del tipo de objeto. Por ejemplo, si se quiere establecer que las comparaciones entre objetos del tipo Usuario se realice considerando el orden alfabético habitual de apellidos y nombre:
CREATE OR REPLACE TYPE BODY Usuario AS
MAP MEMBER FUNCTION ordenarUsuario RETURN VARCHAR2 IS
BEGIN
RETURN (apellidos || ' ' || nombre);
END ordenarUsuario;
END;
/
El lenguaje PL/SQL utiliza los métodos MAP
para evaluar expresiones lógicas que resultan valores booleanos como objeto1 > objeto2
, y para realizar las comparaciones implícitas en las cláusulas DISTINCT
, GROUP BY
y ORDER BY
.
Cada tipo de objeto sólo puede tener un método MAP
declarado, y sólo puede retornar alguno de los siguientes tipos: DATE
, NUMBER
, VARCHAR2
, CHARACTER
o REAL
.
Aquí (pdf - 7,74 KB)puedes descargarte un PDF con el código completo de un ejemplo de declaración y uso de un método MAP para establecer el orden en las comparaciones entre dos instancias de objetos del tipo Usuario. Como puedes comprobar, las comparaciones se realizan un función del orden alfabético de los apellidos seguidos del nombre.