الجداول الخارجية External Tables :
هل فكرت في يوم من الأيام كيف تستطيع مشاركة بيانات بين أكثر من قاعدة بدون إستخدام Shared Tablespace أو إستخدام Database link أو Replication كما شرحنا في موضوع إدارة قواعد البيانات ؟؟؟؟
؟؟
هل فكرت يوماً أن يقوم مستخدموك الذين لا يعلمون شيئاً عن SQL أو أصابوك بنوبات قلبية و أنت تعلمهم تعليمة Insert و كيفية تنفيذها بالشكل الأفضل ؟؟؟؟؟؟
بل هل فكرت كيفية الحفاظ على بياناتك عند إجراء عملية الفرمتة مثلاً دون اللجوء إلى عمليات Backup المملة ؟؟؟
هل تريد أن تكون البيانات على مرأى منك بحيث تستطيع فتح ملف نصي مثلاً لتجدها داخله ؟؟؟
الإجابة عن التساؤلات السابقة هي عنوان درسنا : الجدوال الخارجية External Tables ...
الجداول الخارجية في الحقيقة هي عبارة عن ملفات خارجية تحوي البيانات بتنسيق معين ، بمعنى أن البيانات ليست موجودة داخل القاعدة كما تعودنا على الجداول العادية التي نقوم بإنشائها بالتعليمة المعتادة create table و إنما موجودة داخل ملف نصي مكتوب كما ذكرنا بتنسيق معين ، بحيث أي تعليمة Select يقوم بها المستخدم ستتم قراءة هذا الملف و إحضار البيانات منه ...
على الرغم من مميزات الجداول الخارجية فإنه لديها بعض السيئات ، مثل أن المستخدم لن يكون قادراً عل تنفيذ عملية insert ( يمكنا حل هذه المشكلة بإستخدام utl_file للكتابة على هذه الملفات ) إضافة إلى أن ملف البيانات ليس عليه رقيب و بالتالي يمكن تعديله و العبث بمحتوياته ..
كيف نستطيع إنشاء External Tables ؟؟
يتم إنشاءها بواسطة التعليمة :
Create table table_name
(col_name datatype …….. )
organization external
(type oracle_loader
default directory Directory_name
acess Parameters
(records delimited by "What you Want "
fields terminated by "What you want "
( col_name Datatype [,………. ]
)
location ('Thefile.ext');
);مملة و مضجرة !!!!!!!!!!!!!
سأشرحها :
1-
Create table table_name (col_name datatype …….. )
هو الجزء الخاص بإنشاء الجدول و هي تعليمة create التي يعلمها الجميع ..
2-
default directory Directory_name
و هنا نحدد Directory ... مهلاًً ما معنى هذا ؟؟
من يتعامل مع مايسمى بــLob يعلم بالتأكيد ما هو Directory ..
بكلمات بسيطة : أرادت أوراكل مع إدخال أنماط Lob بأنواعها Bfile و Blob أن تمنح ميدري القاعدة نوعااً من السيطرة على أماكن تواجد الملفات التي يتم تخزينها داخل القاعدة Blob أو إضافة مؤشر لها BFILE و ذلك عن طريق تحديد مجلدات معينة بحد ذاتها من أجل أن تكون مكاناً لتخزين هذه الملفات ، و بالطبع كانت أغراض Directory هي الوسيلة لتنفيذ ذلك ...
كيف يتم إنشاء Directory ؟؟
يجب على المستخدم أن يملك صلاحية Create Directory من أجل إنشائه ( هذه الصلاحية لا يملكها المستخدم SCOTT ) ..
تعليمة الإنشاء :
Create Directory Dir_name as 'Directory Path';
و عند إنشاءه نعطي الصلاحية للمستخدمين لكي يقوموا بعملية القراءة من هذا المجلد :
grant read on dir_name to scott;
3- نأتي على الجزء الأهم و هو access Parameter
(records delimited by "What you Want "
fields terminated by "What you want "
( col_name Datatype [,………. ]
)
location ('Thefile.ext');
);نحدد أولاً ما هو الفاصل بين كل سجل و آخر و ذلك عن طريق
records delimited by "What you Want "
و يمكننا أن نضع newline للدلالة على أن كل سطر يعبر عن سجل ..
ثم نحدد ما هو الفاصل بين القيم ضمن السجل
fields terminated by "what you want";
ثم نحدد ترتيب تتالي هذه القيم :
( col_name Datatype [,………. ] )
و أخيراً نحدد اسم الملف مع لاحقته الموجود داخل Directory الذي قمنا بإنشائه و الذي يحوي البيانات :
location ('Thefile.ext');ما رأيكم بمثال :
لننشىء جدولاً خارجياً يحوي على معلومات طلاب داخل مدرسة ما ..
1- ننشىء ملف نصي و لنقل studentInformations.CSV داخل المجلد c:\myexternalTable ، بحيث نلتزم بالتنسيق :
FirstName , LastName , FatherName
و هو التنسيق CSV الذي يمكننا إنشاؤه بواسطة Excel ... مثال
أحمد ,الأتاسي,عمر محمد,النكدلي,سامر ماهر,القاسم ,عبد المعين مجد,الناصر,قاسم
2- نقوم بتسجيل الدخول كــSystem أو sys لنقوم بإنشاء Directory :
SQL> create directory externalTable as 'C:\myExternalTables'; Directory created. SQL> grant read on directory externalTable to public; Grant succeeded. SQL> grant write on directory externalTable to public; Grant succeeded.
3- لنسجل الدخول الآن بواسطة المستخدم Scott و ننشئ الجدول الخارجي :
Create table ExternalStudentsTable ( name varchar2(15 ) , fname varchar2(15) , lastname varchar2(15) ) Organization external (type ORALCE_LOADER Default directory externalTable Access parameters ( Records delimited by newline Fields terminated by "," (name char(15 ) , Lastname char(15) , Fname char (15 ) ) ) Location ( ' studentinformations.csv') );
و بذلك نكون قد انتهينا ....
بالتوفيق