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

Изключение ORA-08103:обектът вече не съществува при използване на setfetchsize на Hibernate

Най-вероятно курсорът се отваря въз основа на глобална временна таблица (GTT), която е била създадена с ON COMMIT DELETE ROWS опция. И причината за ORA-08103: object no longer exists грешката е commit изявление, което следва непосредствено след delete изявление. Ето един прост пример:

 SQL> declare
  2    type t_recs is table of number;
  3    l_cur sys_refcursor;    -- our cursor
  4    l_rec t_recs; 
  5  
  6  begin
  7  
  8    -- populating a global temporary table GTT1 with sample data  
  9    insert into GTT1(col)
 10      select level
 11        from dual
 12     connect by level <= 1000;
 13  
 14   open l_cur         -- open a cursor based on data from GTT1
 15    for select col
 16          from GTT1;
 17  
 18    -- here goes delete statement
 19    -- and
 20    commit;  <-- cause of the error. After committing  all data from GTT1 will be
 21              -- deleted and when we try to fetch from the cursor
 22    loop      -- we'll face the ORA-08103 error
 23      fetch l_cur    -- attempt to fetch data which are long gone.
 24       bulk collect into l_rec;
 25      exit when l_cur%notfound;
 26    end loop;
 27  
 28  end;
 29  /


ORA-08103: object no longer exists
ORA-06512: at line 24

Пресъздаване на глобална временна таблица с on commit preserve rows клаузата ще позволи безопасно извличане на данни от курсор, който е базиран на тази таблица, без да се страхува да се изправи пред ORA-08103: грешка.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция TO_TIMESTAMP() в Oracle

  2. Функция LAST_DAY() в Oracle

  3. MySQL запитва примери с отговори

  4. 2 начина за проверка на нивото на съвместимост в Oracle (SQLcl &SQL*Plus)

  5. ORA-28040:Няма съвпадащо изключение за протокол за удостоверяване