Cuando tengas la necesidad de hacer referencia a un objeto en lugar de alguno de sus atributos, puedes utilizar la función VALUE
junto con el nombre de la tabla de objetos o su alias, dentro de una sentencia SELECT
. Puedes ver a continuación un ejemplo de uso de dicha función para hacer inserciones en otra tabla (Favoritos
) del mismo tipo de objetos:
INSERT INTO Favoritos SELECT VALUE(u) FROM UsuariosObj u WHERE u.credito >= 100;
Esa misma función VALUE
puedes utilizarla para hacer comparaciones de igualdad entre objetos, por ejemplo, si deseamos obtener datos de los usuarios que se encuentren en las tablas Favoritos
y UsuariosObj
.
SELECT u.login FROM UsuariosObj u JOIN Favoritos f ON VALUE(u)=VALUE(f);
Observa la diferencia en el uso cuando se hace la comparación con una columna de tipo de objetos. En ese caso la referencia que se hace a la columna (g.unUsuario
) permite obtener directamente un objeto, sin necesidad de utilizar la función VALUE
.
SELECT g.dni FROM Gente g JOIN Favoritos f ON g.unUsuario=VALUE(f);
Usando la cláusula INTO
podrás guardar en variables el objeto obtenido en las consultas usando la función VALUE
. Una vez que tengas asignado el objeto a la variable podrás hacer uso de ella de cualquiera de las formas que has visto anteriormente en la manipulación de objetos. Por ejemplo, puedes acceder a sus atributos, formar parte de asignaciones, etc.
En el siguiente ejemplo se realiza una consulta de la tabla UsuariosObj
para obtener un determinado objeto de tipo Usuario
. El objeto resultante de la consulta se guarda en la variable u1
. Esa variable se utiliza para mostrar en pantalla el nombre del usuario, y para ser asignada a una segunda variable, que contendrá los mismos datos que la primera.
DECLARE
u1 Usuario;
u2 Usuario;
BEGIN
SELECT VALUE(u) INTO u1 FROM UsuariosObj u WHERE u.login = 'luitom64';
dbms_output.put_line(u1.nombre);
u2 := u1;
dbms_output.put_line(u2.nombre);
END;