Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

O Oracle 12 tem problemas com tipos de coleta local no SQL?


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