我有一个表单,您可以在其中创建订单,当您保存订单时,是在数据库中(使用oracle)检查最后一个订单号,并将下一个订单号分配给当前保存的订单。我发现如果两个用户在同一时间或几秒钟内保存新订单,由于连接速度,我的应用程序无法为新创建的两个订单分配不同的数字。问题是两者都在同一时间检查最后分配的号码,并且两个订单都得到相同的号码。
我有一些想法,但它们都有优点和缺点。
让系统等待几秒钟,并在用户保存订单时检查订单号。但是如果两者都在同一时间保存,那么检查将在以后的同一时间完成,我想我最终会遇到同样的问题..
让系统检查订单号(每次刷新树视图时都会运行检查)并查看它是否已被复制,然后让用户通过树视图知道一些突出显示,它已被复制。但是,如果在检查之前将任何文件分配给订单,那么我将最终得到名称和内部分配的编号不同的文件。
让系统定期检查所有订单号,并为其中一个重复订单编号,但是文件与#2相同。这也可能会导致一些性能问题。
当用户请求新订单时,不是在保存订单时分配订单号。我可以让系统执行解决方案#1以及此解决方案并重新检查以查看数字是否在数据库中使用,然后重新分配新数据。再一次,如果文件被分配,有人必须去解决这些问题。
可能停止将文档分配给重复文件的一种方法是,只允许用户输入一些信息,然后保存或应用它,然后重新检查#1,然后如果它没有找到任何东西,允许用户添加文档。这部分解决方案可能适用于上述任何一种,但我不想在检查数字时延迟用户工作..
如果您发现上述想法有任何改进或者您有新想法,请告诉我们。 我需要找到最好的解决方案,并尽可能不影响用户当前的工作流程。
答案 0 :(得分:1)
如果您的订单ID只是一个号码,您可以使用Oracle序列。
CREATE SEQUENCE order_id;
在您保存记录之前,请获取新的订单号。
SELECT order_id.NEXTVAL FROM DUAL;