سؤال

لنفترض أنك تقوم بإنشاء DDL لإنشاء جميع جداول DB الخاصة بك وما إلى ذلك عبر مخطط Hibernate وما إلى ذلك. ليست مشكلة ، كما أريد هذا. لكن تشغيل هذا البرنامج النصي ينتج حمولة من أخطاء ORA-00942 التي تعمل على Oracle DB.

نظرًا لأنها ليست أخطاء حقًا إذا لم تكن الجداول موجودة بعد ، فأود أن يكون برنامج Create Crimp خاليًا من الأخطاء عند تنفيذه ، لذا فمن السهل تحديد ما فشل (إن وجد).

ما هي خياراتي؟ أريد أن يتم إنشاء عبارات إسقاط نظرًا لأن الجداول قد تكون موجودة أو غير موجودة بعد ، لكنني لا أريد مليون ORA-S تعود إليّ والتي يجب أن أتحقق منها (لتحديد ما إذا كانت أخطاء فعلية) لمجرد أنها لا يمكن أن تكون كذلك. T إسقاط طاولة جديدة.

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

المحلول

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

IF EXISTS(SELECT NULL 
            FROM TABLE_XYZ) THEN
  DROP TABLE TABLE_XYZ;
END IF;

نصائح أخرى

"لنفترض أنك تنشئ DDL لإنشاء جميع جداول DB الخاصة بك وما إلى ذلك عبر مخطط Hibernate Export وما إلى ذلك. -00942 أخطاء تعمل على Oracle DB. "

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

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

PROMPT  It is safe to ignore any ORA-00942 errors in the following statements

يحتوي البرنامج النصي الثاني على جميع عبارات جدول الإنشاء ويؤدي معها

PROMPT  All the statements in this script should succeed.  So investigate any errors

خيار آخر هو استخدام قاموس البيانات:

begin
    for r in ( select table_name from user_tables )
    loop
        execute immediate 'drop table '||r.table_name
                    ||' cascade constraints';
    end loop;
end;

كن حذرا مع هذا. إنه الخيار النووي وسيسقط كل جدول في مخططك.

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