没有提交记录的Oracle Forms增量

时间:2016-02-02 15:52:36

标签: plsql oracleforms

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

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号。

1 个答案:

答案 0 :(得分:0)

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

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

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

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