En Oracle, un contexto es un contenedor que se utiliza para definir y almacenar información de sesión o datos específicos del usuario. Los contextos son una característica poderosa que permite a las aplicaciones compartir datos personalizados entre sesiones o consultas de SQL y PL/SQL, sin necesidad de utilizar variables globales ni tablas temporales.
Características principales
Nombre único: Cada contexto tiene un nombre único que lo identifica en la base de datos.
Ámbito de sesión: Los valores del contexto son específicos de la sesión, lo que significa que cada sesión de usuario puede tener su propia versión de los datos almacenados en el contexto.
Seguridad y control: Los valores en un contexto se establecen mediante procedimientos definidos en un paquete PL/SQL asociado. Esto proporciona un control estricto sobre qué lógica puede modificar los valores del contexto.
Propósito de los contextos en Oracle
Los contextos tienen varias aplicaciones prácticas, entre ellas:
Seguridad basada en el contexto:
Se utilizan para implementar seguridad a nivel de fila (Row-Level Security) o políticas de control de acceso dinámicas.
Almacenar datos específicos de la sesión:
Los contextos se utilizan para guardar información como el ID del usuario, roles, configuraciones, ubicaciones, o cualquier otro dato relevante a la sesión.
Esto permite que las aplicaciones accedan a esta información fácilmente durante el procesamiento de consultas.
Optimización del rendimiento:
Al evitar el uso de tablas temporales o variables globales, los contextos ayudan a reducir la sobrecarga de administración y mejoran la eficiencia en el manejo de datos específicos de la sesión.
Aislamiento entre sesiones:
Cada sesión de usuario tiene su propio conjunto de valores en el contexto, garantizando que no haya conflictos entre usuarios concurrentes.
Ejemplo utilizando Oracle APEX
create context user_context using user_pkg; /
create or replace package user_pkg as procedure set_user_context ( ctx in varchar2 , value in varchar2 , key in varchar2 );
end user_pkg;
/
create or replace package body user_pkg as
procedure set_user_context ( ctx in varchar2 , value in varchar2 , key in varchar2 ) is begin dbms_session.set_context(ctx, key, value); end;
end user_pkg; /
begin user_pkg.set_user_context(‘user_context’, null, ‘admin’); end; /
select sys_context(‘user_context’, ‘admin’) as “Usuario” from dual; /
Social List