sql >> Base de Datos >  >> RDS >> Oracle

¿Oracle 12 tiene problemas con los tipos de colecciones locales en SQL?

En experimentos posteriores descubrimos que los problemas son aún más profundos de lo que se suponía.

Por ejemplo, elementos variables utilizados en el paquete buggy_report podemos obtener un ORA-03113: end-of-file on communication channel al ejecutar el script (en la pregunta). Se puede hacer cambiando el tipo de t_id_table a VARRAY o TABLE .. INDEX BY .. . Hay muchas formas y variaciones que nos llevan a diferentes excepciones, que están fuera del tema de esta publicación.

Lo más interesante es el tiempo de compilación de buggy_report La especificación del paquete puede tardar hasta 25 segundos, cuando normalmente tarda unos 0,05 segundos. Definitivamente puedo decir que depende de la presencia de TYPE t_id_table parámetro en el pipe_table la declaración de función y la "compilación prolongada" ocurren en el 40% de los casos de instalación. Entonces parece que el problema con local collection types in SQL aparecen de forma latente durante la compilación.

Entonces vemos que Oracle 12.1.0.2 obviamente tiene un error en la realización del uso de tipos de colección locales en SQL.

Los ejemplos mínimos para obtener ORA-22163 y ORA-03113 estan siguiendo. Allí asumimos el mismo buggy_report paquete como en la pregunta.

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