Tengo una BD que estaba en 9i y se hizo la migración a 11g, previo a esto se realizó la migración en 2 ambientes con las mismas características y todo funciono perfectamente, pero en esta instancia se me presenta el siguiente problema:
Tengo un función FN_VALIDAR(parametro) que valida si el parámetro existe en una tabla, si ya existe me retorna 1 y si no existe me retorna 0. Si la respuesta es 0 entonces procedo a cargar el dato y realizar todos los procesos respectivos si es 1 sencillamente arroja un error que el parámetro ya se cargó.
La manera actual como yo invoco esta función es así:
Código:
Al hacer un debug al bloque me doy cuenta que la función se esta invocando 2 veces por consiguiente la primera vez que lo ejecuta me retorna 0 y realiza la carga pero antes de salirse del bloque vuelve a invocar la función la cual ya retorna un 1 y esto hace que el proceso no continúe.SELECT FN_VALIDAR ('ABC123') INTO Respuesta FROM Dual;
Ya probé de la siguiente manera:
Código:
Para este caso funciona correctamente y lo invoca una sola vez.Respuesta:= FN_VALIDAR('ABC123');
Si solo tuviera que cambiar esta línea de código no tendría inconveniente, pero la aplicación tiene varias etapas y procesos que hacen el SELECT... INTO... a una función no solo desde la BD sino también desde shell y algunos desde aplicaciones hechas en C, lo cual me tardaría mucho buscar en cada uno de los fuentes.
Ahora esto lo haría de ser necesario, pero como les comente en los otros 2 ambientes que realice la migración funciona correctamente, no sé si alguno tenga conocimiento que se debe configurar en la BD para que la función sea invocada una sola vez desde el query SELECT INTO...