Nhiều khả năng con trỏ được mở dựa trên bảng tạm thời chung (GTT), đã được tạo bằng ON COMMIT DELETE ROWS
lựa chọn. Và nguyên nhân khiến đối tượng ORA-08103: object no longer exists
lỗi là commit
câu lệnh theo sau ngay sau delete
tuyên bố. Đây là một ví dụ đơn giản:
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
Tạo bảng tạm thời toàn cục với on commit preserve rows
mệnh đề sẽ cho phép tìm nạp dữ liệu một cách an toàn từ một con trỏ dựa trên bảng đó mà không sợ phải đối mặt với ORA-08103:
lỗi.