Plsql Oracle表单中无提交记录的增量

Plsql Oracle表单中无提交记录的增量,plsql,oracleforms,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; 这段代码工作得很好,但是当我在没有点击save按钮的情况下再创建一条记录时,它会创建相同的数字。例如:id为1003,发布

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

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;

这段代码工作得很好,但是当我在没有点击save按钮的情况下再创建一条记录时,它会创建相同的数字。例如:id为1003,发布记录后,我单击了“新建记录”按钮而不是“保存”按钮,它生成了与预期相同的1003号而不是1004号。

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

如果它生成1003,但没有将具有此值的记录保存到表中,当然您应该期望它不会找到它

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

相反,如果您需要一个唯一的ID,您应该使用Oracle序列,这可以保证唯一性