W dalszych eksperymentach odkryliśmy, że problemy są jeszcze głębsze, niż zakładano.
Na przykład różne elementy użyte w pakiecie buggy_report możemy uzyskać ORA-03113: end-of-file on communication channel podczas uruchamiania skryptu (w pytaniu). Można to zrobić zmieniając typ t_id_table do VARRAY lub TABLE .. INDEX BY .. . Istnieje wiele sposobów i odmian prowadzących nas do różnych wyjątków, które nie są tematem tego posta.
Jeszcze jedną interesującą rzeczą jest czas kompilacji buggy_report Specyfikacja pakietu może potrwać do 25 sekund, podczas gdy zwykle zajmuje to około 0,05 sekundy. Z całą pewnością mogę powiedzieć, że zależy to od obecności TYPE t_id_table parametr w pipe_table deklaracja funkcji i "długa kompilacja" zdarzają się w 40% przypadków instalacji. Wygląda więc na to, że problem z local collection types in SQL pojawiają się utajone podczas kompilacji.
Widzimy więc, że Oracle 12.1.0.2 ma oczywiście błąd w realizacji lokalnych typów kolekcji w SQL.
Minimalne przykłady do pobrania ORA-22163 i ORA-03113 podążać. Tam zakładamy ten sam buggy_report pakiet jak w pytaniu.
-- 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;
/