En experimentos posteriores descubrimos que los problemas son aún más profundos de lo que se suponía.
Por ejemplo, elementos variables utilizados en el paquete buggy_report
podemos obtener un ORA-03113: end-of-file on communication channel
al ejecutar el script (en la pregunta). Se puede hacer cambiando el tipo de t_id_table
a VARRAY
o TABLE .. INDEX BY ..
. Hay muchas formas y variaciones que nos llevan a diferentes excepciones, que están fuera del tema de esta publicación.
Lo más interesante es el tiempo de compilación de buggy_report
La especificación del paquete puede tardar hasta 25 segundos, cuando normalmente tarda unos 0,05 segundos. Definitivamente puedo decir que depende de la presencia de TYPE t_id_table
parámetro en el pipe_table
la declaración de función y la "compilación prolongada" ocurren en el 40% de los casos de instalación. Entonces parece que el problema con local collection types in SQL
aparecen de forma latente durante la compilación.
Entonces vemos que Oracle 12.1.0.2 obviamente tiene un error en la realización del uso de tipos de colección locales en SQL.
Los ejemplos mínimos para obtener ORA-22163
y ORA-03113
estan siguiendo. Allí asumimos el mismo buggy_report
paquete como en la pregunta.
-- produces 'ORA-03113: end-of-file on communication channel'
DECLARE
l_cur buggy_report.t_info_cur;
FUNCTION get_it RETURN buggy_report.t_info_cur IS BEGIN RETURN buggy_report.get_cursor(); END;
BEGIN
l_cur := get_it();
dbms_output.put_line('');
END;
/
-- produces 'ORA-22163: left hand and right hand side collections are not of same type'
DECLARE
l_cur buggy_report.t_info_cur;
PROCEDURE hello IS BEGIN NULL; END;
BEGIN
l_cur := buggy_report.get_cursor;
-- comment `hello` and exception disappears
hello;
CLOSE l_cur;
END;
/