هل فكرت في يوم من الأيام كيف تستطيع مشاركة بيانات بين أكثر من قاعدة بدون إستخدام 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');
);
(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 …….. )
(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');
);
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.
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')
);
( 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')
);
و بذلك نكون قد انتهينا ....
بالتوفيق