sql >> Databasteknik >  >> RDS >> Oracle

Har Oracle 12 problem med lokala samlingstyper i SQL?

I ytterligare experiment fick vi reda på att problemen är ännu djupare än det har antagits.

Till exempel, olika element som används i paketet buggy_report vi kan få en ORA-03113: end-of-file on communication channel när du kör skriptet (i frågan). Det kan göras genom att ändra typen av t_id_table till VARRAY eller TABLE .. INDEX BY .. . Det finns många sätt och variationer som leder oss till olika undantag, som är utanför ämnet för det här inlägget.

En mer intressant sak är kompileringstiden för buggy_report paketspecifikationen kan ta upp till 25 sekunder, när det normalt tar cirka 0,05 sekunder. Jag kan definitivt säga att det beror på närvaron av TYPE t_id_table parametern i pipe_table funktionsdeklaration och "långtidskompilering" sker i 40 % av installationsfallen. Så det verkar som om problemet med local collection types in SQL visas latent under kompileringen.

Så vi ser att Oracle 12.1.0.2 uppenbarligen har en bugg i realiseringen av att använda lokala samlingstyper i SQL.

De minimala exemplen för att få ORA-22163 och ORA-03113 följer. Där antar vi samma buggy_report paket som i frågan.

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


  1. Oracle Security Alert för CVE-2021-44228

  2. Hur man uppdaterar en pivottabell med Eloquent i laravel 5

  3. Vila gå med två tabeller och producera json-svar under våren vilsam webbtjänst?

  4. 2 sätt att formatera ett tal med ledande nollor i Oracle