بسم الله الرحمن الرحيم
لنفترض أنه قد طلب منك تكوين تقرير(report) معقد نوعاً ما، بحيث أن المعطيات المعالجَة تحتاج إلى تخزين مؤقت في جدول، و من ثم تعرض النتائج اعتماداً على هذا الجدول.(كما يحدث في أغلب الأحيان مع مطوري البرامج
المحاسبية) علماً بأن البيانات الموجودة في ذلك الجدول تكون صالحة فقط عند تنفيذ ذلك التقرير، وبالتالي يجب أن تلغى فوراً و ذلك حرصاً على عدم إختلاطها مع أي بيانات جديدة عند تنفيذ التقرير مرة أخرى.
بصراحة، شغلتنا هذه النقطة كثيراً أنا و إخواني عندما كنا نعد لمشروع التخرج، واعتبرنا أن هذه العمليات
(الوسيطية) واستخدامنا لجدول عادي يقوم فقط بحفظ بيانات مؤقتة ( و إلغاء هذه البيانات باستخدام تعليمة DELETE FROM table_name بعد تنفيذ التقرير) ضعفاً برمجياً، وأخذنا نبحث عن حيل كثيرة لتفادي هذه الطريقة(الضعيفة). ولن أخفي عليكم، فإن أحد إخواني ما زال مصراً على برمجة هذه التقارير دون اللجوء إلى الجداول ، على الرغم من مرور سبعة شهور على تسليمنا المشروع:confused:!!!
وعندما(تعمقت) قليلاً في oracle، فوجئت بوجود ما يدعى بال temporary tables مخصصة تماماً لحالتنا ، وأريد هنا أن أشرح قليلاً مما تعلمته، لعل صديقي يرضى بها:
يتم تكوين الجدول المؤقت باستخدام التعليمة التالية:
CREATE GLOBAL TEMPORARY TABLE table_name (col1 datatype1, col2 datatype2 ) ON COMMIT [DELETE ROWS | PRESERVE ROWS]
إن تعريف الجدول المؤقت مشابه للجدول العادي المألوف لدينا، وبالإضافة إلى ذلك يمكننا تعريف indexes ، views و حتى triggers عليه.
يمكن للبيانات المؤقتة في الجدول:
1. أن تبقى حتى آخر ال transaction، أي عند كتابة commit، وبالتالي يجب إختيار ON COMMIT DELETE ROWS
2. أو أن تبقى حتى نهاية الsession ، عندها تختار
ON COMMIT PRESERVE ROWS
ويبقى لك أن تعرف بقية الميزات :
- إذا اشترك أكثر من session معاً قي استخدام هذا الجدول، فإن كل session يرى الأسطر الخاصة به فقط. يعني بفرض قام المستخدم بعمل truncate للجدول المؤقت فإن أسطره فقط هي التي ستلغى.
إذاً يمكن لأكثر من مستخدم تنفيذ نفس التقرير معاً دون حدوث أي مشكلة.
- وبالتالي (كنتيجة) لا يوجد أي نوع منDML locks على الجدول المؤقت(اي لا توجد أي فترات تأخير ممكنة)
- إن أي عمليات DML على هذا الجدول لا تولد redo log entries (أيضاً معالجة أسرع!!)
- عند عمل export لهذا الجدول فإنه يتم أخذ تعريفه فقط دون البيانات المؤقتة.
و الحمد لله رب العالمين....