الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Temporary Tables

مغلق
بدأه ayman_zaki في 24 يناير 2003 · 5 رد · 936 مشاهدة · في قواعد بيانات Oracle
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

لنفترض أنه قد طلب منك تكوين تقرير(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 لهذا الجدول فإنه يتم أخذ تعريفه فقط دون البيانات المؤقتة.

و الحمد لله رب العالمين....

#2

إضافة : إذا كنتDBA و أردت معرفة الجدول ما إذا كان مؤقتاً، و فترة بقاء البيانات فيه، فيمكنك معرفة ذلك من العمودين TEMPORARY & DURATION في ال DBA_TABLES VIEW...

كما أن ON COMMIT DELETE ROWS هي الحالة الإفتراضية

#3

تحياتي للجميع

والله يا اخ ايمن تراك تكلمت عن موضوع مهم وحساس جدا

لم اكن اتوقع مثل هذا موجود في اوراكل

جزاك الله خير

ونفع الناس بعلمك

;)

#4

سؤال على الموضوع:

في أي نوع من الsegments يتم تخزين البيانات المؤقتة إذا لم يتوفر لها المساحة المطلوبة في الذاكرة ضمن الPGA؟

(على فكرة،هذا السؤال من ضمن اسئلة الOCP -للمهتمين ;) - )

يالله لا تخجلونا قدام الشباب!!!!

#5

السام عليكم

TEMPRORY SEGEMENT

#6

الاجابة صحيحة للأخت شيماء... مع الشكر

هذا الموضوع مغلق.

مواضيع مشابهة