【问题标题】:dictionary data insert or select (oracle, java)字典数据插入或选择(oracle、java)
【发布时间】:2009-12-09 08:48:25
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 你对先尝试 INSERT 新记录,而不是在之前抛出异常时执行 SELECT 而不是?
  • 取决于您认为哪种情况更频繁。我假设你会更频繁地检索现有的单词而不是添加现在的单词。如果您主要是添加新的,那么可以,请先尝试 INSERT。

标签: java oracle jdbc key unique-key


【解决方案1】:

我不认为你可以做得更好

  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 :numberCOMMIT

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多