0

我有一个 web jsp 应用程序和一个数据库。我想知道如何正确处理序列和插入。例如,我有一个预订表,其中包含列FLIGHT_ID, PASSPORT_ID。这对是独一无二的。现在,当我想从网站上收到的数据中插入新的预订时,我是这样做的:

  1. 解析传入数据
  2. BOOKING_ID从序列中获取新值 ( SELECT SEQ.nextval FROM dual;)
  3. 创建INSERT ...(new_booking_id,...)查询
  4. 查找 Oracle DBMS 抛出的异常(最常见的唯一约束违规

这工作正常,但我“丢失”了序列的一些值,因为我在调用 select 时收到了它们,但我不使用它们。

每次我捕捉到异常时,可能使序列后退一步:

ALTER SEQUENCE SEQ INCREMENT BY -1;
SELECT SEQ.NEXTVAL FROM DUAL;
ALTER SEQUENCE SEQ INCREMENT BY 1;

但这似乎不是最好的方法。什么是?

4

1 回答 1

0

如果只关心丢失一些序列值,则可以在执行 INSERT 之前通过检查只生成一次必要的值。执行从同一个表中选择并仅为将要成功插入的记录生成 newbookingID。(正如您所提到的,异常可能是由于唯一约束,所以您已经知道哪些值应该是唯一的)

于 2013-11-08T16:44:10.950 回答