سؤال

لقد قمت ببناء أداة استعلام صغيرة لـ Oracle باستخدام Oraclecommand و OracledataAdapter. يقوم المستخدمون فقط بإدخال استعلام كامل (لا توجد معلمات) ، وتنفيذها وتظهر النتائج في DataGridView. حتى الآن جيد جدًا ، على الرغم من أنني جربت استعلامًا غير صالح ، على سبيل المثال:

SELECT * FROM mytable WHERE dateColumn = '1-JAN-10'

هذا الاستعلام غير صالح SQL لـ Oracle. يجب عليك استخدام وظيفة TO_DATE () لمقارنة مع الحرفية التاريخ. يرفض مطور SQL أيضًا ذلك ، لكن أداة الاستعلام الخاصة بي تعمل بطريقة ما. هل هذا يعني أن Oraclecommand الخاص بي هو بعض المعالج هنا أم أنني أفعل شيئًا خاطئًا؟ أيضًا ، هناك طريقة لحذف هذا السلوك لأن الغرض من الأداة هو اختبار الاستعلامات ، والتي يجب أن تعمل دائمًا ...

شكرًا

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

المحلول

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

يبدو أن لديك مختلفًا NLS_DATE_FORMAT في بيئة الأداة الخاصة بك إلى تلك في SQL Developer ، أو يتم تعيين تنسيق تاريخ الجلسة ضمنيًا بواسطة Oraclecommand.

تستطيع select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT' لمعرفة ما هو عليه من SQL*Plus و SQL Developer ، ومن أدتك ؛ و من nls_database_parameters لمعرفة ما هو تجاوز قاعدة البيانات الافتراضية.

يبدو أن أداتك قد يكون لها DD-MON-RR وأنت تتوقع تنسيقًا آخر في مكان آخر ، ولكن دون التحقق من تلك الجداول ، من الصعب تحديد مكان استخدام قاعدة البيانات الافتراضية وأين تتجاوزها على مستوى الجلسة. أعتقد أن هذا هو الافتراضي DB ولديك تجاوز في بيئاتك الأخرى.

من مطور SQL ، حاول alter session set nls_date_format='DD-MON-RR'; ثم أعد تشغيل استعلامك غير الصحيح - يجب أن تعمل هناك أيضًا.

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