Em outros experimentos, descobrimos que os problemas são ainda mais profundos do que se supõe.
Por exemplo, vários elementos usados no pacote
buggy_report podemos obter um ORA-03113: end-of-file on communication channel ao executar o script (na pergunta). Isso pode ser feito alterando o tipo de t_id_table para VARRAY ou TABLE .. INDEX BY .. . Existem muitas maneiras e variações que nos levam a diferentes exceções, que estão fora do tópico deste post. A coisa mais interessante é que o tempo de compilação de
buggy_report especificação do pacote pode levar até 25 segundos, quando normalmente leva cerca de 0,05 segundos. Posso dizer definitivamente que depende da presença de TYPE t_id_table parâmetro no pipe_table declaração de função e "compilação de longa data" acontecem em 40% dos casos de instalação. Portanto, parece que o problema com os local collection types in SQL aparecem latentemente durante a compilação. Então vemos que o Oracle 12.1.0.2 obviamente tem um bug na realização do uso de tipos de coleção local em SQL.
Os exemplos mínimos para obter
ORA-22163 e ORA-03113 estão seguindo. Lá assumimos o mesmo buggy_report pacote como na pergunta. -- 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;
/