Variables de sesión en Oracle
En Oracle se pueden crear variables de sesión. De esas cuyo alcance se limita a la sesión que la ha creado y por tanto cuando se cierre la sessión desaparecerà.
Veamos como se crean y en un post posterior veremos alguna posible aplicación práctica a modo de ejemplo:
Primero que nada, como usuario SYS debemos dar permiso al usuario que usemos para poder crear el contexto:
conn / as sysdba
grant create any context to usuario
grant execute on sys.dbms_session to usuario
Nos conectamos como el susodicho usuario y creamos el contexto :
CREATE OR REPLACE CONTEXT nombre_contexto USING context_package;
Con esto asociamos un nombre "nombre_contexto" a un paquete que vamos a crear a continuación y que le daremos el nombre "context_package" y que contendrá un procedure para instanciar variables dentro del contexto mediante la llamada a la funcion dbms_session.set_context:
create or replace package context_package
as
procedure set_context_value(par in varchar2, val in varchar2);
end avl_context_package;
create or replace package body context_package
as
procedure set_context_value(par in varchar2, val in varchar2)
as
begin
dbms_session.set_context('nombre_contexto',par,val);
end;
end avl_context_package;
Muy importante: Este problema me provocó verdaderos dolores de cabeza hasta que no lo descubrí. Oracle me devolvía el error ORA-01031: Insufficient privileges sin aparente sentido. Y es que el nombre del contexto que se establece en dbms_session.set_context('nombre_contexto',par,val); debe coincidir con el nombre de creación del contexto:
CREATE OR REPLACE CONTEXT nombre_contexto USING context_package;
CREATE OR REPLACE CONTEXT nombre_contexto USING context_package;
Ahora me parece obvio pero, cuando se prueba sin pensar demasiado, no lo es tanto.
call CONTEXT_PACKAGE.SET_CONTEXT_VALUE('variable','VALOR');
A partir de ese momento, para consultar el valor de una variable instanciada en la sesión debemos usar la funcion SYS_CONTEXT tal que así:
select SYS_CONTEXT('nombre_contexto', 'variable') from dual;
deberia devolver:
'VALOR'
Nos vemos.
Aaa ese a la verga context esta mal, mucho tontio
Publicar un comentario