اولا :
Char وهو الخاص بالنصوص ....
اذا قال لك ان حقل ENAME من نوع CHAR(10) مثلا , فماذا تعني ؟؟
تعني ان الحقل ENAME نوعه نص , ويستوعب كحد أقصى 10 حروف للاسم الواحد !!
طيب واحد اسمه LEE هل يستوعبه ؟ نعم .... لأنه اقل من او تساوي 10
طيب واحد اسمه SADFJAPJFASDPJF هل يستوعبه الحقل ؟ لا يستوعبه لان الحروف اكبر من 10 ...
ثانيا :
Varchar2 هذا الخاص بالنصوص ايضا ...
نفس الفكرة تخيل ان حقل ENAME من نوع VARCHAR2(10) فهذا يعني انه يستوعب 10 حروف للاسم الواحد .
في الحقيقة ... انه بينهما فرقين ... الفرق الاول .. الحجم ,
الـ
char يأخذ كحد أقصى 2000 حرف أي اننا لو قلنا CHAR(2000) فهو صحيح , ولو قلنا CHAR(2001) فهو خطأ ,مالحل ؟؟ مالعمل ؟؟ نريد 2001 حرف !! مثلا لحقل العنوان !! .... الحل هو الـ varchar2 والذي يأخذ كحد أقصى 4000 حرف
الفرق الثاني , في الحقيقة انني لم افهمه , لأنه اولا لا يوجد عليه مثال في منهجين مختلفين !! يقولون ولا يمثلون او يشرحون , لذا فسوف ابحث فيها فيما بعد ان شاء الله , لن يرتاح لي بال حتى ارى ما كان قصدهم فيه !! فانتظرني .
ثالثا :
number
وهي للأرقام طبعا , مثلا حقل الرواتب
SAL فهو من نوع NUMBER(7,2) أي يكتب بهذه الصيغة :
Sal number(7,2)
ما معنى السبعة وما معنى الاثنين ؟؟؟؟
معنى السبعة ان حده الأقصى سبعة أرقام
!!
اما معنى الاثنين فهو كم عدد بعد الفاصلة العشرية ؟
أي بمعنى اخر العدد :
99999.99
عدد مقبول وهو صحيح .. لماذا لانه سبعة ارقام ..... عدها ... هل عددتها ؟
منها رقمين عشريين ...
طيب احدهم اضاف الى الحقل
sal هذا الرقم :
999999.9 هل هذا صحيح ؟؟
طبعا خطأ !!
لماذا ؟؟ صحيح انه سبعة ارقام .. ولكن يجب ان تنظر انه حدد خمسة ارقام للاعداد العشرية !!
كيف ؟
نحن قلنا ان حقل
sal من نوع number(7,2)
يعني 7-2=5
خمس اعداد صحيحة كحد اعلى ....
وعددين عشريين (الاعداد العشرية هي الاعداد التي يمين الفاصلة ) سوف يعرضان فقط !!
يعني اكبر عدد بامكاننا ان نضعه هو 99999.99 واصغر عدد طبعا 0.00
لو وضعنا مثلا 100000.00 فهو خطأ !!
طيب احدهم اضاف الى الحقل
sal هذا الرقم :
9999.999999999 هل هذا صحيح ؟؟
في الحقيقة انه صحيح لماذا ؟؟ ما هو السبب ؟ الم نقل ان حد الاعداد العشرية رقمين ؟؟
لماذا هذه صحيحة و شكلها خطأ !!
انا اخبرك ....
نحن حددنا ان الاعداد العشرية عددين صح ؟
طيب هو اوتوماتيكيا اذا شاهد اكثر من عددين عشريين فسوف يقربه !!
يقربه كيف ؟
انت قلت اننا وضعنا كحد اقصى عددين عشريين صح ؟
طيب انظر العدد هذا :
1.214235
سوف ينظر كم حددنا من اعداد عشرية ...
سوف يرى انها اثنين ,
سوف يرى العدد الثالث وهو الرقم 4
اكبر من او يساوي الخمسة ؟؟ لا
اذن كل الاعداد التي يمين العدد الثالث بما فيهم العدد الثالث ..... قص !!
ويصبح العدد 1.21
وسوف يخزن كما هو .... 1.21
طيب مثال اخر ....
1.425167
ينظر كم حد الاعداد العشرية ..
يجدها اثنين ....
ينظر الى العدد الثالث وهو الخمسة ....
هل اكبر من او يساوي خمسة ؟؟ نعم !!
اذن قص العدد الثالث وكل الاعداد التي يمينه واضف واحد للعدد الثاني
يصبح الناتج : 1.43
الان تخيل واحد قال
Sal number
ماذا يعني ؟؟ يعني ان الحقل
sal يستوعب عدد ضخم من الارقام يصل الى 127 رقم ... هل تعرف ما معنى 127 رقم ؟؟؟؟
يعني 99999999999999999......... افففف ... تعبت وانا اكتب !!!
يعني مئة وسبعة وعشرون ...... رقم تسعة بامكاننا ان نضعها !!
اما الاعداد العشرية . فحدث ولا حرج ...... لذا فهو يقرب بطريقة معقدة قليلا فتجاهل الوضع ....
الان ..... لو عندنا حقل ... أي حقل ... اسمه وليكن
any_column وهو رقم ...
اذا كنت تريد عرضه بشكل عادي ..... فاجعل دائما الاعداد العشرية اصغر من الاعداد الصحيحة ...
يعني المثال التالي صحيح
Any_column number(10,9)
اما لو وضعت :
Any_column number (9,10)
فمالذي سوف يحدث ؟؟
هذا تحدي ثاني
!! للمساعدة .. اعمل جدول جديد (سوف تعرف كيف في هذا الدرس )وبه هذا العمود واجلس جرب .. اضف قيم من عندك .....
رابعا :
date
وهو التاريخ , وما أدراك مالتاريخ , يستوعب أوتوماتيكيا
14712 ما قبل الميلاد الى 319999 ميلادي ...
كيف اتوماتيكيا ؟ يعني بدون ان نحدد له حد .. مثل ما فعلنا سابقا في CHAR(2000) مثلا , هو يكتب مجرد DATE.
خامسا :
LONG
مثلا اريد حقل يتكون من اكثر من 4000 , هل استخدم معه
VARCHAR2 ؟؟؟ طبعا لا
تستخدم الـLONG وطبعا لا يمكن تحديد عدد معين مثل CHAR(40) ولكن يكتب كما هو مجرد LONG مثل الـتاريخ .
الـ LONG يصل حده الى اكثر من 2000000000 (اثنين مليار) حرف !!!
لا اعلم لماذا وضعوه ولم اشاهد حقل نوعه LONG ولا اعتقد انني سوف اشاهده , لانه اكيد للمشاريع الضخمة جدا .
يكفي عليك هذه الانواع , ولا اخفيك انه يوجد اربع او خمس اخرى , ووالله لا اعرف اصلا في أي شيء تستخدم , ولكن لو تفرغت فسوف ابحث فيهم . ولكن معظمها للحقول ذو كمية استيعاب ضخمة جدا
لأغراض الصور والرسومات كبيرة الحجم .
الان نرجع لمحورنا الرئيسي .
الجداول ...
الان نستعرض أوامر لغة
DDL
DESC :
لاستعراض بناء جدول ما .
CREATE TABLE :
لإنشاء الجداول .
ALTER TABLE :
للتعديل في بناء الجدول .
RENAME TABLE :
لتعديل اسم الجدول
DROP TABLE :
لحذف الجدول نهائيا .
TRUNCATE TABLE
: لحذف السجلات !!؟؟
COMMENT
: لاضافة التعاليق التذكيرية على الجداول والاعمدة .
"
واو .. كثيرة ... معقدة .. صعبة !!
ماذا تفعل .. اترك الأوراكل ... انها صعبة جدا !! "
هذا قول بعضكم , انهم سارقو الطاقات !! انهم المحبطون لأنفسهم و محبطون لمن بجانبهم
.... انهم الهاضمين لحقوق انفسهم .... انهم المتشائمون .
تالله انها بسيطة , وسوف نسردها على السريع الطاير , ولن نكثر فيها الكلام لانها .... منطقية بالنظر ..
أي مشاكل راسلنا او اعرض مشكلتك في موضوع الاستفسارات .
الان ... نبدأ على بركة الله
الامر
DESC :
ما رأيك في الجدول
DEPT ؟؟؟
هل تذكره ؟؟؟
اعتقد ان له بعض الحقول منها DEPTNO وهو رقم , ولكن لا اعرف كم يستوعب , مارأيك ؟؟؟ هل نشاهد ذلك ؟ لنشاهد ذلك :
الامر الخاص بالكشف عن تركيب وبناء الجداول .. استخدمناه مع الجدول
DEPT
والنتيجة كانت
:
كود:
Name Null? Type
-------- -------- -------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
هل فهمت شيء ؟؟
يستعرض هنا اسماء الحقول
NAME في الجدول DEPT
وهل هذا الحقل من الممكن ان يكون فارغا ام لا
NULL?
ويستعرض ايضا نوعه TYPE , هل رقم هل نص , وكم يستوعب !!
لاحظ انه في الحقل DEPTNO يقول انه ليس من الممكن ان يكون فارغا (NOT NULL)
هل فهمت ؟
كيف اعرف ما اذا كان الحقل الفلاني مفتاح اساسي ام اجنبي ؟؟؟؟؟؟؟
هذا ما ستعرفه في الدرس القادم , ترقب
هذا كل شيء ,
’,’,’,’
ماذا تنتظر ؟؟؟ هيا جرب وانظر الى الجدول
EMP وانظر بنائه وتركيبه .
الامر
CREATE TABLE:
مثلا اريد ان أنشئ الجدول التالي :
اسم الجدول :
DEP
حقول الجدول :
DNO NUMBER(1)
DNAME VARCHAR2(10)
LOCATION VARCHAR2(12)
طبعا انا انتقيت الحد الاقصى لاسم الاقسام 10 حروف ..
وانتقيت الحد الاقصى للموقع .. وهو 11 حرف ..
وطبعا رقم القسم جعلته رقم
.... أي يستوعب 1 أو 2 أو ...... 9 فقط .
بالله عليك هل تعتقد ان هذه الارقام اتت عبطا ؟؟؟
طبعا بالمنطق فكر ... ما هو الاسم الاطول الذي من الممكن ان يكون في هذا الحقل ؟
يعني مثلا رقم القسم ... لو جعلته ثلاثة ارقام , هل ينفع ؟؟ طبعا ينفع , ولكن لماذا اجعله ثلاث ارقام (ثلاث ارقام أي كحد اقصى 999) وانا اعرف انه لا يوجد لدي الا بضع اقسام يمكن اربع او ستة اقسام ... واذا كثرت تسعة اقسام كحد اقصى ؟؟
لماذا التهم الذاكرة وابطيء من عمل النظام ؟؟ لا تستغرب !! تخيل اننا نلعب في نظام ضخم جدا , وبه مليارات السجلات , وانت تأتي يا باش مهندس , وتضيف خانة رقم او خانتين على الفاضي بدون أي تفكير منطقي ؟؟؟
مالذي تتوقعه ان يحدث ؟؟
انتبه لهذه المسألة .
الان نريد ان نعمل الجدول السابق ... اليك الامر :
كود:
create table dep (
dno number(1),
dname varchar2(10),
location varchar2(11) );
والنتيجة :
كأنه يقول "اعمل جدول
dep وبه الاعمدة التالية ......."
صعب ؟؟ جدا معقد !!
هيا انظر الان الى تركيبته وبناءه عبر الامر desc , واستمتع بمشاهدة اول جدول تعمله ^^ .
عظيم جدا ....
الان .... انتبه جيدا ... الجزئية التالية صعبة قليلا ...
الان ... نريد ان نعمل جدول يدعى بـ EP مثلا .....
اريده مثل الـ emp .... في بعض الحقول .. وفي جميع السجلات ...... ماذا اعمل ؟؟
اريد ان انسخ حقول وسجلات الجدول emp في جدول جديد يدعى بـ EP مثلا ,
لماذا ؟؟ لا تسألني لماذا ..
كل ما اريده هو ان اعمل نسخة احتياطية سرية لجدول الـ emp في جدول يدعى EP , ماذا اعمل ؟؟
هل نستطيع فعل ذلك ؟؟ هل تتخيل معي الوضع ؟؟ هل من الممكن ان انسخ جدول كامل بكل مافيه .. من سجلات واعمدة في جدول اخر في امر واحد فقط ؟؟؟ الان نرى ذلك .