سؤال

وهناك القليل من المعلومات الأساسية أولا. شركتي هو تقييم ما إذا كنا سوف يهاجر قاعدة بيانات ينفورميكس جهدنا لأوراكل 10g. لدينا العديد من البرامج ESQL / C. لقد شغلت بعض من خلال منضدة الهجرة أوراكل وتم التخبط بعض التجارب. الآن جئت لتحقيق بعض الأشياء.

أولا، لدينا عبارات SQL الحيوية التي لا يتم التعامل مع القيم الخالية على الإطلاق. من ما قرأت، وأنا إما أن تعديل الاستعلامات يدويا إلى الاستفادة من وظيفة NVL () أو تنفيذ متغيرات المؤشر. يمكن للشخص تأكيد ما اذا كان من الضروري إجراء تعديلات يدوية؟ أقل قدر من التغييرات اليدوية لدينا لجعل لدينا برامج ESQL / C تحويلها، كان ذلك أفضل.

وثانيا، لدينا العديد من الاستفسارات التي سحب التمور من مختلف الجداول وما إلى ذلك، وفي ينفورميكس يتم التعامل مع مواعيد كنوع طويلة، و# الأيام منذ 31 ديسمبر، 1899.

في برو * C، ما شكل هو التاريخ الذي اختار على النحو؟ أنا أعلم أنها ليست رقمية لأنني حاولت اختيار حقل التاريخ إلى متغير بلدي طويلة والحصول على خطأ أوراكل قائلا "العدد المتوقع ولكن حصلت على التاريخ". لذلك أفترض أن علينا أن تعديل الطريقة التي يتم اختيار حقول التاريخ - إما تحديد حقل التاريخ بطريقة المحولة حتى يصبح طويلا (أي # الأيام منذ 1899/12/31)، أو تغيير المضيف متغير لتتناسب مع ما أوراكل يعود (ما هي، سلسلة؟).

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

المحلول

في أجل تحويل تواريخ أوراكل (والتي هي مخزن في التنسيق الداخلي أوراكل) إلى عدد صحيح طويل، وسوف تحتاج إلى تغيير استفساراتك. استخدام الصيغة التالية لتواريخ:

to_number (to_char (date_column, 'J')) - to_number(to_char(to_date('12/31/1899', 'MM/DD/YYYY'), 'J'))

ونظام أوراكل J '(للتاريخ جوليان) شكل هو إحصاء عدد الأيام منذ 31 ديسمبر، 4712BC. إذا كنت ترغب في عد من موعد لاحق، سوف تحتاج إلى طرح قبالة العد يوم جوليان من ذلك التاريخ في وقت لاحق.

واقتراح واحد: بدلا من تغيير جميع الاستفسارات الخاصة بك في البرامج الخاصة بك (والتي قد تخلق مشاكل وإدخال البق)، إنشاء مجموعة من وجهات النظر في مخطط مختلف. أن هذه الآراء الكشف عن اسمه نفس كافة الجداول، مع كل نفس الأعمدة، ولكن تتضمن NVL () وتاريخ () الصيغ (مثل أعلاه). ثم أشر طلبك في مخطط عرض بدلا من مخطط الجدول الأساسي. أقل بكثير الاختبار وأماكن أقل لشيء مفقود.

وهكذا على سبيل المثال، وضعت كل ما تبذلونه من الجداول في مخطط يسمى "APPS_BASE" (المعرفة من قبل المستخدم "APPS_BASE" ثم خلق آخر مخطط / المستخدم يسمى "APPS_VIEWS" في APPS_VIEWS إنشاء طريقة عرض:.

CREATE OR REPLACE VIEW EMP AS
SELECT name, birth_date
FROM   APPS_BASE.EMP;

نصائح أخرى

ويا. سوف تحتاج إلى تعديل استفساراتك كما وصفته أنت.

ومتى يتم تنطلق لكم. طويل له معنى مختلف في أوراكل. هناك نوع موعد محدد. عموما عند اختيار واحد يستخدم الدالة TO_DATE مع الشكل، للحصول على النتيجة كما VARCHAR2، بالضبط في الشكل الذي تريد.

وربما أنها لم تصل إليك بعد ولكن تكون على علم بأن تفريغ في أوراكل الحقول VARCHAR2 هي القيم الخالية. لا أرى المنطق وراء هذا (ربما لأن جئت من أرض ينفورميكس) - مجرد أنها تبقي في الاعتبار. وأعتقد أنه من الغباء - سلسلة فارغة IMHO هي ذات مغزى ومختلفة عن NULL

.

وإما تعديل كل ما تبذلونه من الحقول VARCHAR2 أن NOT NULL DEFAULT '-' أو أي قيمة أخرى التعسفي، أو بمؤشرات استخدامها في جميع استفساراتك التي ترجع حقول VARCHAR2، أو دائما استخدام NVL().

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