Professional Documents
Culture Documents
ننعرض في هذا الفصل الى مقدمة في ادارة قواعد البيانات Databaseوخاصة قواعد بيانات الوراكل والذي يعتبر
أحد النظم القوية في قواعد البيانات (Data Base Management System (DBMSلما له مميزات مقارنة بقواعد
البيانات الخرى .
الستعلم Query
هو نظام استفساري للستعلم عن بيانات معينة وغاليا ل يغير الستعلم في قاعدة البيانات حيث إن غالبية نظم
الستعلم عبارة عن قراءة فقط للبيانات
دوال Function
عبارة عن مجموعة من تعليما ت أو أوامر تستخدم ضمن مسمى وظيفي لداء عملية محددة وغالبا تعيد الدالة قيمة
معينه بعد تنفيذها
الجراء Procedure
مجموعة من التعليمات مثل تعليمات الدالة بهدف تنفيذ مهمة محددة لكن الجراء ل يعيد قيمة مثل الدالة
مخطط Schema
عبارة عن مجموعة من الكائنات Objectsمرتبطة بقواعد البيانات ويتألف مخطط الكائن من كائنات مثل الجداول
Tablesوالجراءات Procedureوالعروض Viewsوالفهارس ... Directoriesالخ
ويمكن ان يقوم مدير قواعد البيانات بالتخطيط لتطير وتنمية النظام المطبق ،وتحديد الحاجو لهذه التطورات المستقبلية .
ويسعى فريق العمل الذي يتكون من مديري قواعد البيانات DBAللحفاظ على سير العمل داخل الشركة بشكل متجانس
.وتتم تجزئة المهام بين هؤلء المديرين .
هو عبارة عن مجموعة الدوات البرمجيه ( البرامج ( التي تدير وتنظم قاعدة البيانات وتوجد علقة ارتباط بين هذه
البيانات تسمى علقة ( (Relationلذا احبانا يطلق عليها RDBMSأي نظام إدارة قواعد البيانات العلئقية
( الرتباطية (
يتميز نظام قاعدة البيانات أوراكل عن غيره من نظم إدارة قواعد البيانات الخرى بالتي:
-1القدرة الفائقة على استيعاب كميات كبيرة من البيانات قد يصل عدد السجلت إلى المليين مع الحفاظ على
المستوى العالي في الداء والسرعة عند استرجاع والتخزين والحذف
-2لسرية التامة والمن ل حتوائه على نظام الصلحيات والحقوق الذي يضمن تطبيق الشروط القياسية
والمنية للحفاظ على قاعدة البيانات
-3فعالية التحكم المركزي بالبيانات لذي يضمن :
•تقليل التكررات عير اللزمة في البيانات الدخلة ((No Repetition
•تجنب التناقض بين البيانات ((No Contradiction
•إمكانية التشارك في البيانات ((Data Sharing
•الحفاظ على تكامل البيانات فيما بينها ((Data Integrity
-4السيطرة التامة على عملية النسخ الحتياطي لقاعدة البيانات وحمايتها من الفقدان أو التلف مع امكانية
استرجاعها في أي لحظة
2
عمليات نظام إدارة قاعدة البيانات
يشتمل نظام إدارة قاعدة البيانات اوراكل على العمليات التالية
تستخدم هذه اللغة في تعريف وإنشاء الكائن ، Objectويمكن أن يكون الكائن ملفات وجداول بيانات ،فيمكننا
إنشاء وتعديل وحذف الكائن ويمكننا إنشاء امتياز لمستخدم معين ،أو انشاء كائن خيارات لفحص وإضافة
تعليقات إلى قاموس البيانات ومن هذه الوامر CREAT , DROP and ALTER :
تتيح هذه الوامر التعامل مع البيانات وتعديلها ضمن الكائن الموجود Objectومن هذه الوامر SELECT, :
DELETE,UPDATE and INSERT
تتيح هذه الوامر التحكم في قاعدة البيانات وأدائها كالصلحيات والمستخدمين والحقوق وغالبا ماتكون هذه
الوامر مخصصة للستخدام من قبل مدير قاعدة البيانات ( (DBAومن هذه الوامر GRANT and :
REVOKE
يتناول هذا الفصل التركيب الداخلي لنظام قتعدة البيانات أوراكل وفي نهاية هذا الفصل ستكون قادرا بمشيئة ال
على :
-1فهم العلقات بين الجداول
-2تعريف نمذجة العلقة
-3فهم مكونات قاعدة البيانات العلئقية
-4فهم العلقة بين الخادم والمستفبد
-5قهم الخادم SERVER
-6فهم المستفيد Client
مقدمة في قواعد البيانات العلئقية
يقدم هذا الفصل التركيب والبناء الداخلي لنظام إدارة قواعد البيانات أوراكل ،فيحتوي على وصف سريع لمكونات
أوراكل وتعتمد غالبية تطبيقات نظم قواعد البيانات في بنائها على أحد نماذج قاعد البيانات التالية:
3
في الماضي كان النموذج الول ( الهرمي ( الكثر انتشارا مع أجهزة الكمبيوتر الكبيرة Main Frameثم بدا النظام
الثاني ( الشبكي ( في النتشار وخاصة مع التوسع في بناء وتركيب شبكات الحاسب وكانت هناك صعوبات في
استخدام النظامين الول والثاني ( الهرمي والشبكي ( نتيجة لستخدام مؤشرات البرمجة ( ( Pointersلربط سجلت
البيانات بعضها مع بعض ،لذا نجد أن إضافة أو تعديل أو حذف السجلت يحتاج إلى المزيد من قهم طبيعة وعمل
المؤشرات وفي هذه الفترة الماضية طرق برمجة المؤشرات تكتب بلغة الكوبول (.(COBOL
أما النموذج العلئقي ( (Relationalفهو الكثر سهولة في الستخدام وفي برمجة تطبيقات نظم قواعد البيانات ومن
الناحية النظرية الكاديمية فيلزمك دراسة المفاهيم الساسية والضروربة لهذا النموذج العلئقي لهذا سنركز هنا على
ويعتمد نام هياكل البيانات العلئقبة ( (Relational Databaseعلى هيكل منطقي ويطلق عليه علقة (
(Relationalوعلى شكل ثنائي البعاد ( ( Tow dimensional data structureيتكون من صفوف
وأعمدة ويسمى جدول ( (Tableهذا بالضافة إلى عناصر البيانات ( (Data elementsتسمى في هذه
الحالة attributesعلوة على هذا يتم تنظيم هذه البيانات الفعلية في وحدة أو وحدات تسمى Tuplesتقسم إلى
صفوف Rowsأو (سجلت ( Recordsوأعمدة ( Columnsحقول ( Fieldsوالشكل التالي يبين
العناصر الساسية لجدول الموظقين Employees
4
العلقة بين الجداول
لربط علقة بأخرى تتحتاج إلى طريقة للرتباط .وهذه الطريقة تستخدم حقل Fieldيكون موجودا فب الجدولين
وحقل الرتباط يسمى في الجدول الول بالمفتاح الرئيسي ( (Primary Keyللجدول الل ويسمى يالمفتاح ال
( (Foreign Keyفي الجدول الثاني
5
مكونات قاعدة البيانات العلئقية RDBMS Components
ويتكون نظام تشغيل وتنظيم قاعدة البيانات ( (Kernelمن مجموعة من الوحدان البرمجية Softwareوالذي صمم
بيحكم وينظم وينعامل مع البيانات مابين حفظ واسترجاع وطباعة وكذلك تحديد المسؤليات وعمل نظم المان وحماية
البيانات
وعادة يحتفظ نظام قاعدة البيانات بقائمة من المستخدمين الذين لهم صلحية للتعمل مع تطبيق قاعدة البيانات والشكل
التالي يوضح بعضا من مكونات الـ Kernelفي نظام أوراكل
ويحوي قاموس البيانات Data Dictionaryوصفا لشكل البيانات ويطلق على هذا الوصف Meta Description
أو Meta Dataوهذا الوصف يرتبط بكافة الكائنا ت Objectsضمن قاعدة البيانات
وقاموس بيانات أوراكل يحتوي على مجوعة جداول صاعدة البيانات المخزنة عن طريق الـ Kernelوأيضا
على كائنات الفهارس Indexesكائنات العرض Viewsكائنات الستعلم والستقسار SQL and Queryكائنات
الجراء Procedureوالدوال ... Functionإلخ
6
الشكل التالي يوضح كيفية قراءة أو تعديل قاعدة بيانات باستخدام أوراكل
7
العلقة بين الخادم والمستفيد(العميل) Client/Server
الخادم Server
يحوي الخادم قاعدة البيانات المركزية ووظائفها ،وكذلك كافة العمليات الخلفية لحفظ هذه الفاعدة وبحوي ايضا أدوات
تشغيل وإيقاف فاعدة البيانات
والشكل التالي يوضح البناء الداخلي لنظام الخادم
مدير الخادم
بروتكول اتصال Server
الشبكة Net8 Manager
الخادم Server
نظام الستيراد
والتصدير نظم الستعلم
&EXP80 SQL * PLUS
IMP80
المترجمات
نظام التحميل
Pre
LOADER
compliers
المستفيد Client
أما المستفيد Clientفيحتوي على برامج الخدمات والبرامج المساعده والتي بمكننا تشغيلها عن بعد باستخدام الشبكة
كما يتضمن نظام المستفيد الوسيط الرسومي Graphical Interfaceالذي يسهل علينا استخدامه وتوجد أداة التصال
بين الخادم والمستقيد وهي Net 8لتقوم بعمليات الربط والتصال عبر الشبكة
بروتكول اتصال
-2المساعدون Assistants
الشبكة -3نظام الستعلم SQL*PLUS
((Net8
والشكل التالي يوضج مكونات حزمة البرامج للمستفيد Client
مدير السرية Security مدير النسخ الحتياطي للبيانات مدير الطبعة Instance
Manager Backup and Recovery Manager
Manager
ملخص الوحدة
تناوبنا في هذا الفصل نعريف التركيب الداخلي لنظام أوراكل وأهم مكوناته والعلقة بين الجداول ,وكذلك عكلية نمذجة
العلقة على الجداول وتم تعريف الخادم والمستفيد والعلقة بينهما .
جمل SQLالبسيطة
أهداف الفصل
نتااول عملية استرجاع البيانات في حالت مختلفة مشتخدمين في ذلك جملة SELECTوفي نهاية هذا الفصل ستكون
إن شاء ال قادر على :
•استرجاع البيانات بواسطة جملة SELECTالبسيطة
•فهم متطلبات وإرشادات كتابة جمل SQL
•استخدام العمليات الحسابية وأولويات تنفيذها مع جمل SQL
•استخدام الجمل اللحاقية على البيانات
•استخدام عبارة DISTINCTلمنع تكرار عرض البيانات
•عرض مواصفات الجدول
9
أساسيات جملة SELECT
جملة SELECT
تستخدم جملة SELECTلسترجاع البيانات المخزنة في جدول أو عدة جداول حيث أن عملية السترجاع ل تعدل في
هذه البيانات ويمكننا من خلل جملة SELECTأن نقوم بالتالي:
ملحظة
يمكن أن نستخدم كل أو بعض هذه المزايا في جملة استفسار واحدة
ملحظة
أوامر محرر SQL*PLUs
هنالك بعض الوامر البسيطة التي ستساعدك في كتابة وتحرير وتنفيذ الوامر على محرر SQL
ومنها
-1المر EDITويمكن كتابته : EDيستخدم هذا المر لتحرير آخر امر تم كتابته على مرر SQL
وعند تنفيذ هذا المر ستفتح لك شاشة المحرر (المفكرة( التي يمكنك خللها اعادة تحرير المر
وعند النتهاء من ذلك احفظ المر ثم اغلق شاشة المفكرة ولكن لحظ ل تكتب الفاصلة المنقوطة (;(
بعد نهاية المر في هذه الحالة فقط
-2المر Rوطريقة كتابته ( (/ويستخدم لعادة تنفيذ اخر امر SQLمحفوظ
حيث أن
COLUMNاسم الحقل
table_nameاسم الجدول
تسمية العمود alies
10
مثال
;SELECT * FROM s_dept
العمليات الحسابية
يمكن أن نستخدم العمليات الحسابية عند عرض البيانات دون أن تؤثر هذه المعالجة على البياانات المخزنة في
الجدول ،ويمكن أن يحتوي التعبير الحسابي على اسم الحقل قيمة ثابتة و العملية الحسابية
العمليات الحسابية
العمليات التي يمكن أن تستخدم هي:
+ -1الجمع
- -2الطرح
÷ -3القسمة
* -4الضرب
ويمكن استخدام هذه العمليات في حميع أجزاء جملة SELECTعدا الجزء الخاص بـ FROM
أولويات العمليات
-1الفواس الداخلية ثم الخارجية ثم السس
-2الضرب والقسمة
-3الجمع والطرح
11
ملحظة
العمليات التي لها نفس الولية كالجمع والطرح تنفذ من اليسار الى اليمين
العملية اللحاقية
يمكن أن نجري عملية إلحاق عدد من العمدة للجدول أو مجموعة حرفية نصية إلى حقول أخرى عند العرض
باستخدام العملية اللحاقية ||
مثال
SELECT first_name||last_name
FROM ;s_emp
Employees
-------------------------------------------------
CarmenVelasquez
LaDorisNgao
MidoriNagayama
MarkQuick-To-See
AudryRopeburn
MollyUrguhart
...
نلحظ ان السم الول اتصل بالسم الخير بدون وجود مسافات فظهر كانه اسم واحد ولكي توجد مسافات نكتب
تستخدم عبارة DISTINCTلمنع تكرار ظهور بيانات السجل المسترجع فمثل إذا أردنا أن نعرف على الوائف
التي ينتسب إليها الموظفون والمخزنة في جدول الموظفين نجد أن هنالك وظائف تتكرر حسب عدد الموظفين الذين
ينتمون إليها لمنع تكرار نستخدم عبارة DISTINCT
حيث أن
COLUMNاسم الحقل
table_nameاسم الجدول
تسمية العمود alies
DITINCTلمنع التكرار
ملخص الفصل
12
تناولنا في هذا الفصل كتابة جمل SQLالبسيطو (جملة (SELECTالتي تستخدم في استرجاع البيانات وكذلك بعض
القواعد الرشادية التي يجب اتباعها عند كتابة وتنفيذ جمل الـ SQLكما تناولنا استخدام العمليات الحسابية مع
جملة SELECTوالعملية اللحاقية وكذلك عبارة DISTINCTالتي تستخدم لمنع تكرار ظهور السجلت
13
استرجاع البيانات بشروط ترتيبها
اهداف الفصل
-1المعرفة التامة لسماء الجداول وأسماء الحقول وخصائصها وانواع البيانات
-2التعامل مع جملة SQLالبسيطة ((SELECT Statement
-3استخدام أوامر محرر SQL
لقد قمنا في الوحدة السابقة بالتعرف الى جملة الستعلم البسيط ( (SELECT Statementالتي من خللها تم
استرجاع البيانات من الجداول .وفي هذا الفصل سنتابع الحديث عن هذه الجملة يشكل أوسع ،حيث سنسترجع البيانات
من الجداول بناء على شروط معينة ،أو مرتبة حسب بيانات حقول معينة ،أي سندرس المور المتعلقة بجملة الشرط
في جملة السترجاع ،من حيث المعاملت الشرطية وطريقة التعبير عن الشرط والترتيب التصاعدي والترتيب
التصاعدي والترتيب التنازلي للبيانات
حيث أن
الشرح
تستخدم جملة WHEREلحصر البيانات لتي سيتم استرجاعها من الجداول وهي تتوي على شرط وتقع مباشرة بعد
المقطع FROMوعند تنفيذ الجملة سيتم استرجاعها بيانات الحقول المذكورة التي تحقق الشرط المذكور في جملة
WHEREويمكن أن تقارن الجملة الشرطية بين قيم أو حقول في الجدول أو تعبيرات حسابية أي أن جملة
WHEREتحتوي على مايلي:
•أسماء الحقول
•معاملت المقارنة
•قيم ثابتة
•متغيرات وتغبيرات حسابية
14
المور التي يجب أخذها بعين العتبار
-1عند استخدام حقول النص وحقول التاريخ في جملة الشرط يجب وضع القيم بين علمتي تنصيص مفردتين (‘ ‘ (
-2في حالة الحقول النصية يجب مراعاة حالة الحرف كبيرة أو صغيرة
-3في الة حقول التاريخ يجب مراعاة صيغة التاريخ ( (FORMATوالصيغة السلسية للتاريخ هي كما يلي DD-
MON-YY
المعنى المعامل
يساوي =
أكبر من <
أقل من >
أكبر من أو يساوي =<
اقل من أو يساوي =>
ل يساوي <>
تستخدم معاملت المقارنة في جملة الشرط لمقارنة تعبير بآخر في جملة WHEREكما في الصيغة التالية :
مثال
’WHERE hiredate=’01-SEP-96
WHERE sal<=1500
’WHERE name=’Ahmed
WHERE sal>< other
15
المعامل BETWEEN
يستخدم هذا المعامل لسترجاع بيانات الصفوف التي تعتمد على مدى من القيم أي البيانات التي تقع بين قيمتين
مثال
ملحظة
ستم استرجاع بيانات الموظف الذي يببلغ راتبه تماما 1500أو 2500أي أن جملة BETWEENتتضمن الحد
العلى والحد الدنى للقيم التي سيتم استرجاعها
-1المعامل IN
يستخدم هذا المعامل للبحث عن قيمة داخل قائمة من القيم فتحتوي هذه القائمة قيما ثابتة أو قد تكون هذه القائمة عبارة
عن جملة استعلم فرعي
مثال
أي أنه سيتم استرجاع اسم الموظف وراتبه ورقم القسم الذي يعمل به للموظفين الذين يعملون في قسم رقم 10أو قسم
رقم 30
-2المعامل .LIKE
يستخدم هذا المعامل للبحث عن نص معين داخل حقل نصي ،حيث سيتم مطابقة حروف النص المذكرة في جملة
الشرط
مثال
SELECT * FROM S_EMP
;’WHERE name LIKE ‘S%
أي أنه سيتم استرجاع جميع بيانات الموظفين الذين تبدأ أسماؤهم بحرف S
ملحظة
تستخدم الشارة %عوضا عن أي قيمة نصية ،قد تكون ل شيء أو أي عدد من الحروف للبحث مثل عن اسم معين
ينتهي بحرف Aنكتب ‘ ’A%وللبحث عن نص يحتوي حرف Aنكتب ‘ ’%A%وهكذا بإمكاننا أن نبحث عن أي
مقطع داخل حقل نصي معين
16
مثال
أي أنه سيتم استرجاع جمبع بيانات الموظفين الذين يكون الحرف الثاني في أسمائهم هو A
ملحظة
تستخدم الشارة _ عوضا عن حرف واحد فقط
يستخدم هذا المعامل لفحص القيمة (ل شيء( أي قيم القول التي ل تحتوي على بيانات
مثال
SELECT name, sal FROM S_EMP
;WHERE comm. IS NULL
أي أنه سيتم استرجاع اسم الموظف وراتبه للموظفين الذين ليس لهم عمولة أو لم يتم ادخال عمولتهم
تستخدم المعاملت المنطقية لترجع قيمة واحدة TRUEأو FALSEكنتيجة بين قيمتين منطقيتين او لعكس قيمة
منطقية من TRUEالى FALSEوالعكس
من خلل المعاملت المنطقية يمكننا تكوين أكثر من شرط داخل جملة WHEREباستخدام المعامل ANDاو
المعامل OR
-1المعامل AND
مثال
SELECT name, sal FROM S_EMP
;WHERE sal>=2600 AND comm<200
أي أنه سيتم استرجاع اسم الموظف وراتبه للموظفين الذين يزيد راتبهم عن 2600وتقل عمولتهم في نفس الوقت عن
200أي انه يجب يتحقق الشرطين لسترجاع البيانات
-2المعامل OR
17
يتطلب هذا المعامل أن تكون أي من القيمتين TRUE
مثال
SELECT name, sal FROM S_EMP
;WHERE sal <2000 OR deptno=30
أي أنه سيتم استرجاع اسم الموظف وراتبه للموفين الذين يزيد راتبهم عن 2000أو يعملون في قسم رقم 30أي أنه
يجب يتحقق أي من الشرطين لسترجاع البيانات
-3المعامل NOT
أي أنه سيتم استرجاع اسم الموظف وراتبه للموظفين الذين ل يعملون في القسمين رقم 20و رقم 40وفي هذه الحالة
تم عكس نتيجة المعامل IN
الصيغة العامة
}*|…SELECT {Field1, Field2,…,
FROM Table1
WHERE Condition
;]ORDER BY Field3 [ASC|DESC
حيث أن
اسم الجدول الذي سيتم استرجاع البيانات منه Table1
اسماء الحقول التي سبتم استرجاع بياناتها Field1, Field2
جملة شرطية أو اكثر تكون نتيجتها إما Trueأو Falseوتتكون من Condition
اسماء حقول وتعبيرات ومعاملت منطقية
اسم الحقل الذي سيتم الترتيب بناء عليه Field3
استرجاع البيانات مرتبة تصاعديا ويجوز عدم ذكرها ASC
استرجاع البيانات مرتبة تنازليا DESC
18
الشرح
عند استرجاع البيانات تستخدم جملة ORDER BYلترتيب البيانات حسب حقل معين أو عدة حقول وتأتي هذه الجملة
في نهاية جملة السترجاع SELECTوقد يكون هذا الترتيب تصاعديا (من القيمة الصغيرة إلى القيمة الكبيرة ( عند
استخدام المقطع ASCوقد يكون تنازليا (من الفيمة الكبيرة إلى القيمة الصغيرة( عند استخدتم المقطع DESC
مثال
SELECT * FROM S_EMP
)WHERE deptno NOT IN (20,40
;ORDER BY empno ASC
أي أنه سيتم استرجاع جميع بيانات الموظفين الذين ل يعملون في القسمين رقم 20ورقم 40وستكون البيانات مرتبة
تصاعديا حسب رقم الموظف
مثال
SELECT * FROM S_EMP
)WHERE deptno NOT IN (20,40
;ORDER BY empno DESC
أي أنه سيتم استرجاع جميع بيانات الموظفين الذين ل يعملون في القسمين رقم 20ورقم 40وستكون البيانات مرتبة
تنازليا حسب رقم الموظف
ملخص الفصل
تناولنا من خلل هذا الفصل موضوع استرجاع البيانات بشروط منالداول وموضوع ترتيب البيانات تصاعديا وتنازليا
كما وتطرقنا من خلل دراسة جملة الشرط إلى معاملت المقارنة والمعاملت المنطقية ومعاملت أخرى مثل
BETWEENو INو IS NULLومايتعلق بها من حيث طريقة الستخدام وتركيب جملة الشرط وأولويات
معاملت المقارنة والمعاملت المنطقية.
19
الدوال الحرفية
اهداف الفصل
تسنخدم هذه الدالة لتحويل البيانات من حروف كبيرة إلى حروف صغيرة ويتم استخدام هذه الدالة غاليا مع جمل أخرى
مثال .
)SELECT LOWER (name), LOWER (job
;FROM S_EMP
تسنخدم هذه الدالة لتحويل البيانات من حروف صغيرة إلى حروف كبيرة ويتم استخدام هذه الدالة غاليا مع جمل أخرى
مثال
)SELECT UPPER (name), UPPER (job
;FROM S_EMP
20
دالة تحويل الحرف الول من البيانات إلى حرف كبير INITCAP
تستخدم هذه الدالة لتويل أول حرف من بيانات القل المحدد إلى حرف كبير ويتم استخدام هذه الدالة غالبا مع الجمل
أخرى
مثال
)SELECT INITCAP (name), INITCAP (job
;FROM S_EMP
سيتم عرض اسم الموظف ووظبقته ولكن اول حرف في كلهما سيكون كبير
الصيغة العامة
)SUBSTR(Field1,N,M
حيث أن
الحقل المراد القتطاع منه String
اول حرف يبدأ عنده القتطاع N
عدد الحروف المراد اقتطاعها M
مثال
)SUBSTR('Ahmed',1,3
قيكون الناتج
Ahm
مثال
(SELECT SUBSTR (name, 1,2
;FROM S_EMP
21
سيتم اقتطاع الحرف الول والثاني من اسم الموظف وعرضها
تستخدم هذه الدالة لتحديد مكان أو موقع حرف في بيانات العمود أو الحقل
الصيغة العامة
(’INSTR )Field, ‘C
حيث أن
مثال
(’SELECT INSTR (name, ‘l
;FROM S_EMP
INSTR name
--------------------
2
0
0
4
تستخدم هذه الدالة لمحاذاة البيانات ناحية اليمين حيث يتم ملء حرف معين (أو حروف ( يمين البيانات
الشكل العام
حيث أن
تستخدم هذه الدالة لمحاذاة البيانات ناحية اليمين حيث يتم ملء حرف معين (أو حروف ( يسار البيانات
الشكل العام
حيث أن
مثال
)’SELECT name, LPAD (sal, 7,’#
;FROM S_EMP
23
حذف و تعديل البيانات
دالة حذف بيانات ناحية يمين الحقل RTRIM Function
تستنخدم هذه الدالة لحذف بيانات من ناية يمين العمود او الحقل المحدد
الصيغة العامة
)’RTRIM (COL | VALUE,‘ String
حيث أن
مثال
تستخدم هذه الدالة لحذف بيانات من ناحية يسار العمود أو الحقل المحدد
الشكل العام
)’LTRIM (COL | VALUE,‘ String
حيث أن
24
مثال
الشكل العام
LENGTH (COL | VALUE)
مثال
SELECT LENGTH (name), LENGTH (‘WELCOME’)
FROM S_EMP;
:الشكل العام
TRANSLATE (COL|VALUE, FROM, TO)
25
حيث أن
مثال
)’SELECT name, TRANSLATE (name,’MI’,’WY
;FROM S_EMP WHERE sal=1512.5
name )TRANSLATE(name
-------------------- --------------------
SAMI SAWY
تستخدم هذه الدالة ليجاد اللفظ الصوتي للبيانات (المتغيرات( الموجودة في جدول معين حتى ولو كان هناك اختلف
في بعض الحرف الهجائية
الشكل العام:
)SOUNDEX (COL|VALUE
حيث أن
ملخص الفصل
تناولنا الدوال الحرفية الخاصة بتحويل حالة الحروف من حروف كبيرة إلى حروف صغيرة والعكس وكذلك ضبط
محاذاة الحروف داخل النص ومن الدوال الهامة الني تناولناها ايضا دوال حذف البيانات ودوال عرض اللفظ الصوتي
وتعديل بيانات الجداول .
26
دوال التاريخ والتحويل
أهداف الفصل
دوال التاريخ
الوفت هو الحياة والتاريخ هو أصل المم لذا لتا لنتعمق في كيفية استخدام دوال التاريخ
الدالة Sysdate
هذه الدالة تقوم بإعطاء تاريخ اليوم الحالي أي التاريخ المخزن في جهاز الكمبيوتر الذي ينفذ عليه هذا المر ويتم
تخزين التاريخ وهمي يسمى Dualوهو موجود أصل داخل لغة أوراكل لذلك يجب أن تتم عملية استدعاء التاريخ من
هذا الجدول
مثال
الدالة NEXT_DAY
تستخدم هذه الدالة لعرض التاريخ الذي يوافق التاريخ التالي للتاريخ المعطى
فعلى سبيل المثال إذا كان التاريخ الموجود هو 7/7/2003وطلب من الجهاز تحديد اليوم الذي يصادف يوم الجمعة من
نفس الشهر فإنه يعطي 11/7/2003
الشكل العام
)NEXT_DAY (DATE,CHAR
حيث إن DATEهو التاريخ المعطى والمراد إيجاد التاريخ لليوم الذي يليه من خلل وضع اسم اليوم داخل المتغير
CHAR
مثال
نتيجة التنفيذ
NEXT_DAY
-------------------
11/7/2003
27
دالة تحديد اليوم الخير من كل شهر LAST_DAY
الشكل العام
)LAST_DAY (DATE
مثال
بفرض أن تاريخ الهاز SYSDATEهو 2/2/2003فإن نتيجة للجملة السابقة هي كما يلي :
(LAST_DAY(SYSDATE
--------------------------------
28/2/2003
ملحظة
يمكنك أن تقوم بطرح تاريخ من تاريخ آخر كالمثال التالي
الدالة MONTHES_BETWEEN
الشكل العام
MONTHES_BETWEEN )(DATE1,DATE2
مثال
MONTHES_BETWEEN )’(’01-SEP-95’,’11-JAN-94
سيكون الناتج
1.9774194
28
الدالة _MONTHES ADD
)ADD_MONTHES (DATE,M
حيث أن
مثال
)ADD_MONTHES (‘7-JAN-99’,6
JUL-99-7
الدالة ROUND
تستخدم هذه الدالة لعرض اقرب بداية شهر أو سنه لتاريخ معين تحدده
ملحظة :تستخدم هذه الدالة أيضا للبيانات الرقمية للتقريب وسيتم شرحها في باب الدوال الرقمية
الصيغة العامة
حيث أن
مثال
)’ROUND (’07-MAY-96’, ‘MONTH
JUN-96-01
29
مثال
)’ROUND (’07-MAY-96’, ‘YEAR
تستخدم هذه الدالة لعرض تاريخ اول يوم في شهر أو سنه لتاريخ معين تحدده
ملحظة :تستخدم هذه الدالة أيضا للبيانات الرقمية للتقريب وسيتم شرحها في باب الدوال الرقمية
الصيغة العامة
مثال
مثال
JAN-96-01
30
دوال التحويل
يتم تحويل البيانات من شكل إلى اخر وتوجد دوال خاصة بالتويل ومنها
-1الدالة TO_CHAR
تستخدم هذه الدالة لتحويل التاريخ او الرقام الى جملة حرفية حيث يتم تغيير شكل التاريخ او الرقام من
صورة إلى اخرى
الشكل العام
)’TO_CHAR (DATE,’FMT
حيث أن
DATEقيمة التاريخ
الصورة الجديدة FMT
مثال
)’SELECT TO_CHAR (SYSDATE,’DAY, DD MON YY
;FROM DUAL
لنفرض أن تاريخ الجهاز ( (SYSDATEهو 7/7/2003فإن نتيجة التنفيذ للجملة السايقة هي كمايلي:
(‘TO_CHAR (SYSDATE,’DAY, DD MON YY
-----------------------------------
MONDAY 7 JUL 03
ملحظة
-1اذا كتبنا YYYYفانه سوف يتم عرض السنة كاملة متل 2003
-2اذا كتبنا MMفإنه سوف يتم عرض رقم الشهر مثل 06
-3اذا كتبنا MONTHفانه سوف يتم عرض اسم الشهر كامل مثل July
-4اذا كتبنا DYسيتم عرض أول ثلثة حروف من اليوم
-5اذا كتبنا DAYسيتم عرض اسم اليوم كامل
-6اذا اردنا عرض الساعة نكتب HH24:MI:SS AMمثل PM 15:45:32
31
ثانيا التحويل من أرقام الى جملة حرفية
الشكل العام
)’TO_CHAR (NUMBER,’FMT
حيث أن
NUMBERالرقم
الصورة الجديدة FMT
مثال
(TO_CHAR (6500500,’$9,999,999
-----------------------------------
6,500,500
ملحظة
-1عندما نكتب 9فإننا نعني يها خاتة رقم
-2عندما نكتب ( ( ,يتم طباعة الفاصلة
-3عندما نكتب( ( .يتم طباعة الفاصلة العشرية
الدالة TO_NUMBER
تقوم هذه الدالة بتحويل القيمة الرقمية المخزنة عى شكل حرف CHARإلى قيمة رقمية فعليه NUMBER
الشكل العام
)TO_NUMBER (VALUE
حيث
قيمة مخزنة على شكل أرقام حرفية سيتم عرضها على شكل قيم رقمية VALUE
مثال
لنفرض أن لدينا حقل اسمه NUMفي جدول DATAبه ارقام ولكنها ارقام رفيه أي انها تعامل معاملة الحروف فل
تدخل في العمليات الحسابية فعند تنفيذ هذه الدالة ستم تحويل القيم إلى فيم رقمية يمكن ان تدخل في العمليات الحسابية
32
NUM (TO_NUMBER(NUM
----------------------------------------------------------------------------------------
9236 9236
7526 7526
ملحظة
العمودان بهما نفس القيم ولكن يوجد اختلف في النوع
الدالة TO_DATE
تقوم هذه الدالة بتحويل المتغير الحرفي داخل اشاؤة النص الى متعير بشكل تاريخ المثال التالي يوضح ذلك :
(’SELECT TO_DATE (‘JULY 7,2003’,’MONTH DD, YY
;FROM DUAL
ملخص الفصل
تناولنا في هذا الفصل دوال التاريخ الخاصة بالتعامل مع كامل الصيغ للتاريخ والوقت واستعراضها بعدة أشكالها ثم
تطرقنا دوال التحويل التي تعمل تحويل حالت الكتابة من نص إلى تاريخ و بالعكس كذلك من أرقام الى نص
33
الدوال الرقمية
أهداف الفصل
تستخدم هذه الدالة ليجاد القيمة المطلقة لرقم معين وغالبا يتم استخدان هذه الدالة مع جمل أخرى
الشكل العام
(ABS )COL|VALUE
حيث أن
مثال
34
نلحظ أن قم العمود hierdate-sysdateقي سالبة ولكي نجعلها دائما موجبة نأخذ القيمة المطلقة لهذا العمود ونكتب
الشكل العام
)POWER (COL|VALUE,P
حيث أن
مثال
35
-3دالة الجذر التربيعي SQRT Function
الشكل العام
(SQRT (COL|VALUE
حيث أن
مثال
تستخدم هذه الدالة لتقريب العدد إلى اقرب رقم عشري أو صحيح
الشكل العام
)ROUND (COL|VALUE, N
حيث أن
36
مثال
الشكل العام
TRUNC )COL|VALUE,N(
حيث أن
37
دالة باقي القسمة MOD Function
الصيغة العامة
(MOD )VALUE1, VALUE2
حيث أن
قيمة عدد بة VALUE1
قيمة عددية VALUE2
مثال
SELECT DIGIT1, MOD (DIGIT1, 7) FROM DIGITS
تستخدم هذه الدااة بفحص إشارة الرقم فإذا كانت الشاؤة موجبة تعود بالقيمة ( (1أما اذا كانت الشارة سالبة فتعود
بالقيمة ((-1
مثال
ملخص الفصل
38
تناولنا في هذا الفصل الدوال الرقمية في لغة الستعلم والستفهام في نظام قواعد البيانات اوراكل وقد قسمنا هذه
الدوال حسب وظائفها فمنها مايتعامل مع سجل أو صف من البيانات ومنها مايتعامل مع مجموعة من السجلت
RECORDSاو العمدة (COLUMNSالحقول(
حيث تطرقنا الى دالة القيمة المطلقة والدالة السية والجذر التربيعي وكذلك دوال التقريب ودالة باقس القسمة والشارة
استرجاع البيانات
أهداف اافصل
39
العمدة التي نريد ظهروها ولحظ كذلك أنه من الضروري كتابة العمدة التي عنSELEST حيث نكتب بعد
العمودان اللذان تم ربطWHERE طريقها تم الربط(التي يتساوى فيها الحقول في الجدولين( ونكتب بعد كلمة
الجدولين عن طريقهما
ملحظة
table.column نكتب اسم الجدول اول ثم اسم العمود وبينهما نقطه
مثال
40
SELECT S_EMP.DEPT_ID, S_EMP.LAST_NAME,S_DEPT.NAME
FROM S_EMP, S_DEPT
WHERE S_EMP.DEPT_ID = S_DEPT.ID AND S_DEPT = 41;
مثال
SELECT S_EMP.ename, S_EMP.job, S_EMP.sal, salgrade.grade
FROM S_EMP, salgrade
WHERE S_EMP.sal BETWEEN salgrade.losal AND salgrade.hisal;
OUTER JOIN-3
يستخدم هذا النوع لرؤية السجلت في الجدول الثاني التي ل يقابلها سجلت في الجدول الول
الصيغة العامة
ملحظة
( في هذا النوع من الربط حيث نكتبه بجوار السم الحقل الذي ل يحتوي هلى قيمة+( نسنخدم المعامل
41
مثال
SELF JOIN-4
تستخدم لربط صف من جدول بصف اخر من نفس الجدول
42
: مثال
SELECT worker.last_name||' works for '||
manager.last_name
FROM s_emp worker, s_emp manager
WHERE worker.manager_id = manager.id;
وهذا السم يقومmanager ومرة أخرى ياسمworker باسم مستعارs_emp في اخر مثال قمنا باستدعاء الجدول
محل اسم الجدول وقد استخدمناه للتسهيل
مثال
الخاصة باسترجاع بيانات من اكثر من جدول كغرض رقم اقسم الموظفين منSQL تناولنا في هذا الفصل جمل
جدول الموطفين وتطرقنا كذلك إلى عملية استرجاع البيانات من خلل اسم مستعار
43
الدوال الرياضية والحصائية ودوال المجموعات
أهداف الفصل
هناللك مجموعة من القترانات الرياضية والحصائية التي تتعامل مع مجموعة من السجلت لخراج قيمة واحدة
محدودة ومن هذه القترانات مايلي:
تقوم هذه الدالة بعملية حصر الحقول في عمود معين والتي ل تحمل القيمة NULL
الشكل العام
)COUNT (DISTINCT|ALL|EXP
حيث أن
تستخدم لمنع احتساب الحقول التي تحمل القيمة NULL DISTINCT
يكون المدى هنا جميع الحقول حتى المكررة ALL
يمكن استخدام اسم العمود EXP
مثال
;SELECT COUNT (DISTINCT NAME) FROM S_EMP
تقوم الجملة السايقة بتحديد عدد الصفوف للحقل NAMEمن الجدول S_EMP
مثال
حساب عدد السجلت في الجدول
;SELECT COUNT (*) ”TOTAL” FROM S_EMP
44
-2دالة أكبر قيمة MAX
الشكل العام
)MAX (DISTINCT|ALL|EXP
مثال
;SELECT MAX (DISTINCT salary( FROM S_EMP
الشكل العام
)MIN (DISTINCT|ALL|EXP
مثال
;SELECT MIN (DISTINCT salary( FROM S_EMP
)SUM (DISTINCT|ALL|EXP
مثال
;SELECT SUM (salary( FROM S_EMP
تقوم هذه الجملة بعرض مجموع رواتب الموظفين في جدول الموظفين S_EMP
الشكل العام
(AVG )COLUMN
الشكل العام
(STDDEV )DISTINCT|ALL
مثال
لبجاد النحراف المعياري للرقام الواردة في حقل الرواتب في جدول الموظفين S_EMP
مثال
;SELECT VARIANCE (SALARY( FROM S_EMP
دوال المجموعات
هي عبارة عن جميع الدوال السابقة او أي دوال اخرى ولكن باستخداماها مع الدالة
BY GROUPممايؤدي إلة تجزئة الجدول الرئيسي إلى مجموعات اصغر منه حسب شرط مغين
الشكل العام
GROUP BY COL_NAME
هو اسم العمود في الجدول والذي سيتم تقسيم الجدول إلى مجموعات COL_NAME
صغيرة بناء غليه
46
”SELECT dept_id, COUNT (*) ”Number
FROM s_emp
WHERE dept_id = 41
;GROUP BY dept_id
فان المخرجات هي
DEPT_ID Number
------- ------
41 4
نلحظ ظهور سطر واحد من البيانات للقسم 41فالدالة GROUP BYقامت بتجميع القسم 41مع بعضه (وكأنها
عملت جدول خاص بها( وهذه واضح عندما استخدمنا دالة COUNTاظهرت ان عدد السجلت 4رغم أن عدد
السطر هو واحد
مثال
اذا اردنا اظهر بيانات من جدول الموظفين EMPوعمل مجموعات بشرط أن تكون الوظيفة MANAGERأو
ANALYSTاو SALESMAN
ملخص الفصل
ركزنا في هذا الفصل على جمل SQLالخاصة بالدوال الرياضية والحصائية التي تقوم بغرض قيمة واحدة من
البيانات مثل MAX,MIN,AVGوغيرها ومن ثم دوال المجموعات التي تكون غالبا مع المر GROUP BY
والتي تقوم بفرز الجدول الى جدول اصغر منه أو يساويه
47
48
الستعلمات الفرعية
أهداف الفصل
في نهاية هذا الفصل ان شاء ال ستكون قادرعلى
الستعلم الفرعي
مقدمة
لنفترض أنك ترغب في كتابة استعلم ليجاد بيانات الموظفين الذين تزيد رواتبهم عن راتب أحد الموظفين
في هذه الحالة تحتاج الى استعلمين
-1استعلم ليجاد راتب الموظف المعني
-2استعلم ليجاد الموظفين الذين تزيد رواتبهم عن المبلغ المحسوب في الستعلم الول
ويمكنك دمج الستعلمين وذلك برتكيب احد الستعلمين في الخر ،الستعلم الداخلي سوف يعود بقيمة (قيم( والتي
يستخدمها الستعلم الخارجي (الرئيسي(
إن استخدام الستعلمات الفرعية يشبه تماما تنفيذ الستعلمين بشكل متتال واستلعم نتيجة الستعلم الول كنتيجة
بحث في الستعلم الثاني
هو جملة استفسار SELECTمضمنة داخل جملة استفسار رئيسية لسترجاع قيمة أو مجموعة من القيم ليتم
استخدامها في الستعلم الرئيسي انظر الشكل التالي
49
الشكل العام
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
50
ملحظة
-1الستعلم الداخلي(الفرعي( ينفذ اول
-2ناتج الستعلم الداخلي(الفرعي( يستخدم في الستعلم الرئيسي
51
أنواع الستعلمات الفرعية
يمكن تصنيف الستعلم الفرعي حسب
-1استعلم فرعي أحادي الصف يسترجع صفا واحدا
-2استعلم فرعي متعدد الصفوف يسترجع أكثر من صف واحد
-3استعلم فرعي متعدد العمدة يسترجع اكثر من عمود
نستخدم هذا الستعلم في حالة ان الستعلم الفرعي ل يعود ال بسطر واحد انظر الى المثال التالي
يقوم الستعلم الفرعي في هذا المثال ياستخراج أرقام الموظفين الذين اسمهم ' 'Financeاو رقم منطقتهم 2من
جدول القسام فهذا لستعلم سيعود بعدة فيم يأخذها الستعلم الرئيسي ويستخرج اسماء الموظفين على اساسها
ملحظة
-1أنواع معاملت المقارتة الخاصة بهذا النوع هي
IN, ALL, ANY
-2اذا استخدمنا معاملت الستعلم احادي الصف مع استعلم متعدد فان البرنامج يعطيك رسالة خطأ
ORA-01427:single-row sub query returns more than one row
ملخص الفصل
في هذا الفصل تعرفنا على الستعلمات الفرعية واهميتها وشروطها وانواعها الحادية والمتعددة
52
إنشاء الجداول
أهداف الفصل
تعريف الجدول
قلنا سايقا أن الجدول أو الملف يتكون من مجموعة من السجلت RECORDSوكل سجل يتكون من مجموعة من
الحقول FIELDSكل حقل به مجموعة من الحروف او الرقام وهذه الحقول لها طول أو عرض
ويعرف الملف أو الجدول بأنه مجموعة من العمدة ويمثل كل عمود بحقل من الحقول ولكل حقل نوع لبياناته فيه
يتكون هذا الحقل من الحروف البجدية ,الرقام ,والرموز الخاصة .وطول أو عرض هذا الحقل يصل الى 240
حرف ول بد من تحديد طول أو عرض الحقل وهو اجباري واذا لم يتم التحديد سيفتض البرنامج انه 1
الشكل العام
)var CHAR (size
مثال
)FirstName CHAR (20
53
-2المتغير الحرفي VARCHAR2
يتكون هذا الحقل من الحروف البجدية ,الرقام ,والرموز الخاصة .وطول أو عرض هذا الحقل يصل الى 240
حرف ل يوجد طول افتراضي للحقل
مثال
)FirstName VARCHAR2 (20
ويتكون من الرقام ( (9-0,1,2والشارة +أو _ ويمكن أن يحتوي على العلمة العشرية أو الفاصلة العشرية ( (.
والحد القصى لعدد خانات الرقم يصل إلى 40خانة وتحديد طول أوعرض الحقل اختياري وكذلك الشارة أو الفاصلة
العشرية
مثال
)Serial_No NUMBER (10
مثال
(Mark NUMBER (10,3
يتكون هذا الحقل من مجموعة الرقام للدللة على اليوم والشهر والسنة وطول هذا الحقل 8خانات على القل ويمكن
أن يتغير شكل كتابة التاريخ بذكر اسم الشهر
مثال
HireDate DATE
54
إنشاء جدول
إنشاء جدول باستخدام أمر CREATE
الشكل العام
حيث ان
مثال
( CREATE TABLE SCHOOL
S_no NUMBER (5) NOT NULL,
S_NAME CHAR (20).
S_LOC CHAR(15),
;)S_DATE DATE
التقييد CONSTRAINT
يتم عن طريق التقييد فرض بعض القواعد على الحقول مثل جعل حقل مفتاح أساسي منع ترك حقل
فارغ ومن أنواعه
•NOT NULL
•UNIQUE
•PRIMARY KEY
•FORIGN KEY
الشكل العام
1
55
-غير فارغ NOT NULL
مثال
CREATE TABLE friend...
phone VARCHAR2(15) NOT NULL,...
)last_name VARCHAR2(25
CONSTRAINT friend_last_name_nn NOT NULL,...
-2فريد UNIQUE
هذا المر بجعل الحقل (العمود( فريد فل يسمح بتكرار صف من الصفوف فكل صف ل يوجد ال مرة واحدة
ملحظة
-1يمكن أن يحتوي الحقل الفريد UNIQUEعلى قيمة فارغة بشرط أن يكون حقل واحد فقط فريد UNIQUE
-2وبمكن أن يوجد في الجدول أكثر حقل فريد
مثال
ل يمكن لي جدول أن يحتوي ال على مفتاح أساسي واحد وإذا قمنا بتحويل حقل الى مفتاح أساسي فهذا الحقل يعتبر
حقل فريد ولكن ل يمكن أن يحتوي على قيم فارغة
مثال
يمكن تعيين حفل (عمود( واحد أو أكثر ليكون مفتاح خارجي حيث يكون هذا العمود مرتبط بعمود اخر به مفتاح
اساسي او فريد من نفس الجدول أو جدول اخر ومن الضروري أن يكون مرتبط بقيمة اخرى من عمود اخر او يكون
فارغ
انظر المثال التالي
56
Foreign Key -1
تكتب بجوارها اسم الحقل المراد أن يكون مفتاح خارجي في الجدول البن
REFERENCES -2
نكتب بجوارها الحقل الذي سيتم الربط به من الجدول الخر
لنشاء جدول بواسطة جدول آخر يجب أن يكون الجدول الخر منشأ مسبقا ثم نكتب المر كالتالي
الشكل العام
مثال
قمنا في هذه الجملة بعمل جدول جديد ثم نقلنا بيانات الجدول S_EMPاليه
الشكل العام
مثال
57
FROM s_emp
WHERE ;dept_id = 41
تستخدم هذه الجملة لغؤض مواصفات الجدول ويمكن كتابتها كلمة كاملة أو مختصرة DESC
الشكل العام
;DESCRIBE tablename
مثال
;DESCRIBE S_EMP
ملخص الفصل
في هذا الفصل قمنا بالتعرف على الجداول وأنواع التقييد وكيفية إنشائها وإدراج المفتا الساسي والخارجي في
الجدول وكيفية انشاء جدول من جدول اخر وكذلك من استعلم فرعي ومعرفة كيفية عرض معلومات الجدول
58
تعديل بنية الجدول وحذفه
أهداف الفصل
تعديل الجداول
تتيح لك الـ SQLغملية تعديل الجدول بعد إنشائها في الحالة التالية
-1اضافة حفل جديد
-2تعديل مواصغات حقل
-3حذف المفتاح الساسي من الجدول
ويجب النتباه الى عدم إمكانية حذف حفل من الجدول
تستخدم هذه الجملة لضافة قول أو لتعديل الحقول في الجدول ويشمل هذا التعديل اسم الحقل ونوعه الحقل وحجم
بياناته أو الحاق عبارة فارغ أو غير فارغ الى الحقل
حيث أن
اسم الجدول المراد تعديله tablename
اسم الحقل field
نوع البيانات Type
طول أو حجم الحقل size
59
حذف الجداول
يمكن أن نحذف الجدول من قاعدة البيانات بواسطة المر DROP TABLEبشرط أن تكون مالك الجدول أو لك
صلحية للحذف
حيث
اسم الجدول المراد حذفه ;tablename
ملخص الفصل
في هذا الفصل تناولنا عملية تعدبل الجداول من إضافة وتعديل قول الجدول مع عدم امكانية حذف حقل موجود في
الجدول وكذلك كيفية حذف المفتاح الساسي من الجدول وحذف الجدول من قاعدة البيانات بواسطة المر DROP
60
إدخال البيانات إلى الجداول
أهداف الفصل
إضافة بيانات
مقدمة
لقد قمنا في القصول السابقة بإنشاء الجداول والتعرف على أنواع البيانات وتعديل مواصفان الحقول وبهذا نكون قد
أنشأنا جدول البيانات وخددنا خصائص الحقول من حيث نوع البيانات والحجم أي أننا أعددنا الوعاء الذي سيحوي
البيانات وفي هذا الفصل سنتعلم بمشيئة ال كيفية إضافة البيانات إلى هذه الجداول والمور المتعلقة بعمليات الضافة
وأنواعها ،كما أن هذا الفصل يشكل مدخل وجزأ أساسيا للغة تناول البيانات ( (DMLفي نظام قواعد بيانات أوراكل
التي تعتبر إحدى النظم القوية في نظم إدارة قواعد البيانات ( (DBMSلما لها من أثر فعال في معالجة البيانات داخل
الجدول حيث تشمل لغة تناول البيانات ( ( DMLعلى الجزاء التالية :
هي العملية التي يتم بها إدخال سجل /سجلت إلى جدول البيانات من خلل جملة INSERTوتتنم هذه اغلملية بعدة
طرق
الصيغة العامة:
حيث أن
اسم الجدول المراد إلحاق السجل به Table
اسماء العمدة(الحقول( المطلوب إدخال البيانات إليها Column1,Column2
القيم المطلوب إضافتها في حقول السجل الجديد Value1, value2
وكل قيمة يتم إدراجها في الحقل المناسب في القائمة
وبالتالي سيتم إضلفة القيمة 1في الحقل 1وهكذا
61
الشرح
بعد تنفيذ جملة الدخال بهذه الطريقة سوف يتم إضافة بيانات سجل واحد فقط في الجدول المذكور يتوي على قيم تم إ
دراجها في جملة الدخال وللحقول المذكورة فقط
القواعد التي يجب التقيد بها في هذه الطريقة
-1يجب أن يكون عدد القيم التي سيتم إدخالها هو نفس عدد الحقول المذكور في جملة INSERT
-2يجب أن يكون نوع بيانات القيم التي سيتم إدخالها من نفس نوع بيانات الحقول وأن تكون هذه القيم مرتبة حسب
ترتيب الحقول في جملة INSERT
مثال
-3عند إدخال حقول التاريخ والنصوص يجب وضع القيم المخلة بين علمتي تنصيص مفردتين
-4يجب مراعاة وجوب إدخال قيم في الحقول الجبارية التي تم تعريفعا على أنها ل تحتوي فراغ NOT NULL
ويتم ادخال NULLفي الحقول التي بها فراغ
مثال
INSERT INTO s_dept
VALUES ;)(13, 'Administration', NULL
-5يجوز عدم ذكر أسماء الحقول في جملة INSERTفي حالة إدخال بيانات جميع الحقول لهذا السجل على أن
تكون القيم المخلة مرتبة حسب الترتيب الفتراضي للحفول في الجدول عند بنائه
ملحظة
لمعرفة الترتيب الفتراضي للحقول في الجدول نستخدم المر DESC
مثال
من خلل هذه الطريقة يمكن ادخال أكثر من سجل واحد إلى جدول البيانات عن طريق استخدام متغيرات الدخال وهي
عبارة عن متغيرات توضع في جملة الدخال بدل من القيم نفسها ةيمكن أن نطلق على هذه الطريقة جملة الدخال
متعددة السجلت
62
متغيرات الدخال التي سوف يتم Variable1, Variable 2
استبدالها بقيم حقيقية بعد تنقيذ جملة
الدخال
الشرح
بعد تنفيذ جملة يهذه الطريقة سوف يطلب منك إدخال القيم للمتغيرات المذكورة في جملة الدخال وبعد النتهاء من
ادخال القيمة تضغط مفتاح ENTERمن لوحة المفاتيح وهكذا حتى تنتهي من إدخال حقول لسجل الول ولدحال
سجل آخر يمكنك الضغط على حرف ( (Rثم مفتاح ENTERمن لوحة المفاتيح وهو يعني تكرار الدخال لسجلت
اخرى
مثال
تنطبق على هذه الطريقة جميع القواعد المذكورة في الطريقة الولى ويضاف إليها مايلي :
-1تستبدل القيم في جملة الدخال بمتغيرات
-2يعود اختيار أسماء المتغيرات إلى المستخدم مع مراعاة شروط تسمية المتغيرات
-3يجب أن توضع علمة & قبل متغير الدخال
-4في جملة الدخال يمكن وضع علمتى تنصيص مفردتين حول متغير الدخال الخاص بالحقول النصبة
63
إضافة سجلت عن طريق نسخها من جدول آخر
من خلل هذه الطريقة يمكن إدخال أكثرمن يجل واحد إلى جدول البيانات عن طريق نسخ هذا السجل /السجلت من
جدول آخر بوتسطة جملة الستفسار SELECTيث نستخدم جملة INSERTمع استعلم فرعي انظر الى المثال
التالي
الشرح
بعد تنفيذ جملة الدخال بهذه الطريقة ينم نسخ السجلت التي تحقق الشرط من الجدول لمصدر إلى الجدول الهدف
وللحقول االمذكورة في جملة الدخال
64
القواعد التي يجب التقيد بها في هذه الطريقة
-1كتابة جملة الدخال INSERTمحتوية على جملة استفسار SELECT
-2تستبدل القيم في جملة الدخال بأسماء حقول الجدول المصدر
-3عدم استخدم العبارة VALUES
-4يجب مراعاة وجوب إدخال قيم في القول الجبارية التي تم نعريفها على أنها ل تحتوي فراغ NOT NULL
-5مطابقة الحقول بين الجدولين من حيث ترتيب الحقول ونوع البيانات وعدد الحقول
ملخص الفصل
تناولنا من خلل هذا الفصل موضوع اضافة البيانات إلى الجداول بواسطة جملة INSERTوهنالك ثلثة طرق
لجراء عملية الضافة
بهذه الضريفة سوف يتم إضافة بيانات سجل واحد فقط إلى جدول يحتوي على القيم التي ستذكر في جملة الدخال
بهذه الطريقة يمكن إدخال أكثر من سجل واحد إلى جدول البيانات عن طريق استخدام متغيرات الدخال وهي عبارة
عن متغيرات توضع في جملة الدخال بدل من القيم نفسها ويمكن أن نطلق على هذه الطريقة جملة الدخال متعددة
السجلت
بهذه الطريقة يمكن إدخال أكثر من سجل واحد إلى جدول البيانات عن طريق نسخ هذا السجل /السجلت من جدول
آخر بواسطة جملة SELECTالموجودة بداخل جملة INSERT
65
تعديل وحذف بيانات الجداول
أهداف الفصل
في هذا الفصل سنتعلم كيفية تعديل البيانات وحذف السجلت كما أن هذا الفصل يشكل جزأ أساسيا مكمل للغة تناول
البيانات DMLفس نظام أوراكل التي يعتبر احدى النظم القوية في نظم إدارة قواعد البيانات DBMDلما لها من أثر
فعال في معالجة البيانات داخل الجدول حيث تشتمل لغة تناول البيانات DMLعلى الجزاء التالية
ولقد تناولنا ادخال البيانات في الفصل السابق وسندرس تعديل البيانات وخذفها في هذا الفصل
هي العملية التي يتم بها تعديل بيانات قل /حقول في سجل واد أو اكثر في جدول البيانات من خلل جملة
UPDATEوتتم هذه العملية بطريقتين:
الصيغة العامة
UPDATE table
SET ]column1 = value [, column2 = value
[WHERE ;]condition
حيث أن
اسم الجدول المراد تعديل البيانات فيه Table
اسماء الحقول(العمده( المراد تعديل بياناتها Column1,column2
القيم الجديدة التي سيتم إعطاؤها للحقول (العمدة( Value1, value2
حقل 1وحقل 2وبالتالي فإن قيمة 1ستؤول الى
الحقل 1وهكذا
Conditionجملة شرط تحدد السجلت التي سيتم تعديل بياناتها هي السجلت
التي تحقق الشرط
66
الشرح
بعد تنفيذ جملة التعديل بهذه الطريقة سوف يتم تعديل بيانات الحقل /الحقول المذكورة بحيث يتم إلغاء القيم الموجودة
قيها لتتوي القيم الجديدة المذكورة في جملة التعديل علما بأن السجلت التي سيتم تعديل بياناتها هي فقط السجلت التي
تحقق الشرط في الجملة الشرطية
مثال
UPDATE s_emp
SET dept_id = 10
WHERE ;id = 2
الصيغة العامة
UPDATE table
SET ]column1 = value [, column2 = value
الشرح
بعد تنفيذ جملة التعديل بهذه الطريقة سوف بتم تعديل بيانات الحقل /الحقول المذكورة بحيث يتم إلغاء القيم الموجودة
فيها لتتوي القيم الجديدة المذكورة في جملة التعديل علما بأن السجلت التي سيتم تعديل بياناتها هي حميع السجلت في
الجدول
مثال
UPDATE s_emp
SET commission_pct = 10
67
حذف البيانات من الجداول
هي العملية التي يتم بها حذف بيانات سجل /سجلت من جدول البيانات من خلل جملة DELETEوتتم هذه العملية
بطريقتين
الصيغة العامة
DELETE [FROM] table
[WHERE ;]condition
الشرح
بعد تنفيذ جملة الحذف الطريقة سوف يتم حذف السجل /السجلت التي تحقق الشرط في الجملة الشرطية
.
القواعد التي يجب التقيد بها في هذه الطريقة :
-1يجب التأكد من بيانات السجلت التي سيتم حذفها قبل تنفيذ جملة الحذف وكذلك التأكد من الشرط في الجملة
الشرطية لن السجلت التي ستحذف تعتمد على الشرط المذكور
ملخص الفصل
تناولنا في هذا الفصل موضوع تعديل البيانات في الجدول بواسطة جملة UPDATEوهنالك طريقتان لجراء عملية
التعديل وهما
حيث يتم الغاء القيم الموجودة بها لتحتوي على القيم الجديدة المذكورة في جملة التعديل علما بأن السجلت التي سيتتم
التعديل بها هي السجلن التي تحقق الشرط.
حيث يتم الغاء القيم الموجودة بها لتحتوي على القيم الجديدة المذكورة في جملة التعديل علما انه سيتم تعديل بيانات
جميع الحقول لعدم وجود شرط
ثم تناولنا موضوع حذف السجلت عن DELETEوهنالك طريقتان لجراء عمليةا الحذف
بهذه الطريقة سوف يتم حذف السجل /السجلت التي تحقق الشرط في جملة الشرط
69
المتسلسلت والفهارس والعروض
أهداف الفصل
-1التعامل مع المتسلسلت
-2تكوين متسلسلة
-3التعديل في متسلسلة
-4حذف متسلسله
-5معرفة الفرق بين الفهرسه التلقائية والفهرسه العادية
-6عمل فهرسه للبيانات
-7الغاء الفهرسه
-8التعامل مع العروض View
-9تكوين عرض
-10تعديل العرض
-11الغاء عرض
70
المتسلسلت
.المتسلسلة عبارة عن مجموعه من الرقام المتتالية تتولد تلقائيا مثل 1و 2و ,,, 3حيث تستخدم كمفتاح أساسي
Primary Keyلنها عبارة عن قيم فريده وتتعامل معاها الذاكره بسهولة وبكفائه
الصيغة العامة
الشرح
•استخدام المتسلسلت
اذا اردنا اضافة قيمه جديدة الى متسلسلة تستخدم
Table_name.NEXTVAL-2
Table_name.CURRVAL
حيث قمنا بإضافة قيمه جديدة الى المتسلسلة في خانة idثم قمنا باضافة financeالى خانة name
و 2في خانة region_id
SELECT s_dept_id.CURRVAL
;FROM SYS.dual
ملحظة
لكن توجد ثغرات في المتسلسلت
-1اذا تم نقل سجل من مكان الى اخر فإانه يحدث خلل في المتسلسلة
-2المتسلسلة يمكن أن نتستخدم في اكثر من جدول
تعديل متسلسلة
يمكن تعديل مقدار الزياده أو القيمه البتدائية للمتسلسله ونحديد اكبر وقيمه وادنى قيمه أو تغيبر خيار التكراراو الذاكره
عن طريق المر ALTER
الصيغه العامه
حذف متسلسلة
مثال
الفهرسة
الفهرسة عبارة عن وسبلة مصممه لتسهيل الحصول على البيانات بسرعه من الجداول مثل الفهرس الموجود بأي كتاب
فعندما نريد الوصول الى معلومة بسرعة ننظر الى الفهرس اول
وكذلك هو الحال في الوراكل فعندما نقوم بفهرسة مجموعة من البيانات فاننا نستطيع الى احد هذه البيانات بسرعه ويتم
كذلك اليحث بين الجداول بسرعه وم مميزات الفهرسه كذلك انها تقلل عدد البيانات المنتقله خلل وسائل الخراج
والدخال
من الضروري احيانا ترقيم الحقول ترقيم تلقائي مثل ارقام المناطق او ارقام السلع بدل من الترقيم العادي
الفهرسه التلقائية
عندما نقوم بتعريف حقل على انه مفتاح أساسي أو اذا جعلناه حقل فريد فانه تلقائيا يفهرس
الفهرسة العادية
أنواع الفهرسة
توجد عدة أنواع للفهرسه يث يمكن فهرسة حقل (عمود( واحد او مجموعة من العمدة منها
73
الفهرسة المركبة composite index
حيث يتم فهرسة عدة اعمدة حيث أن كل عمود له قيم مختلفة
وتستخدم الفهرسة المركبه عندما تعود جملة SELECTبعدة قيم فيتم ترتيبها عن طريق استخدام الفهرسة المركبة
عندما نقوم بفهرسة حقل فإن الوراكل يقوم بتكوين مايسمى index segmentبتم فيها تخزين معلومات خاصة
بالفهرسة والتي تسرع الوصول الى البيانات حيث أن هذه المعلومات توضح أماكن السجلت وتوضح أقصر الطرق
للوصول اليها عن طريق وسائل الخرج والدخال
والمصطلح الذي تعتمد عليه الفهرسة يسمى B*-tree indexهي عبارة عن محطط شجري لمجموعة من القيم مرتبة
تنازليا حيث كلما ننتقل الى قيمة تاليه يتم مقارنتها مع كتلة القيم التي تعلوها وتسمى هذه الكتل branch blocksوناتج
هذه المقارنه يتم مقارنته مع كتل اخرى إلى أدنى درجة في هذه الكتل ويسمى leaf blocksحبث تحتوي هذه الكتلة
على كل البيانات المفهرسه ويوجد ما يسمى ROWIDلهذه البيانات
اذا كانت البيانات فردية فإنه يوجد ROWIDلكل قيمة ولكن اذا لمت تكن فردية فانه يمكن ان يتواجد أكثر من
ROWIDوفي هذه الحالة يتم ترتيبها البيانات حسب مفتاح الفهرسه ثم حسب ROWID
الصيغة العامة
حيث أن
Indexاسم الفهرس
Table
74
Column
مثال
-1ل نفهرس الجداول التي استعلم عنها بعدد كبير من الصفوف يث نستخدم الفهرسه عندما يكون الستعلم ل
يتجاوز % 5من الجدول
-2ل نفهرس الحقول التي ينم التعديل قيها باستمرار
-3ل نفهرس الجداول التي تحتوي على قيم متكررة بكثرة
-4نفهرس الحقول التي يكون الستعلم عنها سهل عالبا فل نستخدم الفهرسه مع استعلمات شروطها معقدة
-5ل نفهرس غالبا الحقول التي ل تحتوي على قيم فريدة
-6نفهرس الحقول التي تعتبر حقول رابطه بين جدول واخر
حذف الفهرسة
لحذف الفهرسة نستخدم المر DROP INDEX
مثال
العروض
العرض عبارة عن استعلم من جدول واحد أو اكثر حيث يعتبر جدول وهمي يحتوي على البيانات التي يأخذها
من جملة SELECTولكن حقيقة ان هذا الجدول غير موجود
الصيغة العامة
حيث أن
view-nameاسم العرض
Column1اسم الحقول التي ستم عرضها
75
مثال
;DESC empvu45
اول
alter table S_EMP
add
;)))'(Manager char(1) check (Manager in ('Y','N
ثانيا
update S_EMP
'set Manager = 'N
where
;ID != 1001
76
ثالثا
update S_EMP
'set Manager = 'Y
where
;ID = 1001
في اخر خطوتين قمنا بتحديد شرط وهو في حالة اذاكان رقم الموظف 1001فانه هو المدير لذلك في حقل Manager
يعطي Yوغير ذلك يعطي N
رابعا
في هذه الخطوة والتي تليها سنقوم بإضافة حقل لسم مستخدم حيث اسم المستخدم سيكون عبارة عن اول حرف من
السم الول للموظف بالضافة الى اسمه الخير
خامسا
update S_EMP
;set username = substr(first_name,1,1) || last_name
سادسا
الن سنقوم بعمل عرض اسمه Re_SALARYمربوط بالجدول S_EMP
userتعةد باسم المستخدم لقاعدة البيانات الحالي لذلك قيمة هذا المتغيسر تعتمد على المستخدم الحالي للقاعدة حيث قمنا
بعمل عملية ربط خارجي outer-joinشرطها أنه اذا كان المستخدم الحالي لقاعدة البيانات اسمه موجود في حقل
اسماء المستخدمين في جدول الموظفين فانه يعود بقيمة في حقل Managerاما Yاو Nكما قلنا حسب رقم الموظف
والدالة Decodeتقوم مشاهدة قيمة Managerاذا كانت Yفإن المستخدم مدير وبتم عرض حقل المرتب واذا كانت
Nل يتم عرض حقل المرتب
* select
;from Re_Salary
78
تعديل العرض
3-CREATE OR REPLACE
مثال
مثال
حذف عرض
ملخص الفصل
تناولنا في هذا الفصل كيفية تكوين المتسلسلت ونعدبلها وطريقة حذفها ثم تطرقنا الى الفهرسة وفوائدها وانواعها
وكيفية عملها وتعديلها وكذلك الغائها وفي اخر الفصل تطرقنا الى العروض مفهومها وفوائدها وافكارها وكيفية تعديلها
والغائها
79
نبذه pl/sql
أهداف الفصل.
-1التعرف على PL/SQL
-2استخدام قاعدة .IF
-3استخدام التكرار
-4
80
التعرف على PL/SQL
هي عبارة عن كتل برمجية تشيه في في طريقة كتابتها لغة Cبالضافة لدعمها SQLوتحتوي هذه اللغة على
اجراءات خاصة بها واومر مثل IFوغيرها وكذلك دوال وكتل برمجية مجهولة وهي التي ل تحتوي على اومر و ل
تعود بقيمة
ويمكن تمثيل بنية البرنامج في PL/SQLفي الشكل التالي
برامج pl/sqlتتم كتابتها في كتل من اوامر البرمجة تحتوي على مقاطع منفصلة للعلن عن المتغيرات واوامر
البرامج ومعالجة الستثناءت(الخطاء( .
ومن الممكن تخزبن الجراء في قاعدة البيانات كبرنامج فرعي له اسم محدد او كتابتها مباشرة في sql * plusككتله
مجهولة.
DECLARE
هنا توجد تعريفات التغيات والوشرات
BEGIN
جسم البنامج
EXCEPTION
رموز معالة الخطاء
END:
81
]identifier [CONSTANT] datatype [NOT NULL
;][:= | DEFAULT expr
غالبا يتم تعريف متغير واحد في كل سطر
مثال
;)v_gender CHAR(1
;v_count BINARY_INTEGER := 0
;v_total_sal NUMBER(9,2) := 0
;v_order_date DATE := SYSDATE + 7
c_tax_rate ;CONSTANT NUMBER(3,2) := 8.25
;v_valid BOOLEAN NOT NULL := TRUE
ومن انواع المتغيرات التي تدعمها PL/SQLبالضافة الى المتغيرات التي توجد SQL
-1المتغير BINARY_INTEGER
-2المتعير PLS_INTEGER
وتشمل الرقام الصحيحة بين –2.147.483.647و 2.147.483.647وهذا النوع ل يشغل مساحة كبيرة من الذاكر ة
وأسرع من BINARY_INTEGERو Number
NATURAL -3
POSITIVE -4
وتشمل الرقام الموجبة فقط من 1الى 2.147.483.647
BOOLEAN-3
TYPE%-4
صمم هذا المتغير ليحمل نفس توع البيانات التي يحملها حقل معين
ROWTYPE%-4
صمم هذا المتغير ليكون متغير مركب يحمل نفس توع البيانات التي يحملها صف معين
الصيغة العامة
variable-name ;table-name.column-name%TYPE
82
مثال
;s_emp.last_name%TYPE v_last_name
في هذا السطر نقوم بتعريف المتغير v_last_nameأنه من نفس نوع الحقل last_nameفي جدول
S_EMPويحتوي على نفس القيم
الصيغة العامة
variable-name ;table-name%ROWTYPE
مثال
emp_record ;s_emp%ROWTYPE
قمنا بتعريف المتغير المركب emp_recordالذي يحمل قيمة صف من صفوف الجدول s_emp
طرق السناد
;i:=5
)DBMS_OUTPUT.PUT_LINE(massege
حيث
تم شرح هذا المر لكي نبدأ به ونستخدمه لفهم اوامر ال pl/sqlلكن في المستقبل سوف تعرف ان هذا المر ليهمك
كثيرا
83
.مثال :
نريد طباعة " "hi allعلى الشاشة sql * plusيتم ذلك كمايلي:
84
الشرط عبارة IF THEN
تستخدم هذه العبارة مثل اي العبارت الشرطية في لغة سي او سي ++او فيجوال بيسك وغيرها ,ولها استخدمات
عديدة وسوف نعرف كيف نستخدمها مقدما مع حقول قواعد البيانات وذلك بعد اخذ المؤشرات
حيث أن
ملحظة
•ELSEو ELSIFاختيارية
•جملة IFنحنوي على عدة عبارات ELSIFولكن تحتوي على عبارة ELSEواحدة
•انتبه الى أن طريقة كتابة ELSIFوليست ELSEIF
Declare
i ;)number(5
BEGIN
;i:=5
IF i=5 then
;)DBMS_OUTPUT.PUT_LINE('i = ' || i
ELSE
;)' DBMS_OUTPUT.PUT_LINE('i not eqal 5
;END IF
;END
85
Declare
i ;)number(5
BEGIN
;i:=5
IF i>1 then
DBMS_OUTPUT.PUT_LINE(i ;)'|| ' > 1
ELSIF i<1 then
DBMS_OUTPUT.PUT_LINE(i ;)'|| ' < 1
ELSIF i=1 then
DBMS_OUTPUT.PUT_LINE(i ;)'|| ' = 1
;END IF
;END
الـــتكرار
loop-exit-end -1
i =1
i =2
i=3
i =4
i =5
i =6
i =7
i =8
i =9
i =10
Declare
i number(5);
BEGIN
i:=1;
LOOP
EXIT WHEN i>10;
DBMS_OUTPUT.PUT_LINE('i =' || i);
i:=i+1;
End loop;
END;
/
Declare
i number(5);
BEGIN
i:=1;
WHILE i <= 10 LOOP
DBMS_OUTPUT.PUT_LINE('i =' || i);
i:=i+1;
End loop;
END;
/
87
ويكون الناتج نفس المثال السابق
وهذه ايضا طريقة اخرى لستخدام حلقات التكرار وهي نفس عمل اسلوب حلقات forفي اي لغة برمجة
والصيغة العامه لها هي على التي
مثـــال:
Declare
;(i number(5
BEGIN
FOR i IN 1..10 LOOP
;(DBMS_OUTPUT.PUT_LINE('i =' || i
;End loop
;END
/
وسوف يكون الناتج كمايلي(نفس السابق(:
i =1
i =2
i =3
i =4
i =5
i =6
i =7
i =8
i =9
i =10
جملة GOTO
كما في باقي لغات البرمجة فان GOTOتنقل تسلسل عمل البرامج من نقطه الى اخرى
الصيغة العامة
>>GOTO <<my_label
حيث أن
declare
i positive := 1;
max_loops constant positive := 100;
begin
i := 1;
loop
i := i + 1;
if i > max_loops then
goto more_processing;
end if;
end loop;
<<more_processing>>
i := 1;
end;
/
التعليقات
( ثم التعليق--( كتابة-1
مثال
مثال
*** DON’T FORGET MY NAME ***
مثال
*/ DON’T FORGET MY NAME /*
89
PL/SQL في كتلSQL استخدام أوامر
ولكن مع وجود اختلفات حيث كل جملةPL/SQL داخل الكتل البرمجية الخاصة بـSQL يمكنك استعمال جمل
(;( تنتهي بفاصلة منقوطةSQL
مثال
DECLARE
max_records CONSTANT int := 100;
i int := 1;
BEGIN
FOR i IN 1..max_records LOOP
if (mod(i,10) = 0) then
INSERT INTO test_table
(record_number, current_date)
VALUES
(i, SYSDATE);
else
NULL;
end if;
END LOOP;
COMMIT;
END;
/
SQL وهي من أوامرsysdate وINSERT في هذا المثال قمنا باستخدام المر
90
المؤشرات CURSORS
اهداف الفصل
المؤشرات CURSORS
تستخدم pl/sqlالمؤشرات cursorsلدارة عبارات التحديد selectفي لغة sqlوكما لحظنا الوامر السابقة مثل if
والتكرار لم نستخدمها مع بيانات الجداول المخزنه ولعمل ذلك لبد من استخدام هذه المؤشرات.
وهناك نوعين من المؤشرات هي الضمنية والصريحة وسوف نتطرق لك واحد بالتفصيل والمثلة اللزمة.
يتم تعريف هذا النوع من المؤشرات كجزء من العلن declareويجب ان تشتمل عبارة sqlالمعرفه على عبارة
التحديد selectفقط حيث ليمكن استخدام الكلمات الساسية insert,update,delete
وعند استخدام المؤشرات الصريحه دائما ماستكتب اربعة مكونات كمايلي:
-1يتم تعريف المؤشر في الجزء declare
-2يتم فتح المؤشر بعد عبارة begin
DECLARE
IS اسم الؤشر CURSOR
الستعلم
ولكي تقوم بفتح هذا المؤشر وتستخدمه نقوم بفتحه باستخدام المر openكمايلي:
وبعد فتح المؤشر تقوم باسترجاع او تحميل البيانات سطر(سجل( واحد من المؤشر الذي تم تعريفه باستخدام المر
FETCHكمايلي:
91
الى المتغيرات كع ملحظة ان عددinto ومعنى هذا اي قم باسترجاع البيانات من المؤشر المعطى اسمه وحملها
.المتغيرات يساوي عدد الحقول الموجودة في استعلم المؤشر
:وبعد النتهاء من اجراء العمليات على المؤشر يجب عليك اغلقه ويتم اغلقه كمايلي
close cursor_name
age name no
23 mohammed 111
22 talal 222
24 majed 333
;set serveroutput on
DECLARE
;(name_stu varchar2(40
CURSOR name_student IS
select name from stud
;where no=111
BEGIN
;OPEN name_student
;FETCH name_student INTO name_stu
;(DBMS_OUTPUT.PUT_LINE(name_stu
;CLOSE name_student
;END
/
:بعد التنفيذ سوف يظهر لك الناتج كمايلي
mohammed
92
وهذا الشي صحيح
لحظ اننا اتبعنا نفس الخطوات التي ذكرناه لكي نتعامل مع مؤشر صريح
لحظنا في المثال السابق ان الستعلم في cursorسوف يعود بسجل واحد لكن ماذا يحدث لو اعاد المؤشر اكثر من
سجل واردنا المرور على كافة السجلت ؟
لحل السؤال السابق لبد من استخدام حلقة بها شرط وهذا هو هل سجلت المؤشر انتهت ام ل ونعرف ذلك من خلل
خاصية foundللمؤشر كمايلي:
mycur%found
حيث :
مثال :
نريد انشاء اجراء يقوم بالمرور على الجدول وينظر الى درجة الطالب اذا كان ناجح في المقرر ام ل فاذا كان mark
اكبر او يساوي 50ضع قيمة trueفي حقل resultوال ضع قيمة falseفي حقل result
93
insert into stu_study (NO_STU,SUBJECT,MARK) values
(222,'225CS',75);
declare
mar number(3);
no number(3);
cursor res_stu is
select no_stu,mark
from stu_study;
begin
open res_stu;
loop
fetch res_stu into no,mar;
exit when res_stu%notfound;
if mar>=50 then
update stu_study set result='TRUE' where no_stu=no;
else
update stu_study set result='FALSE' where no_stu=no;
end if;
end loop;
close res_stu;
end;
/
تم تعريفه على انه من نوعno_Stu هناك طريقة اخرى لتعريف المتغيرات لحظ في الجدول السابق ان الحقل
ايضا لكي يتم وضع رقم الطالب فيه لكن لحظ لوnumber في الجراء على انهno وتم تعريف المتغيرnumber
في الجراء ايضاno فانه يجب عليك تغير نوع المتغيرvarchar2 الىnumber تم تغير نوع الحقل في الجدول من
في الجراءno لكن هناك طريقه تجعلك لتعدل الجراء كل مرة وهي استخدام المر التالي لتعريف المتغير
94
NO stu_study.no_stu%type
: حيث
هي اسم المتغيرNO
الموجود في الجدولNO_STU له نفس نوعية الحقل الذي اسمهno ومعنى ماسبق قم بتعريف متغير اسمه
. stu_study
وبهذا لن تقوم بتغير نوع العنصر في الجراء في كل مرة تغير النوع وهكذا مع جميع المتغيرات التي لها صله
بالجداول
declare
mar stu_study.mark%type;
no stu_study.no_stu%type;
cursor res_stu is
select no_stu,mark
from stu_study;
begin
open res_stu;
loop
fetch res_stu into no,mar;
exit when res_stu%notfound;
if mar>=50 then
update stu_study set result='TRUE' where no_stu=no;
else
update stu_study set result='FALSE' where no_stu=no;
end if;
end loop;
close res_stu;
end;
/
95
المؤشرات الضمنية
تعرفنا سابقا على فائد المؤشرات cursorsودرسنا النوع الول منها وفي هذا الفصل عندنا نوع اخر وهو المؤشرات
الضمنية وهي اسهل من المؤشرات الصريحه
* يظهر المؤشر الضمني في جسم الجراء bodyوليس في declareالخاص بالجراء كمافي المؤشرات الصريحه
FROM table_name
ومعنى هذا قم باختيار الحقل 1و الحقل 2وضعها في المتغيرات منغير 1و متغير 2من الجدول table_name
سوف نأخذ مثال على ذلك وسوف نستخدم الجدول الذي انشئناه سابق في الدرس الثاني عندما تعاملنا مع المؤشرات
الصريحة وكان اسم الجدول stud
واردنا مثل كتابة اجراء يقوم بحساب متوسط اعمار الطلب ( قد يقول البعض انه ليحتاج ذلك الى اجراء فمجرد
استخدام جملة selectنستطيع عمل ذلك انا اقول نعم هذا صحيح لكن احب استخدام الجراء في هذا المثال لكي نرى
طريقة عمل المؤشر الضمني ولكن سوف نرى بعد قليل مثال شامل يتم فيه استخدام الموشرات الصريحه والضمنية
في نفس الوقت( والن نقوم بكتابة الجراء كمايلي :
96
: *** مثال شامل لستخدام الموشرات الصريحة والضمنيه في نفس الوقت
:( (المقرراتcourses الجدول الول اسمه: لنفرض انه لدينا الجدولين التاليين
97
333 216CS 85
بعد النتهاء من انشاء وادخال البيانات المطلوب انشاء اجراء يقوم بحساب عدد النقاط لكل طالب وفي كل مادة وهو
: الحقل عدد النقاط الذي لم ندخل فيه اي شيء ويجب نعلم ان
MARK average
95-100 5
90-94 4.75
85-89 4.5
80-84 4
75-79 3.5
70-74 3
98
65-69 2.5
60-64 2
1-59 1
عدد النقاط في اي مقرر = معدل المادة (وليس الدرجة كمافي الجدول السابق( * عدد ساعات المقرر
-85 ونلحظ ان الدرجة من الجدول السابق هي بين88 ان الطالب قد تحصل على درجةstudys نلحظ من جدول
ومن جدول, ( (وهي الطريقة المتبعة في اغلب الجامعات4.5 وبالتالي فإن معدل الطالب في هذا المقرر هو89
: نحصل على عدد الساعات للمقرر وبالتالي فانcourses
. وهكذا في جميع الطلب وهذا هو المطلوب من الجراء عمله13.5 = 3 * 4.5 = عدد النقاط
DECLARE
no_Student studys.NO_STU%type;
hou courses.hours%type;
mark studys.mark%type;
cou_code courses.code%type;
poi studys.point%type;
cursor st_point is
select NO_STU,COURSE_CODE,MARK from studys;
BEGIN
open st_point;
loop
exit when st_point%notfound;
fetch st_point into no_Student,cou_code,mark;
select hours
into hou
from courses
where code=cou_code ;
if (mark>=95)and(mark<=100) then
poi:=5 * hou;
elsif mark>=90 then
poi:=4.75 * hou;
elsif mark>=85 then
poi:=4.5 * hou;
elsif mark>=80 then
poi:=4 * hou;
elsif mark>=75 then
poi:=3.5 * hou;
elsif mark>=70 then
99
;poi:=3 * hou
elsif mark>=65 then
;poi:=2.5 * hou
elsif mark>=60 then
;poi:=2 * hou
else
;poi:=1 * hou
;end if
update studys set POINT=poi
; where NO_STU=no_Student and COURSE_CODE=cou_code
;end loop
;close st_point
;end
/
لحظ هنا اننا استخدمنا المؤشرات الصريحة والمؤشرات الضمنيه والصريحة استخدمناه لكي تقوم بفتح سجلت
الجدول studysوالمؤشر الضمنلي استخدمنا لكي يعود بعدد الساعات في كل مرة يدور بالحلقة.
في التعريفات اتوقع انه لتوجد هناك مشكلة لديكم ,اما جسم البرنامج ابتدأً من beginفهو كمايلي :
اول يفتح المؤشر الصريح والذي يحتوي على جميع سجلت الجدول studysثم يكون حلقة دورانية لكي يمر على
جميع سجلت الطلب الموجودة في المؤشر الصريح وطبعا شرط النهاء لهذه الحلقة هو الوصول الى اخر سجل .ثم
يقوم بعملية تحديث سجلت الطالب الولى في المتغيرات كمايلي:
وطبعا المتغيرات هي رقم الطالب ورقم المقرر والدرجة في المقرر ولنفرض الن نحن الن عند السجل الول ووهو
الطالب الذي رقمه 111ورقم المقرر 216CSودرجته هي 88سوف يضع هذه البيانات في المتغيرات ,ثم يستخدم
مؤشر ضمني لكي يحضر عدد ساعات المادة التي درسها الطالب 111وهي 216CSو المؤشر هو
select hours
into hou
from courses
; where code=cou_code
ومعنى هذا احضر عدد ساعات المقرر الذي رقمه هو cou_codeوهذا المتغير هو معروف من المؤشر الصريح
الول وسبب استخدامنا هذا المؤشر هو ان عدد ساعات المقرر موجودة في جدول اخر ولبد من استخدام هذا المؤشر
لكي يحضر عدد الساعات .وبما اننا فرضنا اننا عند السجل الول فسوف يحضر عدد ساعات المقرر 216CSوهي
3ساعات ثم بدأ يختبر الدرجة وذلك طبقا للجدول الدرجات والمعدلت حيث كانت درجة الطالب الذي رقمه 111في
المقرر 216cCSهي 88وبالتالي يكون عدد النقاط كمايلي = , 13.5 = 3 * 4.75وبعد النتهاء من حساب المعدل
100
يقوم بنعديل الجدول وتحديث قيمة pointبقيمتها الجديدة ,وهكذا يمر على كل طالب بنفس الطريقة السابقة الى ان
يصل الى نهاية السجلت.وبالتالي تكون النتائج كمايلي في الجدول : studys
بعد النتهاء من هذا المثال نكون انهينا المؤشرات بنوعيها بشكل تام وبامثله واقعيه
101
المصفوفات و الجرائيات و الدوال المخزنة
اهداف الفصل
سنتعلم في هذا القصل باذن ال
-1انشاء المصفوفات والتعامل معها
-2كيفية انشاء اجراء
-3التعامل مع الوظائف المخزنة
الجـداول في ( pl/sqlالمصفوفات(
تستخدم هذه الجداول (المصفوفات( مثل المصفوفات في هي لغة من لغات البرمجة مثل لو كانت لديك سلسلة من
الرقام وتريد تخزينها فانك تستخدم هذه الجداول للتخزين ويتم تعريف متغير من هذا النوع كمايلي اول يتم تعريف هذا
النوع :
DECLARE
TYPE num_array IS TABLE OF number(4) INDEX BY
;BINARY_INTEGER
;num num_array
BEGIN
........
........
;END
لحظ اول تم تعريف نوع واسماه , num_arrayثم قام بتعريف متغير numواعطاه نوع num_arrayوهو
النوع الجديد الذي قمنا بانشاءه.
وويكون عمل هذا الجراء كمايلي :الحلقة الولى تقوم بضرب العدد iفي نفسه وتخزنه في المتغير numبرتبه i
وهكذا والحلقة الثانية للطباعة ويكون الناتج كمايلي :
1*1= 1
2*2= 4
3*3= 9
4*4= 16
5*5= 25
6*6= 36
7*7= 49
8*8= 64
9*9= 81
10*10= 100
الجرائيات المخزنة
شاهدنا في الدروس الماضية ان اي اجراء نقوم بكتابة اني اذا اردت استخدامة اكثر من مرة فاني اقوم بكتابة كل مرة
في sql * plusلكي احصل على النتائج لكن ماهو رأيك لو نقوم بتخزين هذا الجراء في قاعدة البيانات ونعطية اسم
وحينما نحتاجه نستدعية باسمه وهذا يوفر علينا الشيء الكثير لذلك فصلنا هو الجرائيات المخزنة.
حيث أن
لحظ اسم المتغير هو student_idثم بعده وضعنا الكلمة inومعنى ان هذا المتغير يعتبر كمدخل
اما لتعريف متغير يعود بقيمة من الجراء مثل لو اردنا تعرف متغبر يرجع بمعدل الطالب يتم التعريف كمايلي :
بعد تنفيذ الجراء يكون هذا المتغير يحتوي على معدل الطالب الذي تم تمرير رقمه مثل.
مع العلم انه يمكن تعريف متغير للمدخلت والمخرجات حيث تمرر به القيمه اول وبعد تنفيذ الجراء يتم وضع القيمه
في نفس المتغير وتتم كمايلي :
مــــثال :
في الجدول الذي قمنا بدراسته في الفصول السابقة وكان بأسم studys
لو اردنا تصميم اجراء مخزن لكي يقوم بطباعة درجة الطالب بعد تمرير رقم الطالب ورقم المقرر.
بعد النتهاء من تنفيذ الجراء يكون الجراء مخزن في قاعدة البيانات ولكي نقوم باستدعاءه نقوم بمايلي
begin
;)'stu_mark(111,'216CS
;end
/
لحظ كيف تم استدعاء الجراء السابق من خلل اسم الجراء وبذلك سوف يكون الناتج على الشاشة كمايلي 88وهي
صحيحة بعد تمرير رقم الطالب 111ومقرر 216CS
لكن لحظ اننا لم نستخدم متغيرات اخراج لكن مأرايك ان نصمم اجراء اخر يقوم بنفس الوظيفة التي يقوم بها الجراء
السابق لكن عملية الطباعة تكون بعد الستدعاء لكي نجعل الجراء يقوم بارجاع درجة الطالب بمتغير لذلك فان
الجراء كمايلي :
بعد ذلك نقوم باستدعاء الجراء ومن ثم طباعة الدرجة لن لو لحظت الجراء ليقوم بالطباعة ولحظ ايضا ان
الدرجة تم وضعها في المتغير maraولذلك سوف يعود بهذه القيمة وسوف يكون الستدعاء كمايلي :
declare
;m studys.mark%type
begin
;)stu_mark1(111,'225CS',m
;)DBMS_OUTPUT.PUT_Line(m
105
;end
وسوف يكون الناتج هو 90وهذا صحيح بناء على الجدول/ .
الوظائف المخزنة
كان درسا السابق عن الجراءات المخزنة واليوم لدينا درس مشابه له وهو الوظائف المخزنة لكن الفرق ان الوظائف
لبد ان تعيد قيمة
حيث أن
اما عن المغيرات التي بين القوسين فهي اما متغيرات مدخله مثل اذا كان لديك اجراء حساب معدل طالب وتريد تمرير
رقم الطالب الذي تريد حساب معدله فهذه هي تعتبر كمدخلت ,وهي بنفس الطريقة التي تعاملنا بها مع الجراءت
المخزنة لتغير على المتغيرات وطرق تعريفها.اما RETURN datatypeفهي تدل على نوع القيمة المعادة من
الوظيفة .
مثــــــــال :في الجدول الذي قمنا بدراسته في الدرس الرابع وكان بأسم studysوكان كمايلي :
لو اردنا تصميم وظيفة ترجع بمعدل الطالب الفصل اي يتم تمرير رقم الطالب الى الوظيفة ثم يتم حساب المعدل
الفصلي للطالب
ويتم حساب المعدل الفصل للطالب كمايلي =مجموع النقاط ÷ مجموع عدد الساعات لمقررات
106
: ولنشاء الوظيفة كمايلي
: الشرح
107
السطر رقم :10تعريف مؤشر صريح للحصول على كود المادة لكي نستفيد منه في الحصول على عدد الساعات وعدد
النقاط في ذلك المقرر لكي نضيفها الى مجموع النقاط
السطر رقم :16فتح هذا المؤشر لكي نتعامل معه
السطر رقم :17الدخول على حلقة لكي نمر على جميع الجدول
السطر رقم :18تحديث قيم المؤشر للسجل الحالي في المتغيرات codem,point
السطر رقم :19شرط انهاء الحلقة وهو اذا لم يجد اي سجل في المؤشر
السطر رقم :20مؤشر ضمني لكي يقوم بالحصول على عدد ساعات الطلب في المقرر الموجود حاليا في المؤشر
الصريح ويضع عدد الساعات في المتغير hour
السطر رقم :24اضافة عدد النقاط للمقرر الحالي الى مجموع النقاط السابق
السطر رقم :25اضافة عدد الساعات للمقرر الحالي الى مجموع الساعات السابق
السطر رقم :26الخروج من الحلقة
السطر رقم :27انهاء المؤشر الضمني
السطر رقم :28حساب المعدل وهو مجموع النقاط تقسيم مجموع عدد الساعات
السطر رقم :29الرجوع بقيمة المعدل
السطر رقم :30النهاء
الن بعد النتهاء من شرح طريقة تصميم الوظيفة جاء دور طريقة الستدعاء :
لكن قبل الستدعاء لنحسب يدويا معدل الطالب الذي رقمه 111مثل لكي نقارنه بالنتائج بعد الستعلم :
مجموع عدد الساعات = (عدد ساعات المقرر ( + ( 216CSعدد ساعات المقرر ( 225CS
=6=3+3
)SELECT distinct(NO_STU),stu_avea(no_stu
from studys
;where no_stu=111
لحظ كيف تم استدعاء الدالة من خلل الستعلم ولحظ استخدام الدالة distinctوهي لعدم تكرار السجل واليك
النتائج :
NO_STU (STU_AVEA(NO_STU
; ------ ----------------
111 4.63
لحظ لو كان الستعلم بدون وجود الدالة distinctفسوف يتكرر رقم الطالب عدد ظهوره في الجدول لذلك لوكان
كمايلي :
108
SELECT NO_STU,stu_avea(no_stu)
from studys
where no_stu=111;
NO_STU STU_AVEA(NO_STU)
------ ; ----------------
111 4.63
111 4.63
109
الحزم البرمجية و الزنادات
أهداف الفصل
الحزم البرمجية
تعلمنا سابقا كيفية انشاء الجراءت والوظائف المخزنة .لكن مارأيك لو وجد لدينا قاعدة بيانات كبيرة جدا ولنضرب
مثال انها تحتوي على 50اجراء او وظيفة وظيفة او اجراء لها عمل خاص ولنفرض ان هذه القاعدة هي لمحل تجاري
ضخم يحتوي على بيانات العملء وبيانات الموظفين وبيانات الصناف التجارية وبيانات المخزون وغيرها من بيانات
,ولذلك فان بعض هذه الجرائيات والوظائف المخزنة مختص بالعملء مثل وجود اجراء لحساب اجمالي عميل
وغيرها من الجرائيات ,ومثل وجود اجرئيات خاصة بالموظفين مثل اجرائية خاصة بحساب راتب الموظف بعد
حذف الحسومات واضافة العلوات وغيرها ايضا ,لكن وضعها في هذا الشكل في قاعدة البيانات قد يسسب لك بعض
الرباك لذلك مارأيك بان تجمع كل الوظائف والجرائيات الخاصة بكل قسم في مجموعة لوحدها وهذه المجموعة
تدعي الحزمه packageمثل نجمع كل اجرائيات والوظائف الخاصة بالعملء في حزمة خاصة
مكونات الحزم
تتكون الحزمة من جزءين الول وهو الوصف specificationويحتوي على التعاريف مثل متغيرات او مؤشرات او
اسماء الجراءت ومتحولتها.
اما الجز الثاني فهو جسم الحزمة ويحتوي على تفاصيل الجراءت والعمليات وغيرها
والصيغة العامة لنشاء الجزء الول كمايلي :
110
: والصيغة العامة لنشاء الجزء الثاني كمايلي
.لكن يجب ان يكون اسم الحزمة في الجزء الول هو نفس اسم الحزمة في الجزء الثاني
: مــثال
لنقم بانشاء حزمة تحتوي على وظيفة لحساب معدل طالب واجراء لطباعة المعدل
والتي تقوم بحساب معدلstu_avea ولذلك سوف نستخدم نفس الوظيفة التي انشناها في الدرس السادس والتي اسمها
: كمايليspecification الجزء الول من الحزمة. الطالب والن نبداء بانشاء الحزمة
111
;exit when sumpoint%notfound
select hours
into hour
from courses
;where code=codem
;total_Point:=total_Point+point
;sum_hours:=sum_hours+hour
;end loop
;close sumpoint
;avrage:=total_Point/sum_hours
;return avrage
;end
ويحتوي جسم الحزمة كمانلحظ على مكونات الوظيفة والجراء الذي تم تعريفهما في وصف الحزمة حيث ان الوظيفة
لحساب المعدل والجراء لطباعة المعدل.
pack_name.func_proc_name
اي اسم الحزمة اول ثم نقطة ثم اسم الجراء او الوظيفة مـــــــثال :
وبعد التفيذ يكون الناتج هو معدل الطالب الذي رقمه 111لحظ اول شي استدعينا داله حساب المعدل ووضعناها في
المتغير aaثم استدعينا اجراء الطباعة ليتم طبعة على الشاشة.
والن و بعد ان تعرفت على فائدة الحزم مارأيك من الن فصاعد ان تستخدم الحزم في كتابة الجرائيات والوظائف
112
الزنادات TRRIGERs
تتشابه الزنادات مع البرامج الفرعية ال في الطرق التالية :
* يتم تنفيذ الزنادات ضمنيا,عندما يعدل الجدول بالرغم من عمل المستخدم او التطبيقات على الجدول .
تعد الزنادات هامة جدا في تطوير نظم البيانات الموجهة الخاصة بالنتاج .
كماهو مع الجراءات المخزنة امكانية استخدام replaceلكي تقوم بالتعديل على الزناد اذا كان موجود ولتقوم بانشاءه
من جديد.
ينفذ التوقيت الخاص بالزناد سواء نفذ الزناد قبل او بعد اغلق الزناد بواسطة الخيارين beforeو , afterلكن خيار
afterاكثر كفاءة لن قطع البيانات المؤثرة يجب ان تقراء منطقيا مرة للزناد ومرة لعبارة trigger
ملحظة /ان حدث اطلق الزناد هو جملة sqlالتي تجعل الزناد وحدث الطلق اما updateاو deleteاو insertاو
بكليهما..
ويوجد اربعة انواع من الزنادات:
-1صف .after
-2جملة .after
-3صف .before
-4جملة .before
وكل زناد من اجل جملة updateاو insertاو deleteكل زناد يعد نوع واحد من ((instead of , after,before
ويمكن تعريف تسع زنادات للجدول الواحد..
:لكل صف **
يعد هذا الخيار ما اذا كان الزناد سوف ينطلق مرة واحدة لكل صف تاثر بالزناد for each row
يمكنك من الوصول الى القيم القديمة والحديثة للصف الحالي for each row ,في نص الزناد الخاص بزناد السطر
فمن الطبيعي deleteيمكنك الوصول من القيم القديمة والحديثة اما بالنسبة لعملية updateو insertحيث في عمليتي
113
ان المتاح هو القيم القديمة فقط
وسوف تكون القيم القديمة والحديثة هي الموجودة beforeو afterويمكنك استخدام القيم القديمة والحديثة في زنادات
.فانه يقوم بالتقاط القيمة بعد التحديث after triggerاما اذا كان before trigger .فقط في
قيد الزناد
يحدد هذا القيد تعبير منطقي يجب ان يكون صحيح كي يطلق الزناد.
على سبيل المثال الزناد التالي stduent_triggerل يتم حدوثة ال اذا كان رقم الطالب student_idاقل من 100
-1يمكن للنص ان يحتوي على جمل dml sqlلكن جمل selectيجب ان تكون جمل select into
-2ليسمح بجمل التحكم ( (commit,savepoint,rollback
-3ليمكن لبرنامج فرعي مخزن ان يتضمن جمل التحكم السابقة اذا تم استدعائه بواسطة الزناد.
مـــــــــــــــــثال :
الول :هو جدول playerبيانات جميع اللعبين في النادي سواء درجة شباب او درجة ممتاز :
حيث levelتمثل الدرجة التي يلعب بها اللعب حيث 1تمثل الدرجة الولى الممتاز -و 2تمثل الشباب .
114
larg_player هو جدول اللعبين في درجة الممتاز وهو خاص بالرواتب واسم الجدول: الثاني
youth هو جدول اللعبين في درجة الشباب وهو خاص بالرواتب واسم الجدول: الثالث
الن نريد عمل زناد بحيث حينما يقوم المستخدم بادخال اسم لعب جديد وتحديد مستواه (شباب او ممتاز( يقوم الزناد
باختبار المستوى فاذا كان شباب اضاف رقم اللعب في جدول الشباب وكذلك لوكان مستواه درجة اولى الممتاز فانه
: وبذلك يكون الزناد كمايليlarg_player يضيف رقم اللعب في جدول
115
بعد ذلك قم بادخال مايلي :
لحظ ان المدخلت تمت على جدول playerبعد ذلك اذهب وقما بالستعلم في جدول larg_playerسوف تجد انه
اضاف رقم اللعب هناك.
التجميعات
انواع التجميعات في قاعدة البيانات:
التجميعة هي مجموعة من العناصر من نفس النوع
•التجميعة varray
وهي كمصفوفة متغيرة ومشابهة للمصفوفات في اي لغة من لغات البرمجة مثل cو ++cوتتم الشارة الى اي
عنصر في هذه التجميعة باستخدام الرقام السفلية ويتم التخزين في هذه التجميعة بصورة خطية inline
تعتبر كجدول موجود في قاعة البيانات والشارة الى اي عنصر في هذه التجميعة ايضا باستخدام الرقام السفلية
ويتم تخزين البيانات في جدول تخزين منفصل.
مثال /نفرض انك تريد انشاء جدول القسام في مستشفى والذي سوف يحتوي على رقم القسم ,اسم القسم ,واسم
القسم ,ومن ثم اسماء موظفين القسم .مع العلم ان اسماء الموظفين سوف تكون في تجميعة .varray
/
116
ونقوم فيمايلي بتنفيذبعض اوامر sqlعلى الجدول
-2التحديث : update
لتحديث العناصر في التجميعة يتطلب استخدام pl/sqlوليمكن تنفيذ ذلك من خلل sqlالقياسية مثال:
Declare
;Editname namev
;I number:=1
Begin
Select emp into editname
;From deptv where nodept=10
Loop
If (i=editname.count+1) then
;Exit
Elsif (editname(i)='sami') then
;'Editname(i):='mohammed
;End if
;i:=i+1
;end loop
;update deptv set emp=editname where nodept=10
;end
سوف يقوم بتغير اسم الموظف samiالذي قمنا بادخال وتبديلة الى mohammedوشرح الخطوات كمايلي
اول قمنا بتعريف متغير editnameمن نفس نوع التجميعة namevوذلك لكي نقوم بتخزين المؤشر والذي
يحتوي على اسماء الموظفين فيه ونعرف ايضا متغير Iوهو من يستخدم كعداد.
يقوم هنا باستخراج اسماء الموظفين للقسم 10وتخزين ناتج الستعلم في المتغير editnameوالذي هو من نفس
نوع التجميعة
ثم يبدأ حلقة ومن ثم يختبر هل Iوصلت الى نهاية التجميعة اذا كان نعم قام بانهاء الجراء واذا لم يصل الى نهاية
التجميعة يختبر عنصر التجميعة الحالي هل هو يساوي samiام ل اذا كان يساوي samiيقوم بتغير هذه القيمة
الى mohammedومن ثم يزيد العداد بواحد ومن ثم يعود من جديد الى ان يصل الى نهاية التجميعة وبعد
النتهاء من جميع العناصر يقوم بعمل التحديث للجدول
117
;update deptv set emp=editname where nodept=10
والحذف في التجميعات varrayيتم على اخر عنصر في التجميعة اي لو حذفنا عنصر واحد فانه يتم على اخر
عنصر ول يمكن تحديد العنصر
مثال:
Declare
;Namedel namev
Begin
Select emp into namedel
;From deptv where nodept=10
;(Namedel.trim(1
;update deptv set emp=namedel where nodept=10
;end
/
ألم يتبادر الى ذهنك كيف نضيف مزيدا من الموظفين الى القسم 10يمكن ان تقول نستخدم المر insertلكن هذا غير
صحيح لننا عندما نستخدم المر insertوندخل رقم القسم 10يظهر لنا خطاء لن حقل رقم القسم مفتاح رئسي
لذلك اذا اردنا اضافة المزيد من الموظفين اول نقوم بعمل توسع extendللتجميعة لكي تسمح لنا باضافة عنصر جديد
.ونستخدم الجراء لذلك
Declare
;Newname namev
Begin
Select emp into newname
;From deptv where nodept=10
;Newname.extend
;'Newname(newname.last):='khaled
;update deptv set emp=newname where nodept=10
;end
/
118
ب -التجميعة varrayمن النوع الشيء:
لو اردنا انشاء جدول يحتوي على مسمى الوظيفة وفي حقل اخر نكّون تجميعة تحتوي على اسم الموظف وراتبة
لجميع موظفين هذه الوظيفة
JOB_NAME EMPLOYEE
manager ((ali,5000(,(sami,6000(,(fahad,4000
Analysis ((laui,7500(,(mohammed,7500
Programming ((fady,8000(,(saed,6000
/
/
لحظ الفرق اننا استخدمنا objectالذي انشئناه ولذلك سمي هذا النوع بهذا السم
وبعد انشاء الجدول سوف نتعرف الن على كيفية التعامل مع هذا الجدول من خلل sql * plus
-1الضافة :
('( manager',employeeobj
,(empobj('ali',5000
119
,(empobj('sami',6000
;(((empobj('fahad',4000
JOB_NAME
---------------------------------------------------
EMPLOYEEobj(NAMEEMP, SALARY(
-------------------------------------------------------------
manager
: التحديث-2
: كمايليpl/sql يجب تطبيق قطعة
Declare
;Editname employeeobj
;Editobj empobj
;i number:=1
Begin
Select employee into editname
;'From jobobj where job_name='manager
Loop
;(Editobj:=editname(i
If (i=editname.count) then
; Exit
Elsif editobj.nameemp='sami' then
;Editobj.salary:=10000
;Editname(i):=editobj
;End if
;i:=i+1
;End loop
Update jobobj set employee=editname
;'Where job_name='manager
;End
10000 وجعل راتبهmanager الموجود في قسمsami وبهذا يتم تعديل راتب الموظف الذي اسمه
120
-3الحذف:
Declare
;Editemp employeeobj
begin
select Select employee into editemp
;'From jobobj where job_name='manager
;(Editemp.trim(1
Update jobobj set employee=editemp
;'Where job_name='manager
تعتبر هذه التجميعة نفس التجميعة varrayمن النوع البسيط والتي نقوم بتعريفها بواسطة احد انواع البيانات الموجودة
مثل numberو varchar2وسوف نستخدم هنا نفس المثال الذي استخدمناه في التجميعة varrayمن النوع الشيئ .
مثال /نفرض انك تريد انشاء جدول القسام في مستشفى والذي سوف يحتوي على رقم القسم ,اسم القسم ,واسم القسم ,
ومن ثم اسماء موظفين القسم .مع العلم ان اسماء الموظفين سوف تكون في تجميعة nested table
/
فيجب دائم وضعه اذا استخدمنا nested tableمع تغير المكتوب باللون الحمر والذي يمثل اسم الحقل الذي هو
من النوع .nested table
121
sql **التعامل مع الجدول السابق من خلل اوامر
: الضافة-1
: update التحديث-2
: القياسية مثالsql وليمكن تنفيذ ذلك من خللpl/sql لتحديث العناصر في التجميعة يتطلب استخدام
Declare
;Editname namenested
;I number:=1
Begin
Select emp into editname
;From deptnested where nodept=1
Loop
If (i=editname.count+1) then
;Exit
Elsif (editname(i)='sami') then
;'Editname(i):='mohammed
;End if
;i:=i+1
;end loop
;update deptnested set emp=editname where nodept=1
;end
/
وشرح الخطوات كمايليmohammed الذي قمنا بادخال وتبديلة الىsami سوف يقوم بتغير اسم الموظف
وذلك لكي نقوم بتخزين المؤشرnamenested من نفس نوع التجميعةeditname اول قمنا بتعريف متغير
. وهو يستخدم كعدادI والذي يحتوي على اسماء الموظفين فيه ونعرف ايضا متغير
122
يقوم هنا باستخراج اسماء الموظفين للقسم 1وتخزين ناتج الستعلم في المتغير editnameوالذي هو من نفس
نوع التجميعة
ثم يبدأ حلقة ومن ثم يختبر هل Iوصلت الى نهاية التجميعة اذا كان نعم قام بانهاء الجراء واذا لم يصل الى نهاية
التجميعة يختبر عنصر التجميعة الحالي هل هو يساوي samiام ل اذا كان يساوي samiيقوم بتغير هذه القيمة
الى mohammedومن ثم يزيد العداد بواحد ومن ثم يعود من جديد الى ان يصل الى نهاية التجميعة وبعد
النتهاء من جميع العناصر يقوم بعمل التحديث للجدول
اذا اردنا اضافة المزيد من الموظفين اول نقوم بعمل توسع extendللتجميعة لكي تسمح لنا باضافة عنصر جديد
.ونستخدم الجراء لذلك
Declare
;Newname namenested
Begin
Select emp into newname
;From deptnested where nodept=1
;Newname.extend
;'Newname(newname.last):='khaled
;update deptnested set emp=newname where nodept=1
;end
/
-4الحذف :
هناك طريقتان الولى باستخدام trimوهذه الطريقة تحذف اخر صف في التجميعة وليمكن اختيار اي عنصر في
التجميعة:
Declare
;Namedel namenested
Begin
Select emp into namedel
;From deptnested where nodept=1
;(Namedel.trim(1
;update deptnested set emp=namedel where nodept=1
;end
/
123
اما الطريقة الثانية فهي باستخدام المر (delete(mوهذه الطريقة ل تحذف من الخير بل يتم اختيار اي العناصر
الذي تريد حذف فلو وضعنا m=2وكانت المدخلت الجدول كما فعل سابقا سيتم حذف العنصر الثاني والذي هو
الموظف sami
Declare
;Namedel namenested
Begin
Select emp into namedel
;From deptnested where nodept=1
;(Namedel.delete(2
;update deptnested set emp=namedel where nodept=1
;end
/
وهذه الطريقة(طريقة (deleteهي من ابرز الفوارق بين varrayو nested tableحيث varrayل يمكنها حذف
اي عنصر ولكن تحذف فقط العنصر الخير بعكس nested table
سوف نستخدم لشرح هذا المثال نفس المثال الذي استخدمناه في varrayمن النوع object
لو اردنا انشاء جدول يحتوي على مسمى الوظيفة وفي حقل اخر نكّون تجميعة تحتوي على اسماء الموظف وراتبة
لجميع موظفين هذه الوظيفة
اول خطوة هي انشاء الشيء empobjوالذي تم انشاءه سابق عندما قمنا بشرح vaarayمن النوع الشيء واذا
كنت لم تقم بانشاءه فهذا الكود :
/
124
:ثالث خطوة نقوم بإنشاء الجدول كمايلي
: الضافة-1
: التحديث -1
9000 الىmanager الموظف الداري اي في مسمى وظيفتهاali مثل لتغير راتب الموظف
Declare
Editsal empnestedobj;
Editempobj empobj;
i number:=1;
Begin
Select employee into editsal
From jobnested where job_name='manager';
Loop
Editempobj:=editsal(i);
If (i=editsal.count) then
Exit;
Elsif (editempobj.nameemp='fahad') then
Editempobj.salary:=9900;
Editsal(i):=editempobj;
End if;
i:=i+1;
end loop;
update jobnested set employee=editsal where
job_name='manager';
end;
125
/
Declare
Editemp empnestedobj;
Begin
Select employee into editemp
From jobnested where job_name='manager';
Editemp.extend;
Editemp(editemp.last):=empobj('mohammed',7000);
update jobnested set employee=editemp where
job_name='manager';
end;
/
: )delete)trim الحذف-4
وهذه الطريقة تحذف اخر صف في التجميعة وليمكن اختيار اي عنصر فيtrim هناك طريقتان الولى باستخدام
:التجميعة
declare
empdel empnestedobj;
begin
Select employee into empdel
From jobnested where job_name='manager';
Empdel.trim(1);
update jobnested set employee=empdel where
job_name='manager';
end;
/
( وهذه الطريقة ل تحذف من الخير بل يتم اختيار اي العناصرdelete(m اما الطريقة الثانية فهي باستخدام المر
وكانت المدخلت الجدول كما فعل سابقا سيتم حذف العنصر الثاني وهو الموظفm=2 الذي تريد حذف فلو وضعنا
وفيمايلي الكودsami
126
الطريقة الثانية
declare
empdel empnestedobj;
begin
Select employee into empdel
From jobnested where job_name='manager';
Empdel.delete(2);
update jobnested set employee=empdel where
job_name='manager';
end;
/
المراجع
127