Fallo extraño en EXECUTE_QUERY sin mensaje de error

Hola. Actualmente estoy en un proyecto de mantenimiento en el que desarrollamos con Oracle Forms 10g. Ahora mismo estoy intentando resolver una incidencia. He logrado localizar el punto del formulario donde se produce el error, pero desconozco las causas del mismo. Este error solo se produce en algunos casos especificos, funcionando con normalidad en el resto de los casos. Es decir, para la mayoria de los registros funciona bien, pero para algunos pocos registros no. El error se produce cuando desde el trigger WHEN-NEW-FORM-INSTANCE hago un EXECUTE_QUERY (sin parámetros) sobre un bloque de base de datos. Debería sacar los datos del registro sin problema, como hace casi siempre, pero no lo hace. Además de meter montones de mensajes para ver que camino toma, he probado varias cosas: - Ver si la cláusula where del bloque de datos se cambia antes del EXECUTE_QUERY, o bien que directamente no está fijada. - Verificar si el parámetro que paso al formulario, el cual se utiliza en la cláusula where, es correcto. - Comprobar si al hacer el EXECUTE_QUERY aparece algún código en el SQLCODE o algún mensaje en SQLERRM. - Lanzar el EXECUTE_QUERY en un bloque anónimo con la excepción WHEN OTHERS para ver si se produce algún error. Puedo decir con certeza que la cláusula where no se altera y está bien fijada, que el parámetro es correcto, y que no se produce ningún tipo de excepción. Pues la cosa no acaba ahí. He puesto mensajes tanto en la primera línea del trigger PRE-QUERY, como en la primera del trigger POST-QUERY, y aquí sucede lo más raro de todo. Antes del EXECUTE_QUERY me aparecen los mensajes del PRE-QUERY, tal y como debe ser, pero luego no me aparecen los mensajes del POST-QUERY. No entiendo porque demonios entra al PRE-QUERY y no al POST-QUERY. Si me diera alguna excepción, tendría sentido, pero no me da absolutamente ninguna cuando hago el EXECUTE_QUERY. Simplemente no tiene sentido alguno. Espero que os surja alguna idea y me podáis ayudar, dado que es algo que me corre prisa. Saludos y gracias de antemano.

Por lo que comentas, parece que sea un bug, o simplemente que la consulta no devuelve datos, y por eso no se produce ningún mensaje de error. Lo idal sería que contestara alguien que le hubiera pasado lo mismo pero, sin haberme pasado nunca antes, yo haría dos cosas en paralelo:

  • Consultar el metalink de Oracle por si es un bug
  • Mirar en base de datos cuál es la consulta real que se ha ejecutado cuando el EXECUTE_QUERY no te ha devuelto datos.

Para mirar la consulta en la base de datos puedes utilizar, justo después de ejecutar la consulta, una Select sobre el diccionario de datos que te saca las consultas que la base de datos aún tiene en caché, extraída del tema de Recopilación de scripts y consultas útiles de Oracle:

•• Sentencias SQL completas ejecutadas con un texto determinado en el SQL

SELECT c.sid, d.piece, c.serial#, c.username, d.sql_text
FROM v$session c, v$sqltext d
WHERE c.sql_hash_value = d.hash_value
and upper(d.sql_text) like '%WHERE CAMPO LIKE%'
ORDER BY c.sid, d.piece

Espero que puedas encontrar el problema,