programmer_85 بتاريخ: 23 يونيو 2013 تقديم بلاغ مشاركة بتاريخ: 23 يونيو 2013 السلام عليكم اخواني الكرام اولا عفوا ع انقطاعي ع المنتدى وذلك لكثرة عملي ودراستي .. ولذا لم اتمكن من المتابعة بمناسبة عودتي للمنتدى مرة ثانية ... حبيت ان اضع بين يديك شرح متوافي وكامل حووول موضوع ادارة الكائنات في السكيما او مايمسى managing schema objects وقد اخترت الموضوع لاني رايته مهما جدا وكذا لايوجد عليه شرح متوافي وكامل .. وفي شرحي لهذا الموضوع اعتمدت اولا ع الكتب المعتمدة من اوراكل والامثلة حول ذلك الموضوع كما ان هذا الموضوع لايمكن ان نشرحه في جلسة واحدة بل يحتاج الى جلسات كثير حتى نعطي صورة واضحة وجلية حوله .. ونخرج باستفادة واضحة من ذلك ... فان شاء الله راح اطرح المنهج اي مايسمى syllables حول ذلك في الرد الثاني ... تقبلووووووا تحياتي لكم .. -------------------------------- تم تجميع دروس الدورة في ملف واحد بمعرفة الأخ / محمد طلعت ... في المشاركة رقم 19 من الموضوع جزاه الله خيرا 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 23 يونيو 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 23 يونيو 2013 المنهج الذي ان شاء الله سوف يتم تناول تدريسه في هذه الدوره : 1- اضافة وتعدبل الاعمدة ( add and modify columns) 2- حذف الاعمدة وكيفية اعداد الامر unused على الاعمدة 3- اضافة القيود (add constraints) 4- انشاء الفهارس indexes باستخدام الامر alter table 5- كيفية انشاء دالة function مبنية على الفهارس indexes 6- كيفية العمل مع الامر flashback 7- كيفية انشاء واستخدام الجداول الخارجية ملاحظة : كل نقطة تحوي ع عدة نقاط عديدة وهذا ماسوف نراه في بدياة الشرح ان شا ءالله تقبلووووا تحياتي 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
المبرمج الصاعد بتاريخ: 24 يونيو 2013 تقديم بلاغ مشاركة بتاريخ: 24 يونيو 2013 موضوع شيق يا مهندس ومن طوول الغيبااات جااااب الغنااائم ..... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 24 يونيو 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 24 يونيو 2013 الله يجزيك الف خير اخووي المبرمج الصاعد وربنا يبارك فيك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 24 يونيو 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 24 يونيو 2013 الدرس الاول اضافة وتعديل الاعمدة (add & modify columns) نسطيع ان نضيف او نعدل لبعض الاعمدة على الجدول الموجود في قواعد البيانات واذي قد تم تصميمه سابقا . يمكن ان نتسخدم الامر alter table لكي يقوم بتلك الوظيفة سواء كانت اضافة او تعديل او حتى حذف عمود او اكثر من الجدول الموجود . الصيغة العامة للامر alter table هي : ALTER TABLE table_name clause; هنا table_name هو اسم الجدول المراد العمل عليه وهو موجود في قواعد البيانات . اما عن clause فهو يتمثل في modify ,add and drop لبعض الاعمدة .. سنرى ذلك من خلال الامثلة . النقطة الاولى : كيفية اضافة الاعمدة ع الجدول قبل البدء فيها دعونا نقوم بانشاء جدول بسيط مكون من بعض الاعمدة وهو جدول orders او الطلبات باستخدام الامر create table create table orders (order_id number , sales_rep_id number); الان نريد ان نضيف اعمدة اخرى ع الجدول الموجود في قواعد البيانات .. فمن اجل ذلك وتسهيل الامر بدل من حذف الجدول نقوم باستخدام الامر ALTER TABLE والذي يقوم بالاضافة للاعمدة المرغوب في اضافتها وكذا تعديل او حذف لدينا هذا العمود المسمى ORDER_DATE سوف نقوم باضافته الى الجدول السابق وذلك عن طريق الامر الاتي : ALTER TABLE orders ADD ORDER_DATE DATE; قمنا في المثال السابق باضافة العمود ORDER_DATE الى الجدول السابق اضافة مع نوع البيانات له وهذا شي الزامي وهو من نوع Date لكن لا نسطيع ايضا ان نقوم باضافة عدة اعمدة في نفس الوقت الا في حالى واحدة وسوف اريكم اياها لاحقا مثال ذلك .. ALTER TABLE orders ADD order_date date ,order_name varchar2(20); يمكن ان نلخص من خلال المثاليين السابقين ماهو الاختياري وماهو الاجباري : alter table كلمة محجوزة وهي مطلوبة واجبارية في كتابتها . الكلمة المحجوزة add كلمة اجبارية في كتابتها الكلمة المحجوزة data_type مثل date او number او varchar2 هي كلمات اجبارية في كتابتها الكلمة المحجوزة default هي كلمة اختيارية اي ممكن نكتبها وممكن لا (سنرى ذلك في المثال التالي) الكلمة المحجوزة constraints كلمة اختيارية (سنرى ذلك ايضا ) المثال الثاني : كيفية اضافة default على العمود المرغوب فيه .. نرى ذلك من خلال المثال التالي الذي يوضح اكثر كيف نضيف الكلمة default ع العمود والتي تعتبر قيمة افتراضية تنضاف الى الجدول عندما لانريد اي قيمه اخرى .. فيقوم باضافة القيمة الافتراضية التي وضعناها في العمود عندما نتسخدم الامر insert ALTER TABLE orders ADD (status number(2) default 1); لقد قمنا باضافة عمود والذي اسميناه status وهو حالة الطلب هل هو مفعل او غير مفعل وقمنا باعطاءه قيمة افتراضية default تتمثل في الرقم 1 والتي بدروه يمثل انه الامر مفعل .. فعندما نقوم باضافة صف الى الجدول باستخدام الامر insert اذا لم نعطي قيمة لل status والا فسوف ياخذ القيمة الافتراضية 1 ويقوم باضافتها الى الجدول كصف جديد. ملاحظة : اذا استخدمت الصيغة التالية لاضافة عمود جديد مع قيمة افتراضية فسوف يعطيك خطا : ALTER TABLE orders ADD (status default 1 number(2)); لابد ان نكتب نوع البيانات number قبل القيمة الافتراضية default ملاحظة : يمكن ان نظيف عمودين او اكثر الى الجدول الموجود باستخدام الامر السابق مع بعض الاقواس المطلوبه مثال ذلك : ALTER TABLE orders ADD(ORDER_DATE date,status number(2) default 1); كيفية اضافة not null الى العمود : اذا اردت ان تنضيف عمود جديد الى الجدول الموجود في قواعد البيانات وهذا الجدول يحتوي على بعض البيانات فيجب ان تعلم شيئا مهما وليكن محفوظا في دماغك ز وهو لايمكن ان نضيف عمود الى الجدول الموجود الذي يحتوي ع بيانات ونعطيه القيد المسمى not null .. مثال ذلك . ALTER TABLE orders ADD order_name varchar2(20) NOT NULL; عندما ننفذ الكود السابق ع جدول يحتوي مسبقا ع بيانات فانه لايمكن ابدا ان ييتم اضافة هذا العمود .. لكن من الممكن ان نعالج الامر السابق ونجعله يقبل اضافة ذلك العمود المدعوم مع القيد NOT NULL وذلك باضافة قيمة افتراضية default الى ذلك العمود كما في المثال التالي يوضح اكثر ALTER TABLE orders ADD order_name varchar2(20) default 'BOOKS' NOT NULL; حيث ان الصيغة السابقة سوف تقبل بشكل صحيح لاننا اعطينا قيمة افتراضية وهي BOOKS والتي تقوم تلك القيمة الافتراضية بالتعديل في صف موجود في الجدول بنفس الاسم يتبع ....... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
عبداللطيف بتاريخ: 25 يونيو 2013 تقديم بلاغ مشاركة بتاريخ: 25 يونيو 2013 شرح موفق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mahmoud.rasras بتاريخ: 25 يونيو 2013 تقديم بلاغ مشاركة بتاريخ: 25 يونيو 2013 ممتاز الله ينور عليك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 25 يونيو 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 25 يونيو 2013 (معدل) تابع للدرس السابق ... كيفية تعديل ع الاعمدة : عندما نقول التعديل ع الاعمدة لانعني اننا نقوم بتغيير العمود من اسم الى اسم اخر (هذا يندرج تحت شي اسه rename سنرى ذلك لاحقا ان شاء الله ) ولكن المقصود به هنا هو كيفية تغيير نوع البيانات data type او الدقة والحجم precision and scale ليكن مثلا هذا الجدول لدينا بالاسماء الاتية : name null type order_id number sales_rep_id number order_date varchar2(20) فمثلا في الجدول السابق لدينا العمود order_date لديه نوع البيانات وهي data type من نوع varchar2(20) نريد ان نقوم بتغييرها من varchar2(20) الى نوع date اذا سوف تكون بالشكل الاتي : ALTER TABLE orders MODFIY order_date DATE; حيث ان قمنا بكتابته مباشرة اي نقوم بكتابه نوع البيانات المراد التغيير اليه دون كتابه النوع البيانات السابق كما هو موضح في المثال .. ومن الممكن ايضا ان نقوم بتعديل اكثر من عمود في نفس الوقت وقد يكونون مختلفيين بالوظيفة اي ممكن تغير النوع وفي نفس الوقت تغير الدقة والحجم مثال المثال التالي : (ALTER TABLE orders MODFIY (orde_date DATE, order_id number(10); لاحظ اننا قمنا بذلك .. لكن يجب ان يكون ذلك بين قوسين عندما تريد ان نعدل ع اكثر من عمود يجب ان يكون بينهم فاصلة معينة كما هو موضح . كيفية تعديل القيمة not null او القيد : لاضافة not null كقيد معين ع عمود يجب ان يكون مع modify وليس add مثال ذلك : ALTER TABLE orders modify order_date DATE not null; اذا اردنا مثلا ان نحذف not null من العمود فاننا لانستطيع ذلك ولكن يمكن ان نقوم بتغييره من not null الى null مثال ذلك : ALTER TABLE orders modify order_date DATE null; نقاط مهمة يجب ان تتبع فيها عند التغيير من نوع بيانات الى اخرى او الدقة والحجم : النقطة الاولى : لايمكن ان نحول او نغيير نوع بيانات العمود الى number ع عمود موجود مسبقا عليه بيانات من نوع characters كقيمة نصية النقطة الثانية : لايمكن ان نغيير حجم نوع بيانات من حجم اكبر الى حجم اصغر اذا كان الحجم الاصغر المراد التتغير اليه يوجد به رقم او نص اكبر من الحجم المغير اليه . مثلا : لدينا نوع بيانات من نوع number(3) يحمل الحجم 3 حيث يمكن ان نخزن الارقام فيه من 0 الى 999 فاذا كان لدينا الرقم 999 موجود ع صف ما. واردنا ان نغير الحجم الى 2 فانه لايمكن لانه يوجد رقم يحمل 3 خانات وهذا خطا. اما عند الزيادة فلا باس بها النقطة الثالثة : التغيير والتعديل من نوع بيانات الى اخر يجب ان يكون العمود خالي لايحتوي ع بيانات والا لايمكن ان نغير ذلك . فمثلا اذا اردنا ان نغيير من نوع بيانات date الى varchar2 )20( او العكس فاذا كانت توجد بيانات فانه لايمكن وسوف يعطيك رسالة يبين لك انه لابد ان يكون العمود خالي اي empty .( سنرى ذلك في حالة لايكون خالي ) كيفية اعداد تغيير اسم العمود من اسم الى اخر : يمكن ان نغير اسم العمود من اسم الى اخر وذلك باستخدام الامر الاتي وهو rename ALTER TABLE orders Rename column sales_rep_id to sales_agent_id; يمكن ان ترى الصورة الاتية التي في الارفاق لكي توضح لك اكثر حول النقاطة المهمة في حالات الجدول المختلفة مع نوع التغيير المطروح عليه .. يتبع ... تم تعديل 25 يونيو 2013 بواسطة programmer_85 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 29 يونيو 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 29 يونيو 2013 الدرس الثاني كيفية حذف الاعمدة drop columns والتعامل مع الامر unused اولا :كيفية التعامل مع حذف الاعمدة بامكاننا بعد ان راينا كيفية التعامل مع الاضافة والتعديل على الاعمدة .. من خلال ذلك سنرى كيفية حذف تلك الاعمدة الغير مرغوب فيها . عندما نقوم بحذف اي عمود من الجدول .. فان اي قيود constraints ع هذا العمود سوف يتم حذفها تلقائيا عند حذف ذلك العمود . لنرى الصيغة العامة لعميلة حذف الاعمدة ALTER TABLE table_name DROP COLUMN column_name; او ممكن تكون الصيغة بهذا الشكل من دون كتابة الكلمة المحجوزة column ..بشرط ان يكتب العمود المراد حذفه بين قوسين : ALTER TABLE table_name DROP (column_name); مثال ع ذلك : ALTER TABLE orders DROP COLUMN order_id ; OR ALTER TABLE orders DROP (order_id); حيث اننا عندما نذكر العمود المراد حذف فاننه نقوم بكتابته دون ان نكتب نوع البيانات له عند كتابتك لنوع البيانات له سوف يعطي لك خطا يبين لك ذكر بانك لاتستطيع ان تحذف هذا العمود ملاحظة : يعتبر الفرق بين الصغتين السابقتين هو عندما نكتب الكلمة المحجوزة column فانك لاتستطيع ان تحذف اكثر من عمود في جملة واحدة .. اي انها مقتصرة فقط ع حذف عمود واحد .. في حالة تريد ان تحذف اكثر من عمود في جملة sql واحدة فيجب ان تستخدم الصيغة الثانية وهي من دون الكلمة المحجوزة column .. نضع ذلك بين قوسين ومن ثم نذكر الاعمدة التي تريد حذفها . مثال : ALTER TABLE orders DROP( order_id,order_date); نقطة مهمة جدا : لايمكن ان تحذف كل الاعمدة التي في الجدول فعلى الاقل يجب ان يكون هناك عمود واحد موجود في الجدول .. اما اذا ادرت ان تحذف كل الاعمدة فلا يمكن ابدا . كيفية التعامل مع التقييد او مايمسى بـــ restriction ذكرنا فيما سبق حول حذف تلك الاعمدة عندما لاتكون لها اي تقييد وحصر ع جداول ثانية .. اما في حالة اذا اردنا ان نحذف عمود وهو في الاصل مقيد بقيد اسمه foreign key على جدول اخر فان الصيغة السابقة التي ذكرت لاتستطيع ان تحذف ذلك العمود ولذا فانه العملية سوف تفشل في كيفية حذف هذا العمود لنضرب مثال يوضح تلك الفكرة : لدينا هذا الجدول emp ولدينا جدول dept حيث ولدينا عمود اسمه deptno موجود في كلا الجدولين حيث ان deptno هو foreign key في جدول emp اما في جدول dept هو primary key ........ فعندما نقوم بحذف العمود deptno فاننا لانستطيع ابدا ان نحذفه بالصيغة السابقة لسببيين : الاول : ان العمود deptno هو في جدول dept مفتاح اساسي primary key ولايمكن ان نحذفه مالم نحذف constraints اولا (سوف نرى ذلك في درس constraints ) الثاني: ان العمود deptno في جدول emp مفتاح اجنبي foreign key مرتبط بجدول اخر وهو dept ولذا لايمكن حذف اي foreign key طالما انه يشير الى جدول اخر. اذا كيف لنا ان نحذف تلك الاعمدة التي بهذا الشكل ؟؟؟؟ الحل هو بامكاننا ان نتسخدم الصيغة السابقة لحذف ذلك لكن بشرط ان نضيف في اخر جملة sql كلمة محجوزة تسمى CASCADE CONSTRAINTS وهي تعتتبر من القيود وسوف يكون بالشكل التالي : ;ALTER TABLE emp DROP COLUMN deptno CASCADE CONSTRAINTS بتلك الجملة سوف يتم الحذف بشكل صحيح وناجح . يتبع ...... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
had103 بتاريخ: 30 يونيو 2013 تقديم بلاغ مشاركة بتاريخ: 30 يونيو 2013 جزاك الله كل الخير فعلاً موضوع رائع وشيق كما يتميز اسلوبك بالسهولة والمرونة في الشرح والكتابة مم يجعل كتابتك مميزة وجودتها في بساطتها شكراً لك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Transporter بتاريخ: 30 يونيو 2013 تقديم بلاغ مشاركة بتاريخ: 30 يونيو 2013 قد تكون هذه المعلومات عند المحترفين سهلة وتعتبر من الاساسيات وقد تكون عند المبتدئين مهمة جدا ولكن أجزم بأن من يقرأها لابد ان يستفيد سواء كمراجعة او كتعلم بصراحة شرح قمة في الابداع بأنتظار الدروس القادمة اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
medo_2005 بتاريخ: 30 يونيو 2013 تقديم بلاغ مشاركة بتاريخ: 30 يونيو 2013 جزاك الله خير الجزاء اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 30 يونيو 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 30 يونيو 2013 تابع للدرس الثاني تحدثنا في الجلسة السابقة عند موضوع كيفية التعامل مع حذف الاعمدة drop columns وتناولنا فيها النقطة الاولى اليوم ان شاء الله سوف نرى النقطة الثانية من الدرس الثاني والتي تعتبر مشابهة كثير الى حدما حذف الاعمدة الا وهو :: كيفية التعامل مع الامر UNUSED بدلا من التعامل مع كيفية حذف الاعمدة من الجدول Drop columns التي لم تعد مناسبة للاستخدام .. فاننا نقدم اليوم درس مشابة له وله حق الافضلية ع حذف الاعمدة الا وهو الامر unused عندما نقوم باعداد العمود الى unused فان هذا يعني ان العمود حذف ولم يعد جاهزا للاستخدام كذا ايضا انا اي قيود constraints علي هذا العمود فانه ايضا تم حذف تلك القيود عندما نعمل العمود ع شكل unused . لايمكن ابدا ع الاطلاق اعادة العمود واسترجاعه بعد ان عمل عليه اعداد unused . حتى ولو استخدمنا الامر flashback (سنرة ذلك الامر في الجلسات التالية) فانه لايجدئ اي نفع مع الامر السابق لاعادة العمود بعد ان تم اعداد ع شكل unused من الممكن ان نقوم باضافة عمود جديد يحمل نفس اسم العمود الذي عمل عليه الامر unused للجدول ولايمكن ان يحدث اي خطا او تاثير ع اضافة عمود بنفس الاسم للعمود الذي اعد ع شكل unused اذا قد يتسأئل احدنا .. طالما انه يوجد هناك امر للحذف وهو drop فلماذا نحتاج الى امر مشابة له الى حد ما وهو unused الامر عائد الى اسباب منها :: ان التنفيذ والاداء للامر drop column يكون مضادا في اعداد االامر unused كيف ذلك؟؟ لناخذ مثال : انت تعمل ع جدول كبير جدا من ناحية الاعمدة اي يحتوي ع اعمدة كبيرة جدا .. وانت ادرت ان تحذف بعض الاعمدة فربما انك قد تجد عملية التنفيذ والاداء في drop column هو غير مقبول بشكل موقت ... ولاسيما اذا كان النظام ثقيل جدا من ناحية الانتاج عندها يوجد البديل وهو هذا الامر set unused وذلك لان التنفيذ والاداء فيه سريع جدا .... لكن يجب ان تكون هناك نقطة في دماغك ؟؟؟ هي ان الجدول يحتوي ع اكثر عدد من الاعمدة 1000 عمود فاذا قمت باعداد مثلا عمود واحد ع شكل unused فان هذا العمود لازال محسوبا ضمن 1000 عمود بعكس ذلك عندما تستخدم الامر drop column الصيغة العامة للامر set unused ALTER TABLE table_name SET UNUSED COLUMN column_name; مثال ع ذلك : ALTER TABLE orders SET UNUSED COLUMN order_id; او من الممكن ان تعمل اكثر من عمود باستخدام الامر set unused من دون كتابة الكلمة المحجوزة column وكتابة ذلك بين قوسين (راينا ذلك في الدرس السابق ) ALTER TABLE ordes SET UNUSED (order_id,order_date); وكما راينا ايضا سابقا باننا لايمكن ان نحذف كل الاعمدة من الجدول .. فعلى الاقل يبقى هناك عمود واحد .. ايضا الامر set unused له تلك الخاصية لايمكن حذف كل الاعمدة من الجدول (راجع ذلك في الدرس السابق ) من الممكن ان نرى ماهي الاعمدة التي تم عليها set unused في الجدول .. وذلك من خلال data dictionary وهي user_unused_col_tabs عند استخدامك للــ data dictionary ( user_unused_col_tabs) فانه لايمكن ان يعطيك ماهي الاعمدة الت تم عليها الامر set unused وانما يعطيك ماهي اسماء الجداول التي تم على اعمدتها او بعض اعمدتها الامر set unused .. اضافة الى عدد الاعمدة التي تم عليها الامر set unused . مثال : desc user_unused_col_tabs; نقطة اخيرة ومهمة جدا : وهي كما ذكرنا سابقا بان العمود التي اعد عليه الامر set unused فانه لايمكن ابدا استرجاعه ولايمكن ايضا معرفة هوية ذلك العمود او تحديده . لكن من الممكن ان نقوم باستخدام الامر drop لحذف الاعمدة التي هي set unused يمكن ان نتسخدم الصيغة العامة : ALTER TABLE table_name DROP UNUSED COLUMNS; حيث ان الكلمات المحجوزة الثلاثة تبقى كما هي DROP UNUSED COLUMNS مثال يوضح اكثر .. ALTER TABLE orders DROP UNUSED COLUMNS; حيث ان المثال السابق يقوم بحذف تلك الاعمدة كليا سواء كانت 1 او 2 او اكثر جمعا التي اعد عليها الامر SET UNUSED . يتبع ... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 1 يوليو 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 1 يوليو 2013 الدرس الثالث كيفية التعامل مع اضافة القيود (add constraints ) لاشك انا عندما نقوم بانشاء جدول فاننا نقوم في بعض الاحيان باضافة بعض القيود منها مثلا ع سبيل المثال : المفتاح الاساسي primary key المفتاح الاجنبي foreign key الفحص check لكن ربما بعد انشاء الجدول نريد مثلا اضافة قيد جديد او حذف او تعديل فهل من الممكن ان نقوم بحذف الجدول واعادة انشاءة مرة ثانية فهذا يجعل الامر صعب جدا ومعقد .. لحل تلك المشكلة بامكاننا ان نتسخدم الامر الامر ALTER TABLE لاضافة القيود او حذفها او التعديل عليها لنرى ذلك سويا .. النقطة الاولى :كيفية اضافة القيود ( add constraints ) باستخدام الامر ALTER TABLE ؟؟ عندما مثلا نقوم بانشاء جدول واضافة القيود عليه .. فان اضافة القيود عليه لها طريقتين :: الطريقة الاولى : تسمى In -line وهي التي تكتب اضافة القيود بعد نوع البيانات للعمود مباشرة مثلا : CREATE TABLE EMP ( EMPNO NUMBER(3) PRIMARY KEY, ENAME VARCHAR2(20) NOT NULL); الطريقة الثانية : تسمى Out-line وهي عكس الطريقة الاولى حيث ممكن ان نضيف قيد معين بعد اضافة كل الاعمدة مثلا : CREATE TABLE emp ( empno number(4),ename varchar2(20), constraint empno_pk primary key (empno)); سنرى كيفية استخدام تلك الطريقتين بشكل اوسع وواضح وهي محور حديثا في ذلك .. الان : لنعيد قليلا الى كيفية انشاء جدول باستخدام الامر create table من دون اضافة قيود مثال عل ذلك : CREATE TABLE OREDERS ( ORDER_ID number, SALES_REP_ID NUMBER, ORDER_DATE date, CONFIRMATION_DATE date); الان وبعد ان قمنا بانشاء جدول باستخدام الامر create table نقوم باضافة القيود add constraints باستخدام الامر alter table المثال الاول : كيفية اضافة قيد وهو primary key باستخدام الامر alter table على العمود order_id حيث ان الطريقة المستخدمة في المثال التالي هي In-line ALTER TABLE orders modify order_id PRIMARY KEY; كما انا بامكاننا ان نستخدم الطريقة السابقة In-line كما هي في المثال السابق باضافة كلمة محجوزة وهي constraint مثال ع ذلك : ALTER TABLE orders Modify order_id Constraint pk_new_constraint PRIMARY KEY; حيث ان المثالين السابقين يعتبران متشابهان في شي وهو استخدام الطريقة In-line لكن ماهو الفرق بين المثال الاول والمثال الثاني الذي لايحتوي ع اضافة الكلمة المحجوزة constraint ؟؟؟ الفرق هو ان المثال الاول لم نعطه اسمه القيد constraint باستخدام الكلمة المحجوزة لذا تغاضينا عنه وفي هذا الحالة سوف يقوم مايمسى بـــ pre_defined اي النظام باعطاء اسم تلقائيا للقيد ع العمود order-id وهو المفتاح الاساسي primary key اما في المثال الثاني فقد قمنا باضافة الكلمة المحجوزة constraint واعطيناها اسم وهو pk_new_constraint الخاص بــ primary key وهو يسمى user_defined .. عند الاستعراض في data dictionary حول ذلك سوف يوضح اكثر في الاسم (سنرى ذلك لاحقا ان شا ءالله ) الطريقة الثانية : وهي out-line وهي تعتبر اضافة القيد منفصلا عن العمود الذي اعد له القيد مثال : ALTER TABLE orders ADD constraint pk_new_constraint primary key(order_id); لاحظ ان في هذا المثال لم نتسخدم الامر modify على العمود order_id وانما استخدمنا الامر add وهو بذلك يقوم باضافة قيد constraint على عمود وليس اضافة عمود. اذا لدينا الان طريقتين بامكاننا كيفية اضافة القيود constraints على النوع الاول منها وهو primary key يبقى هنا سوال يتحير في اذهاننا ..!!!! وهو انه طالما توجد طريقتين بنفس النمط والشكل .. فلماذا نحتاج الى الطريقة الثانية او الاولى .. لماذا نحتاج الى in-line مادام موجودة out-line او العكس ؟؟ الجواب هنا .......!!!! نحن عملنا الان اضافة القيد فقط على النوع الاول وهو primary key باستخدام الطريقتين in-line و out-line لكن في الامثلة السابقة عملنا فقط كيفية اضافة primary key على عمود واحد فقط .. اذا هل من الممكن ان نضيف primary key على اكثر من عمود في نفس الوقت ؟؟ من المعروف ان الــ primary key يكون فقط واحد في جدول ولايمكن ان يكون اكثر من ذلك ...!!! لكن توجد هناك طريقة لاضافة القيد primary key على اكثر من عمود الا وهي : composite primary key المفتاح الاساسي المركب لكن هذه الطريقة وهي composite primary key لايمكن فعلها الا فقط ع الطريقة الثانية وهي out-line ام in-line فلايمكن ابدا .. لهذا السبب تم اضافة تلك الطريقتين .. مثال يوضح اكثر حول اضافة composite primary key ع اضافة اكثر من عمود ... ALTER TABLE orders ADD Constraint pk_new_constraint primary key (order_id,order_date); ملاحظة :ان طريقة اضافة composite primary key لايمكن ابدا ان تكون الا مع الطريقة الثانية out-line . يتبع .............. اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 6 يوليو 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 6 يوليو 2013 تابع للدرس السابق كيفية اضافة القيد المسمى NOT null ان العمل ع اضافة القيد not null له بعض العيوب او التقييد مع الامر alter table ... حيث اننا قد وضحنا فيما سبق ونعيد ذلك هنا ان اضافة القيد not null لايمكن ان يكون فقط الا ع الطريقة الاولى وهي in-line اما طريقة out-line كما وضحنا فلايمكن ابدا مثال ع ذلك .. ALTER TABLE orders Modify order_id not null; او ممكن يكون كالاتي مع اسم القيد constraint مثال ع ذلك ALTER TABLE orders Modify order_id Constraint nn_ord_id NOT NULL اماذا ادرنا ان ننفذ القيد NOT NULL بهذا الطريقة وهي الطريقة OUT-LINE فلايمكن ابدا ALTER TABLE orders ADD Constraint nn_ord_id NOT NULL (order_id); حيث نستنتج من ذلك ان طريقة out-line التي قد تكون في الامر alter table او الامر create table لايمكن ابدا ان تعمل مع القيد not null . فقط طريقة in-line هي التي تعمل مع القيد not null سواء كان في الامر alter table او الامر create table . ملاحظة : االقيد not null كما اشارنا سابقا بانة لايمكن ان يكون الافقط ع الطريقة in -line لهذا السبب فانه لايمكن ان نضيف اكثر عمود في نفس الوقت ونعمل عليه القيد not null كيفية ااضافة القيد constraint ع الفحص check ان القيد check يعمل فقط على الطريقة out line اي بعكس القيد not null مثال ع ذلك : ALTER TABLE orders ADD Constraint ck_order-date CHECK(order_date <=confirmation_date); حيث ان القيد check يقوم بالعمل ع فحص هذا الشرط وهو ان طالما ان تاريخ الطلب يجب ان يكون اصغر او يساوي تاريخ التاكيد الغرض من ذلك هو كيفية اضافة هذا القيد وعلى اي طريقة يمكن ان يكون وقد وضحنا ذلك . كيفية اضافة القيد foreign key ان اضافة القيد foreign key ع عمود يجب ان يكون له علاقة او مرجع يشير الى ان العمود موجود او لدية العلاقة مع جدول اخر وهذا معروف في ذلك .. حيث ان وظيفة القيد foreign key هو انشاء العلاقات بين الجداول .. وحيث ان الطريقة الثانية وهو out-line التي تتطبق ع القيد foreign key لناخذ مثال ع ذلك .. ALTER TABLE orders ADD Constraint fk_order_sales_rep FOREIGN KEY (sales_id) REFERENCES sales_agents (sales_id); حيث ان العلاقة تتم من خلال علم هذا القيد foreign key ع ربط اكثر من جدول وليس من الضروري ان تكون اسماء الاعمدة هي نفس بعضها البعض في كل جدول من ناحية الاسم ... ملاحظة مهمة جدا: عندما نريد ان نقوم بتعديل ع قيد معين .. واقصد بالتعديل هنا هو ان القيد قد تم عمله ع عمود ما ولكن اردنا ان نعدل ذلك العمود من مثلا not null الى null او غير ذلك فان في الاصل في هذا الموضوع لاتوجد اي تعديل ع اي قيد constraint وانما نقوم بحذف هذا القيد ومن ثم نقوم بانشاء قيد الذي نرغب فيه ع العمود باستخدام الامر alter table .... يتبع .......... اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 7 يوليو 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 7 يوليو 2013 (معدل) تابع للدرس السابق كيفية ازالة وحذف الـــقيود constraints لازالة وحذف القيود constraints يمكت ان نتسخدم ايضا الامر alter table . اولا : كيفية حذف المفتاح الاساسي drop primary key . عندما نريد ان نحذف اي primary key فانه لايلزم ان نذكر اسم القيد المخصص بالــ primary key وانما فقط نذكر الــ primary key كما هو مبين في الصيغة العامة الاتية .. حيث ان الجدول المعطى هو لديه فقط واحد primary key . الصيغة العامة : ALTER TABLE table_name DROP PRIMARY KEY options; حيث ان options يتمثل في الاتي: 1- cascade سوف يقوم بحذف اي قيد مستقل . من جهة اخرى ان foreign key قد يشير الى primary key فبااستخدام الكلمة المحجوزة cascade نستطيع ان نحذف اي foreign key متعلق بــ primary key في الجدول الثاني .. مثال : ALTER TABLE orders DROP PRIMARY KEY CASCADE; 2- Keep Index or Drop Index هنا الــ primary key يكون متعلق ومتربط بالفهرس index حيث ان هذا الخيار يشير لك اذا ماادرت ان تحذف اي index عند حذفك للــ primary key او لا حيث ان القيمة الافتراضية default هي حذف اي index متربط مع الــ primary key عند حذفنا للــ primary key مثلا : ALTER TABLE orders DROP PRIMARY KEY ; OR ALTER TABLE orders DROP PRIMARY KEY cascade drop index; في حالة اذا اردت ان تحذف اي index متربط بالــ primary key فلك خيارين كما هو موضح في المثال السابق . اما ادرت ان تحتفظ بهذا index عند حذفك لاي primary key فيمكن ان نتستخدم الخيار keep index مثلا : ALTER TABLE orders DROP PRIMARY KEY cascade keep index; ثانيا كيفية حذف القيد Unique constraint ايضا لحذف اي unique انت لاتحتاج ان تذكر اسم القيد هنا .. فقط قائمة الاعمدة التي تشتمل ع هذا القيد الصيغة العامة : ALTER TABLE table_name DROP UNIQUE (col1,col2,col3,...)options; حيث ان options هنا هي نفسها التي توجد في حالة primary key (انظر الى كيفية حذف القيد primary key ) مثلا : ALTER TABLE orders DROP UNIQUE (order_id,order_id_rep)cascade drop index; ثالثا : كيفية ازالة القيود constraints باستخدام الامر alter table... drop.. في النقطيتين التي سبقت لاحقا راينا فقط كيفية ازالة القيد primary key والقيد unique لكن هنا سو نرى كيفية ازالة القيود constraints التي تم عملها على مثلا primary key لدينا الصيغة العامة : ALTER TABLE table_name DROP CONSTRAINT constraint_name options; حيث ان هنا options مقصود بها فقط cascade ... يجب ان نفرق بين النقطينت الاولتين والنقطة الاخيرة حيث ان الاولتين تهتم فقط بحذف primary key او unique اما النقطة الثانية فهي تهتم فقط بكيفية حذف اسم القيد التي تم عمله ع primary key بواسطة المستخدم او النظام اي ان المستخدم او النظام قام باعطاء اسم للــ primary key اسمه مثلا pk_cons الان نريد ان نحذف هذا اسم القيد مثلا : ALTER TABLE orders DROP CONSTRAINTS pk_cons cascade; كيفية حذف القيد not null. كما بينا سابقا باننا لايمكن ابدا ان نحذف القيد not null وانما باستطاعتنا ان نقوم بتغييرة من not null الى null وقد بينا ذلك سابقا في احد الدورس السابقة (راجع ذلك لتعرف اكثر ) ولايمكن ان نتسخدم الكلمة المحجوزة drop او الكلمة المحجوزة ايضا add وانما فقط الكلمة المحجوزة modify لان القيد not null لاتعمل مع الطريقة out-line مثال ع ذلك : ALTER TABLE orders MODIFY order_date null .............. يتبع ...... تم تعديل 7 يوليو 2013 بواسطة programmer_85 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
programmer_85 بتاريخ: 9 يوليو 2013 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 9 يوليو 2013 تابع للدرس السابق كيفية العمل مع التمكين والتعطيل ع القيود disabling and enabling constraints في بعض الاحيان انت تريد ان تغير بعض الاشياء ع القيود ولكن ليس بشكل ضروري ان نقوم بحذف هذا القيد .. لان الحذف يجعل من القيد منتهي تماما .. ولكن ربما اننا نريد ان نجعل بعض القيود في حالة غير موثرة وفعالة لوقت محدد .. في هذة الحالة يمكن ان نتسخدم disabling and enabling constraints . مثلا : ربما انت تحتاج بشكل موقت ان تستورد بعض البيانات من مصدر .. ولكن هذه البيانات ربما تكون غير متوافقة مع القيود .. فيمكن ان نتسخدم تلك disabling and enabling constraints للوقت المحدد لتلك البيانات . اولا : التعطيل disabling دعونا اولا نقوم بانشاء جدولين بينهما علاقة وهما مثلا جدول ports وجدول ships CREATE TABLE PORTS (port_id number(7), port_name varchar2(20), CONSTRAINT pk_ports PRIMARY KEY(port_id)); الان جدول ships CREATE TABLE SHIPS( ship_id number(7), ship_name varchar2(20), home_port_id number(7), CONSTRAINT pk_ships PRIMARY KEY (ship_id), CONSTRAINT fk_sh_po FOREIGN KEY (home_port_id) REFERENCES PORTS(port_id)); نقوم الان باضافة بعض الصفوف ع الجدولين اولا نضيف صفين على الجدول ports INSERT INTO PORTS VALUES(50,'aden'); INSERT INTO PORTS VALUES(60,'mukalla'); نقوم الان باضافة صف واحد على الجدول ships INSERT INTO SHIPS VALUES (10,'ahmed's ship',50); بعد ان قمن باضافة تلك الصفوف بنجاح .. الان لايمكننا ان نحذف الصف ports الذي لديه علاقة مع الصف في جدول ships مثلا : DELETE FROM PORTS WHERE port_id=50; عندما نقوم بتنفيذ الجملة السابقة وهي جملة الحذف فانه لايمكن ابدا ان يحذف تلك الجملة وسوف يعطيك خطا يبن لك ان هذا الصف لديه صف اخر مرتبط به اي بينهما علاقة في جدول اخر وهو جدول ships. بطريقة اخرى : نقول ان الصف الذي في جدول ports يسمىparent والصف في جدول ships الذي مرتبط بالصف في جدول ports يسمى child لو تاملنا في المثال السابق ان القيد المسمى foreign key هو الذي سبب المشكلة في ذلك حيث ان هذا القيد له علاقة مع صف اخر في جدول اخر .. اذا فكيف يمكن لنا ان نتعامل مع هذا القيد .. ؟؟ لاحظ قبل البداية في حل المشكلة الاولى .. ان لدينا مثلا المثال االتالي وهو يقوم بحذف صف من الجدول ports DELETE FROM PORTS WHERE port_id=60; حيث ان port_id والذي يساوي 60 نستطيع ان نحذفه بسهولة دون اي مشاكل .. والسبب يعود ان هذا الرقم ليس لديه اي رقم اخر او مرتبط به او علاقة بينهما في جدول ships اذا فهل من الممكن ان نحذف اي صف من الجدول ships بالتاكيد نعم نستطيع ان نفعل ذلك والسبب يعود ان الصفوف في الجدول ships تسمى child اذا طالما انه child فانه من الممكن حذفه بغض النظر عن foreign key .. عكس ذلك اذا كان في جدول ports لانه الجدول الاساسي parents طالما ان بعض الصفوف لديها علاقة من الصف في جدول ships راينا ذلك . اذا : من النقاط الملخصة السابقة نستلخص اننا لايمكن ان بعض الصفوفو طالما لها علاقة بص اخر في جدول اخر .. فهل من الممكن ان لانحذف ولانستطيع ان نفعل ذلك ؟؟ من خلال disabling and enabling يمكن ان نفعل ذلك .. نقوم فقط بتعطيل القيد foreign key لفترة محددة حتى نحذف الصف الغير مرغوب من جدول ports ALTER TABLE ships disable CONSTRAINT fk_sh_po; حيث ان القيد fk_sh_po هو اسم القيد الذي يتعلق ب foreign key عندما قمنا بانشاءه باستخدام الامر create table اذا الان نستطيع ان نحذف الصف الذي لم يحذف من قبل . DELETE FROM PORTS WHERE port_id=50; وهكذا نجعل هذا القيد في حالة التعطيل حتى ننهي مانريد ومن ثم اذا رغبنا في اعادة ذلك الى انشاءه الاصلي نستخدم enable constraint سنرى ذلك في الدرس التالي ان اشاء الله . يتبع ............ اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
sara saedawi بتاريخ: 23 يوليو 2013 تقديم بلاغ مشاركة بتاريخ: 23 يوليو 2013 جزاك الله خيرا ونفع بك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
محمد طلعت بتاريخ: 15 ديسمبر 2015 تقديم بلاغ مشاركة بتاريخ: 15 ديسمبر 2015 جزاك الله خيرا على هذا المجهود الرائع وجعله الله في ميزان حسناتك يوم القيامه وأردت المشاركه باي شيء فقمت بتنسيق هذا الكلام في ملف وورد وهو في المرفقات alter.rtf 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
خالد العجمي بتاريخ: 24 يونيو 2016 تقديم بلاغ مشاركة بتاريخ: 24 يونيو 2016 ممكن شرح الكتاب التاني sql من منهج اوراكل 11 ياريت بالعربي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
خالد العجمي بتاريخ: 23 أغسطس 2016 تقديم بلاغ مشاركة بتاريخ: 23 أغسطس 2016 (معدل) ياشباب بالله عليكم ضروري اريد عمل بروسيدجر procedure من خلاله استطيع عمل لوحة مفايح الهاتف بمعني عند الضغط على الزر 2لأول مرة يظهر 2 وعند الضغط عليه مرتين يظهر الحرف A وهكذا ممكن ضروري جزاكم الله خيرا تم تعديل 23 أغسطس 2016 بواسطة خالد العجمي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.