Последовательность должна быть поточно-ориентированной:
create table ORDERTEST (
ORDERID number not null ,
COLA varchar2(10) ,
INSERTDATE date default sysdate,
constraint ORDERTEST_pk primary key (orderid)
) ;
create sequence ORDERTEST_seq start with 1 nocycle nocache ;
insert into ORDERTEST (ORDERID, COLA, INSERTDATE)
select ORDERTEST_SEQ.NEXTVAL , substr(OBJECT_NAME,1,10), sysdate
from USER_OBJECTS
where rownum <= 5; --just to limit results
select *
from ORDERTEST
order by ORDERID desc ;
ORDERID COLA INSERTDATE
---------------------- ---------- -------------------------
5 C_COBJ# 16-JUL-10 12.15.36
4 UNDO$ 16-JUL-10 12.15.36
3 CON$ 16-JUL-10 12.15.36
2 I_USER1 16-JUL-10 12.15.36
1 ICOL$ 16-JUL-10 12.15.36
теперь в другом сеансе:
insert into ORDERTEST (ORDERID, COLA, INSERTDATE)
select ORDERTEST_SEQ.NEXTVAL , substr(OBJECT_NAME,1,10), sysdate
from USER_OBJECTS
where rownum <= 5; --just to limit results
select *
from ORDERTEST
order by ORDERID desc ;
5 rows inserted
ORDERID COLA INSERTDATE
---------------------- ---------- -------------------------
10 C_COBJ# 16-JUL-10 12.17.23
9 UNDO$ 16-JUL-10 12.17.23
8 CON$ 16-JUL-10 12.17.23
7 I_USER1 16-JUL-10 12.17.23
6 ICOL$ 16-JUL-10 12.17.23
Последовательность Oralce является поточно-ориентированной: http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/views.htm#ADMIN020 "Если два пользователяобращаются к одной и той же последовательности одновременно, тогда порядковые номера, которые получает каждый пользователь, могут иметь пропуски, потому что порядковые номера также генерируются другим пользователем ".числа не могут быть 1,2,3,4,5 (как в моем примере -> если вы боитесь этого, вы можете увеличить кэш)
это также может помочь, хотя они не размещают свой источник: http://forums.oracle.com/forums/thread.jspa?threadID=910428 "последовательность увеличивается на единицу сразу и навсегда, независимо от того, фиксируете ли вы транзакцию или откатывает ее. Параллельный доступ к NextVal последовательности всегда будет возвращать отдельные значения каждому вызывающему."
Если вашбоюсь, вставки будут не в порядке, и вам нужно, чтобы значение последовательности использовало возвращаемое предложение:
declare
x number ;
begin
insert into ORDERTEST (ORDERID, COLA, INSERTDATE)
values( ORDERTEST_SEQ.NEXTVAL , 'abcd', sysdate)
returning orderid into x;
dbms_output.put_line(x);
end;
--11
тогда вы знаете, что оно вставлено прямо тогда и там.