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?

1
PiC 22 feb. 2018 a las 18:33

2 respuestas

La mejor respuesta

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

0
PiC 18 jun. 2018 a las 10:26

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

1
Mark Stewart 7 mar. 2018 a las 19:26