Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Hat Oracle 12 Probleme mit lokalen Sammlungstypen in SQL?

In weiteren Experimenten haben wir herausgefunden, dass die Probleme noch tiefer liegen als angenommen.

Zum Beispiel unterschiedliche Elemente, die im Paket buggy_report verwendet werden wir können einen ORA-03113: end-of-file on communication channel erhalten beim Ausführen des Skripts (in der Frage). Dies kann durch Ändern des Typs von t_id_table erfolgen zu VARRAY oder TABLE .. INDEX BY .. . Es gibt viele Wege und Variationen, die uns zu verschiedenen Ausnahmen führen, die in diesem Beitrag nicht zum Thema gehören.

Die eine weitere interessante Sache ist die Kompilierzeit von buggy_report Die Paketspezifikation kann bis zu 25 Sekunden dauern, normalerweise dauert es etwa 0,05 Sekunden. Ich kann definitiv sagen, dass es auf das Vorhandensein von TYPE t_id_table ankommt Parameter in der pipe_table Funktionsdeklaration und "Langzeitkompilierung" treten in 40 % der Installationsfälle auf. Es scheint also, dass das Problem mit local collection types in SQL beim Kompilieren latent auftauchen.

Wir sehen also, dass Oracle 12.1.0.2 offensichtlich einen Fehler bei der Realisierung der Verwendung lokaler Sammlungstypen in SQL hat.

Die minimalen Beispiele, um ORA-22163 zu erhalten und ORA-03113 Folgen. Dort gehen wir von demselben buggy_report aus Paket wie in der Frage.

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