Bij verdere experimenten kwamen we erachter dat de problemen nog dieper zijn dan werd aangenomen.
Bijvoorbeeld verschillende elementen die worden gebruikt in het pakket buggy_report
we kunnen een ORA-03113: end-of-file on communication channel
. krijgen bij het uitvoeren van het script (in de vraag). Het kan worden gedaan door het type t_id_table
te veranderen naar VARRAY
of TABLE .. INDEX BY ..
. Er zijn veel manieren en variaties die ons naar verschillende uitzonderingen leiden, die buiten het onderwerp van dit bericht vallen.
Wat nog interessanter is, is de compilatietijd van buggy_report
pakketspecificatie kan tot 25 seconden duren, terwijl dit normaal ongeveer 0,05 seconden duurt. Ik kan zeker zeggen dat het afhangt van de aanwezigheid van TYPE t_id_table
parameter in de pipe_table
functiedeclaratie en "langdurige compilatie" komen voor in 40% van de installatiegevallen. Het lijkt er dus op dat het probleem met local collection types in SQL
latent verschijnen tijdens de compilatie.
We zien dus dat Oracle 12.1.0.2 duidelijk een bug heeft bij het realiseren van het gebruik van lokale verzamelingstypes in SQL.
De minimale voorbeelden om ORA-22163
. te krijgen en ORA-03113
zijn aan het volgen. Daar gaan we uit van hetzelfde buggy_report
pakket zoals in de vraag.
-- 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;
/