sql - كيفية استرداد معرف زيادة السيارات باستخدام البقعة/بلينسكل؟



scala jdbc (2)

أليس هناك حل البقعة / بلينسكل الأصلي لاسترداد معرف السيارات المتزايدة من إنزيرت الحالي؟

أوسيريد هو حقل تدريجي السيارات في بلدي الجدول ميسكل.

sql"""
   INSERT INTO `table`(`email`) 
   OUTPUT INSERTED.userId 
   VALUES ("[email protected].de")
""".as[Int].firstOption

مساعدة سيكون موضع تقدير كبير.

هتاف أوليفر


يعتمد على قاعدة البيانات.

ل مس سكل انها SCOPE_IDENTITY ()، ل ميسكل انها LAST_INSERT_ID (). حاول البحث عن مكافئ لقيمة دب إذا لم يكن أي مما سبق.

تمت إضافته بواسطة كفوغت :

لا يوجد حاليا ميزة بنيت في بقعة ل سكل عادي لهذا ولا توجد وسيلة للوصول إلى بيان جدبك الأساسي عند استخدام StaticQuery sql"..." الاستيفاء أو StaticQuery ، والتي من شأنها أن تسمح لك بالوصول إلى getGeneratedKeys . هل يمكن ربما تصحيح إنتيربولاتور سكل و ستاتيونينفوكر للسماح بذلك. وهي 150 لوك فقط. ربما يستحق إعطاء النار وتقديم العلاقات العامة.

ومع ذلك، يمكنك استخدام إحدى أساليب جلسة العمل مثل withPreparedInsertStatement ، التي withPreparedInsertStatement طرق اتصال جدبك للعمل مع عبارة جدبك. أنا خلقت بيأر لإضافة وثائق حول هذا: https://github.com/slick/slick/pull/691


شكرا لك كفوغت للمساعدة في هذه المناقشة. وأعتقد أنه سيكون من المفيد تقديم العلاقات العامة، بقدر ما هو وظيفة شائعة جدا ومفيدة التي لا ينبغي أن تكون مفقودة في الاستفسارات بلينسكل البقعة .

وأخيرا، وجدت العمل حول لتحل محل وظيفة الأصلية المفقودة على النحو التالي.

وفي نفس الجلسة، أقوم بتسوية استعلامين. الأول هو SELECT LAST_INSERT_ID() ، البيان الثاني هو SELECT LAST_INSERT_ID() الذي يقوم بإرجاع أحدث قيمة تم إنشاؤها تلقائيا تم تعيينها لعمود AUTO_INCREMENT بواسطة AUTO_INCREMENT (1) الذي تم تنفيذه مؤخرا. مزيد من التفاصيل هنا: ميسكل المرجع - LAST_INSERT_ID ()

Database.forDataSource(dataSource).withDynSession {
  sqlu"""INSERT INTO `users`(`email`) VALUES ("[email protected].de")
  """.firstOption match {
    case Some(num) if num == 1 => sql"SELECT LAST_INSERT_ID()".as[Long].firstOption()
    case None => None
  }
}

هذا يعمل بالنسبة لي الآن. إذا كان هناك أي تحسينات، لا تتردد في نشر الحل الخاص بك.





slick