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;
/