注意:感谢所有答案,谢谢,但我们已经有一个序列..并且不能使用 UNIQUE 约束,因为某些项目需要重复..我需要以某种方式使用 PLSQL 来处理这个问题,所以基于一些标准(使用if 语句)我需要确保没有重复。只是为了确认,这些标识符是非常定制的,具有不同类型的字符串。对于每组字符串,我们有一个数字,仅用于该字符串(STR-STR-####),我们有数百个这样的 STR-STR 组合,对于每个组合,我们都有一个 #### 计数......在这些之上,一些 STR-STR 组合是允许的有重复..所以我们不能使用唯一约束,我们不能使用主键,因为它不是一个简单的数字,最重要的是我们确实为每个项目分配了一个主键..这些标识符用于用户而不是用于数据库管理。
当用户创建一个项目时,根据一些标准,我们给项目一个特定的数字。在保存函数中,调用一个函数来准备第一个初始字符串,然后扫描保存数字的表并保存为该特定字符串分配下一个可用的 4 位数字。
现在有一些问题,在获取下一个数字和提交到数据库之间大约有 1000 行代码。问题是当两个人在几秒钟内创建一个具有相同标准的项目时,有时会发出相同的数字。
我所做的是,就在提交之前,我检查数据库中的号码,如果它存在,我调用该函数再次获取下一个可用号码......
即使这段代码减少了重复的机会,如果我同时保存 2 个项目,我仍然会得到一个重复的数字..
任何人都知道有什么方法可以避免重复并将重复数字的机会降至 0?
EDIT1:我们已经有一个主键。这个标识符是一个特殊的字符串,并且非常定制,因此不可能只使用从 0 开始计数的数字
EDIT2:在某些情况下我们需要重复..这非常小(可能大约 10 个不同的项目轨道使用重复项)所以在我使用 if 语句提交之前检查重复项之前,所以如果项目保存 dosn' t 属于应该有重复的系统之一,然后我跳过检查...
编辑 3:我们在这里使用 PL/SQL
编辑4:我想这个问题非常具体,我并没有完全传达出来。虽然有很多答案,但没有一个人真正抓住了我的问题。无论如何,我解决了这个问题并在下面添加了我的答案。