Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle 12 има ли проблеми с типовете локални колекции в SQL?

В по-нататъшни експерименти открихме, че проблемите са дори по-дълбоки, отколкото се предполагаше.

Например различни елементи, използвани в пакета buggy_report можем да получим ORA-03113: end-of-file on communication channel при стартиране на скрипта (във въпроса). Може да се направи с промяна на типа на t_id_table към VARRAY или TABLE .. INDEX BY .. . Има много начини и варианти, които ни водят до различни изключения, които не са по темата за тази публикация.

Едно по-интересно нещо е времето за компилиране на buggy_report спецификацията на пакета може да отнеме до 25 секунди, когато обикновено отнема около 0,05 секунди. Определено мога да кажа, че зависи от наличието на TYPE t_id_table параметър в pipe_table декларация на функция и "дълго време компилиране" се случват в 40% от случаите на инсталиране. Така че изглежда, че проблемът с local collection types in SQL латентно се появяват по време на компилирането.

Така че виждаме, че Oracle 12.1.0.2 очевидно има грешка в реализацията на използването на типове локални колекции в SQL.

Минималните примери за получаване на ORA-22163 и ORA-03113 следват. Там приемаме същия buggy_report пакет като във въпроса.

-- 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle XMLTable - извличане на колона от родителски възел

  2. T-SQL:Как можете да създадете таблица с SELECT?

  3. Проблем със заявка на SqlPlus (спецификация на пакета и тяло)

  4. Разлика между нотацията плюс (+) на Oracle и нотация на ansi JOIN?

  5. Как да изброя всички таблици в схема в Oracle SQL?