سؤال

لقد اضطررنا مؤخرًا إلى القيام ببعض الأعمال باستخدام قاعدة بيانات OpenEdge التي يستخدمها منتج تابع لجهة خارجية، واليوم (بعد الكثير من البحث)، حددنا أخيرًا سبب عدم ظهور أي نتائج في طريقة العرض.يجمع هذا العرض المعني حوالي 100 جدول منفصل، ثم يتم الاستعلام عنه (لدينا حقوق محدودة في قاعدة البيانات هذه).أحد الحقول التي يتم إرجاعها بواسطة طريقة العرض هذه عبارة عن سلسلة حرفية مشفرة، على غرار

'John Smith' AS TheName

كنا نواجه صعوبة في تشغيل الاستعلامات التي تتضمن هذه السلسلة، والتي كنا نحاول RTrim (عرض العرض الكثير من المسافات الزائدة) ثم ربطها بحقل آخر.ومع ذلك، إذا استخدمنا RTrim في هذا الحقل، فبدلاً من إرجاع رسالة خطأ أو قيمة خالية أو شيء من هذا القبيل، لم يتم إرجاع الصف ببساطة.لم نكن نحاول استخدامه في جملة WHERE أو JOIN، بل كان هذا ببساطة جزءًا من SELECT ...من اسم العرض.بعد مراجعة العرض، بدا أن العرض قد اكتشف عن طريق الخطأ طول السلسلة المكونة من 9 أحرف (لم يتم تحديد طول في التعريف)، ولم يعمل RTrim.الآن، أستطيع أن أفهم لماذا قد يؤدي ذلك إلى ظهور رسالة خطأ، أو قيمة NULL في SELECT، ولكن لماذا ببساطة لا يتم إرجاع الصف على الإطلاق؟لا يبدو هذا سلوكًا جيدًا لـ SQL ولم أره يحدث مطلقًا مع أي نظام RDBMS آخر.

معلومات اخرى :نحن نقوم باختبار الاستعلام عبر ODBC وWinSQL، بهدف تضمين ذلك في تطبيق ASP.NET موجود.ليس لدينا إمكانية الوصول إلى الواجهة الخلفية إلا من خلال هذا، على الرغم من أن لدينا حقوق إنشاء طرق العرض.

تحديث :كمتابعة غريبة، اكتشفنا الآن أنه إذا حاولنا الاستعلام عن طريقة العرض هذه دون أي عبارة WHERE، فلن يتم إرجاع أي سجلات.وهذا قد يكون له نفس السبب.

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

المحلول

يبدو أن هذا قد يكون مرتبطًا بـ SQL-WIDTH داخل قاعدة بيانات التقدم.إحدى مشكلات التقدم هي أنه إذا تجاوز محتوى الحقل عرض SQL، فسوف تحصل على سلوك SQL غريب (في بعض الأحيان قد يفشل برنامج التشغيل، وفي أحيان أخرى لن تحصل على أي نتائج).

لتحديد هذا تحتاج إلى استخدام dbtool أمر للتحقق من SQL-WIDTH التي قد يتم تجاوزها.

نصائح أخرى

تأكد من عدم وجود فراغات لديك.التشذيب لا يزيل الفراغات فقط المسافات.الفراغات ليست أيضًا فارغة.يوجد اختلاف في مجموعة الأحرف بينما لا يكون مختلفًا بشكل واضح في المحرر الخاص بك.لقد واجهت هذا مع عدد قليل من قواعد البيانات، DBII، Oracle، PostGreSQL.تحقق من مجموعة الأحرف الخاصة بالمحرر الخاص بك وحاول عرض الجداول، فقد لا ترى شيئًا أو قد ترى مستطيلات كبيرة.

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

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