سؤال

لدي جدول (في Oradb) يحتوي على عمودين: Varchar Key Key ورقم فريد من نوعه الناتج عن التسلسل.

أحتاج إلى رمز Java الخاص بي لاستمرار (وبالتوازي) إضافة سجلات إلى هذا العمود كلما أصبح مفتاح Varchar جديد، وإرجاع مفتاح الرقم الذي تم إنشاؤه حديثا. أو إرجاع مفتاح الرقم الموجود عندما يحصل على varchar موجود (لا يدخله بعد ذلك، من شأنه أن يرمي استثناء بالطبع بسبب انتهاك المفتاح UNIQ).

سيتم تنفيذ هذا الإجراء من العديد من العملاء (Java) الذين يعملون بالتوازي.

آمل أن لغتي الإنجليزية مفهومة :)

ما هو الأفضل (ربما باستخدام كتلة PL / SQL بدلا من رمز Java ...) طريقة للقيام بذلك؟

هل كانت مفيدة؟

المحلول

لا أعتقد أنك تستطيع أن تفعل أفضل من

  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 يدعم العودة، لذلك قد تحتاج إلى لفه في إجراء مخزن (يحفظ أيضا دائرة الاستعداد لقاعدة البيانات).

يمكنك استخدام جدول منظم مؤشر (مع the_key كإجراء أساسي)، يجعل البحث بشكل أسرع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top