قاموس البيانات إدراج أو اختيار (Oracle، Java)
-
18-09-2019 - |
سؤال
لدي جدول (في Oradb) يحتوي على عمودين: Varchar Key Key ورقم فريد من نوعه الناتج عن التسلسل.
أحتاج إلى رمز Java الخاص بي لاستمرار (وبالتوازي) إضافة سجلات إلى هذا العمود كلما أصبح مفتاح Varchar جديد، وإرجاع مفتاح الرقم الذي تم إنشاؤه حديثا. أو إرجاع مفتاح الرقم الموجود عندما يحصل على varchar موجود (لا يدخله بعد ذلك، من شأنه أن يرمي استثناء بالطبع بسبب انتهاك المفتاح 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 يدعم العودة، لذلك قد تحتاج إلى لفه في إجراء مخزن (يحفظ أيضا دائرة الاستعداد لقاعدة البيانات).
يمكنك استخدام جدول منظم مؤشر (مع the_key كإجراء أساسي)، يجعل البحث بشكل أسرع.