0

我有一个包含两列的表(在 ORADB 中):VARCHAR 唯一键和从序列生成的 NUMBER 唯一键。

我需要我的 Java 代码在获得新的 VARCHAR 键时不断(并行地)向该列添加记录,返回新生成的 NUMBER 键。或者在获得现有的 VARCHAR 时返回现有的 NUMBER 键(它不会插入它,这当然会由于 uniq 键冲突而引发异常)。

这样的过程将由许多并行工作的(Java)客户端执行。

希望我的英语是可以理解的:)

最好的方法是什么(也许使用 PL/SQL 块而不是 Java 代码......)?

4

1 回答 1

2

我不认为你可以做得更好

  1. SELECT the_number FROM the_table where the_key = :key

  2. 如果找到,返回它

  3. 如果没有找到,INSERT INTO the_table SELECT :key, the_seq.NEXT_VAL RETURNING the_number INTO :number并且COMMIT

  4. 如果时间不走运,这可能会引发 ORA-00001(重复主键插入)。在这种情况下,SELECT再次。

不确定 JDBC 是否支持 RETURNING,因此您可能需要将其包装到存储过程中(也可以节省数据库往返)。

您可以使用索引组织的表(以 the_key 作为主键),使查找更快。

于 2009-12-09T08:59:31.513 回答