[英]dictionary data insert or select (oracle, java)
我有一个包含两列的表(在ORADB中):VARCHAR唯一键和从序列生成的NUMBER唯一键。
每当需要新的VARCHAR键时,我都需要Java代码不断(并并行)向该列添加记录,并返回新生成的NUMBER键。 或在获取现有VARCHAR时返回现有的NUMBER键(然后不插入该键,由于uniq键违规,这当然会引发异常)。
这样的过程将从许多并行工作的(Java)客户端执行。
希望我的英语是可以理解的:)
什么是最好的方式(也许使用PL / SQL块而不是Java代码...)?
我不认为你可以做得更好
SELECT the_number FROM the_table where the_key = :key
如果找到,将其退回
如果未找到,则INSERT INTO the_table SELECT :key, the_seq.NEXT_VAL RETURNING the_number INTO :number
并COMMIT
如果时机不佳,则可能会产生ORA-00001(重复的主键插入)。 在这种情况下,请再次SELECT
。
不知道JDBC是否支持RETURNING,因此您可能需要将其包装到存储过程中(还保存数据库往返)。
您可以使用索引组织的表(以the_key作为主键),从而使查找速度更快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.