Session State en Oracle APEX: qué es, cómo funciona y cuándo se actualiza

Uno de los conceptos más importantes —y también más mal entendidos— en Oracle Application Express es el Session State.
Muchos errores en aplicaciones APEX aparecen por asumir que los valores de los items de página están siempre sincronizados con la base de datos o con el navegador. En realidad, APEX funciona con una capa intermedia llamada Session State.
Entender esto cambia completamente la forma en que depurás una aplicación.
¿Qué es el Session State?
El Session State es el mecanismo que utiliza APEX para almacenar los valores actuales de los items de una aplicación durante una sesión de usuario.
Cada vez que un usuario interactúa con la aplicación, APEX guarda los valores de los items en memoria (y en tablas internas de APEX) asociados a:
la aplicación
la página
el item
la sesión del usuario
En otras palabras:
El Session State es la representación en el servidor de los valores actuales de los items de una página.
Esto significa que el valor que ves en pantalla no siempre es el mismo que APEX tiene guardado en Session State.
Dónde se almacena realmente
Internamente, APEX guarda el Session State en tablas del esquema de APEX, principalmente:
WWV_FLOW_DATAWWV_FLOW_SESSION_STATE
Estas tablas almacenan pares nombre / valor de cada item.
Ejemplo conceptual:
| Session | Item | Valor |
|---|---|---|
| 123456 | P1_CLIENTE_ID | 45 |
| 123456 | P1_TOTAL | 150000 |
Esto permite que APEX pueda:
ejecutar procesos
renderizar regiones
evaluar condiciones
ejecutar validaciones
sin depender directamente del navegador.
Cuándo se actualiza el Session State
Aquí está el punto donde muchos desarrolladores se equivocan.
El Session State NO se actualiza automáticamente cada vez que un usuario escribe algo en un campo.
Solo se actualiza cuando ocurre alguno de estos eventos.
1. Submit de página
El caso más común.
Cuando el usuario presiona un botón con acción:
Submit Page
APEX envía todos los valores de los items al servidor y actualiza el Session State.
2. Dynamic Actions con "Submit Page Items"
Si utilizás una Dynamic Action que ejecuta PL/SQL o Ajax, solo los items incluidos en:
Items to Submit
se envían al servidor.
Si olvidás agregar un item aquí, el servidor seguirá viendo el valor viejo.
Este es uno de los errores más comunes en APEX.
3. Procesos que modifican Session State
APEX también permite actualizar Session State manualmente usando:
APEX_UTIL.SET_SESSION_STATE('P1_ITEM', 'VALOR');
Esto se usa mucho en:
procesos PL/SQL
APIs
integraciones
4. Computations
Las Computations de página o aplicación también pueden modificar el Session State.
Por ejemplo:
Before Header
After Submit
Un error típico causado por Session State
Supongamos esta situación:
El usuario escribe
100enP1_TOTALUna Dynamic Action ejecuta un proceso PL/SQL
El proceso lee
:P1_TOTAL
Pero olvidaste poner P1_TOTAL en Items to Submit.
Resultado:
El proceso ve el valor viejo, por ejemplo 50.
Esto provoca comportamientos aparentemente inexplicables.
Cómo depurar problemas de Session State
APEX incluye herramientas para inspeccionarlo.
La más útil es:
Sesion → Ver Estado de la sesion
Desde el Developer Toolbar podés ver todos los valores actuales de la sesión.
Esto permite verificar rápidamente si el problema está en:
el navegador
el Session State
el proceso PL/SQL
Cuándo conviene limpiar el Session State
A veces los valores quedan persistidos y generan comportamientos inesperados.
Podés limpiar el Session State usando:
Procedimiento CLEAR_SESSION_STATE
Esto es especialmente importante en páginas que funcionan como formularios reutilizables.
Regla mental para trabajar con APEX
Una regla útil es pensar así:
El navegador muestra datos.
El servidor trabaja con Session State.
Si ambos no están sincronizados, tu aplicación tendrá errores difíciles de detectar.
El Session State es el corazón del modelo de ejecución de Oracle Application Express.
Comprender cuándo se actualiza permite:
evitar bugs difíciles de rastrear
diseñar Dynamic Actions correctamente
optimizar procesos PL/SQL
depurar aplicaciones mucho más rápido
Si desarrollás en APEX y todavía no dominás este concepto, es muy probable que estés perdiendo tiempo depurando problemas que en realidad son simples desincronizaciones del Session State.




