El error PLS-00653 está reportado por el soporte de Oracle en la nota Doc ID 1371524.1 y afecta a las bases de datos 10.2.0.1 (10R2) y posteriores.
Según esta nota, el error está identificado y verificado en el Bug no publicado 5668788. Y como solución proponen no sobrecargar funciones PIPELINED.
Lo primero que tenemos que hacer, por lo tanto, es identificar las funciones que están generando este error de compilación. Y para lograrlo disponemos de una vista del diccionario de datos que nos ofrece toda la información necesaria: DBA_PROCEDURES (y sus alternativas ALL_PROCEDURES y USER_PROCEDURES)
La primera consulta sobre la vista DBA_PROCEDURES muestra todas las funciones PIPELINED que existen en nuestra base de datos y que se encuentran sobrecargadas. Las funciones que generan el problema se encontrarán por tanto en el resultado de esta consulta:
-- PIPELINED functions overloaded
select *
from DBA_PROCEDURES
where pipelined = 'YES'
and nvl(overload, -1) > 0;
Afinando un poco más, podemos identificar exactamente qué funciones están sobrecargadas por otra función no PIPELINED y proceder a renombrarlas:
-- PIPELINED overloaded with other not PIPELINED functions
select *
from DBA_PROCEDURES pipe
where pipelined = 'YES'
and nvl(overload, -1) > 0
and exists
(
select object_id
from DBA_PROCEDURES no_pipe
where no_pipe.pipelined = 'NO'
and no_pipe.owner = pipe.owner
and no_pipe.object_name = pipe.object_name
and no_pipe.procedure_name = pipe.procedure_name
);
Ya solo nos queda decidir a qué funciones vamos a cambiar el nombre, y de este modo evitar la sobrecarga. La decisión dependerá del impacto que suponga en cada caso el renombrado y la cantidad de código que deberemos adaptar.
