我有一个 web jsp 应用程序和一个数据库。我想知道如何正确处理序列和插入。例如,我有一个预订表,其中包含列FLIGHT_ID, PASSPORT_ID
。这对是独一无二的。现在,当我想从网站上收到的数据中插入新的预订时,我是这样做的:
- 解析传入数据
BOOKING_ID
从序列中获取新值 (SELECT SEQ.nextval FROM dual;
)- 创建
INSERT ...(new_booking_id,...)
查询 - 查找 Oracle DBMS 抛出的异常(最常见的唯一约束违规)
这工作正常,但我“丢失”了序列的一些值,因为我在调用 select 时收到了它们,但我不使用它们。
每次我捕捉到异常时,可能使序列后退一步:
ALTER SEQUENCE SEQ INCREMENT BY -1;
SELECT SEQ.NEXTVAL FROM DUAL;
ALTER SEQUENCE SEQ INCREMENT BY 1;
但这似乎不是最好的方法。什么是?