sql >> Databasteknik >  >> RDS >> Oracle

Undantag ORA-08103:objektet existerar inte längre vid användning av setfetchsize av Hibernate

Mest troligt att en markör öppnas baserat på en global temporär tabell (GTT), som hade skapats med ON COMMIT DELETE ROWS alternativ. Och orsaken till ORA-08103: object no longer exists felet är commit uttalande som följde direkt efter delete påstående. Här är ett enkelt exempel:

 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

Återskapa globala temporära tabeller med on commit preserve rows sats kommer att tillåta att säkert hämta data från en markör som är baserad på den tabellen utan att vara rädd för att möta ORA-08103: fel.



  1. Ändra Excel-datumnummer till Oracle-datum

  2. String -> java.util.Date -> java.sql.Date (med tidsstämpel)

  3. Fix "ERROR 1250 (42000):Tabell '...' från en av SELECT:erna kan inte användas i ORDER-satsen" i MariaDB

  4. Mysql:Ställ in formatet DATETIME till 'DD-MM-YYYY HH:MM:SS' när du skapar en tabell