【问题标题】:Increment in Oracle Forms without commit record没有提交记录的 Oracle Forms 增量
【发布时间】:2016-02-02 15:52:36
【问题描述】:

我已使用此代码生成自动编号:

DECLARE
ACC_NEW_ID NUMBER:=0;
BEGIN
if :acc_info_id is null then
SELECT MAX(NVL(ACC_INFO_ID,1000))+1 INTO ACC_NEW_ID FROM ACC_INFO;
:ACC_INFO_ID := ACC_NEW_ID;
end if;
END;

此代码运行良好,但是当我在不单击保存按钮的情况下创建另一条记录时,它会创建相同的编号。例如:id 是 1003,在发布记录后,我点击了新记录按钮而不是保存按钮,它生成了相同的 1003 数字而不是我预期的 1004。

【问题讨论】:

    标签: plsql oracleforms


    【解决方案1】:

    您的代码查询表中的记录,并返回它在那个时间点可以看到的最大 ID(即它不会看到未提交的记录),并在其中添加一个。

    如果它生成了1003但是没有这个值的记录被保存到表中,当然你应该期望它找不到它!

    就这一点而言,它“完美地工作”并且正确。但是,如果打算为每条记录生成一个唯一的 ID 值,那么这种方法是有缺陷的,并且由于并发性而在任何正常系统中都会失败。

    相反,如果您需要唯一 ID,则应使用 Oracle SEQUENCE 代替,这可以保证唯一性。

    【讨论】:

      猜你喜欢
      • 2015-08-27
      • 1970-01-01
      • 2022-11-10
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      • 2011-07-26
      • 2014-12-12
      • 1970-01-01
      相关资源
      最近更新 更多