Estoy ejecutando APEX 5.1 en ORACLE 12.1.
Tengo ca. 80 APEX aplicaciones similares que se ejecutan en la misma base de datos: cada aplicación utiliza la misma cadena de sustitución: CLIENT_ID con su propio valor (almacenando un nombre de código de la aplicación). : CLIENT_ID se utiliza a través de la función "V": V ('CLIENT_ID') en todas las aplicaciones que llaman a un marco compartido de vistas y paquetes en la base de datos.
De repente, en una de las aplicaciones, uno de los informes interactivos falla con la excepción de que: CLIENT_ID no está configurado. Todas las demás páginas o páginas similares en otras aplicaciones funcionan perfectamente bien.
- Sorprendentemente, si agrego una combinación natural con 1 fila de dual, ¡comienza a funcionar bien! Pero solo si es una combinación natural y solo si selecciono un valor de una función que lee alguna otra variable de sustitución APEX.
- Si lo cambio agregando "unión natural (seleccione 1 de dual)", sigue fallando.
- recompilar la vista que usa: CLIENT_ID no ayuda.
- ejecutar SQL formando una vista fallida no ayuda.
- algunos cambios en el SQL que forman una vista fallida ayudan (pero dan datos incorrectos, por lo que no puede ser una solución)
- DBMS_RESULT_CACHE.FLUSH no ayuda
- ALTER SYSTEM FLUSH BUFFER_CACHE no ayuda
- ALTER SYSTEM FLUSH SHARED_POOL no ayuda
¿Alguien puede darme alguna pista (excepto rebotar la base de datos) qué podría hacer para investigar más?
2 respuestas
Esto es una consecuencia de que el plan de explicación cambia con el tiempo. La causa raíz del problema se describe aquí: Cuando "LISTA DE PARTICIONES SUBQUERY "está en el plan de ejecución algo (¿un error?) Elimina la instancia del paquete
Puede ser que las vistas estén llamando a una función etiquetada deterministic
cuando en realidad la función hace referencia a V('CLIENT_ID')
en el código; haciéndolo no determinista.
Consulte Definición de función PL / SQL y busque DETERMINISTIC, teniendo en cuenta especialmente
No especifique DETERMINISTIC para una función cuyo resultado depende del estado de las variables de sesión o los objetos de esquema
Nuevas preguntas
oracle
Oracle Database es un sistema de gestión de bases de datos multimodelo creado por Oracle Corporation. NO use esta etiqueta para otros productos propiedad de Oracle, como Java y MySQL.