صفحة 6 من 12 الأولىالأولى 1234567891011 ... الأخيرةالأخيرة
النتائج 76 إلى 90 من 169

الموضوع: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

  1. #76
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    اليك الأمر .... كأننا نستخدم الاستفسار الفرعي .. هل تذكره ؟؟

    كود:
    create table ep 
    
    as
    
    select * from emp ;
    يالله .... الان اكتب جملة الاستعلام التالية .. وانظر مالذي حدث !!
    كود:
    select * from ep;
    سوف تشاهد نفس ما تشاهده في الجدول
    emp

    ياسلام ... والله تقنية رائعة ..

    انظر الاستفسار الفرعي (
    select * from emp) كأنه لا يقول اعرض !! بل يقول ضع النتيجة في الجدول الجديد !!

    والله عظيمة هذه الاستفسارات الفرعية ..... وقوية الطريقة هذه ....

    اولا عمل جدول ..

    ثم عمل الحقول .. أوتوماتيكيا ...

    ثم وضع السجلات ... أيضا أوتوماتيكيا !!

    يعني تخيل لو قلت لك انقل كل معلومات الجدول
    emp يدويا ... كم تأخذ ؟؟ هذا وهي 14 سجل تقريبا .

    متى نستخدم هذه الطريقة ؟ أو لماذا نستخدمها ؟؟

    اذا كنا نريد ان نعمل نسخة احتياطية لجدول ما
    !!

    اذا كنا نريد ان نعمل جدول مبسط من بعض الحقول ... مثلا نريد ان نعمل جدول يشبه لجدول الموظفين ولكن اريد ان تكون حقوله
    ename و empno فقط على سبيل المثال


    اريد الان ان اعمل جدول .... ولكن به حقلين ..
    ename و empno الموجودين في جدول الـ emp

    صراحة .. اريد ان اسميهما هذان الاسمان
    eno بدلا من empno , و nameبدلا من ename

    لاحظ .. انتبه ... توقف !! ....

    اني ارغب في السجلات جميعها ولكن اريد وضع هذان الحقلان فقط .....

    نفترض ان اسم الجدول .... مممممم .... وليكن
    emp_2



    كود:
    create table emp_2 (eno , name) 
    
    as
    
    select empno,ename from emp ;

    انظر كيف اخترنا اسماء الاعمدة في جدولنا الجديد ... صحيح نفس قيم الجدول
    emp

    صحيح نفس السجلات .. ولكن اسماء اخترناها من رؤوسنا !! ياسلام على المرونة ...

    لاحظ انني وضعت
    eno اولا ثم name

    وفي الاستفسار الفرعي وضعت
    empno اولا ثم ename

    وكانني اقول .. الاول مع الاول .. والثاني مع الثاني .. وهكذا ... يعني طابق الترتيب .. مهم الترتيب !!

    الان اليك التحدي الثالث


    اريد ان اعمل جدول يسمى بـ
    annual_emp_30

    وبه الحقول التالية
    Eno

    Ename

    Sal

    Annual_sal

    The_date


    الـ
    Eno هو نفس الحقل الذي يدعى بـ empno في جدول الموظفين

    الـ
    annual_sal هو عبارة عن sal*12

    الـ
    the_date هو نفسه الـ hiredate في جدول الـ emp

    الجدول به نفس سجلات جدول الموظفين ولكن ليس كل السجلات !! بل فقط سجلات موظفي القسم 30 .....

    ماهو السؤال ؟؟؟ أعطيني يا نظر عيني الامر اللازم لعمل هذا الجدول ولكن بطريقتين مختلفتين
    !! انا ذكرت طريقة واحدة .. وتوجد طريقة اخرى قد درسناها منذ زمن !! ماهي ؟


    الامر
    ALTER TABLE :

    ارتكبت حماقة !!

    لم ارغب في الجدول
    dep كما كان في السابق ..

    لقد واجهتني عقبة !!

    لقد واجهت اسم قسم يمتد الى 20 حرف !!

    وانا وضعت 10 حروف كحد اقصى !!

    حماقة اخرى عملتها !!

    لا يرغب المدير في الحقل
    location اريد حذفه ... مالعمل

    حماقة ثالثة !!

    نسيت حقل قد طلب مني .... وهو :

    Dep_code varchar2(20)
    وهو كود خاص للقسم ... له اغراض امنية لا اعرف ما بداخله .


    نسيت ان اضيفه !!

    مالعمل ؟؟ من المنقذ ؟؟ من يستطيع عمل كل ذلك ؟؟

    دعنا الان نعدل الحقل
    dname ونجعله يستوعب 20 حرف .

    كود:
    alter table dep
    
    modify (dname varchar2(20) );
    دعنا الان نحذف الحقل
    location

    كود:
    alter table dep
    
    drop column location ;
    الان سوف نضيف الحقل الجديد .....
    كود:
    alter table dep
    
    add(dep_code varchar2(20));
    هل شاهدت الحذف , التعديل , الاضافة ؟؟

    سهلة جدا .... كلها تندرج تحت الامر
    ALTER TABLE .... سوف اشرحها ببعض التفصيل بعد قليل ....

    الان لدينا جدول
    dep ... واريد ان اضيف فيه بعض القيم ....

    أي قيم ولتكن مايلي :

    كود:
    insert into dep values (1,'any_name','10150115');
    مارأيك ان نستعرضه ؟
    كود:
    select * from dep ;

    كود:
    DNO DNAME DEP_CODE
    
    --- -------------------- ---------
    
    1 any_name 10150115
    شكله جميل .... هل ترى الحقل
    dep_code ؟؟ من الافضل ان يكون رقم ... مارأيك ؟

    هل نستطيع تعديله ؟ طبعا !!

    كود:
    alter table dep 
    
    modify (dep_code number) ;
    (لاحظ ان
    number لم نحدده بحد اقصى ...)والنتيجة كانت .....

    كود:
    ORA-01439: column to be modified must be empty to change datatype
    يقول لي ... يجب ان يكون الحقل لايوجد به بيانات ...

    الدالة تريد ان تحول من نص الى رقم .... ولكن يوجد بيانات .....

    فهي خائفة ان تحول ... ويكون هنالك بيانات نصية فيها
    ABC وحروف اخرى .....

    ولما تحوله الى رقم ... تتفاجئ بهذه القيم ...

    فاذا كنت تريد ان تحول من نص الى رقم ... او تاريخ الى نص ........ الخ

    فيجب ان يكون الحقل فارغ !!

    الان انا مصر على ان يكون هذا الحقل عدد ... ماذا اعمل ؟؟

    اريد ان اجعل الحقل فارغ ... بدون ان المس البيانات الاخرى في الحقول الاخرى كيف ؟؟؟

    هل تعرف ؟؟ فكر .......

    بسيطة .... اليك الامر !!



    كود:
    update dep set dep_code =null;
    فقط ..... هذا كل شيء ....

    صعبة ؟؟؟ مستحيلة ؟؟ فكر بمثل هذه الطرق .....

    الان كل القيم بهذا الحقل ... فااااارغة ... اما البيانات الاخرى لم نمسسها بسوء .

    الان نغير نوع الحقل ..... وقلوبنا مطمئنة ...... ولم يدمر طموحنا شيء :
    كود:
    alter table dep 
    
    modify (dep_code number) ;
    الان لو كان عندنا أي حقل من نوع
    varchar2 واردنا تحويله الى char هل يلزم ان نفرغ بيانات الحقل ؟؟

    لا .... لا يحتاج ذلك لانه من نص الى نص .. فلا داعي لافراغ البيانات .


  2. #77
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    طيب ... عرفنا ان الـ
    dname هو نص حده 20 حرف ..

    واضفت النص التالي :
    any_name

    صحيح ؟

    كم حرف هذا النص ... ثماني حروف ...

    وهو اكبر عدد موجود في هذا الحقل .. اكرر اكبر حقل موجود !!

    واردنا ان نعدل ونقلل الحقل
    dname الى 10 حروف .. هل يجوز ؟؟

    طبعا يجوز .. لان اكبر عدد حروف موجود في الحقل هو ثمانية ....

    اردنا ان نقلل الحقل
    dname الى 5 حروف .. هل نستطيع ؟؟

    لا ... لا نستطيع ... سوف تعرض لنا الرسالة التالية :

    ORA-01440: column to be modified must be empty to decrease precision or scale
    أي ان هنالك بيانات في الحقل .. حروفها اكثر من 5 حروف !!

    لذا لا يجوز ان تقلل من حجم الحقل .. والا فسوف تفقد البيانات !!

    ياسلام ... هذه البرمجة على الاصول .

    انا لم اكتفي بعد .. اريد ان احذف جميع الحقول ... اريد ان اخرب الجدول ...

    كود:
    alter table dep
    
    drop column dep_code;


    كود:
    Table altered.


    كود:
    alter table dep
    
    drop column dname;


    كود:
    Table altered.


    كود:
    alter table dep
    
    drop column dno;


    كود:
    ORA-12983: cannot drop all columns in a table
    اوبس ... لم استطع حذف كل الاعمدة ؟؟

    ممممم يظهر انه يجب ان يكون عمود واحد على الأقل في الجدول
    ... انتبه لهذه النقطة .

    كما شاهدنا ان الامر
    ALTER TABLE يستطيع عمل الثلاث عمليات (إضافة , حذف , تعديل )

    وهو متخصص في الحقول (الاعمدة) وتركيب الجدول كما شاهدنا
    .....

    بخلاف الأوامر التي في
    DML والتي تخصصت في السجلات والبيانات التي فيها .

    هنالك نقطة... لا يمكنك التراجع عن الحذف او الإضافة او التعديل في لغة الـ
    DDL!!

    الان سوف تدخل في تسمية الجداول ....



    الامر
    RENAME TABLE :

    اسم
    dep لا يعجبني ...... اريد تغييره الى depart!!

    ... اليك الامر
    كود:
    rename dep to depart;
    يا الله !

    صعب جدا هذا الامر !

    معقد لدرجة انني سوف اتركه الان وانتقل الى الامر التالي .

    الامر
    DROP TABLE :

    اريد قتل الجدول
    dep ... اااقصد depart .

    لا اريده ... اريد امحاء كل ما فيه ...

    كيف ؟ يقفز احدكم ويقول ... بسيطة , نعمل الامر التالي :









    كود:
    delete depart;
    وينتهي كل شيء !!

    اقول تعال يا سيدي , انت حذفت السجلات , ولكن مازال الجدول موجود , والدليل هو :
    كود:
    select * from depart;
    سوف يخبرك انه لا يوجد سجلات به ....
    كود:
    no rows selected
    أي انه مازال موجود !!

    أي انه لم يتم حذفه نهائيا !!

    اريد هذه الرسالة بدلا من السابقة :
    كود:
    ORA-00942: table or view does not exist
    ينفي تماما انه لا يوجد جدول !!

    اليك الامر .... والذي يعد اقوى وابشع وافضع القتلة !!

    والذي اخطر من امر
    delete و update

    والذي لا رجعة في قتلته !!

    انه
    drop table

    سوف يقتل الجدول ... ويقتل البيانات عن بكرة ابيها !! حتى لو كانت مليارات البيانات !!

    سوف يمحو جميع الروابط المرتبطة بالجدول ... سوف و سوف و سوف .....

    انتبه جيدا يا فتى .. انت تلعب بمستقبل أمم !! انظر الى تركيبته البسيطة جدا جدا جدا ....



    كود:
    drop table depart ;
    سوف يمحوه عن ارض الواقع وبكل هدوء ..... الى اللقاء يا
    depart ... فلن نراك ثانية .

    كود:
    Table dropped.
    (هيا اذهب وامسح جميع الجداول التي عملناها في هذا الدرس فلن نحتاجها !! .... لا تمسح
    emp والجداول المهمة الأخرى !!)

    الامر
    TRUNCATE TABLE :

    هذا الامر نفس الامر الموجود في اللغة
    DML ولكن يختلف باختلافين ..

    لا رجعة فيه ....

    وانه يحرر سعة التخزين !! ....

    نعرف انه لا رجعة فيه لانه من اوامر
    DDL , ولكن غير موضح ما معنى انه يحرر سعة التخزين !!

    لذا فسوف اسأل عنها وما معناها تماما !! فانظرني واعذرني .

    كود:
    truncate table e;
    وسوف تذهب جميع السجلات في الباي باي مع بقاء الجدول .

    لايوجد هنا شرط ولا هم يحزنون .. فقط حذف كل السجلات .





    انتبه للتهجئة !! ليست مثل
    commit

    انها
    comment أي تعليق ...

    الم تشاهد اذا قال احدهم لا تعليق بالانجليزي ؟

    طبعا يقول
    NO COMMENT

    تعرف ... انت الان ماشاء الله عليك حافظ جداولك جدول جدول ...

    وعارف الحقول كلها حقل حقل ...

    وكما تعرف ان الحقول والجداول أسمائها خلفة !!

    خلفة أي شكلها عبيط !!

    تأتي وتنظر الى
    emp ..... بالله عليك هل هذه اصلا كلمة في قاموس الانجليزية ؟؟

    ويأتي الاخر بعمود
    empno .... لو قلتها لاحد الأمريكيين على سبيل المثال ... لا يعرف عما تتحدث ...

    بالمختصر المفيد ...بعد ستين سنة ... تأتي المخابرات الفيدرالية تطالبك ببعض المعلومات السرية التي عملتها في عام 2006 ....

    وتأتي انت وتعرض
    emp وتعرض sal ..... للاسف

    بعد ستين سنة سوف تعرف كل شيء ... ولا يتبقى عليك الا تذكرها اصلا !!

    يعني سوف تنسى .... صدقني سوف تنسى السنة القادمة اذا ربي أحيانا معظم الحقول والجداول .. فما بالك بعد ستين سنة ؟؟؟!!!

    مالحل ... مالعمل ....

    الحل هو
    COMMENT تعليق .... ملاحظات ... هذه ما سوف تتذكره ....

    الاوراكل عملت لك اربع جداول محترمة للتعاليق !!

    انت اضف التعليق الذي تريده , واستعرضه من تلك الجداول الأربع
    .

    الان اريد ان اكتب عن الجدول
    emp معلومة ...

    أي انه جدول خاص بمعلومات الموظفين ..... هيا لنكتب ذلك ...


    كود:
    COMMENT ON TABLE EMP
    
    IS 'THE_INFORMATION OF EMPLOYEES';
    هل شاهدت النص !!! .... هو إضافة تعليق لجدول الموظفين ..

    الان نضيف لأحد الاعمدة ... وانت اضف للاعمدة الباقية .... اوكيه !!

    كود:
    COMMENT ON COLUMN EMP.EMPNO 
    
    IS 
    
    'THE NUMBER OF EMPLOYEES ... IT IS PRIMARY KEY ';
    هنا شيء جديد !!

    لماذا ذكرنا اسم الجدول هنا ؟

    كأنه يقول ان العمود
    empno الخاص بالجدول emp , هل فهمت !!

    لو مثلا عندنا جدول يدعى بـ
    emp_2 وبه حقل يدعى empno , بالله عليك كيف يفرق الأوراكل بينهما !!؟؟

    انظر كيف التكنيك , اريد الحقل
    empno الذي في جدول emp_2 اكتبها هكذا :

    Emp_2.empno
    اريد الحقل
    empno الذي في جدول emp اكتبها هكذا :

    Emp.empno
    هذا التكنيك هو الذي سوف نعتمده فيما بعد , فافهمها الان .

    انتهى التعليق ...... وانتهينا من
    ddl

    اوه اسف نسيت الجداول الاربعة !!

    طبعا اريد ان اتحدث قليلا عن المستخدمين , فنحن الان ندخل بمستخدم يدعى
    scott ,

    هذا المستخدم لديه جداول خاصة به هو لوحده , ولا احد يراها غيره والمدير او من له صلاحيات اكبر .

    اذا كان هنالك مستخدم اخر اسمه مثلا
    abc ولديه هو الاخر جداول , هل استطيع ان اراها واتعامل معها ؟

    بالطبع اذا كانت لدي صلاحية اعلى .

    الان كل ما اريده منك معرفة انه يوجد جداول لكل مستخدم خاصة به .

    نرجع لموضوعنا وهو الجداول الاربعة , وهي جداول خاصة بالتعاليق .


  3. #78
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء



    user_col_comments
    وهو جدول به تعاليق comments الاعمدة , والخاصة بالمستخدم الحالي

    all_col_comments
    وهو جدول به تعاليق الاعمدة والخاصة بالمستخدمين اجمعهم

    user_tab_comments
    وهو جدول به تعاليق الجداول والخاصة بالمستخدم الحالي

    all_tab_comments
    وهو جدول به تعاليق الجداول والخاصة بالمستخدمين اجمعهم


    يعني ايش المستخدم الحالي ؟

    يعني انت الان تدخل بمسمى
    Scott , و اسكوت هذا هل هو طيارة ؟ صاروخ ؟؟

    بل مستخدم . انت دخلت بهذا المستخدم , اذن المستخدم الحالي الذي انت عليه هو
    Scott

    هيا لننظر الى تعاليق جداول الرجل الطيب
    Scott , ولكن اولا دعنا نرى بناء الجداول الاربعة .






    كود:
    desc user_col_comments;


    كود:
    Name Null? Type
    
    ----------------------------------- -------- ---------------
    
    TABLE_NAME NOT NULL VARCHAR2(30)
    
    COLUMN_NAME NOT NULL VARCHAR2(30)
    
    COMMENTS VARCHAR2(4000)


    كود:
    desc all_col_comments;


    كود:
    Name Null? Type
    
    --------------------------- -------- --------------
    
    OWNER NOT NULL VARCHAR2(30)
    
    TABLE_NAME NOT NULL VARCHAR2(30)
    
    COLUMN_NAME NOT NULL VARCHAR2(30)
    
    COMMENTS VARCHAR2(4000)


    كود:
    desc user_tab_comments;


    كود:
    Name Null? Type
    
    ---------------------------- -------- --------------
    
    TABLE_NAME NOT NULL VARCHAR2(30)
    
    TABLE_TYPE VARCHAR2(11)
    
    COMMENTS VARCHAR2(4000)


    كود:
    desc all_tab_comments;


    كود:
    Name Null? Type
    
    ---------------------------- --------- --------------
    
    OWNER NOT NULL VARCHAR2(30)
    
    TABLE_NAME NOT NULL VARCHAR2(30)
    
    TABLE_TYPE VARCHAR2(11)
    
    COMMENTS VARCHAR2(4000)



    الان بامكانك ان ترى جميع التعاليق الخاصة بالمستخدمين جميعهم , والتي على الجداول ...

    ولكن لا تنسى انها سوف تكون ضخمة !!

    لذا يفضل ان تكتب اولا :
    كود:
    set linesize 10000;
    والان تعاليق المستخدمين على جداولهم (اعتقد ان لدى اسكوت الصلاحية لرؤيتها )
    كود:
    select * from all_tab_comments ;
    النتيجة ضخمة !! طلعت عندي اكثر من 1600 سجل

    لا لا نريد فقط المستخدم اسكوت ... كيف ؟ لديك طريقين .....

    الاول : من جدول تعاليق الجداول لكل المستخدمين ....
    كود:
    select * from all_tab_comments 
    
    where owner='SCOTT';

    الثاني وهو الاسهل طبعا :من جدول تعاليق الجداول للمستخدم الحالي (اسكوت في مثالنا)
    كود:
    select * from user_tab_comments;

    الان نرى تعاليق المستخدمين على اعمدة (حقول ) جداولهم :
    كود:
    select * from all_col_comments
    النتيجة جدا ضخمة ...

    لا لا نريد فقط تعاليق المستخدم اسكوت على الاعمدة .. كيف ؟لديك طريقتين ...

    الاولى :من جدول تعاليق الاعمدة لكل المستخدمين
    كود:
    select * from all_col_comments 
    
    where owner='SCOTT';

    الثانية وهي الاسهل طبعا :من جدول تعاليق الاعمدة للمستخدم الحالي (اسكوت في مثالنا )
    كود:
    select * from user_col_comments;

    اعطيك تحدي بسيط !!

    وهو التحدي الرابع
    ,

    اريد ان تعمل تعليق على أي جدول , واي عمود به ....

    ثم تستعرض تعليق الجدول فقط , وليس كل الجداول ,

    ثم تستعرض تعليق العمود فقط , وليس كل الاعمدة !!

    انتهت رحلتنا في كوكب
    DDL

    اريدك ان تعرف بعض المعلومات التي ارى انه من المهم ان تعرف عنها وهي ....

    هنالك نوعين من الجداول !!

    جداول المستخدم
    user tables

    وجداول اخرى تسمى بـ
    Data Dictionary

    جداول المستخدم نعرفها وهي مثل
    emp,dept…… أي الجداول التي ينشئها المستخدم ,

    والجداول الاخرى من انشأها ؟ ليس المستخدم , بل الاوراكل نفسه !!

    لماذا هذه الجداول الاخرى ؟ لكي يخزن بها بعض المعلومات المهمة للبرنامج نفسه وفي نفس الوقت ليست مهمة لنا كثيرا .

    على ماذا تحتوي ؟ على معلومات عن قواعد البيانات , بعض المعلومات التي لا اعلم كثيرا منها ولكن ... لنستعرض هذه الجداول وليكن ما يكن :

    كود:
    set linesize 10000;
    هذا الامر لكي يجعل السطر يتحمل 10000 حرف ... لذا فأول ما تشغل البرنامج اكتبه لكي تعرض الجداول بشكل سلس وواضح .... وخاصة اذا كانت جداول كبيرة !!

    الان اريدك ان تعرف ثلاث جداول ... وهي
    User_tables
    وهو جدول به معلومات عن جداول المستخدم .... يعني اول ما تنشيء جدول .. تأتي بعض المعلومات التي يريدها البرنامج في هذا الجدول .... وانا شخصيا فهمت بعض هذه المعلومات ..

    الذي فهمتها هي : اسم الجدول , هل هو متاح للمشاهدة ام لا , عدد السجلات الموجودة به ,معدل طول السجل الواحد يعني كم حرف وعدد ووو .... ,اخر وقت عد تم الدخول عليه ,واخرى لا اعلمها .

    جرب واكتب الامر التالي :

    كود:
    select * from user_tables;
    سوف تعرض لك معلومات كثيرة عن جداول موجودة لديك تعلمها واخرى لا تعلمها , طبعا لا يمكننا المس بهذا الجدول ولا بغيره من جداول النظام .

    مارأيك لو ترى اسماء الجداول بواسطة الاستعلام التالي :
    كود:
    select table_name from user_tables;
    النتيجة التي ظهرت عندي :
    كود:
    TABLE_NAME
    
    ------------------------------
    
    BIN$zh6K7mL3TQSEjFVbw8huPA==$0
    
    BIN$CdOCgSM0RVe9oZZa3a7yYw==$0
    
    BIN$0HH1em/pSYGnFZh44HJRbw==$0
    
    BIN$osPd+65HQRWuHRThb+5mrg==$0
    
    BIN$8E2pLO9KS/2S+IX45TNq5A==$0
    
    EMP_2
    
    ANNUAL_EMP_30
    
    EP
    
    BIN$6BmCVHt5QJ+2kgFtGw15dw==$0
    
    BIN$u1ury6+3TR2Z4hKShyoYdg==$0
    
    E
    
    BIN$2td3bfKwR/+G9k4rFB72QQ==$0
    
    BIN$1HvD1IMCQhOnrSP7pNbAQg==$0
    
    BIN$orKQ6c4BQOCBXgSBC1dgHQ==$0
    
    BIN$aVeWAgZdTeKcyOVUJ9D9YA==$0
    
    A
    
    SALGRADE
    
    BONUS
    
    EMP
    
    DEPT
    يظهر ان بعض الجداول ..... لا اعرف كيف اتت ولكن ..... لا يهم .

    الجدول الثاني :
    user_objects

    وهو جدول شبيه بالسابق ..

    اريد ان تعرف شيء الان , وهو
    object اوبجيكت .....

    وهو أي شيء موجود على الـقرص الثابت
    hard disk يسمى بـ object , نخص في كلامنا هذا .. الملفات !!

    الجدول قلنا منذ زمن بعيد انها مجرد ملف , لذا فتوجد بعض الملفات الاخرى غير الجداول سوف تعرف بعض منها فيما بعد .

    هذا الجدول (اقصد به
    user_objects) يعرض معلومات كل الملفات او الاوجكت الموجودة لديك والتي تخص اوراكل طبعا .

    بعض المعلومات التي فهمتها انا هي :

    اسم الاوبجكت,نوع الابجكت هل جدول ام شيء اخر (ستعرفونه فيما بعد) ,تاريخ انشاء الاوبجيكت (معلومة مهمة للتجسس) ,اخر عملية
    DDL اجريت عليه (معلومة اخرى مهمة ) , هل متاح و لنا صلاحية بالتعامل معه ام لا .


  4. #79
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    الان اكتب الامر التالي :
    كود:
    select * from user_objects ;
    لكي ترى كل ما
    فيه , وترى مالديك من مصائب تعلمها واخرى لا تعلمها .

    الان اريد ان استعرض تاريخ إنشاء جدولنا الخاص بالموظفين ..

    انا شخصيا نفسي منذ زمن اعرف متى انشيء .... عبر هذا الاستعلام .

    كود:
    select created from user_objects
    
    where object_name ='EMP';

    سوف تعرض لك تاريخ إنشائه .. اذا أردت المعلومات الاخرى فما عليك الا كتابة :
    كود:
    select * from user_objects
    
    where object_name ='EMP';

    الجدول الثالث وهو جدول
    user_catalog

    به معلومات طفيفة عن الجداول الموجودة لديك .... فقط اسم ونوع الجدول , لا اعرف ما قصده بنوع الجدول ولكن لايهم .. المهم انه والله اعلم ان هذا الجدول يعرض ما انشأته انت وفقط انت ....

    اما جدول
    user_tables فهو لما تمتلكه من جداول ...سواء انت انشأته او انشأه غيرك .


    بامكانك ان تكتب احد الاستعلامين :

    كود:
    select * from user_catalog ;
    او اختصارا ....
    كود:
    select * from cat;
    والسلام ختام .

    سوف نتكلم في الدرس القادم عن الصلاحيات وما هي الصلاحيات ولماذا الصلاحيات وكيف نتعامل مع الصلاحيات

    وربما عن القيود وما هي القيود ولماذا القيود وكيف نتعامل مع القيود
    .

    ولا يبقى علينا الان الا التذكير والتلخيص لأوامر الـ
    DDL والـ DML

    الكلمات الحمراء في الصور ... هي ما يجب كتابته كما هو بدون تعديل او نقصان .

    الكلمات الزرقاء في الصور .. هي ما يجوز لك كتابته او حذفه .. لا فرق فهي زيادة لا غير .

    الصورة 1002 تلخيص للـ
    DML ولغة التحكم بالعمليات :



    الصورة 1003 تلخيص للـ
    DDL الصورة كبيرة نسبيا)




  5. #80
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    اانتهى الدرس .. وكلي امل بان تنتفعو به
    وان تتمتعو بالدرس ...
    ....
    التحديات بين السطور ....
    ابحثو عنها ,’,’,’,’,’,’,’
    والى لقاء اخر في الدرس القادم ....

  6. #81
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    السلام عليكم
    ظروف المت بي ..
    سوف اتأخر اسبوع من تاريخه
    اسف اسف اسف
    ..
    سوف نسرع ان شاء الله ....
    بعد اكثر من اسبوع,,,,
    فاعذروني يا شباب

  7. #82
    التسجيل
    14-01-2006
    المشاركات
    15

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    التميز للمتميزين دائما ارجو من الله ان يوفقق ومن اهل المنتدى وبالنيابة عنهم اشكرك على الموضوع الرائعوالجميل وادعوا الله ان يوفقق مرة اخرى

    ســــــــــــلام
    [img]http://www.**********com/up/uploads/6abc58da60.gif[/img]
    ملك الرومانسية

  8. #83
    التسجيل
    14-01-2006
    المشاركات
    15

    Thumbs up مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    التميز للمتميزين دائما ارجو من الله ان يوفقق ومن اهل المنتدى وبالنيابة عنهم اشكرك على الموضوع الرائعوالجميل وادعوا الله ان يوفقق مرة اخرى

    ســــــــــــلام
    [img]http://www.**********com/up/uploads/6abc58da60.gif[/img]
    ملك الرومانسية

  9. #84
    التسجيل
    14-01-2006
    المشاركات
    15

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    ياريت شكل الدرس يتعدل اكثرمن كدة
    علشان يحث الناس انهم يقراءوة
    وشكرا على المعلومات
    [img]http://www.**********com/up/uploads/6abc58da60.gif[/img]
    ملك الرومانسية

  10. #85
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    اقتباس المشاركة الأصلية كتبت بواسطة king.romance
    ياريت شكل الدرس يتعدل اكثرمن كدة

    علشان يحث الناس انهم يقراءوة
    وشكرا على المعلومات



    السلام عليكم ,,
    شكرا لك اخي ....
    مارأيك ؟؟ تريد دروس فلاش او فيديو ؟
    لو لدي وقت طويل , ولو لدي خدمة نت سريعة , ولو لدى القارئين نت سريع ,,
    لعملت دروس صوت وصورة وفلاش ,,,,
    بس ...العين بصيرة , واليد قصيرة يا صاحبي ^^
    شكرا لك ثانية

  11. #86
    التسجيل
    01-03-2005
    الدولة
    مصر
    المشاركات
    8

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    ياجماعه والله الشخص الى اسمه
    InternetMaster

    ملوش حل وشرحه لمفاهيم قواعد البيانات فى الجوان وكان الأستاذ جافا ادانا اللينك
    عموما هو فى موقعarabteam2000 فى قواعد البيانات بأكسس وليست موجوده فى قواعد البيانات لأوركل لأنى دخت لغايه ما لقتها وحبيت افيد اللى عايز يستفيد.
    على فكره انا لسه بقرأ من يومين اتنين بس وكنت عايز أقل حاجه انى ان شاء الله هخلص خلال يومين الشرح بتاع جافا وانترنت مستر لانى عندى حماس مش ذيكم متكاسلين وان شاء الله هبقى أحسن منكم لانى بذاكر باخلاص وهحل الواجب من اول درس الى اخر درس وابعته للاستاذ جافا وربنا يسهلى الحال ويسهلكم جميعا يارب

  12. #87
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    اقتباس المشاركة الأصلية كتبت بواسطة هانى الفقى
    ياجماعه والله الشخص الى اسمه
    InternetMaster

    ملوش حل وشرحه لمفاهيم قواعد البيانات فى الجوان وكان الأستاذ جافا ادانا اللينك
    عموما هو فى موقعarabteam2000 فى قواعد البيانات بأكسس وليست موجوده فى قواعد البيانات لأوركل لأنى دخت لغايه ما لقتها وحبيت افيد اللى عايز يستفيد.
    على فكره انا لسه بقرأ من يومين اتنين بس وكنت عايز أقل حاجه انى ان شاء الله هخلص خلال يومين الشرح بتاع جافا وانترنت مستر لانى عندى حماس مش ذيكم متكاسلين وان شاء الله هبقى أحسن منكم لانى بذاكر باخلاص وهحل الواجب من اول درس الى اخر درس وابعته للاستاذ جافا وربنا يسهلى الحال ويسهلكم جميعا يارب
    اهلا بك يا فقي .. ^^
    يعجبني حماسك .. والى الامام ^^
    والدرس الخامس ... كله للاستاذ الكبير ... انترنت ماستر ..
    والذي اختفى بالمرة .. ولا اعرف اين ارضه الان ...
    المهم ... ضع حلول واجباتك في موضوع استفسارات اوراكل ..
    وضع ملاحظاتك واسألتك هناك ^^
    يالله شد حيلك ^^ ... وادعيلي

  13. #88
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

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

    الدرس الحادي عشر
    اسم الدرس
    : جملة الاستعلام select والدوال

    نوع الدرس
    : تطبيقي

    صعوبة الدرس
    : **** من *****

    اهميــة الدرس
    : ****** من ***** (Over)

    درجة احتراف لغة
    SQL المتوقعة بعد هذا الدرس : **** من ***** (متوسط متقدم )

    الوقت المتوقع منك لفهم الدرس
    : ثماني ساعات .

    المتوقع منك في هذا الدرس
    :

    - معرفة الشروط والقيود .

    - معرفة اجزاء جملة
    select .

    - التعامل مع دوال المتعددة الصفوف وحل مشاكلها .

    هيا لنؤركل ^^
    السلام عليكم

    وجهت بعض المشاكل المتعلقة ببرنامج
    SQL PLUS , تجدني اكتب جملة ما , وكلي ثقة انها صحيحة مئة بالمئة , واذا بالبرنامج يعطيني خطأ !!

    اذا واجهت هذه المشكلة , اعد كتابة الجملة مرة ثانية يدويا وسوف تحل مشكلتك , اعيد واكرر !! ... اذا واجهت المشكلة ... اعد كتابتها يدويا , وما بقي عليك الا معرفة ان هذه المشكلة هي احد أسباب تأخر الدرس !!

    ,,,
    الان ....
    الـ Constraints او ما تسمى بالقيود , مجرد شروط نضعها على أعمدة الجداول.

    شروط نريدها في عمود ما من جدول ما ...

    اليك طريقتين في انشاء هذه القيود ...

    الطريقة الاولى : ان تنشئ هذه القيود وقت انشاءك للجدول

    الطريقة الثانية : ان تنشئ هذه القيود بعد انشاء الجدول ..
    لم تفهم ؟ طيب

    هل تذكر امر إنشاء الجداول ؟

    ماهو الامر ؟؟

    اليك مثال للتذكير :
    كود:
    create table abc (
    
    abcno number ,
    
    abcname varchar2(20) );
    انشأنا جدول يدعى بـ
    abc

    بامكاننا ان نتبع الطريقة الاولى , وهي ان ننشيء القيود وقت انشاء الجدول ....

    قبل البدء ...

    الان اين المفتاح الرئيسي ؟

    لا احد يعرف !!

    حتى الأوراكل بنفسها لا تعرف ..

    بالله عليك كيف تعرف ؟

    طيب اين المفتاح الاجنبي ؟ هل يوجد مفتاح اجنبي ؟ لا احد يعلم

    مالحل ؟

    الحل هو إضافة القيد
    Primary key

    ما هو هذا القيد ؟

    هو شرط ... ان لا تتكرر القيم ... وان لا تكون خالية
    !!

    هل فهمت ما معنى هذا القيد .... سوف نستعرض انواع القيود ...

    هنالك خمس شروط ... اااقصد خمس قيود , هي :
    القيد
    Check :

    هذا قيد يحصر العمود ويجبر العمود ان يكون بين قيمتين ....
    مثلا نريد العمود
    deptno الموجود في جدول dept ان تكون قيمه ما بين 10 و 90 فقط ,

    يعني لو اضاف احدهم صف جديد في جدول الاقسام كما يلي :

    كود:
    insert into dept values 
    
    ( 99 , 'ANY' , 'LOCATION' );

    فانه خطأ ,

    الامر السابق صحيح .... جدا صحيح

    ولكن انا اريد ان تكون القيم ما بين 10 و 90 !!

    يعني اريد ان تظهر خطأ لكل من يجرؤ ان يضيف عدد ليس بين الـ 10 و الـ 90 .. اريد ان يرفض أوراكل هذا العمل ....

    الحل هو القيد
    check

    صاحبنا
    check يحدد القيم التي نريدها ,

    الان نحن نتبع الطريقة الاولى ... (وقت انشاء الجدول ) ... :

    كود:
    create table A 
    
    ( ano number check (ano between 20 and 40 ) );

    عملنا جدول يدعى بـ
    A , ولديه عمود يدعى ano , العمود هذا يجب ان تكون قيمه بين الـ 20 والـ 40 ..

    عملنا القيد
    check وقت انشاء الجدول ... يعني سوف ينشئ الجدول .... ثم ينشئ القيد , هذه الطريقة الاولى ..

    الان تأكد بنفسك هل القيد يعمل جيدا !!

    كود:
    insert into A values (22) ;
    سوف يضيف بدون أي مشاكل ... لان القيمة بين 20 و 40 ....

    والان دعنا نرى لو اضفنا قيمة ليست بين 20 و 40
    كود:
    insert into A values (10) ;
    سوف يعمل لك فضيحة مدوية ... ويقول "لا لا لا ... لا يجوز !! يوجد قيد .. يقيدني بان تكون القيم ما بين 20 و 40"

    الان ...الطريقة الثانية بعد انشاء الجدول ....

    بالله عليك ... اريد ان اضع القيد
    check في عمود deptno في جدول الاقسام , كيف ؟

    هل احذف الجدول ... وتذهب جميع بياناته !! ... ثم اعمل الجدول مرة ثانية واعمل معه القيد ؟؟؟؟؟؟؟

    طبعا غير معقول ان نعمل هذا الغباء .

    اليك امر ليس بغريب عليك ... وسوف يضيف القيد الى أي جدول عملناه منذ زمن .

    كود:
    alter table dept
    
    add constraint dept_deptno_ck check(deptno between 10 and 90 ) ;
    واو ... ماهذا !!

    الامر
    alter الخاص بتعديل خصائص الاعمدة وحذفها واضافتها الى جدول سبق وان عملناه سابقا !

    ها هو الامر الرائع يظهر لنا ثانية كحلال لمشكلتنا ...

    يقول في السطر الاول "عدل الجدول الخاص بالاقسام"

    ويقول في السطر الثاني "اضف قيد بمسمى
    dept_deptno_ck ... وهو قيد check .. للعمود deptno على ان يكون قيم هذا العمود ما بين 10 و 90"

    لاحظ المسمى
    dept_deptno_ck , من كتب هذا المسمى ؟؟

    هل تصدق انه انا !

    يعني بامكانك ان تكتب ما شئت , لكن المسمى العالمي , والطريقة العالمية المثلى هي ان تكتب اسم الجدول , ثم اسم العمود ثم نوع القيد !! كيف ؟ سوف تعرف بعد قليل .

    لماذا هذا المسمى ؟؟ وما فائدته ؟ سوف تعرف بعد قليل .

    هل تعرف ان تضيف هذا القيد في جداول اخرى ؟؟

    بقي علي ان اخبرك ان تتنبه الى هذا القيد , لو وضعنا هذا القيد على عامود
    deptno , وجعلنا القيم ما بين 20 الى 90 مثلا , هل هذا صحيح ؟ بالنظر صحيح .. لكنه خطأ , لانه يوجد قيم سابقة ليست بين 20 و 90

    (القسم 10) , سوف يخبرك انه من المستحيل عمل ذلك لانه يوجد قيم في الجدول منافية للشرط .


    سنعود بعد قليل ^^

  14. #89
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    القيد
    Primary key:

    هذا قيد يجعل قيم العمود المراد وضع القيد عليه .. لا تتكرر ولا تكون خالية .
    الان سوف نعمل هذا القيد بالطريقة الاولى على جدول جديد ويدعى
    B :

    كود:
    create table B 
    
    ( bno number primary key , bname varchar2(10) ) ;
    سهلة ؟

    اعتقد انها سهلة ....

    عملنا جدول
    B وبه عمودين .. احدهما حددناه ان يكون مفتاح اساسي .... هذا كل شيء .


    الان الطريقة الثانية :
    ...
    هل تذكر مثالنا السابق .. حينما عملنا الجدول A ؟

    يوجد عمود واحد وهو
    ano , اريده مفتاح اساسي ... كيف ؟

    فكر .. فكر .. فكر ...


    كود:
    alter table A 
    
    add constraint a_ano_pk primary key(ano);
    نفس الشيء ... يوجد مسمى , ثم كلمة
    primary key ثم بين قوسين العمود المراد وضع القيد .




    القيد
    Unique :

    قيد يجعل قيم عمود ما , لا تتكرر . معنى
    unique بالعربي ... وحيد .

    الان بالطريقة الاولى , نعمل جدول يدعى بـ
    c ولديه عمود cno , نريد هذا قيم هذا العمود لا تتكرر ....

    كود:
    create table c 
    
    ( cno number unique , cname varchar2(10) );
    بمجرد إضافة كلمة
    unique , وانتهى كل شيء .

    بالطريقة الثانية ... ممممم هل تذكر الجدول
    B الذي عملناه قبل قليل ؟

    يوجد عمود يسمى
    bname , اريده عمود ذو قيم لا تتكرر .....

    كود:
    alter table B 
    
    add constraint b_bname_uk unique(bname) ;
    لاحظ المسمى
    b_bname_uk , وهو مسمى من عندي , بامكانك وضع ماشئت , وبامكانك اتباع طريقتي .

    يجب ان نضع اسم العمود المراد وضع أي قيد فيه بين قوسين .



    القيد
    Not null :

    قيد يجعل قيم عمود ما , لا يمكن ان تكون خالية
    .

    اليك الطريقة الاولى ...
    كود:
    create table d 
    
    ( dno number not null ) ;
    عملنا الجدول
    d , وبه عمود dno , وجعلنا قيم هذا العمود لا يمكن ان تكون خالية ... جرب وادخل قيم خالية , سوف يعطيك خطأ

    اليك الطريقة الثانية ...

    على جدول
    B , عمود bname , وضعنا به القيد الخاص بعدم التكرار ... صح ؟

    الان اريد ان اضيف القيد الخاص بعدم وجود قيم خالية .... هل يجوز ان نضيف قيدين على عمود ؟؟ طبعا نعم ..

    لكن يوجد مشكلة مع هذا القيد , انه لا يمكن اضافته بالامر
    alter و add ....

    بل بالامر التالي :
    كود:
    alter table b
    
    modify (bname varchar2(20) not null) ;

    وهو تعديل العمود اصلا !!

    أي كأنك سوف تعدل العمود وخصائصة , ثم تضع هذا القيد
    .

    هذا هو القيد الوحيد الغريب , والبقية تستخدم
    add . افهم ذلك ...





    .


    القيد
    Foreign key (references):

    قيد يجعل عمود ما مفتاح اجنبي , أي انه ينشيء علاقة ما بين جدولين
    .

    انتبه الى نقطة مهمة !!

    يجب ان يكون المفتاح الاساسي الذي سنجعله مفتاح اجنبي في الجدول الثاني .. مساوي كقيمة للمفتاح الاجنبي .. ومطابق لصفاته !!

    الان دعنا ننشئ جدولين , اولهما يدعى بالمتهم
    h والاخر المدعي g



    كود:
    create table h
    
    ( hno number ,
    
    hname char );
    اوبس .... نسيت ان اضع القيد
    PRIMARY KEY ... ما رأيك ان نجرب ماذا سيحصل ؟ لنرى :


    كود:
    create table g 
    
    ( gno number ,
    
    ho number references h(hno) ) ;
    عملنا عمود يدعى بـ
    ho , وهو مفتاح اجنبي .. للمفتاح الرئيسي الموجود في الجدول h

    لكن اسمه هناك
    hno .... هل تعتقد ان وضع اسم للمفتاح الاجنبي غير اسم المفتاح الاساسي خطأ ؟؟ في الحقيقة لا ...

    لا يوجد خطأ في ذلك ..

    الان انظر النتيجة :


    كود:
    no matching unique or primary key for this column-list
    خطأ !! ؟؟؟

    يقول انه لايوجد مفتاح اساسي !!

    اوه صحيح .. نسيت ان اضع القيد
    PRIMARY KEY على العمود hno ....

    كود:
    alter table h
    
    add constraint h_hno_pk primary key (hno) ;
    الان .... نكرر العملية ونحن مرتاحو البال .

    كود:
    create table g 
    
    ( gno number ,
    
    ho number references h(hno) ) ;
    وسوف يربط بين الجدولين ...

    سوف يخبر هذا الامر أوراكل .. بأنه يوجد علاقة وثيقة واتصال عميق بين الجدول
    h و g

    وسوف يعيشون بسلام وأمان معا ,,,

    الان بالطريقة الثانية ....تخيل لدينا جدولين اخرين ...


    احدهما
    U والاخر يدعى T

    هيا لننشئهما .....
    كود:
    create table u 
    
    ( uno number primary key ) ;


    كود:
    create table t 
    
    ( tno number , uno number ) ;

    الان اريد العمود
    uno في جدول الـ t مفتاح اجنبي يشير الى المفتاح الاساسي uno الموجود في جدول u

    اليك الامر ولاحظ ان
    uno الاولى التي بين قوسين ... هي العمود الخاص بالجدول t والثانية هي الخاصة بالجدول h



    كود:
    alter table t 
    
    add constraint t_uno_fk foreign key (uno) references u(uno) ;
    هل رأيت المسمى ؟؟ هل رأيت
    foreign key ؟؟؟ هل وهل وهل ؟؟

    الان عملنا الرابط الوثيق بالطريقة الثانية (الطريقة الثانية = بعد انشاء الجداول ...)

    الان انتهينا من انواع القيود ...

    الان ... يوجد شيئين لم اطلعك عليهما , وهو "على مستوى العمود" والاخر "على مستوى الجدول"

    صراحة استغرب من هذان الشيئان ... فلا اعرف لماذا عملوها هكذا .... الان سوف اريك شيء اخر .... جدول جديد

    وهو تابع للجداول التي تكلمنها عنها , والتي تسمى بـ
    Data Dictionary ,,, هل تذكرها ؟

    جدول يعرض جميع القيود لدى جداولك , الجدول يدعى
    user_constraints

    هيا اذهب واستعرض محتوياته ....

    كود:
    set linesize 10000 ;
    لكي يعرض الجداول بشكل مقبول .... (كأنه يقول ... اجعل حجم السطر 10000 حرف ....)

    الان اكتب جملة الاستعلام التالية ....

    وهي عرض كل القيود التي على الجدول
    B



    كود:
    select * from user_constraints where table_name='B' ;

    كود:
    
    
    كود:
    
    
    كود:
    OWNER CONSTRAINT_NAME C TABLE_NAME SEARCH_CONDITION ------------- ------------------------------ - ----------------------- ----- SCOTT B_BNAME_UK U B SCOTT SYS_C005555 C B "BNAME" IS NOT NULL SCOTT SYS_C005549 P B

    هل تذكر تلك المسميات ؟؟
    B_BNAME_UK
    احد هذه المسميات ...

    وقد عرض هنا !!

    هل تشاهد المسميين
    SYS_C005555 و SYS_C005549 ؟ من اسماهما ؟؟

    انه الأوراكل !!

    هل المسميات هذه مهمة ؟ ولماذا ؟ ستعرف بعد قليل ....

    هل تشاهد تلك الرموز ؟
    U C P ….

    هي رموز تشير الى القيود ..
    P
    أي Primary key

    C
    أي check أو not null

    U
    أي unique

    R
    أي references (وهو الخاص بـ foreign key )

    العمود
    search_condation يعرض الشروط الخاصة بالقيد check والقيد not null

    الان ...

    لو عملنا جدول جديد .. وبه مفتاح اساسي ... هل نستطيع تسميته بهذا الامر :
    كود:
    create table XYZ 
    
    ( xyzno number primary key ) ;
    طبعا لا نستطيع تسميته .

    انظر الى جملة الاستعلام التالية ...
    كود:
    select * from user_constraints where table_name='XYZ' ;
    النتيجة سوف تكون ....
    كود:
    
    
    كود:
    
    
    كود:
    OWNER CONSTRAINT_NAME C TABLE_NAME SEARCH_CONDITION ---------- ------------------------- - ----------------- ----- SCOTT SYS_C005562 P XYZ

    لاحظ هذه التسمية
    SYS_C005562 .. أوراكل سماها .

    الان نريد ان نحذف القيود جميعها من جدول ما ... كيف ؟

    مالعمل ؟

    اريد ان احذف القيد
    Primary key مثلا من جدول xyz

    كيف ؟
    يا ترى كيف ؟؟

  15. #90
    التسجيل
    26-07-2005
    الدولة
    Australia
    المشاركات
    3,368

    مشاركة: الطريق لاحتراف الاوراكل .. دورة مطوري اوراكل .. من الالف الى الياء

    هل تصدق انها بتلك التسميات !!

    الان لنحذف قيد المفتاح الاساسي من جدول
    xyz

    كود:
    alter table xyz
    
    drop constraint SYS_C005562 ;
    واو ....
    alter ,, ذلك الامر الرائع تكفل ايضا بحذف القيود عبر جملة drop constraint ثم ذكر مسمى القيد المراد حذفه .

    الان اكتب جملة الاستعلام السابق ذكرها ....

    كود:
    select * from user_constraints where table_name='XYZ' ;
    والنتيجة هي :
    كود:
    no rows selected
    لقد نسف الامر
    alter بجملته drop constraint القيد الخاص بالمفتاح الأساسي !!

    ولا وجود له الان . باي باي يا مفتاح يا أساسي ... لقد كنت طيب معنا .

    الان لدينا مشكلة ... وهي التسميات !!

    كيف نعرف التسميات ؟

    هل نذهب الى الجدول
    user_constraints ونأخذ من هناك المسمى لكي يتم حذف القيد الذي نريده ؟

    اعتقد انه حل لا بأس به ... ولكن الحلو ما يكملش .... واليك مشكلة اخرى
    ...

    مارأيك ان نعمل جدول يدعى بـ
    W ولديه من الابناء .. ااقصد من الاعمدة wno و www وهما عمودين ذوي بيانات رقمية .... انا سوف اضع لهما القيد عدم التكرار .... كما يلي :



    كود:
    create table W
    
    ( wno number unique , www number unique ) ;
    هيا لنستعرض عضلات وقيود الجدول
    W

    كود:
    select * from user_constraints where table_name='W' ;
    انظر وتمتع بالنتيجة ... وحتى اشعار اخر ... اريد ان احذف القيد الخاص بـالعمود
    www وليس العمود wno

    كود:
    
    
    كود:
    
    
    كود:
    OWNER CONSTRAINT_NAME C TABLE_NAME SEARCH_CONDITION ----------- ------------------------- - ----------------- ----- SCOTT SYS_C005563 U W SCOTT SYS_C005564 U W

    هيا .. اخبرني أي من المسميين احذفه ؟

    هل
    SYS_C005563 ام SYS_C005564 ؟؟

    أي منهما هو الذي يمثل العمود
    www ؟؟؟

    طبعا يجب ان تذهب الى جدول اخر ... وترى اسم العمود , واسم الجدول , ومسمى القيد ..... ثم ترجع وتأخذ المسمى ... ثم تحذف القيد ....

    انا كسول جدا ... اعتبرها معضلة ... وذهاب وعودة و تعب ....

    اليك الجدول ... والذي سوف يعرض اسم العمود + مسماه ..

    كود:
    select * from user_cons_columns ;

    الان نريد حل لهذه المعضلة (لا ارى انها مشكلة .. ولكن اريد تجربة طريق اخر !! هذا كل شيء ) , نريد ان نسمي القيود عندما ننشئها !! كيف ؟
    اعتقد انه يوجد حلين ... وقد تعرف احدهما !!

    حل بالطريقة الاولى (تسمية و انشاء القيود وقت انشاء الجدول ) و حل بالطريقة الثانية (انشاء القيود بعد انشاء الجدول)!!

    في الحقيقة ان الطريقة الثانية مررنا بها !! وعملناها !!

    أي انك تعمل الجدول ... ثم تضيف القيود كما ترغب وهو حل لا بأس به . وانا اعرف انك فكرت بها اصلا .

    اما الحل بالطريقة الاولى ... عرفنا اننا نستطيع انشاء القيود وقت انشاء الجدول , ولكن لم نعرف كيف نسميها !!

    الان ركز فقط بالطريقة الاولى ... الطريقة الاولى يوجد بها طريقتين (بدأت الامور تتعقد اكثر !!)

    على مستوى العمود و على مستوى الجدول .

    الذي عملناه هو مستوى العمود ... الان ننشيء جدولين وبها قيود على مستوى الاعمدة ...

    الجدول الاول وهو الخاص بجدول السيارات , والاخر هو جدول الزبائن

    الزبون الواحد يستطيع ان يمتلك اكثر من سيارة

    السيارة الواحدة تمتلك للزبون الواحد ...

    لو بتفكر قليلا .... حتعرف فين نضع المفتاح الاجنبي !!

    العلاقة واحد لمتعدد .

    فكر أين نضع المفتاح الاجنبي .....

    هل فكرت ؟ صحيح .... في جدول السيارات .

    الان ننشئ جدول الزبائن .... وبه رقم الزبون كمفتاح أساسي ... واسمه كقيم يجب ان تكون غير خالية ...ثم عمره والذي يجب ان يكون ما بين 18 و 30 ...

    كود:
    create table customer (
    
    cno number primary key ,
    
    cname varchar2(10) not null ,
    
    cage number check (cage between 18 and 30 ) ) ;
    يا سلام ...

    الان جدول السيارات ...
    كود:
    create table cars (
    
    carno number primary key ,
    
    carname varchar2(10) not null ,
    
    carage number check (carage between 0 and 10) ,
    
    carpanel number unique ,
    
    cno number references customer(cno) ) ;
    يا سلام ...

    رقم السيارة كمفتاح أساسي , اسم السيارة كقيم لا يمكن ان تكون خالية , و عمر السيارة المتوفرة والتي تصلح للبيع وهو ما بين 0 و 10 سنين , ولوحة السيارة وهو رقم لا يتكرر ابدا , واخير رقم العميل المالك لها كمفتاح اجنبي !!

    لاحظ انه مثال عبيط من رأسي !! تحليليا خطأ في خطأ ...

    لكن تقنيا .. لقد جمعت كل القيود في هذين الجدولين كتلخيص !!

    ارجع لهما وقت نسيانك لشيء ! فقد ينفعانك كثيرا .

    مع العلم انهما بمستوى الاعمدة ....

    التحدي الاول ...الان تخيل لو اردنا ان نجعل لاسم العميل قيدين !!

    أي انه غير خالي , و ايضا لا يمكن ان يتكرر !! كيف ؟؟ اريدها بطريقتين ! وهو كتحدي .... لكن انتظر !

    اقرأ الدرس كاملا ... ثم اجب على هذا التحدي ... لان الطريقة الاولى تعرفها والطريقة الثانية اتية في الطريق .

    ولكي اكون واضحا معك .. اليك اجابة خاطئة .. لكي لا تفكر فيها بتاتا :
    كود:
    create table customer (
    
    cno number primary key ,
    
    cname varchar2(10) not null ,
    
    cname varchar2(10) unique ,
    
    cage number check (cage between 18 and 30 ) );
    وستكون النتيجة هي .......
    كود:
    ORA-00957: duplicate column name
    (لقد كررت اسم عمود !!)







    الان اريدك ان تعرف انه لو حذفنا جدول العملاء .... فسوف يرفض اخونا الأوراكل .... اليك ما يلي :



    كود:
    drop table customer ;
    سوف يقول لك ... ان هنالك مفتاح اجنبي في جدول اخر(جدول السيارات) .. مرتبط ارتباط وثيق مع جدول العملاء ...
    كود:
    ORA-02449: unique/primary keys in table referenced by foreign keys
    اذن مالعمل ؟؟؟؟

    حذف هذا الارتباط او حذف ذلك الجدول الاخر (جدول السيارات) الذي به المفتاح الاجنبي

    الان انشأنا القيود بالطريقة الاولى .... على مستوى العمود ... وقد عرفنا ذلك ..

    اليك انشاء القيود بالطريقة الاولى ايضا ولكن على مستوى الجداول ...

    اريدك ان تحذف كل الجداول التي عملناها هذا الصباح .... بما فيها جدولي السيارات و العملاء (عملاء = زبائن)

    اليك انشاء القيود على مستوى الجدول :
    كود:
    create table customer (
    
    cno number ,
    
    cname varchar2(10) ,
    
    cage number ,
    
    constraint customer_cno_pk primary key (cno) ,
    
    constraint customer_cname_uk unique(cname) ,
    
    constraint cusotmer_cage_ck check(cage between 0 and 10 ) ) ;

    يتم فيها سرد الاعمدة بشكل طبيعي بدون قيود .. وبعد الانتهاء من الاعمدة .. يتم سرد القيود بشكلها الذي تراه ..
    .

    وهو اولا كلمة
    constraint ثم المسمى ....

    المسمى عادة وبالطريقة المعروفة والاصلية .... اسم الجدول ثم _ ثم اسم العمود المراد وضع القيد فيه , ثم _ ثم نوع القيد ..

    نوع القيد اذا كان
    uk فمعناه القيد unique

    واذا كان
    pk فمعناه Primary key

    واذا كان
    fk فمعناه foreign key

    واذا كان
    ck فمعناه check

    اما القيد
    not null فانه لا يمكن وضعه على مستوى الجدول !!

    لا اعرف لماذا .. ولا اعرف ما هو القصد الغبي وراء منع وضع هذا القيد بالذات , ولكن .... انا لله وانا اليه لراجعون.

    نرجع الى محور حديثنا ...

    ولا تنسى اننا نتبع الطريقة الاولى (الطريقة الاولى = انشاء القيود وقت انشاء الجدول) وهذه الطريقة الاولى على مستوى الجدول , ولا تنسى انها حل لتسمية القيود , ليس كمثل الطريقة الاولى على مستوى العمود
    !!

    يجب وضع اسم العمود المراد الحاق القيد الخاص به ...

    فمثلا السطر الاخير :
    constraint cusotmer_cage_ck check(cage between 0 and 10 )
    لاحظ انه ذكر العمود
    cage .... بين قوسين ..

    والسطر ما قبل الاخير ذكر اسم العمود بين قوسين ... وهلم جر .

    الان لاحظ الجدول الثاني (اعيد واكرر .. الطريقة الاولى .. على مستوى الجدول )


    كود:
    create table cars (
    
    carno number ,
    
    carname varchar2(10) ,
    
    carage number ,
    
    carpanel number ,
    
    cno number ,
    
    constraint cars_carno_pk primary key(carno) ,
    
    constraint cars_carage_ck check( carage between 0 and 10 ),
    
    constraint cars_carpanel_uk unique(carpanel) ,
    
    constraint cars_cno_fk foreign key (cno) references customer(cno) );
    كل شيء واضح الان ... انتبه الى جزئية المفتاح الاجنبي !!
    foreign key (cno)
    الـعمود
    cno هو العمود التابع للجدول cars أي لسان حاله يقول "هذا مفتاح اجنبي ... للعمود cno "

    واما الجملة التالية :
    references customer(cno)
    فكأنه يقول ... "يشير الى جدول العملاء ( عمود
    cno ) "

    الان ... اذهب وانظر الى الجدول الخاص بعرض القيود ... سوف ترى المسميات واضحة وصريحة , ولا يوجد أي مشكلة :



    كود:
    select * from user_constraints where table_name='CUSTOMER';

    كود:
    
    
    كود:
    
    
    كود:
    OWNER CONSTRAINT_NAME C TABLE_NAME SEARCH_CONDITION ------------ ------------------------------ - ----------------- ----- SCOTT CUSOTMER_CAGE_CK C CUSTOMER cage between 0 and 10 SCOTT CUSTOMER_CNO_PK P CUSTOMER SCOTT CUSTOMER_CNAME_UK U CUSTOMER

    هل رأيت المسميات .. واضحة هاه ,

صفحة 6 من 12 الأولىالأولى 1234567891011 ... الأخيرةالأخيرة

ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •