هل هناك أي نوع بيانات قائمة في إجراءات MySQL المخزنة، أو طريقة لمحاكاتها؟

StackOverflow https://stackoverflow.com/questions/8795

  •  08-06-2019
  •  | 
  •  

سؤال

أرغب في إنشاء إجراء مخزن في MySQL يأخذ القائمة كوسيطة.على سبيل المثال، لنفترض أنني أرغب في تعيين علامات متعددة لعنصر ما في مكالمة واحدة، فإن ما أريد القيام به هو تحديد إجراء يأخذ معرف العنصر وقائمة العلامات لتعيينها.ومع ذلك، يبدو أنني لا أستطيع العثور على أي طريقة للقيام بذلك، فلا يوجد نوع بيانات قائمة، على حد علمي، ولكن هل يمكن محاكاته بطريقة ما؟هل يمكن أن تكون قائمة العلامات عبارة عن سلسلة مفصولة بفواصل، والتي يمكن بطريقة ما تقسيمها وتكرارها؟

كيف تعمل عادة مع القوائم في إجراءات MySQL المخزنة؟

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

المحلول

هذا تحتوي المقالة على بعض المناقشات الجيدة حول مشكلة تحليل صفيف إلى إجراء مخزن نظرًا لأن الإجراءات المخزنة تسمح فقط بأنواع بيانات أعمدة الجدول الصالحة كمعلمات.

هناك بعض الأشياء الرائعة التي يمكنك القيام بها باستخدام ملف CSV نوع الجدول في MySQL - هذا إذا كنت تقوم بتحميل ملف ثابت في قاعدة البيانات.

يمكنك إنشاء جدول مؤقت في الإجراء المخزن، والتكرار فوق قائمة CSV وإدراجه في الجدول المؤقت، ثم إنشاء مؤشر يحدد القيم من هذا الجدول.هذا إجابة في الموضوع المذكور أعلاه يظهر طريقة للقيام بذلك.

بشكل عام، أقوم بتقسيم المصفوفة قبل أن أصل إلى قاعدة البيانات ثم أقوم بإجراء الاستعلام بشكل فردي على كل عنصر.

نصائح أخرى

اعتمادًا على مدى التعقيد الذي تريد تحقيقه، يمكنك استخدام جدول ربط عام.بالنسبة لأحد تطبيقاتي، هناك العديد من التقارير التي يمكن للمستخدم اختيارها، على سبيل المثال، قائمة العملاء لتشغيل التقرير بدلاً من مجرد عميل واحد من مربع التحرير والسرد.لدي جدول منفصل به حقلين:

  • المعرف الفريد (الدليل)
  • معرف العنصر

يبدو الكود الزائف كما يلي:

GUID guid = GenerateGUID()
try
  for each customer in customerList { INSERT(guid, customerId) }
  ExecuteSQLPocedure(guid)
  --the procedure can inner-join to the list table to get the list
finally
  DELETE WHERE UniqueID=guid      

في لغة البرمجة المفضلة لدي، C#، أفعل هذا بالفعل في التطبيق نفسه لأن وظائف وحلقات التقسيم () أسهل في البرمجة في C# ثم SQL، ومع ذلك!

ربما يجب عليك أن تنظر SubString_Index () وظيفة.

على سبيل المثال، سيُرجع ما يلي google:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.google.com', '.', -2), '.', 1);

لست متأكدًا مما إذا كانت هذه ستعمل بشكل خاص في SP، ولكن هناك أنواع بيانات ENUM وSET في MySQL 5 والتي قد تفعل ما تحتاجه.http://dev.mysql.com/doc/refman/5.0/en/enum.html http://dev.mysql.com/doc/refman/5.0/en/set.html

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