oracle ara

207
ل ك ورا ا ات ان ي لب واعد ا ق ادارة ي ف دمة ق م ى ل ل ا ص ف ل ا ا هد ي ف رض ع ن* نDatabase ي والد ل ك ورا الأ ات ان ي ن واعد ق اصة وخ ات ان ي لب واعد ا ق ي ف ة وي ق ل م ا5 ظ ن ل خد ا ر ا: ب ت ع يData Base Management System (DBMS) ما لة ل ري خ الأ ات ان ي لب واعد ا ي: ق ة اري ق م ات ر مب م. ات ان ي ب ل واعد ا ق م ي ه ا ق م ات ان ي لب ا اعدة قDatabase دها ردا سب دا رن ن ت م د ي ع ها ليR ول ا ص و ل ل ا ه س يY ت ي ح: ب مة5 ظ ن م ل ا ات ق ل م ل ن‘ ا م وعة م: ج م ي ه ات ان ي لب وس ا م ا قData Dictionary واعد ق دارةR م ا ا5 ظ ها ن م د خ تس ي وس ، م ا ق ل ا ا ل هد خ دا5 ظ ف ح ب ات ان ي لبرس ا ها ف ن‘ خ:داول و ع ومات ل ع م ل ن‘ ا م وعة م: ج م و ه ات ان ي لب ا لأم ع ن س الأQuery م5 ظ ن ة ي لب ا ن‘ عR اY ت ي ح ات ان ي لب ا اعدة ق ي ف لأم ع ن س ر الأ ب غ ي ا لأ ي ل ا وع ة ي ي ع م ات ان ي ن ن ع لأم ع ن س لأ ل ساري ف ن سم ا ا5 ظ و ن ه ات ان ي لب ل ظ ف ف راءة ق ن ع ارة: ي ع لأم ع ن س الأ دوالFunction ي: عد ة ي ي ع م مة ي ق دالة د ال ي ع ي ا: ي ل ا وع دة خد م ة ي ل م ع لأداء ي ف ن5 ظ ي و م س م ن م ض دم خ ت س ي ر م وا و ا ا ما ت ي ل ع ي ن م وعة م: ج م ن ع ارة: ي ع ها د ي ف ن ن1

Upload: abouelnour

Post on 06-Jun-2015

1.885 views

Category:

Documents


2 download

DESCRIPTION

كتاب اوراكل بالعربي

TRANSCRIPT

Page 1: Oracle ara

أوراكل

البيانات قواعد ادارة في مقدمة الى الفصل هذا في بيانات Databaseننعرض قواعد وخاصةالبيانات قواعد في القوية النظم أحد يعتبر والذي Data Base Management Systemاألوراكل

(DBMS) االخرى البيانات بقواعد مقارنة مميزات له .لما

البيانات قواعد مفاهيمالبيانات Databaseقاعدة

نريداستردادها عندمت إليها الوصول يسهل بحيث المنظمة الملفات من مجموعه هي

البيانات Data Dictionaryقاموس ، القاموس هذا داخل تحقظ البيانات وفهارس جداول عن المعلومات من مجموعة هو

البيانات قواعد إدارة نظام يستخدمها

Queryاالستعالم البيانات قاعدة في االستعالم يغير ال وغاليا معينة بيانات عن لالستعالم استفساري نظام هو

للبيانات فقط قراءة عن عبارة االستعالم نظم غالبية إن حيث

Functionدوال محددة عملية الداء وظيفي مسمى ضمن تستخدم أوامر أو ت تعليما من مجموعة عن عبارة

تنفيذها بعد معينه قيمة الدالة تعيد وغالبا

Procedureاالجراء يعيد ال االجراء لكن محددة مهمة تنفيذ بهدف الدالة تعليمات مثل التعليمات من مجموعة

الدالة مثل قيمة

Schemaمخطط الكائنات من مجموعة عن من Objectsعبارة الكائن مخطط ويتألف البيانات بقواعد مرتبطة

الجداول مثل والفهارس Viewsوالعروض Procedureواالجراءات TablesكائناتDirectories... الخ

البيانات قواعد Database Administrator (DBA)مديريتم وكيف القواعد هذه أداء ونظم البيانات قواعد إدارة عمليات عن المسؤؤل الشخص هو

النسخ عمليات إجراء وكذلك ، القواعد هذه أداء مراقبة عن أيضا مسوؤل وهو تكوينهاأو , جدد مستخدمين وإذافة المعلومات أمن على والمحافظة ، البرامج وتثبيت االحتياطي

مستخدمين صالحيات إلفاء

الحاجو وتحديد ، المطبق النظام وتنمية لتطير بالتخطيط البيانات قواعد مدير يقوم ان ويمكنالمستقبلية . التطورات لهذه

البيانات قواعد مديري من يتكون الذي العمل فريق العمل DBAويسعى سير على للحفاظالمديرين . . هؤالء بين المهام تجزئة وتتم متجانس بشكل الشركة داخل

البيانات قواعد مدير (DBA)مهام

1

Page 2: Oracle ara

لفريق وتبعا المؤسسة أو الشركة لحجم تبعا البيانات قاعدة مدير مهام تتباينالتالية : النقاط المهام هذه وتشمل المساعد العمل

الجديدة -1 البرمجيا تثبيتالبيانات -2 قواعد لنظام الحماية إدارةالبيانات -3 قواعد ونظام للبيانات والدوري االحتياطي النسخ

ومعالجتها - 4 األخطاء استكشافبياناتهم- 5 إلى للوصول المساخدمين إخفاقات وإصالح تسويةالعمل -6 أداء ضبط متابعة

الجديدة -4 والنطم األجهزة تقسسمبالشركة -5 النظام تطوير على العمل

البيانات قاعد إدارة )Data Base Management System )DBMSنظام

وتوجد ( ) البيانات قاعدة وتنظم تدير التي البرامج البرمجيه األدوات مجموعة عن عبارة هوعالقة تسمى البيانات هذه بين ارتباط عليها )Relation(عالقة يطلق احبانا أي RDBMSلذا

االرتباطية ( ) العالئقية البيانات قواعد إدارة نظام

أوراكل البيانات قاعدة إدارة نظام مميزات

: باآلتي األخرى البيانات قواعد إدارة نظم من غيره عن أوراكل البيانات قاعدة نظام يتميزإلى -1 السجالت عدد يصل قد البيانات من كبيرة كميات استيعاب على الفائقة القدرة

والتخزين استرجاع عند والسرعة األداء في العالي المستوى على الحفاظ مع الماليينوالحذف

تطبيق -2 يضمن الذي والحقوق الصالحيات نظام على حتوائه ال واألمن التامة السريةالبيانات قاعدة على للحفاظ واألمنية القياسية الشروط

يضمن :-3 الذي بالبيانات المركزي التحكم فعالية الدخلة البيانات في الالزمة عير التكررات ) No Repetition(تقليل البيانات بين التناقض )No Contradiction(تجنب البيانات في التشارك )Data Sharing(إمكانية بينها فيما البيانات تكامل على )Data Integrity(الحفاظ

أو -4 الفقدان من وحمايتها البيانات لقاعدة االحتياطي النسخ عملية على التامة السيطرةلحظة أي في استرجاعها امكانية مع التلف

2

Page 3: Oracle ara

البيانات قاعدة إدارة نظام عمليات

التالية العمليات على اوراكل البيانات قاعدة إدارة نظام يشتمل

البيانات -1 تعريف لغة )Data Definition Language )DDLأوامر

الكائن وإنشاء تعريف في اللغة هذه ملفات Objectتستخدم الكائن يكون أن ويمكن ، لمستخدم امتياز إنشاء ويمكننا الكائن وحذف وتعديل إنشاء فيمكننا ، بيانات وجداول

هذه ومن البيانات قاموس إلى تعليقات وإضافة لفحص خيارات كائن انشاء أو ، معينCREAT , DROP and ALTERاألوامر :

البيانات -2 معاملة لغة )Data Manipulation Language )DMLأوامر

الموجود الكائن ضمن وتعديلها البيانات مع التعامل األوامر هذه هذه Objectتتيح ومنSELECT, DELETE,UPDATE and INSERTاألوامر :

البيانات -3 في التحكم لغة )Data Control Language )DCLأوامر

والمستخدمين كالصالحيات وأدائها البيانات قاعدة في التحكم األوامر هذه تتيحالبيانات قاعدة مدير قبل من لالستخدام مخصصة األوامر هذه ماتكون وغالبا والحقوق

)DBA( : االوامر هذه GRANT and REVOKEومن

أوراكل لنظام الداخلي التركيب

الفصل أهداف

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

الجداول -1 بين العالقات فهمالعالقة -2 نمذجة تعريفالعالئقية -3 البيانات قاعدة مكونات فهموالمستفبد -4 الخادم بين العالقة فهمالخادم -5 SERVERقهمالمستفيد -6 Client فهم

العالئقية البيانات قواعد في مقدمة

على فيحتوي ، أوراكل البيانات قواعد إدارة لنظام الداخلي والبناء التركيب الفصل هذا يقدمأحد على بنائها في البيانات قواعد نظم تطبيقات غالبية وتعتمد أوراكل لمكونات سريع وصف

: التالية البيانات قاعد نماذج

هرمي ( ) -1 هيكلي Hierarchical Modelنموذجشبكي -2 Network Modelنموذجعالئقي -3 Relational Modelنموذج3

Page 4: Oracle ara

شيئي -4 Object Modelنموذج

الكبيرة ( ) الكمبيوتر أجهزة مع انتشارا األكثر الهرمي األول النموذج كان الماضي MainفيFrame ( ) وتركيب بناء في التوسع مع وخاصة االنتشار في الشبكي الثاني النظام بدا ثم

الهرمي ( والثاني الول النظامين استخدام في صعوبات هناك وكانت الحاسب شبكاتالبرمجة ) مؤشرات الستخدام نتيجة مع )Pointers( والشبكي بعضها البيانات سجالت لربط

وعمل طبيعة قهم من المزيد إلى يحتاج السجالت حذف أو تعديل أو إضافة أن نجد لذا ، بعضالكوبول بلغة تكتب المؤشرات برمجة طرق الماضية الفترة هذه وفي .)COBOL(المؤشرات

العالئقي النموذج تطبيقات )Relational(أما برمجة وفي االستخدام في سهولة األكثر فهواألساسية المفاهيم دراسة فيلزمك األكاديمية النظرية الناحية ومن البيانات قواعد نظم

على هنا سنركز لهذا العالئقي النموذج لهذا والضروربة

العالئقية -1 البيانات Relational Data Structureهيكلالعالئقية -2 للبيانات الحاكمة Constraint that govern organization of dataالضوابط

structure البيانات -3 هذه على تجرى التي Operations that are performance dataالعمليات

structure

العالئقبة البيانات هياكل نام ويطلق )Relational Database(ويعتمد منطقي هيكل علىعالقة األبعاد ) Relational(عليه ثنائي شكل )Tow dimensional data structure(وعلى

جدول ويسمى وأعمدة صفوف من البيانات )Table(يتكون عناصر إلى باإلضافة (هذاData elements ( الحالة هذه في هذه attributesتسمى تنظيم يتم هذا على عالوة

تسمى وحدات أو وحدة في الفعلية صفوف Tuplesالبيانات إلى أو Rowsتقسمالعناصر ) Fieldsحقول ( Columnsوأعمدة ) Recordsسجالت ) يبين التالي والشكل

الموظقين لجدول Employeesاألساسية

4

Page 5: Oracle ara

الجداول بين العالقة

حقال . تستخدم الطريقة وهذه لالرتباط طريقة إلى تتحتاج بأخرى عالقة يكون Fieldلربطالرئيسي بالمفتاح األول الجدول في يسمى االرتباط وحقل الجدولين فب Primary(موجودا

Key( ال يالمفتاح ويسمى األل الثاني ) ) Foreign Keyللجدول الجدول في

5

Page 6: Oracle ara

العالفة Relational Model Algebraنمذجةمحددة لعالقة تبعا الجداول من مجموعة أو جدول على اجراؤها يتم التي العمليات بانها تعرف

معامالن لهذه Binary والثاني Unaryهما Operatorsويوجد انواع سبعة يعدد التالي والجدولالعمليات

العملية العملية وصف العمليةTypeنوعOperation

من السجالت الصفوف تجميعبنكرار السماح عدم مع جدولين

سجالت

BinaryUnion

( الصفوف ( السجالت تحديدجدولين بين المشتركة

BinaryIntersection

في الموجودة السجالت اظهارالجدول في توجد وال االول الجدول

الثاني

BinaryDifference

األعمدة بعض مع السجالت إظهار( البيانات( مصدر

UnaryProjection

مصدر جدول من السجالت إظهارالبحث لمعيار تبعا Criteriaالبيانات

UnarySelection

البيانات جدول من سجل كل وصلالثاني الجدول في سجل كل مع الول

UnaryProduct

الجدول من السجالت وتمديد وصلفي سجالت من مايقابله مع األل

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

UnaryJoin

6

Page 7: Oracle ara

العالئقية البيانات قاعدة RDBMS Componentsمكونات

من : العالئقية البيانات قاعدة تتكون

عليه -1 ويطلق البيانات ثاعدة تشغيل Kernelنظامالبيانات -2 Data Dictionaryقاموس

البيانات ( قاعدة وتنظيم تشغيل نظام البرمجية) Kernelويتكون الوحدان من مجموعة منSoftware وطباعة واسترجاع حفظ مابين البيانات مع وينعامل وينظم بيحكم صمم والذي

البيانات وحماية األمان نظم وعمل المسؤليات تحديد وكذلكمع للتعمل صالحية لهم الذين المستخدمين من بقائمة البيانات قاعدة نظام يحتفظ وعادة

الـ مكونات من بعضا يوضح التالي والشكل البيانات قاعدة أوراكل Kernelتطبيق نظام في

الـ البيانات Kernelمكونات قاعدة نظم في

البيانات قاموس الوصف Data Dictionaryويحوي هذا على ويطلق البيانات لشكل وصفاMeta Description أوMeta Data ت الكائنا بكافة يرتبط الوصف قاعدة Objectsوهذا ضمن

البيانات عن المخزنة البيانات صاعدة جداول مجوعة على يحتوي أوراكل بيانات وقاموس

الـ الفهارس Kernelطريق كائنات على العرض Indexesوأيضا كائنات Viewsكائناتواالستقسار اإلجراء SQL and Queryاالستعالم إلخ ...Functionوالدوال Procedureكائنات

7

Page 8: Oracle ara

أوراكل باستخدام بيانات قاعدة تعديل أو قراءة كيفية يوضح التالي الشكل

بين العالقة البيانات SQLو Kernelشكل قاموس و

8

Page 9: Oracle ara

) ( العميل والمستفيد الخادم بين Client/Serverالعالقة

مكونين من أوراكل نظام يتكون Serverالخادم -1العميل ( -2 ) –المستفيد Clientالمزود

Serverالخادم

هذه لحفظ الخلفية العمليات كافة وكذلك ، ووظائفها المركزية البيانات قاعدة الخادم يحويوإيقاف تشغيل أدوات ايضا وبحوي البيانات الفاعدة فاعدة

الخادم لنظام الداخلي البناء يوضح التالي والشكل

Clientالمستفيد

المستفيد تشغيلها Clientأما بمكننا والتي المساعده والبرامج الخدمات برامج على فيحتويالرسومي الوسيط المستفيد نظام يتضمن كما الشبكة باستخدام بعد Graphicalعن

Interface وهي والمستقيد الخادم بين االتصال أداة وتوجد استخدامه علينا يسهل Net 8الذيالشبكة عبر واالتصال الربط بعمليات لتقوم

على المستفيد لنظام البرامج حزمة تشمل والمشروع -1 Enterprise Managerمدير

التالية المكونات داخله ويحوي المشروع مدير Enterprise Managerمتحكم البيانات قاعدة مخطط Schema Managerمدير السرية Security Managerمدير الطبعة Instance Managerمدير

9

Serverالخادم

الخادم مدير revreS

reganaM

االستعالم نظمSULP * LQS

بروتكول اتصال

8teNالشبكة

نظام االستيراد والتصدير

&08PXE08PMI

المترجمات erP

sreilpmoc

نظام التحميل

REDAOL

Page 10: Oracle ara

التخزين Storage Managerمدير البيانات Data Managerمدير للبيانات االحتياطي النسخ Backup and Recovery Managerمدير االستعالم عمل SQL Worksheetورقة المسؤول أدوات Administrator Toolbarشريط

Assistantsالمساعدون -2االستعالم -3 SQL*PLUSنظام

للمستفيد البرامج حزمة مكونات يوضج التالي Clientوالشكل

االستعالم SQL*PLUSنظامAssistantsالمساعدون

المشروع Enterprise Managerمديراالستعالم عمل ورقة

SQL Worksheetقاعدة مخطط مدير

Schemaالبيانات Manager

مدير متحكم Enterpriseالمشروع

Manager

الطبعة InstanceمديرManager

االحتياطي النسخ مدير Backup andللبيانات

Recovery Manager

السرية مديرSecurity Manager

أدوات شريط المسؤول

Administrator Toolbar

التخزين StorageمديرManager

البيانات DataمديرManager

الوحدة ملخص

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

بينهما .

البسيطة SQLجمل

الفصل أهداف

جملة ذلك في مشتخدمين مختلفة حاالت في البيانات استرجاع عملية وفي SELECTنتااولعلى : قادر الله شاء إن ستكون الفصل هذا نهاية

جملة بواسطة البيانات البسيطة SELECTاسترجاع جمل كتابة وإرشادات متطلبات SQLفهم جمل مع تنفيذها وأولويات الحسابية العمليات SQLاستخدام

10

بروتكول الشبكة اتصال

(Net8)

Page 11: Oracle ara

البيانات على اإللحاقية الجمل استخدام عبارة البيانات DISTINCTاستخدام عرض تكرار لمنع الجدول مواصفات عرض

جملة SELECTأساسيات

SELECTجملة جملة عملية SELECTتستخدم أن حيث جداول عدة أو جدول في المخزنة البيانات السترجاع

جملة خالل من ويمكننا البيانات هذه في تعدل ال :SELECTاالسترجاع بالتالي نقوم أن

الجدول -1 في المخزنة السجالت من معينة مجموعة وعرض اختيارالجدول -2 حقول بعض بيانات استرجاعمختلفة -3 جداول في مخزنة بيانات استرجاع

مالحظة واحدة استفسار جملة في المزايا هذه بعض أو كل نستخدم أن يمكن

مالحظة

محرر SQL*PLUsأوامرمحرر على األوامر وتنفيذ وتحرير كتابة في ستساعدك التي البسيطة الوامر بعض SQLهنالك

ومنهاكتابته EDITاالمر -1 مرر : EDويمكن على كتابته تم امر آخر لتحرير األمر هذا يستخدم

SQL ( خاللها ( يمكنك التي المفكرة المحرر شاشة لك ستفتح األمر هذا تنفيذ وعندولكن المفكرة شاشة اغلق ثم المر احفظ ذلك من االنتهاء وعند األمر تحرير اعادة

المنقوطة ( الفاصلة تكتب ال فقط) ;الحظ الحالة هذه في األمر نهاية بعدامر (/) Rاألمر -2 اخر تنفيذ العادة ويستخدم كتابته محفوظ SQLوطريقة

لجملة العام SELECTالشكل

SELECT { * , COLUMN [alies], …}FROM table_name ;

أن حيثCOLUMN الحقل اسم

table_name الجدول اسمalies العمود تسمية

الجدول * حقول جميع استرجاع على للداللة الرمز نضع أن يمكن

جمل SQLكتابةجمل كتابة غند االعتبار بعين توضع أن يجب التي اإلرشادية القواعد بعض يلي فيما SQLنوضح

جمل -1 كتابة الصغيرة SQLيمكن أو الكبيرة بالحروفجمل -2 كتابة أسطر SQLيمكن عذة في

11

Page 12: Oracle ara

مثل -3 السطور عبر المحجوزة الكلمات فصل يمكن FROMالالقراءة -4 عملية لتسهيل الجملة مكونات بين مساقات اتركبرنامج -5 مؤشر SQL *PLUSفي مع األوامر مباشرة SQLتكتب المر هذا تخزين ويتم

الذاكرة في

مثالSELECT * FROMSELECT * FROM s_dept;s_dept;

IDID NAMENAME REGION_IDREGION_ID---------------- -------------------------- --------------------

1010 FinanceFinance 113131 SalesSales 113232 SalesSales 223333 SalesSales 333434 SalesSales 443535 SalesSales 554141 OperationsOperations 114242 OperationsOperations 224343 OperationsOperations 334444 OperationsOperations 444545 OperationsOperations 555050 AdministrationAdministration 11

12 rows selected.12 rows selected.

جمل SQLلتنفيذمؤشر -1 في الجملة نهاية في منقوطة فاصلة SQLنضعمؤشر / -2 في الجملة نهاية في عالمة SQLنضعالذاكرة / (-3 في األمر في الجملة نهاية في عالمة )BUFFERنضععبارة -4 مؤشر RUNكتابة في الجملة نهاية SQLفي

الحسابية العملياتعلى المعالجة هذه تؤثر أن دون البيانات عرض عند الحسابية العمليات نستخدم أن يمكن

ثابتة قيمة الحقل اسم على الحسابي التعبير يحتوي أن ويمكن ، الجدول في المخزنة البيااناتالحسابية العملية و

الحسابية العمليات: هي تستخدم أن يمكن التي العمليات

+الجمع- 1-الطرح- 2÷القسمة- 3*الضرب- 4

جملة أجزاء حميع في العمليات هذه استخدام بـ SELECT ويمكن الخاص الجزء FROMعدا

العمليات أولوياتاالسس -1 ثم الخارجية ثم الداخلية االفواس

12

Page 13: Oracle ara

والقسمة -2 الضربوالطرح -3 الجمع

مالحظة اليمين الى اليسار من تنفذ والطرح كالجمع االولية نفس لها التي العمليات

اإللحاقية العملية

حقول إلى نصية حرفية مجموعة أو للجدول األعمدة من عدد إلحاق عملية نجري أن يمكناإللحاقية || العملية باستخدام العرض عند أخرى

مثالSELECTSELECT first_name||last_namefirst_name||last_nameFROM FROM s_emp;s_emp;

EmployeesEmployees--------------------------------------------------------------------------------------------------CarmenVelasquezCarmenVelasquezLaDorisNgaoLaDorisNgaoMidoriNagayamaMidoriNagayamaMarkQuick-To-SeeMarkQuick-To-SeeAudryRopeburnAudryRopeburnMollyUrguhartMollyUrguhart......

واحد اسم كانه فظهر مسافات وجود بدون االخير باالسم اتصل االول االسم ان نالحظنكتب مسافات توجد ولكي

SELECT first_name ||' '|| last_name FROM s_emp;SELECT first_name ||' '|| last_name FROM s_emp;

عبارة DISTINCTاستخدام

عبارة أن DISTINCTتستخدم أردنا إذا فمثال المسترجع السجل بيانات ظهور تكرار لمنعأن نجد الموظفين جدول في والمخزنة الموظفون إليها ينتسب التي الوائف على نعرف

عبارة نستخدم تكرار لمنع إليها ينتمون الذين الموظفين عدد حسب تتكرر وظائف هنالكDISTINCT

األمر :SELECTويأخذ التالي الشكلSELECT [DITINCT] { * , COLUMN [alies], …}FROM table_name ;

أن حيثCOLUMN الحقل اسم

table_name الجدول اسمalies العمود تسمية

DITINCT التكرار لمنع

13

Page 14: Oracle ara

الفصل ملخصجمل كتابة الفصل هذا في جملة ( SQLتناولنا استرجاع) SELECTالبسيطو في تستخدم التي

الـ جمل وتنفيذ كتابة عند اتباعها يجب التي اإلرشادية القواعد بعض وكذلك SQLالبياناتجملة مع الحسابية العمليات استخدام تناولنا وكذلك SELECTكما اإللحاقية والعملية

السجالت DISTINCTعبارة ظهور تكرار لمنع تستخدم التي

14

Page 15: Oracle ara

ترتيبها بشروط البيانات استرجاع

الفصل اهدافالبيانات -1 وانواع وخصائصها الحقول وأسماء الجداول ألسماء التامة المعرفةجملة -2 مع )SELECT Statement(البسيطة SQLالتعاملمحرر -3 أوامر SQLاستخدام

الشرط جملة WHERE CLAUSEاستخدام

مقدمة

البسيط االستعالم جملة الى بالتعرف السابقة الوحدة في قمنا )SELECT Statement(لقدهذه . عن الحديث سنتابع الفصل هذا وفي الجداول من البيانات استرجاع تم خاللها من التيمرتبة أو ، معينة شروط على بناء الجداول من البيانات سنسترجع حيث ، أوسع يشكل الجملة

، االسترجاع جملة في الشرط بجملة المتعلقة المور سندرس أي ، معينة حقول بيانات حسبوالترتيب التصاعدي والترتيب الشرط عن التعبير وطريقة الشرطية المعامالت حيث من

للبيانات التنازلي والترتيب التصاعدي

الشرط لجملة العامة الصيغة

SELECT {Field1, Field2, ...,...|*}FROM Table1WHERE Condition;

أن حيث

Field1.Field2 بياناتها استرجاع سيام التي الحقول أسماءTable1 منه البيانات استرجاع سيتم الذي الجدول أسم

Condition إما نتيجتها تكون أكثر أو شرطية أسماء Falseاو Trueجملة من وتتكونومعامالت وتعبيرات حقول

الشرح

جملة على WHEREتستخدم تتوي وهي الجداول من استرجاعها سيتم التي البيانات لحصرالمقطع بعد مباشرة وتقع الحقول FROMشرط بيانات استرجاعها سيتم الجملة تنفيذ وعند

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

الحقول أسماء المقارنة معامالت ثابتة قيم حسابية وتغبيرات متغيرات

15

Page 16: Oracle ara

االعتبار بعين أخذها يجب التي األمور

عالمتي- 1 بين القيم وضع يجب الشرط جملة في التاريخ وحقول النص حقول استخدام عندمفردتين ( (‘ ‘تنصيص

صغيرة- 2 أو كبيرة األحرف حالة مراعاة يجب النصية الحقول حالة فيالتاريخ- 3 صيغة مراعاة يجب التاريخ حقول الة للتاريخ )FORMAT(في األسلسية والصيغة

يلي كما DD-MON-YYهي

المقارنة COMPARISON OPERATORSمعامالت

: التالية الرموز المقارنة معامالت تشمل

المعنىالمعامليساوي=من > أكبرمن < أقل

يساوي => أو من أكبريساوي =< أو من اقليساوي >< ال

جملة في بآخر تعبير لمقارنة الشرط جملة في المقارنة معامالت في WHEREتستخدم كماالتالية : الصيغة

WHERE تعبير OPERATOR تعبير

مثال

WHERE hiredate=’01-SEP-96’WHERE sal<=1500WHERE name=’Ahmed’WHERE sal>< other

أخرى تمعامال مقارنة

المعامل المعامل المعنىنفىBETWEENNOT BETWEEN قيمتين بين

INNOT IN القيم من قائمة ضمنLIKENOT LIKE النص نمط مطابقة

IS NULLIS NOT NULL فارغة قسمة هي هل

16

Page 17: Oracle ara

BETWEENالمعامل البيانات أي القيم من مدى على تعتمد التي الصفوف بيانات السترجاع المعامل هذا يستخدم

قيمتين بين تقع التي

مثال

SELECT * FROM S_EMP WHERE sal BETWEEN 1500 AND 2500;

بين رواتبهم اقع الذين الموظفين بيانات جميع استرجاع سيتم أنه 2500و 1500أي

مالحظةتماما راتبه يببلغ الذي الموظف بيانات استرجاع جملة 2500أو 1500ستم أن أي

BETWEEN استرجاعها سيتم التي للقيم األدنى والحد األعلى الحد تتضمن

INالمعامل -1

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

مثال

SELECT name, sal , deptno FROM S_EMPWHERE detno IN (10,30);

الذين للموظفين به يعمل الذي القسم ورقم وراتبه الموظف اسم استرجاع سيتم أنه أيرقم قسم في رقم أو 10يعملون 30قسم

.LIKEالمعامل -2

حروف مطابقة سيتم حيث ، نصي حقل داخل معين نص عن للبحث المعامل هذا يستخدمالشرط جملة في المذكرة النص

مثال SELECT * FROM S_EMP WHERE name LIKE ‘S%’;

بحرف أسماؤهم تبدأ الذين الموظفين بيانات جميع استرجاع سيتم أنه Sأي

مالحظةاالشارة الحروف %تستخدم من عدد أي أو شيء ال تكون قد ، نصية قيمة أي عن عوضا

بحرف ينتهي معين اسم عن مثال حرف ’A%‘نكتب Aللبحث يحتوي نص عن Aوللبحثمعين ’%A%‘نكتب نصي حقل داخل مقطع أي عن نبحث أن بإمكاننا وهكذا

17

Page 18: Oracle ara

مثال

SELECT * FROM S_EMP WHERE name LIKE ‘_A%’;

هو أسمائهم في الثاني الحرف يكون الذين الموظفين بيانات جمبع استرجاع سيتم أنه Aأي

مالحظةفقط _ واحد حرف عن عوضا اإلشارة تستخدم

IS NULLالمعامل -3

( بيانات ( على تحتوي ال التي القول قيم أي شيء ال القيمة لفحص المعامل هذا يستخدم

مثالSELECT name, sal FROM S_EMP WHERE comm. IS NULL;

يتم لم أو عمولة لهم ليس الذين للموظفين وراتبه الموظف اسم استرجاع سيتم أنه أيعمولتهم ادخال

المنطقية LOGICAL OPERATORSالمعامالت

المعنىالمعاملAND يرجع TRUE القيمتين كلتا كانت TRUEاذا

OR يرجع TRUE القيمتين احدى كانت TRUEاذاNOT يرجعTRUE الفيمة كانت FALSEإذا

واحدة قيمة لترجع المنطقية المعامالت قيمتين FALSEأو TRUEتستخدم بين كنتيجةمن منطقية قيمة لعكس او والعكس FALSEالى TRUEمنطقيتين

جملة داخل شرط من أكثر تكوين يمكننا المنطقية المعامالت خالل باستخدام WHEREمنالمعامل ANDالمعامل ORاو

ANDالمعامل -1

القيمتين كال تكون أن المعامل هذا TRUEيتطلب

مثال SELECT name, sal FROM S_EMP WHERE sal>=2600 AND comm<200;

عن راتبهم يزيد الذين للموظفين وراتبه الموظف اسم استرجاع سيتم أنه وتقل 2600أيعن الوقت نفس في البيانات 200عمولتهم السترجاع الشرطين يتحقق يجب انه أي

18

Page 19: Oracle ara

ORالمعامل -2

القيمتين من أي تكون أن المعامل هذا TRUEيتطلب

مثالSELECT name, sal FROM S_EMP WHERE sal <2000 OR deptno=30;

عن راتبهم يزيد الذين للموفين وراتبه الموظف اسم استرجاع سيتم أنه يعملون 2000أي أورقم قسم البيانات 30في السترجاع الشرطين من أي يتحقق يجب أنه أي

NOTالمعامل -3

من منطقية قيمة بعكس المعامل هذا والعكس FALSEإلى TRUEيقوممثال

SELECT name, sal FROM S_EMP WHERE deptno NOT IN (20,40);

رقم القسمين في يعملون ال الذين للموظفين وراتبه الموظف اسم استرجاع سيتم أنه 20أيرقم المعامل 40و نتيجة عكس تم الحالة هذه INوفي

المقارنة ومعامالت المنطقية المعامالت أولويات

من المعامالت هذه تنفيذ أولوية فإن الشرط ملة نفس في منطقي معامل من أكثر ورد إذاكالتالي غي األدتى إلى األعلى

1-األقواس-23-(>< = > <) ، ، ، المقارنة معامالت4-NOT 5-AND 6-OR

الترتيب جملة ORDER BYاستخدام

العامة الصيغةSELECT {Field1, Field2,…,…|*}FROM Table1WHERE ConditionORDER BY Field3 [ASC|DESC];

أن حيثTable1 منه البيانات استرجاع سيتم الذي الجدول اسم

Field1, Field2 بياناتها استرجاع سبتم التي الحقول اسماءCondition إما نتيجتها تكون اكثر أو شرطية من Falseأو Trueجملة وتتكون

منطقية ومعامالت وتعبيرات حقول اسماءField3 عليه بناء الترتيب سيتم الذي الحقل اسم

19

Page 20: Oracle ara

ASC ذكرها عدم ويجوز تصاعديا مرتبة البيانات استرجاعDESC تنازليا مرتبة البيانات استرجاع

الشرح

جملة تستخدم البيانات استرجاع عدة ORDER BYعند أو معين حقل حسب البيانات لترتيباالسترجاع جملة نهاية في الجملة هذه وتأتي تصاعديا SELECTحقول الترتيب هذا يكون وقد

المقطع( ) استخدام عند الكبيرة القيمة إلى الصغيرة القيمة من (ASCمن تنازليا يكون وقد ( المقطع استخدتم عند الصغيرة القيمة إلى الكبيرة DESCالفيمة

مثالSELECT * FROM S_EMPWHERE deptno NOT IN (20,40)ORDER BY empno ASC;

رقم القسمين في يعملون ال الذين الموظفين بيانات جميع استرجاع سيتم أنه ورقم 20أيمرتبة 40 البيانات الموظف تصاعدياوستكون رقم حسب

المقطع دون السابقة الجملة كتابة :ASCويجوز كمايلي

SELECT * FROM S_EMPWHERE deptno NOT IN (20,40)ORDER BY empno;

مثال SELECT * FROM S_EMPWHERE deptno NOT IN (20,40)ORDER BY empno DESC;

رقم القسمين في يعملون ال الذين الموظفين بيانات جميع استرجاع سيتم أنه ورقم 20أيمرتبة 40 البيانات الموظف تنازلياوستكون رقم حسب

الفصل ملخص

ترتيب وموضوع منالداول بشروط البيانات استرجاع موضوع الفصل هذا خالل من تناولناالمقارنة معامالت إلى الشرط جملة دراسة خالل من وتطرقنا كما وتنازليا تصاعديا البيانات

مثل أخرى ومعامالت المنطقية من IS NULLو INو BETWEENوالمعامالت بها ومايتعلقوالمعامالت المقارنة معامالت وأولويات الشرط جملة وتركيب االستخدام طريقة حيثالمنطقية.

20

Page 21: Oracle ara

الحرفية الدوال

الفصل اهداف

على : قادر ستكون الله شاء إن الفصل هذا نهاية فيخالل -1 من وبالعكس كبيرة إلى صغيرة من الحروف SQLتحويلفي -2 الموجود النص داخل الحروف ومحاذاة SQLضبطالجداول -3 من البيانات بحذف القيامللبيانات -4 الصوتي اللفظ مع التعاملالجدول -5 بيانات بتعديل القيام

والمحاذاة والضبط الحرفية الدال

صغيرة حروف إلى البيانات تحويل LOWER Functionدالة

هذه استخدام ويتم صغيرة حروف إلى كبيرة حروف من البيانات لتحويل الدالة هذه تسنخدمأخرى جمل مع غاليا الدالة

العام التالي الشكل المثال انظر

مثال .SELECT LOWER (name), LOWER (job) FROM S_EMP;

صغيرة بحروف ولكن ووظبقته الموظف اسم عرض سيتم

LOWER name name LOWER jobjob-------------------- ---------------------------------------- --------------------ali salesmanali salesmanahmed analystahmed analystsamisami manager managerkhaledkhaled manager manager

كبيرة حروف إلى البيانات تحويل UPPER Functionدالة

هذه استخدام ويتم كبيرة حروف إلى صغيرة حروف من البيانات لتحويل الدالة هذه تسنخدمأخرى جمل مع غاليا الدالة

مثالSELECT UPPER (name), UPPER (job) FROM S_EMP;

21

Page 22: Oracle ara

كبير حرف إلى البيانات من األول الحرف تحويل INITCAPدالة

استخدام ويتم كبير حرف إلى المحدد القل بيانات من حرف أول لتويل الدالة هذه تستخدمأخرى الجمل مع غالبا الدالة هذه

مثالSELECT INITCAP (name), INITCAP (job) FROM S_EMP;

كبير سيكون كالهما في حرف اول ولكن ووظبقته الموظف اسم عرض سيتم

INITCAP name name INITCAP jobjob-------------------- ---------------------------------------- --------------------Ali SalesmanAli SalesmanAhmed AnalystAhmed AnalystSamiSami Manager ManagerKhaledKhaled Manager Manager

) الحقل ) بيانات من جزء قص اقتطاع SUBSTRدالة

الحقل او العمود بيانات من معين جزء قص أو لعرض تستخدم

العامة الصيغة

SUBSTR(Field1,N,M)SUBSTR(Field1,N,M)أن حيث

String منه االقتطاع المراد الحقلN االقتطاع عنده يبدأ حرف اولM اقتطاعها المراد الحروف عدد

مثال SUBSTRSUBSTR('Ahmed',1,3) ('Ahmed',1,3)

الناتج قيكونAhm

مثال SELECT SUBSTR (name, 1,2) FROM S_EMP;S_EMP;

وعرضها الموظف اسم من والثاني األول الحرف اقتطاع سيتم

22

Page 23: Oracle ara

حقل بيانات في حرف موقع نحديد INSTR Functionدالة

الحقل أو العمود بيانات في حرف موقع أو مكان لتحديد الدالة هذه تستخدم

العامة الصيغةINSTR )Field, ‘C’(

أن حيث

Field منه التحديد سيتم الذي الحقلC استخراج المراد موقعه الحرف

مثال SELECT INSTR (name, ‘l’) FROM S_EMP;S_EMP;

الحرف موقع استخراج الموظف lسيتم اسم حقل من

INSTR name name -------------------- -------------------- 2 2 0 0 004 4

للبيانات اليمين ناحية ومحاذاة ضبط RPAD Functionدالة

حروف ( ) أو معين حرف ملء يتم حيث اليمين ناحية البيانات لمحاذاة الدالة هذه تستخدمالبيانات يمين

العام الشكل

RPAD (COL | VALUE, N, ‘ String’)

أن حيث

COL ( يمينه ( حروف حرف ووضع ، بياناته محاذاة المطلوب الحقل اسمVALUE(" ") تنصيص عالمتي بين حرفي متغير أو قيمة وضع يمكن

N الجديد الف ظهور مرات عددString به الفراغات ملء سيتم الذي المتغير أو الحرف

23

Page 24: Oracle ara

مثالSELECT name, RPAD (sal, 7,’$’)FROM S_EMP;

NAME NAME RPAD SAL-------------------- ---------------------------------------- --------------------Ali 968$$$$Ali 968$$$$Ahmed 1936$$$Ahmed 1936$$$SAMISAMI 1512.5$1512.5$KHALEDKHALED 3599.753599.75

للبيانات اليسار ناحية ومحاذاة ضبط LPAD Functionدالة

حروف ( ) أو معين حرف ملء يتم حيث اليمين ناحية البيانات لمحاذاة الدالة هذه تستخدمالبيانات يسار

العام الشكل

LPAD (COL | VALUE, N, ‘ String’)

أن حيث

COL ( يمينه ( حروف حرف ووضع ، بياناته محاذاة المطلوب الحقل اسمVALUE(" ") تنصيص عالمتي بين حرفي متغير أو قيمة وضع يمكن

N الجديد الف ظهور مرات عددString به الفراغات ملء سيتم الذي المتغير أو الحرف

مثالSELECT name, LPAD (sal, 7,’#’)FROM S_EMP;

NAME NAME LPAD SAL-------------------- ---------------------------------------- --------------------Ali ####968Ali ####968Ahmed ###1936Ahmed ###1936SAMISAMI #1512.5 #1512.5KHALEDKHALED 3599.753599.75

24

Page 25: Oracle ara

البيانات تعديل و حذف

الحقل يمين ناحية بيانات حذف RTRIM Functionدالة

المحدد الحقل او العمود يمين ناية من بيانات لحذف الدالة هذه تستنخدم

العامة الصيغةRTRIM (COL | VALUE,‘ String’)

أن حيث

COL العمود أو القل اسمVALUE للعمود البديلة القيمة

String عنه البحث سيتم الذي المتغير أو الحرف قيمة

مثال

SELECT name, RTRIM (job,’man’)FROM S_EMP;

حذف العمود manسيتم يمين jobمن

name name RTRIM jobjob-------------------- ---------------------------------------- --------------------ALI SalesALI SalesAHMED AnalystAHMED AnalystSAMI SAMI Manager ManagerKhaledKhaled Manager Manager

الحقل يسار بيانات حذف LTRIM Functionدالة

المحدد الحقل أو العمود يسار ناحية من بيانات لحذف الدالة هذه تستخدم

العام الشكلLTRIM (COL | VALUE,‘ String’)

أن حيث

COL العمود أو القل اسمVALUE للعمود البديلة القيمة

String عنه البحث سيتم الذي المتغير أو الحرف قيمة

25

Page 26: Oracle ara

مثال

SELECT name, LTRIM (job,’man’)FROM S_EMP;

حذف العمود manسيتم يسار jobمن

name name LTRIM jobjob-------------------- ---------------------------------------- --------------------ALI SalesmanALI SalesmanAHMED AnalystAHMED AnalystSAMI SAMI ager agerKhaledKhaled ager ager

الحقل بيانات طول قياس LENGTH Function دالة

المحدد الحقل أو متغير بيانات طول إليجاد الدالة هذه تستخدم

العام الشكلLENGTH (COL | VALUE)

مثال SELECT LENGTH (name), LENGTH (‘WELCOME’)FROM S_EMP;

كلمة وطول الموظف اسم طول حساب .WELCOMEسيتم

LENGTH name name LENGTH ‘WELCOME’‘WELCOME’-------------------- ---------------------------------------- --------------------3 73 75 75 74 4 7 766 7 7

جدول في بيانات تعديل TRANSLATE Functionدالة

معين جدول في موجودة بيانات لتبديل أو لنعديل الدالة هذه تستخدم

: العام الشكلTRANSLATE (COL|VALUE, FROM, TO)

26

Page 27: Oracle ara

أن حيث

COL العمود أو القل اسمVALUE للعمود البديلة ) القيمة البيانات(

FROM ( المطلو ( الحروف تغييره بالحرفTO ( المطلو ( الحروف احالله بالحرف

مثالSELECT name, TRANSLATE (name,’MI’,’WY’)FROM S_EMP WHERE sal=1512.5;1512.5;

الرفين استبدال WYبالحرفين MIسيتم

name name TRANSLATE(name)-------------------- ---------------------------------------- --------------------SAMI SAMI SAWY SAWY

الصوتي اللفظ عرض Function SOUNDEX دالة

( معين ( جدول في الموجودة المتغيرات للبيانات الصوتي اللفظ إليجاد الدالة هذه تستخدمالهجائية األحرف بعض في اختالف هناك كان ولو حتى

: العام الشكلSOUNDEX (COL|VALUE)

أن حيث

COL العمود أو القل اسمVALUE للعمود البديلة ) القيمة البيانات(مثال

SELECT name, SOUNDEX (name)FROM S_EMP WHERE sal=1512.5;1512.5;

الفصل ملخص

صغيرة حروف إلى كبيرة حروف من الحروف حالة بتحويل الخاصة الحرفية الدوال تناولناايضا تناولناها الني الهامة الدوال ومن النص داخل الحروف محاذاة ضبط وكذلك والعكس

الجداول . بيانات وتعديل الصوتي اللفظ عرض ودوال البيانات حذف دوال

27

Page 28: Oracle ara

والتحويل التاريخ دوال

الفصل أهداف

على : قادر تكون الله شاء إن الفصل هذا نهاية فيفي -1 التاريخ دوال مع SQLالتعاملفي -2 التحويل أدوات مع SQLالتعامل

التاريخ دوال

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

Sysdateالدالة

ينفذ الذي الكمبيوتر جهاز في المخزن التاريخ أي الحالي اليوم تاريخ بإعطاء تقوم الدالة هذهيسمى وهمي التاريخ تخزين ويتم األمر هذا أوراكل Dualعليه لغة داخل أصال موجود وهو

الجدول هذا من التاريخ استدعاء عملية تتم أن يجب لذلكمثال

باآلتي : نقوم الحالي اليوم تاريخ الستدعاء

SELECT SYSDATE FROM DUAL;

NEXT_DAYالدالة

المعطى للتاريخ التالي التاريخ يوافق الذي التاريخ لعرض الدالة هذه تستخدمهو الموجود التاريخ كان إذا المثال سبيل الذي 7/7/2003فعلى اليوم تحديد الجهاز من وطلب

يعطي فإنه الشهر نفس من الجمعة يوم 11/7/2003يصادف

العام الشكلNEXT_DAY (DATE,CHAR)

إن اسم DATEحيث وضع خالل من يليه الذي لليوم التاريخ إيجاد والمراد المعطى التاريخ هوالمتغير داخل CHARاليوم

مثال

SELECT NEXT_DAY (‘7/7/2003’,’MONDAY’) FROM DUAL;

التنفيذ نتيجة

NEXT_DAY-------------------

11/7/200328

Page 29: Oracle ara

شهر كل من األخير اليوم تحديد LAST_DAYدالة

معطى شهر كل من يم آخر بتحديد الدالة هذه تقوم

العام الشكلLAST_DAY (DATE)

أن بإدخاله DATEحيث تقوم تاريخ أو الجهاز تاريخ هو

مثال

SELECT LAST_DAY (SYSDATE) FROM DUAL;

الهاز تاريخ أن يلي : 2/2/2003هو SYSDATEبفرض كما هي السابقة للجملة نتيجة فإن

LAST_DAY(SYSDATE)--------------------------------

28/2/2003

مالحظة التالي كالمثال آخر تاريخ من تاريخ بطرح تقوم أن يمكنك

SELECT SYSDATE – HIRDATE FROM S_EMP

تاريخ .HIRDATEحيث حفل

MONTHES_BETWEENالدالة

شهرين بين الفرق مدة لعرض الدالة هذه تستخدم

العام الشكلMONTHES_BETWEEN (DATE1,DATE2)

مثال

MONTHES_BETWEEN (’01-SEP-95’,’11-JAN-94’)

الناتج سيكون1.9774194

29

Page 30: Oracle ara

_MONTHES ADDالدالة

معطى التاريخ إلى األشهر من عدد إلضافة الدالة هذه تستخدم

ADD_MONTHES (DATE,M)

أن حيث

DATE المعطى التاريخM االشهر عدد

مثال

ADD_MONTHES (‘7-JAN-99’,6)

الناتج سيكون التنفيذ عند

7-JUL-99

ROUND الدالة

تحدده معين لتاريخ سنه أو شهر بداية اقرب لعرض الدالة هذه تستخدم

الدوال : باب في شرحها وسيتم للتقريب الرقمية للبيانات أيضا الدالة هذه تستخدم مالحظةالرقمية

العامة الصيغة

ROUND (DATE, M|Y)

أن حيث

DATE المعطى التاريخM نكتبMONTH شهر باقرب يعود ان اردنا اذاY نكتبYEAR سنة باقرب يعود ان اردنا اذا

مثالROUND (’07-MAY-96’, ‘MONTH’)

الناتج سيكون التنفيذ عند

01-JUN-96

30

Page 31: Oracle ara

مثالROUND (’07-MAY-96’, ‘YEAR’)

الناتج سيكون التنفيذ عند01-JAN-96

TRANCATE Function الدالة

تحدده معين لتاريخ سنه أو شهر في يوم اول تاريخ لعرض الدالة هذه تستخدم

الدوال : باب في شرحها وسيتم للتقريب الرقمية للبيانات أيضا الدالة هذه تستخدم مالحظةالرقمية

العامة الصيغة

TRUNC (DATE, M|Y)أن حيث

DATE المعطى التاريخM نكتبMONTH التاريخ شهر في يوم اول تاريخ يعرض ان اردنا اذا

المحدد Y نكتبYEAR التاريخ سنة لنفس يوم ألول يعود ان اردنا اذا

مثال

TRUNC (’07-MAY-96’, ‘MONTH’)

الناتج سيكون التنفيذ عند01-MAY-96

مثال

TRUNC (’07-MAY-96’, ‘YEAR’)

الناتج سيكون التنفيذ عند

01-JAN-96

31

Page 32: Oracle ara

التحويل دوال

ومنها بالتويل خاصة دوال وتوجد اخر إلى شكل من البيانات تحويل يتم

حروف -1 الى TO_CHARالتحويلأرقام -2 إلى TO_NUMBERالتحويلتاريخ -3 إلى TO_DATEالتحويل

TO_CHARالدالة -1

حرفية جملة الى األرقام او التاريخ لتحويل الدالة هذه شكل تستخدم تغيير يتم حيثاخرى إلى صورة من االرقام او التاريخ

حرفية جملة الى تاريخ من اوال

العام الشكلTO_CHAR (DATE,’FMT’)

أن حيث

DATE التاريخ قيمةFMT الجديدة الصورة

مثال SELECT TO_CHAR (SYSDATE,’DAY, DD MON YY’) FROM DUAL;

الجهاز تاريخ أن هي 7/7/2003هو )SYSDATE(لنفرض السايقة للجملة التنفيذ نتيجة فإنكمايلي:

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 الساعة عرض اردنا PM 15:45:32مثل HH24:MI:SS AMاذا

32

Page 33: Oracle ara

حرفية جملة الى أرقام من التحويل ثانياالعام الشكل

TO_CHAR (NUMBER,’FMT’)أن حيث

NUMBER الرقمFMT الجديدة الصورة

مثال

SELECT TO_CHAR (6500500,’$9,999,999)FROM S_EMP;

الناتج سيكون التنفيذ عند

TO_CHAR (6500500,’$9,999,999)-----------------------------------

6,500,500

مالحظة نكتب -1 رقم 9عندما خاتة يها نعني فإننانكتب (-2 الفاصلة ) , عندما طباعة يتم3- ( . ) العشرية الفاصلة طباعة يتم نكتب عندما

TO_NUMBERالدالة

حرف شكل عى المخزنة الرقمية القيمة بتحويل الدالة هذه رقمية CHARتقوم قيمة إلىNUMBERفعليه

العام الشكل

TO_NUMBER (VALUE)حيث

VALUE رقمية قيم شكل على عرضها سيتم حرفية أرقام شكل على مخزنة قيمة

مثال

اسمه حقل لدينا أن جدول NUMلنفرض انها DATAفي أي رفيه ارقام ولكنها ارقام بهتحويل ستم الدالة هذه تنفيذ فعند الحسابية العمليات في تدخل فال الحروف معاملة تعامل

الحسابية العمليات في تدخل ان يمكن رقمية فيم إلى القيم

SELECT NUM, TO_ NUMBER (NUM)FROM DATA;

33

Page 34: Oracle ara

الناتج سيكون التنفيذ عند

NUM TO_NUMBER(NUM)----------------------------------------------------------------------------------------

9236 92367526 7526

مالحظةالنوع في اختالف يوجد ولكن القيم نفس بهما العمودان

TO_DATEالدالة

المثال تاريخ بشكل متعير الى النص اشاؤة داخل الحرفي المتغير بتحويل الدالة هذه تقومذلك : يوضح التالي

SELECT TO_DATE (‘JULY 7,2003’,’MONTH DD, YY’) FROM DUAL;

الناتج سيكون التنفيذ عند

TO_DATE (‘JULY 7,2003’,’MONTH DD, YY’)--------------------------------------------------------------

07-JUL-03

الفصل ملخصوالوقت للتاريخ الصيغ كامل مع بالتعامل الخاصة التاريخ دوال الفصل هذا في تناولنا

نص من الكتابة حاالت تحويل تعمل التي التحويل دوال تطرقنا ثم أشكالها بعدة واستعراضهانص الى أرقام من كذلك بالعكس و تاريخ إلى

34

Page 35: Oracle ara

الرقمية الدوال

الفصل أهداف

على قادر ستكن الله شاء ان الفصل هذا نهاية فيالمطلقة -1 القيمة دالة مع التعامللألعداد -2 التربيعي الجذر إيجادلألعداد -3 األسية الدالة مع التعاملخالل -4 من العشرية األعداد SQLتقريبالعشرية -5 المنزلة حذف خالل من األعداد تقريبلألعداد -6 القسمة باقي إيجادالسالبة -7 األعداد اشارة ايجاد

التربيعي والجذر واألسية واألسية المطلقة الدوال

المطلقة القيمة ABS Functionدالة

مع الدالة هذه استخدان يتم وغالبا معين لرقم المطلقة القيمة إليجاد الدالة هذه تستخدمأخرى جمل

العام الشكل

ABS )COL|VALUE(

أن حيث

COL العمود أو الحقل اسمVALUE) البيانات ) للعمود البديلة القيمة

مثال

SELECT name,job,hiredate-sysdate FROM S_EMP;

: طباعة سيتم التنفيذ عند

name jobname job hierdate-sysdate hierdate-sysdate-------------------- ------------------------------------------------ ----------------------------ALI SalesmanALI Salesman -6906.3252-6906.3252AHMED AnalystAHMED Analyst -6841.3252-6841.3252SAMI SAMI ManagerManager -4592.3252-4592.3252KhaledKhaled ManagerManager -6555.3252-6555.3252

35

Page 36: Oracle ara

العمود قم أن القيمة hierdate-sysdateنالحظ نأخذ موجبة دائما نجعلها ولكي سالبة قيونكتب العمود لهذا المطلقة

SELECT name,job,ABS(hiredate-sysdate) FROM S_EMP;

: طباعة سيتم التنفيذ عندname jobname job hierdate-sysdate hierdate-sysdate------------------------------------------------------------------------------------------------ALI SalesmanALI Salesman 6906.32526906.3252AHMED AnalystAHMED Analyst 6841.32526841.3252SAMI SAMI ManagerManager 4592.32524592.3252KhaledKhaled ManagerManager 6555.32526555.3252

األسية -2 POWER Functionالدالة

ألس مرفوع رقم قيمة إليجاد الدالة هذه تستخدم

العام الشكل

POWER (COL|VALUE,P)

أن حيث

COL العمود أو الحقل اسمVALUE( البيانات ( للعمود البديلة القيمة

P األس قيمة

مثال

SELECT DIGIT, POWER (DIGIT1, 2) FROM DIGIT;

: طباعة سيتم التنفيذ عند

DIGIT1 DIGIT1 POWER (DIGIT1, 2)-------------------- ---------------------------------------- --------------------2020 4004002525 62562525.525.5 650.25650.2530.5 30.5 930.25930.25

36

Page 37: Oracle ara

التربيعي -3 الجذر SQRT Functionدالة

معين لرقم التربيعي الجذر إلياد الدالة هذه تستخدم

العام الشكل

SQRT (COL|VALUE)

أن حيث

COL العمود أو الحقل اسمVALUE( البيانات ( للعمود البديلة القيمة

مثال

SELECT name,sal, SQRT (sal) FROM S_EMP;

: طباعة سيتم التنفيذ عند

NAME NAME SAL SQRT (SAL)------------------------------------------------------------------------------------------------Ali 968Ali 968 31.11331.113Ahmed 1936Ahmed 1936 4444SAMISAMI 1512.5 1512.5 38.980538.9805KHALEDKHALED 3599.75 3599.75 59.98859.988

واإلشارة القسمة وباقي التقريب دوال

العشري التقريب ROUND Functionدالة

صحيح أو عشري رقم اقرب إلى العدد لتقريب الدالة هذه تستخدم

العام الشكلROUND (COL|VALUE, N)

أن حيث

COL العمود أو الحقل اسمVALUE عددية قيمة

N العشرية المواقع عدد

37

Page 38: Oracle ara

مثال

SELECT SQRT (sal), ROUND (SQRT (sal), 2) FROM S_EMP;

: طباعة سيتم التنفيذ عند

SQRT (SAL) ROUND )SQRT )sal(, 1(------------------------------------------------------------------------------------------------31.11331.113 31.1131.114444 444438.980538.9805 38.9838.9859.98859.988 59.9959.99

بالحذف التقريب TRANCATE Functionدالة

العشرية المواقع بعض بحذف الرقم لتقريب الدالة هذه تستخدم

العام الشكل

TRUNC )COL|VALUE,N(

أن حيث

COL العمود أو الحقل اسمVALUE عددية قيمة

N العشرية المواقع عددمثال

SELECT DIGIT1, TRUNC (DIGIT1,-1), TRUNC(POWER(DIGIT1,2),1) FROM DIGITS;

: طباعة سيتم التنفيذ عند

DIGIT1 DIGIT1 TRUNC (DIGIT1, -1) TRUNC (POWER(DIGIT1, 2), 1)

------------------------------------------------------------------------------------------------2020 20 20 400 4002525 20 20 62562525.525.5 20 20 650.2650.230.5 3030.5 30 930.2930.2

38

Page 39: Oracle ara

القسمة باقي MOD Functionدالة

عددين قسمة باقي إليجاد الدالة هذه تستخدم

العامة الصيغةMOD )VALUE1, VALUE2(

أن حيثVALUE1 بة عدد قيمةVALUE2 عددية قيمة

مثالSELECT DIGIT1, MOD (DIGIT1, 7) FROM DIGITS

: طباعة سيتم التنفيذ عند

DIGIT1 DIGIT1 MOD (DIGI1, 7)------------------------------------------------------------------------------------------------2020 6 62525 4 425.525.5 4.5 4.530.5 30.5 2.5 2.5

اإلشارة SIGN Functionدالة

بالقيمة ( تعود موجبة اإلشاؤة كانت فإذا الرقم إشارة بفحص الدااة هذه اذا) 1تستخدم أمابالقيمة ( فتعود سالبة اإلشارة -)1كانت

التالي : المثال انظر العام الشكل

مثال

SELECT DIGIT1, SIGN (DIGIT1) FROM DIGITS

DIGIT1 DIGIT1 MOD (DIGI1, 7)------------------------------------------------------------------------------------------------2020 1 12525 1 125.525.5 1 130.530.5 11-50-50 -1-1-30.5-30.5 -1 -1

الفصل ملخص

39

Page 40: Oracle ara

البيانات قواعد نظام في واالستفهام االستعالم لغة في الرقمية الدوال الفصل هذا في تناولناالبيانات من صف أو سجل مع مايتعامل فمنها وظائفها حسب الدوال هذه قسمنا وقد اوراكل

السجالت من مجموعة مع مايتعامل األعمدة RECORDSومنها ) COLUMNSاو الحقول( التقريب دوال وكذلك التربيعي والجذر االسية والدالة المطلقة القيمة دالة الى تطرقنا حيث

واالشارة القسمة باقس ودالة

البيانات استرجاع

اافصل أهداف

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

أكثر- 1 من البيانات استرجاعمستعارة- 2 بأسماء البيانات استراع

جدول من أكثر من البيانات استرجاع

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

للربط أنواع عدة وتوجد:

1-EQUAI JOINالعامة الصيغة

SELECT table.column, table.columnFROM table1, table2 WHERE table1.column1 = table2.column2;

40

Page 41: Oracle ara

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

WHERE طريقهما عن الجدولين ربط تم اللذان العمودان

مالحظة نقطه وبينهما العمود اسم ثم اوال الجدول اسم table.columntable.columnنكتب

مثال

SELECT S_EMP.DEPT_ID, S_EMP.LAST_NAME,S_DEPT.NAMEFROM S_EMP, S_DEPTWHERE S_EMP.DEPT_ID = S_DEPT.ID;

ينتج التفيذ : عند

DEPT_IDDEPT_ID LASTLAST__NAMENAME NAME NAME ------------------------------------------------------------------------------------------------5050 VELASQUEA VELASQUEA ADMINISTRATION ADMINISTRATION4141 NGAO NGAO OPERATOPNSOPERATOPNS3131 NAGAYAMA NAGAYAMA SALESSALES50 ROPEBURN50 ROPEBURN ADMINISTRATIONADMINISTRATION4141 URGIHARTURGIHART OPERATOPNSOPERATOPNS4242 MENCHU MENCHU OPERATOPNSOPERATOPNS4343 BIRI BIRI OPERATOPNSOPERATOPNS4545 HAVEL HAVEL OPERATOPNSOPERATOPNS

41

Page 42: Oracle ara

بعد اخر شرط اضافة باستخدام WHEREويمكن فنكتب ANDوذلك

SELECT S_EMP.DEPT_ID, S_EMP.LAST_NAME,S_DEPT.NAMEFROM S_EMP, S_DEPTWHERE S_EMP.DEPT_ID = S_DEPT.ID AND S_DEPT = 41;

ينتج التفيذ : عند

DEPT_IDDEPT_ID LASTLAST__NAMENAME NAME NAME ------------------------------------------------------------------------------------------------4141 NGAO NGAO OPERATOPNSOPERATOPNS4141 URGIHARTURGIHART OPERATOPNSOPERATOPNS

2-NON- EQUAI JOIN

الجدولين بين مشتركة اعمدة يوجد ال عندما النوع هذه يستخدم

مثالSELECT S_EMP.ename, S_EMP.job, S_EMP.sal, salgrade.gradeFROM S_EMP, salgradeWHERE S_EMP.sal BETWEEN salgrade.losal AND salgrade.hisal;

3-OUTER JOIN

الجدول في سجالت يقابلها ال التي الثاني الجدول في السجالت لرؤية النوع هذا يستخدماألول

العامة الصيغة

SELECT table.column, table.columnFROMtable1, table2WHERE table1.column(+) = table2.column;

مالحظةيحتوي (+) ال الذي الحقل االسم بجوار نكتبه حيث الربط من النوع هذا في المعامل نسنخدم

قيمة هلى

42

Page 43: Oracle ara

مثال

نكتب موظف به يتواجد ال الذي الجزء عن االستعالم اردنا اذا

SELECT s_emp.last_name, s_emp.id, , s_customer.nameFROMs_emp, s_customer WHERE s_emp.id (+) = s_customer.sales_rep_idORDER BY s_emp.id;

4-SELF JOINالجدول نفس من اخر بصف جدول من صف لربط تستخدم

43

Page 44: Oracle ara

مثال :SELECT worker.last_name||' works for '||manager.last_nameFROMs_emp worker, s_emp managerWHERE worker.manager_id = manager.id;

طباعة سيتم التنفيذ عند

worker.last_name||' works for '||manager.last_name

------------------------------------------------------------------------------------------------Nago works for Velasquez

Nagayama works for VelasquezRopeburn works for Velasquez

Urguhart Urguhart works for NagoBiri Biri works for Nago

Magee works for NagayamaGiljum Giljum Nagayama

مستعارة بأسماء البيانات استرجاع

الجدول باستدعاء قمنا مثال اخر مستعار s_emp في ياسم workerباسم أخرى ومرةmanager للتسهيل استخدمناه وقد الجدول اسم محل يقوم االسم وهذا

مثال

SELECT e.ename, e.job, e.sal, s.gradeFROM S_EMP e, salgrade sWHERE e.sal BETWEEN s.losal AND s.hisal;

مثال

SELECT e.last_name, e.id, c.nameFROMs_S_EMP e, s_customer cWHERE e.id (+) = c.sales_rep_idORDER By e.id;

. الفصل ملخص

جمل الفصل هذا في رقم SQLتناولنا كغرض جدول من اكثر من بيانات باسترجاع الخاصةخالل من البيانات استرجاع عملية إلى كذلك وتطرقنا الموطفين جدول من الموظفين اقسم

مستعار اسم

44

Page 45: Oracle ara

المجموعات ودوال واإلحصائية الرياضية الدوال

الفصل أهداف

على : قادر ستكون الله شاء ان الفصل هذا نهاية فيواالحصائية -1 الرياضية الدوال مع التعاملالمجموعات -2 دوال مع التعامل

واإلحصائية الرياضية الدوال

السجالت من مجموعة مع تتعامل التي واالحصائية الرياضية االقترانات من مجموعة هناللك: مايلي االقترانات هذه ومن محدودة واحدة قيمة إلخراج

العد -1 COUNTدالةقيمة -2 أكبر MAXدالةقيمة -3 أصغر MINدالةالمجموع -4 SUMدالةالحسابي -5 المتوسط AVGدالةالمعياري -6 االنحراف STDDEVدالةالمعيار -7 VARIANCEدالة

العد -1 COUNTدالة

القيمة تحمل ال والتي معين عمود في الحقول حصر بعملية الدالة هذه NULLتقوم

العام الشكلCOUNT (DISTINCT|ALL|EXP)

أن حيثDISTINCT القيمة تحمل التي الحقول احتساب لمنع NULLتستخدم

ALL المكررة حتى الحقول جميع هنا المدى يكونEXP العمود اسم استخدام يمكن

مثال SELECT COUNT (DISTINCT NAME) FROM S_EMP;

للحقل الصفوف عدد بتحديد السايقة الجملة الجدول NAMEتقوم S_EMPمن

مثال الجدول في السجالت عدد حساب

SELECT COUNT (*) ”TOTAL” FROM S_EMP;

45

Page 46: Oracle ara

قيمة -2 أكبر MAXدالة

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

العام الشكل

MAX (DISTINCT|ALL|EXP)

مثالSELECT MAX (DISTINCT salary) FROM S_EMP;

الموظفين جدول في راتب أكبر بعرض الجملة هذه S_EMPتقوم

قيمة -3 أكبر MINدالةمعين عمود في موجودة قيمة أكبر بعرض الدالة هذه تقوم

العام الشكل

MIN (DISTINCT|ALL|EXP)مثال

SELECT MIN (DISTINCT salary) FROM S_EMP;

الموظفين جدول في راتب أصغر بعرض الجملة هذه S_EMPتقوم

المجموع -4 SUMدالةمعين عمود او حقل في الموجودة القيم مجموع بعرض الدالة هذه تقوم

SUM (DISTINCT|ALL|EXP)

مثالSELECT SUM (salary) FROM S_EMP;

الموظفين جدول في الموظفين رواتب مجموع بعرض الجملة هذه S_EMPتقوم

الحسابي -5 المتوسط AVGدالةمعين جدول في موجودة تكون قد قراءات لمجموعة المعدل بعرض الدالة هذه تقوم

العام الشكلAVG )COLUMN(

COLUMN معين جدول في الموجود العمود اسم هومثال

SELECT AVG (SALARY) FROM S_EMP;

الموظفين لمرتبات الحسابي المتوسط بحساب الجملة هذه تقوم46

Page 47: Oracle ara

المعياري -6 االنراف STDDEVدالة

قراءات أو مشاهدات لمجموعة المعياري االنحراف بإيجاد الدالة هذه تقوم

العام الشكلSTDDEV )DISTINCT|ALL(

مثال الموظفين جدول في الرواتب حقل في الواردة لألرقام المعياري االنحراف S_EMPإلبجاد

SELECT STDDEV (SALARY) FROM S_EMP;

المعيار -7 VARIANCEدالة

قراءات أو مشاهدات لمجموعة المعيار بإيجاد الدالة هذه تقوم

مثال SELECT VARIANCE (SALARY) FROM S_EMP;

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

BY GROUP شرط حسب منه اصغر مجموعات إلى الرئيسي الجدول تجزئة إلة ممايؤديمغين

العام الشكلGROUP BY COL_NAME

COL_NAME تقسيم سيتم والذي الجدول في العمود اسم هوغليه بناء صغيرة مجموعات إلى الجدول

التالي المثال الى ننظر الدالة هذه ولفهم

التالية الجملة كتبنا اذاSELECT id, last_name, dept_id DEPARTMENTFROM s_empWHERE dept_id = 41;

هي المخرجات فان

ID LAST_NAME DEPARTMENT-- --------- ----------2 Ngao 416 Urguhart 41

16 Maduro 4117 Smith 41

القسم في موظفين اريع وجود المجموعات 41نالحظ دالة تطبق عند ولكن

47

Page 48: Oracle ara

SELECT dept_id, COUNT (*) ”Number” FROM s_empWHERE dept_id = 41GROUP BY dept_id;

هي المخرجات فانDEPT_ID Number ------- ------ 41 4

للقسم البيانات من واحد سطر ظهور القسم GROUP BYفالدالة 41نالحظ بتجميع قامت41 ( دالة ( استخدمنا عندما واضح وهذه بها خاص جدول عملت وكأنها بعضه COUNTمع

السجالت عدد ان واحد 4اظهرت هو االسطر عدد أن رغم

االمر نكتب المجموعات دالة مع شرط HAVINGالستخدامكاالتي االستعالم جملة شكل قبكون

SELECT column, group_functionFROMtable[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];

مثالالموظفين جدول من بيانات اظهر اردنا الوظيفة EMPاذا تكون أن بشرط مجموعات وعمل

MANAGER SELECT DEPTNO, JOB, COUNT (*), SUM (SAL)FROM S_EMPGROUP BY DEPARTNO, JOBHAVING JOB=’MANAGER’;

مثال الموظفين جدول من بيانات اظهر اردنا الوظيفة EMPاذا تكون أن بشرط مجموعات وعمل

MANAGER أوANALYST اوSALESMAN

SELECT DEPTNO, JOB, COUNT (*), SUM (SAL)FROM S_EMPGROUP BY DEPARTNO, JOBHAVING JOB IN (’MANAGER’,’ ANALYST’,’ SALESMAN’);

الفصل ملخص

48

Page 49: Oracle ara

جمل على الفصل هذا في بغرض SQLركزنا تقوم التي واالحصائية الرياضية بالدوال الخاصةمثل البيانات من واحدة تكون MAX,MIN,AVGقيمة التي المجموعات دوال ثم ومن وغيرها

االمر مع يساويه GROUP BYغالبا أو منه اصغر جدول الى الجدول بفرز تقوم والتي

49

Page 50: Oracle ara

الفرعية االستعالمات

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

الفرعية -1 االستعالمات فيها يستخدم ان يمكن التي الحاالت تحديدوالمتداخلة -2 الفرعية االستعالمات تعريفالفرعية -3 االستعالمات أنواع معرفةالصفوف -4 متعدد وآخر الصف احادي فردي استعالم كتابة

الفرعي االستعالم

مقدمة

راتب عن رواتبهم تزيد الذين الموظفين بيانات إليجاد استعالم كتابة في ترغب أنك لنفترضالموظفين أحد

استعالمين الى تحتاج الحالة هذه فيالمعني -1 الموظف راتب اليجاد استعالماالستعالم -2 في المحسوب المبلغ عن رواتبهم تزيد الذين الموظفين اليجاد استعالم

األول

سوف الداخلي االستعالم ، االخر في االستعالمين احد برتكيب وذلك االستعالمين دمج ويمكنك( ) ( الرئيسي ( الخارجي االستعالم يستخدمها والتي قيم بقيمة يعود

واستالعم متتال بشكل االستعالمين تنفيذ تماما يشبه الفرعية االستعالمات استخدام إنالثاني االستعالم في بحث كنتيجة االول االستعالم نتيجة

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

استفسار جملة أو SELECTهو قيمة السترجاع رئيسية استفسار جملة داخل مضمنةالتالي الشكل انظر الرئيسي االستعالم في استخدامها ليتم القيم من مجموعة

50

Page 51: Oracle ara

العام الشكل

SELECT select_listFROM tableWHERE expr operator (SELECT select_list FROM table);

51

Page 52: Oracle ara

مالحظة1- ( ) اوال ينفذ الفرعي الداخلي االستعالم2- ( ) الرئيسي االستعالم في يستخدم الفرعي الداخلي االستعالم ناتج

الفرعي االستعالم متطلبات

قوسين (.......)-1 بين الفرعي االستعالم وضعالمقارنة. -2 عملية يمين الفرعي االستعالم وضعاستخدام -3 يمكن الفرعي ORDER BYال االستعالم داخلالصف -4 األحادية الفرعية االستعالمات مع الصف أحادية المعامالت استخدامالصف -5 المتعددة الفرعية االستعالمات مع الصف متعددة المعامالت استخدام

52

Page 53: Oracle ara

الفرعية االستعالمات أنواع

حسب الفرعي االستعالم تصنيف يمكنواحدا -1 صفا يسترجع الصف أحادي فرعي استعالمواحد -2 صف من أكثر يسترجع الصفوف متعدد فرعي استعالمعمود -3 من اكثر يسترجع األعمدة متعدد فرعي استعالم

واحدا -1 صفا يسترجع الصف أحادي فرعي استعالم

المثال الى انظر واحد بسطر اال يعود ال الفرعي االستعالم ان حالة في االستعالم هذا نستخدمالتالي

SELECT last_name, title, salaryFROMs_empWHEREsalary <

(SELECT AVG(salary) FROM s_emp);

ويأخذ الحسابي المتوسط وهي واحدة قيمة باخراج المثال هذا في الفرعي االستعالم يقوماعلى راتبهم يعتبر الذين الموظفين وورواتب اسماء ويستخرج القيمة هذه الرئيسي االستعالم

الحسابي المتوسط منمالحظة

هي- 1 النوع بهذا الخاصة المقارتة معامالت أنواع>< .=> ,=< ,< ,>

واحد -2 صف من أكثر يسترجع الصفوف متعدد فرعي استعالمالتالي المثال انظر اسطر بعدة يعود الفرعي االستعالم ان حالة في االستعالم هذا نستخدم

SELECT last_name, first_name, titleFROM s_empWHERE dept_in IN (SELECT ID FROM s_dept

WHERE name = 'Finance' OR region_id = 2);

اسمهم الذين الموظفين أرقام ياستخراج المثال هذا في الفرعي االستعالم 'يقومFinance' منطقتهم رقم يأخذها 2او فيم بعدة سيعود الستعالم فهذا االقسام جدول من

اساسها على الموظفين اسماء ويستخرج الرئيسي االستعالممالحظة

هي -1 النوع بهذا الخاصة المقارتة معامالت أنواعIN, ALL, ANY

يعطيك -2 االبرنامج فان متعدد استعالم مع الصف احادي االستعالم معامالت استخدمنا اذاخطأ رسالة

ORA-01427:single-row sub query returns more than one row

53

Page 54: Oracle ara

الفصل ملخص

األحادية وانواعها وشروطها واهميتها الفرعية االستعالمات على تعرفنا الفصل هذا فيوالمتعددة

54

Page 55: Oracle ara

الجداول إنشاء

الفصل أهداف

: مايلي على الله انشاء قادر ستكون الفصل هذا نهابة قستسميتها -1 وشروط الجداول على التعرفالبيانات -2 أنواع على التعرفاألمر -3 بواسطة الجداول CREATإنشاءالجدول -4 في أساسي مفتاح إنشاءاخر -5 جدول بواسطة جدول إنشاءالجدول -6 مواسفات عرض

الجدول تعريف

السجالت من مجموعة من يتكون الملف أو الجدول أن سايقا سجل RECORDSقلنا وكلالحقول من مجموعة من وهذه FIELDSيتكون االرقام او الحروف من مجموعة به حقل كل

عرض أو طول لها الحقول

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

/ ملف الجدول TABLE/FILE NAMESتسمية

عن -1 الملف أو الجدول اسم طول يتجاوز حرف 30الصغيرة -2 أو كبيرة حروفا يكون ان يمكنبرقم -3 يبدأ أن يمكن وال بحرف يبدأ االسممثل -4 خاصة رموز على االسم يحتوي أن الخ .... #,$,%يمكن

الحقول Fields Typesأنواع

الحرفي -1 CHARالمتغير

هذا , , . عرض أو وطول الخاصة والرموز األرقام األبجدية الحروف من الحقل هذا يتكونالى يصل يتم 240الحقل لم واذا اجباري وهو الحقل عرض أو طول تحديد من بد وال حرف

انه البرنامج سيفتض 1التحديد

العام الشكلvar CHAR (size)

مثال FirstName CHAR (20)

55

Page 56: Oracle ara

الحرفي -2 VARCHAR2المتغير

هذا , , . عرض أو وطول الخاصة والرموز األرقام األبجدية الحروف من الحقل هذا يتكونالى يصل للحقل 240الحقل افتراضي طول يوجد ال حرف

مثال FirstName VARCHAR2 (20)

صحيح- 3 رقمي Integer Numberمتغير

األرقام ( من أو) + _ 9-0,1,2ويتكون العشرية العالمة على يحتوي أن ويمكن أو واالشارةالعشرية ( إلى) .الفاصلة يصل الرقم خانات لعدد األقصى طول 40والحد وتحديد خانة

العشرية الفاصلة أو االشارة وكذلك اختياري الحقل أوعرض

مثالSerial_No NUMBER (10)

العشرية- 4 العالمة ذو الرفمي المتغير

األرقام ( من ) 9-0,1,2ويتكون

مثالMark NUMBER (10,3)

طويل -5 LONGمتغيرالى مساحتها تصل بيانات على تحتوي التي للحقول جيجا 2يستخدم

مثال Detail LONG

التاريخ )-6 على الدال (Dateالمتغير

الحقل هذا وطول والسنة والشهر اليوم على للداللة األرقام مجموعة من الحقل هذا 8يتكونالشهر اسم بذكر التاريخ كتابة شكل يتغير أن ويمكن األقل على خانات

مثال HireDate DATE

56

Page 57: Oracle ara

جدول إنشاء

أمر باستخدام جدول CREATEإنشاء

العام الشكل

CREATE TABLE table-name (field type [(size [, field2 type [(size]);

ان حيث

table-name المطلوب الجدول أو الملف اسمfield1,field2 األقل على حقل اسم وجود مع تصميمها المطلوب الحقول أو الحثل اسم

type البيانات حقل نوعSize الحقل عرض او طول

مثال CREATE TABLE SCHOOL (S_no NUMBER (5) NOT NULL,S_NAME CHAR (20).S_LOC CHAR(15),S_DATE DATE);

CONSTRAINTالتقييد مفتاح حقل جعل مثال الحقول على القواعد بعض فرض التقييد طريق عن يتم

أنواعه ومن فارغ حقل ترك منع أساسيNOT NULLUNIQUEPRIMARY KEYFORIGN KEY

العام الشكل

column [CONSTRAINT constraint_name] constraint_type,أن حيث

constraint_name التقييد اسمconstraint_type التقييد نوع

1

57

Page 58: Oracle ara

فارغ- NOT NULLغير

فارغ حقل بترك يسمح ال األمر هذا

مثالCREATE TABLE friend... phone VARCHAR2(15) NOT NULL,... last_name VARCHAR2(25) CONSTRAINT friend_last_name_nn NOT NULL,...

UNIQUEفريد- 2

األمر ) هذا فريد ( العمود الحقل يوجد بجعل ال صف فكل الصفوف من صف بتكرار يسمح فالواحدة مرة اال

مالحظةالفريد- 1 الحقل يحتوي أن واحد UNIQUEيمكن حقل يكون أن بشرط فارغة قيمة على

فريد UNIQUEفقطفريد- 2 حقل أكثر الجدول في يوجد أن وبمكن

مثال

... phone VARCHAR2(10) CONSTRAINT s_emp_phone_uk UNIQUE,...

أساسي- 3 Primary Keyمفتاح

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

مثال

... id NUMBER(7) CONSTRAINT s_emp_id_pk PRIMARY KEY,...

خارجي- 4 Foreign Keyمفتاح

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

فارغ يكون او اخر عمود من اخرى بقيمة مرتبطالتالي المثال انظر

... dept_id NUMBER(7) CONSTRAINT s_emp_dept_id_fk

FOREIGN KEY (department_id) REFERENCES s_dept(id)

ON DELETE CASCADE;

58

Page 59: Oracle ara

1 -Foreign Keyاالبن الجدول في خارجي مفتاح يكون أن المراد الحقل اسم بجوارها تكتب

2 -REFERENCESاالخر الجدول من به الربط سيتم الذي الحقل بجوارها نكتب

3 -ON DELETE CASCADEاالبن الجدول في له المقابل الصف سيمسح االب الجدول في الصفوف احد مسح تم اذا

آخر جدول بواسطة جدول انشاء

األمر نكتب ثم مسبقا منشأ اآلخر الجدول يكون أن يجب آخر جدول بواسطة جدول إلنشاءكالتالي

العام الشكل

CREATE TABLE tablename [column(, column...)]AS Select statement;

مثال

CREATE TABLE EMPLOYEEASSELECT NAME, SAL, JOB FROM S_EMP

الجدول بيانات نقلنا ثم جديد جدول بعمل الجملة هذه في اليه S_EMPقمنا

فرعي استعالم بواسطة جدول انشاءاالستعالم على قائم الفرعي االستعالم يكون أن يجب فرعي استعالم بواسطة جدول إلنشاء

كالتالي األمر نكتب ثم مسبقا منشأ جدول من

العام الشكل

CREATE TABLE tablename [column(, column...)]AS subquery;

مثال

CREATE TABLE emp_41AS SELECT id, last_name, userid, start_date

59

Page 60: Oracle ara

FROM s_empWHERE dept_id = 41;

جدول مواصفات عرض DESCIRBEجملة

مختصرة أو كاملة كلمة كتابتها ويمكن الجدول مواصفات لغؤض الجملة هذه DESCتستخدم

العام الشكلDESCRIBE tablename;

مثال DESCRIBE S_EMP;

الفصل ملخص

المفتا وإدراج إنشائها وكيفية التقييد وأنواع الجداول على بالتعرف قمنا الفصل هذا فياستعالم من وكذلك اخر جدول من جدول انشاء وكيفية الجدول في والخارجي األساسي

الجدول معلومات عرض كيفية ومعرفة فرعي

60

Page 61: Oracle ara

وحذفه الجدول بنية تعديل

الفصل أهداف

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

الجدول -1 على التغديل عمليات جميع على التعرفالجدول -2 إلى جديدة حقول إضافةالجدول -3 حقول مواصفات تعديلالجدول -4 من األساسي المفتاح حذفالجدول -5 حذف

الجداول تعديل

الـ لك التالية SQLتتيح الحالة في إنشائها بعد الجدول تعديل غمليةجديد -1 حفل اضافةحقل -2 مواصغات تعديلالجدول -3 من األساسي المفتاح حذف

الجدول من حفل حذف إمكانية عدم الى االنتباه ويجب

الحقول تعديل ALTER Commandجملة

هذا ويشمل الجدول في الحقول لتعديل أو قول إلضافة الجملة هذه تستخدمغير أو فارغ عبارة الحاق أو بياناته وحجم الحقل ونوعه الحقل اسم التعديل

الحقل الى فارغ

جديد حقل New Fieldاضافةالعام الشكل

ALERT TABLE tablename ADD (field Type (size) [NOT NULL] | [NULL])

أن حيثtablename تعديله المراد الجدول اسم

field الحقل اسمType البيانات نوعsize الحقل حجم أو طول

حقل مواصفات تعديل

جملة طريق عن حقل ALTERيمكن مواصفات تعديلالعام الشكل

61

Page 62: Oracle ara

ALERT TABLE tablename MODIFY Type (size) [NOT NULL] | [NULL])

الجداول حذف

األمر بواسطة البيانات قاعدة من الجدول نحذف أن تكون DROP TABLEيمكن أن بشرطللحذف صالحية لك أو الجدول مالك

العام : الشكلDROP TABLE tablename;

حيث tablename; حذفه المراد الجدول اسم

األساسي المفتاح حذف

التالي األمر نكتبALTER TABLE tablenameDROP PRIMARY KEY CASCADE;

األساسي CASCADEعبارة المفتاح على تعتمد عالقة أي اللغاء هنا

الفصل ملخص

امكانية عدم مع الجدول قول وتعديل إضافة من الجداول تعدبل عملية تناولنا الفصل هذا فيوحذف الجدول من األساسي المفتاح حذف كيفية وكذلك الجدول في موجود حقل حذف

االمر بواسطة البيانات قاعدة من DROPالجدول

62

Page 63: Oracle ara

الجداول إلى البيانات إدخال

الفصل أهداف

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

الجدول -1 إلى البيانات إلدخال المختلفة بالطرق اإللمامالبيانات -2 جدول إلى واحد سجل إدخالالسجل -3 الى سجالت عدة إضافة

بيانات إضافة

مقدمة

مواصفان وتعديل البيانات أنواع على والتعرف الجداول بإنشاء السابقة القصول في قمنا لقدالبيانات نوع حيث من الحقول خصائص وخددنا البيانات جدول أنشأنا قد نكون وبهذا الحقولالله بمشيئة سنتعلم الفصل هذا وفي البيانات سيحوي الذي الوعاء أعددنا أننا أي والحجم

أن كما ، وأنواعها اإلضافة بعمليات المتعلقة واألمور الجداول هذه إلى البيانات إضافة كيفيةالبيانات ( تناول للغة أساسيا وجزأ مدخال يشكل الفصل بيانات) DMLهذا قواعد نظام في

البيانات ( قواعد إدارة نظم في القوية النظم إحدى تعتبر التي أثر) DBMSأوراكل من لها لماالبيانات ( تناول لغة تشمل حيث الجدول داخل البيانات معالجة في األجزاء DML (فعال على

التالية :

الجداول -1 إلى البيانات INSERTإدخالالجداول -2 في البيانات UPDATEتعديلالجداول -3 من البيانات DELETEحذف

البيانات ادخال سنتاناول الفصل هذا في

الجداول إلى البيانات INSERTإدخال

جملة / خالل من البيانات جدول إلى سجالت سجل إدخال بها يتم التي العملية INSERTهيطرق بعدة اغلملية هذه وتتنم

البيانات : جدول إلى واحد سجل إضافة أوال

: العامة الصيغة

INSERT INTO table [(column1 [, column2...])]VALUES (value1 [, value2...]);

أن حيثTable به السجل إلحاق المراد الجدول اسم

Column1,Column2 ( ) إليها البيانات إدخال المطلوب الحقول األعمدة اسماء

63

Page 64: Oracle ara

Value1, value2 حقول في إضافتها المطلوب القيمإدراجها يتم قيمة وكل الجديد السجل

وبالتالي القائمة في المناسب الحقل فيالقيمة إضلفة الحقل 1سيتم وهكذا 1في

الشرح

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

الطريقة هذه في بها التقيد يجب التي القواعد

جملة -1 في المذكور الحقول عدد نفس هو إدخالها سيتم التي القيم عدد يكون أن يجبINSERT

وأن -2 الحقول بيانات نوع نفس من إدخالها سيتم التي القيم بيانات نوع يكون أن يجبجملة في الحقول ترتيب حسب مرتبة القيم هذه INSERTتكون

مثال

INSERT INTO s_deptVALUES (11, 'Finance', 2);

تنصيص -3 عالمتي بين المخلة القيم وضع يجب والنصوص التاريخ حقول إدخال عندمفردتين

ال -4 أنها على تعريفعا تم التي اإلجبارية الحقول في قيم إدخال وجوب مراعاة يجبفراغ ادخال NOT NULLتحتوي فراغ NULLويتم بها التي الحقول في

مثالINSERT INTO s_deptVALUES (13, 'Administration', NULL);

جملة -5 في الحقول أسماء ذكر عدم جميع INSERTيجوز بيانات إدخال حالة فيللحفول االفتراضي الترتيب حسب مرتبة المخلة القيم تكون أن على السجل لهذا الحقول

بنائه عند الجدول في

مالحظة األمر نستخدم الجدول في للحقول االفتراضي الترتيب DESCلمعرفة

مثال

البيانات : جدول إلى سجالت عدة اضافة ثانيا

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

السجالت متعددة االدخال جملة الطريقة هذه على نطلق أن ةيمكن نفسها

INSERT INTO table [(column1 [, column2...])]

64

Page 65: Oracle ara

VALUES (&variable1 [,&variable1 ...]);ان حيثTable به السجل إلحاق المراد الجدول اسم

Column1,Column2 ( ) إليها البيانات إدخال المطلوب الحقول األعمدة اسماءVariable1, Variable 2 التي اإلدخال متغيرات

بقيم استبدالها يتم سوفجملة تنقيذ بعد حقيقية

االدخال

الشرح

جملة في المذكورة للمتغيرات القيم إدخال منك يطلب سوف الطريقة يهذه جملة تنفيذ بعدمفتاح تضغط القيمة ادخال من االنتهاء وبعد حتى ENTERاإلدخال وهكذا المفاتيح لوحة من

حرف ( على الضغط يمكنك آخر سجل وإلدحال األول السجل حقول إدخال من ثم) Rتنتهياخرى ENTERمفتاح لسجالت اإلدخال تكرار يعني وهو المفاتيح لوحة من

مثال

INSERT INTO s_dept (id, name,region_id)

VALUES (&department_id, ‘&department_name’,&region_id);

Enter value for department_id: 61Enter value for department_name: AccountingEnter value for region_id: 2

الطريقة هذه في بها التقيد يجب التي القواعد

مايلي : إليها ويضاف األولى الطريقة في المذكورة القواعد جميع الطريقة هذه على تنطبقبمتغيرات -1 اإلدخال جملة في القيم تستبدلالمتغيرات -2 تسمية شروط مراعاة مع المستخدم إلى المتغيرات أسماء اختيار يعودعالمة -3 توضع أن االدخال &يجب متغير قبلالخاص -4 االدخال متغير حول مفردتين تنصيص عالمتى وضع يمكن اإلدخال جملة في

النصبة بالحقول

65

Page 66: Oracle ara

آخر جدول من نسخها طريق عن سجالت إضافة

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

التالي INSERTجملة المثال الى انظر فرعي استعالم مع

INSERT INTO history(id, last_name, salary, title, start_date)SELECT id, last_name, salary,title, start_dateFROM s_empWHERE start_date < '01-JAN-94';

الشرح

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

66

Page 67: Oracle ara

الطريقة هذه في بها التقيد يجب التي القواعداإلدخال -1 جملة استفسار INSERTكتابة جملة على SELECTمحتويةالمصدر -2 الجدول حقول بأسماء اإلدخال جملة في القيم تستبدلالعبارة -3 استخدم VALUESعدمتحتوي -4 ال أنها على نعريفها تم التي االجبارية القول في قيم إدخال وجوب مراعاة يجب

NOT NULLفراغ الحقول -5 وعدد البيانات ونوع الحقول ترتيب حيث من الجدولين بين الحقول مطابقة

الفصل ملخص

جملة بواسطة الجداول إلى البيانات اضافة موضوع الفصل هذا خالل من INSERTتناولنااإلضافة عملية إلجراء طرق ثالثة وهنالك

البيانات: ل جدو إلى واحد سجل إضافة أوال

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

البيانات : جدول إلى سجالت عدة إضتفة ثانيا

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

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

آخر: جدول من نسخها طريق عن جدول في سجالت إضافة ثالثا

هذا نسخ طريق عن البيانات جدول إلى واحد سجل من أكثر إدخال يمكن الطريقة بهذهجملة / بواسطة آخر جدول من السجالت جملة SELECTالسجل بداخل INSERTالموجودة

67

Page 68: Oracle ara

الجداول بيانات وحذف تعديل

الفصل أهداف

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

الجدول -1 في البيانات لتعديل المختلفة بالطرق اإللمامالبيانات -2 جدول في أكثر أو واحد سجل بيانات تعديل إتقانالبيانات -3 جدول في السجالت جميع بيانات تعديل إتقانالبيانات -4 جدول من أكثر أو سجل حذف إتقانالبيانات -5 جدول من السجالت جميع حذف إتقان

الجدول بيانات تعديل

جزأ يشكل الفصل هذا أن كما السجالت وحذف البيانات تعديل كيفية سنتعلم الفصل هذا فيالبيانات تناول للغة مكمال في DMLأساسيا القوية النظم احدى يعتبر التي أوراكل نظام فس

البيانات قواعد إدارة الجدول DBMDنظم داخل البيانات معالجة في فعال أثر من لها لماالبيانات تناول لغة تشتمل التالية DMLحيث االجزاء على

الجداول -1 إلى البيانات INSERTإدخالالجداول -2 في البيانات UPDATEتعديلالجداول -3 من البيانات DELETEحذف

هذا في وخذفها البيانات تعديل وسندرس السابق الفصل في البيانات ادخال تناولنا ولقدالفصل

الجدول في البيانات تعديل

البيانات / جدول في اكثر أو واد سجل في حقول قل بيانات تعديل بها يتم التي العملية هيجملة خالل :UPDATEمن بطريقتين العملية هذه وتتم

أوال: تعديل بيانات حقل / حقول لسجل واحد أو اكثر

العامة الصيغة

UPDATE tableSET column1 = value [, column2 = value][WHERE condition];

أن حيثTable فيه البيانات تعديل المراد الجدول اسم

Column1,column2 ( ) بياناتها تعديل المراد االعمده الحقول اسماءValue1, value2 إعطاؤها سيتم التي الجديدة القيم

( حقل ( االعمدة 2وحقل 1للحقول

68

Page 69: Oracle ara

قيمة فإن الحقل 1وبالتالي الى ستؤولوهكذا 1

Condition سيتم التي السجالت تحدد شرط جملةتحقق التي السجالت هي بياناتها تعديل

الشرط

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

علما التعديل جملة في المذكورة الجديدة القيم لتتوي قيها الموجودة القيم إلغاء يتم بحيثالجملة في الشرط تحقق التي السجالت فقط هي بياناتها تعديل سيتم التي السجالت بأن

الشرطية

الطريقة هذه في بها التقيد يجب التي القواعدالجدول -1 في الحقول قيم على يعتمد حسابي تعبير عن عبارة الجديدة القيمة تكون قدفرعي -2 استعالم جملة عن ناتجة الجديدة القيمة تكون SELECTقدسيتم -3 التي الحقول بيانات نوع نفس من الجديدة القيم بيانات نوع يكون أن يجب

تعديلهاتنصيص -4 عالمتي بين الجديدة القيم وضع يجب والنصوص التاريخ حقول تعديل عند

مفردتين أنها -5 على تعريفها تم والتي تعديلها سيتم التي للحقول قيم إعطاء وجوب مراعاة يجب

فراغ تحتوي ال أي إجبارية NOT NULLحقول

مثال

UPDATE s_empSET dept_id = 10WHERE id = 2;

ثانيا : تعديل بيانات حقل / حقول لجميع السجالت في الجدول

العامة الصيغة

UPDATE tableSET column1 = value [, column2 = value]

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

علما التعديل جملة في المذكورة الجديدة القيم لتتوي فيها الموجودة القيم إلغاء يتم بحيثالجدول في السجالت حميع هي بياناتها تعديل سيتم التي السجالت بأن

مثالUPDATE s_empSET commission_pct = 10

69

Page 70: Oracle ara

70

Page 71: Oracle ara

الجداول من البيانات حذفجملة / خالل من البيانات جدول من سجالت سجل بيانات حذف بها يتم التي العملية هي

DELETE بطريقتين العملية هذه وتتم

أول:ا حذف سجل أو أكثر من الجدول

العامة الصيغةDELETE [FROM] table[WHERE condition];

الشرح في / الشرط تحقق التي السجالت السجل حذف يتم سوف الطريقة الحذف جملة تنفيذ بعد

الشرطية الجملة.

الطريقة : هذه في بها التقيد يجب التي القواعد

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

المذكور

ثانيا: حذف جميع سجالت الجدول العامة الصيغة

DELETE [FROM] table;الشرح

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

الفصل ملخص

جملة بواسطة الجدول في البيانات تعديل موضوع الفصل هذا في وهنالك UPDATEتناولناوهما التعديل عملية الجراء طريقتان

/ اكثر أو واحد لسج حقول حقل بيانات تعديل أوال

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

الجدول: / في السجالت لجميع حقول حفل بيانات نعديل ثانيا

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

عن السجالت حذف موضوع تناولنا الحذف DELETE ثم عمليةا إلجراء طريقتان وهنالك

الجدول: من أكثر أو سجل حذف أوال

الشرط / جملة في الشرط تحقق التي السجالت السجل حذف يتم سوف الطريقة بهذه

71

Page 72: Oracle ara

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

72

Page 73: Oracle ara

والعروض والفهارس المتسلسالت

الفصل أهداف

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

المتسلسالت -1 مع التعاملمتسلسلة -2 تكوينمتسلسلة -3 في التعديلمتسلسله -4 حذفالعادية -5 والفهرسه التلقائية الفهرسه بين الفرق معرفةللبيانات -6 فهرسه عملالفهرسه -7 الغاءالعروض -8 مع Viewالتعاملعرض -9 تكوين

العرض -10 تعديلعرض -11 الغاء

73

Page 74: Oracle ara

المتسلسالت

مثل. تلقائيا تتولد المتتالية االرقام من مجموعه عن عبارة حيث ,,,3و2و1المتسلسلةأساسي كمفتاح الذاكره Primary Keyتستخدم معاها وتتعامل فريده قيم عن عبارة النها

وبكفائه بسهولة

العامة الصيغة

CREATE SEQUENCE name[INCREMENT BY n1][START WITH n2][{MAXVALUE n3 | NOMAXVALUE}][{MINVALUE n4 | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE n5 | NOCACHE}]

أن حيث

Name المتسلسلة اسمN1 مرة كل الزيادة مقدارN2 المتسلسلة منه تبدأ رقم اولN3 للمتسلسلة قيمه اقصىN4 للمتسلسلة قيمة ادنىN5 الذاكره في الخانات عدد

الشرح

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

قصوى ( NOMAXVALUE قيمة الى تصل ان للمتسلسلة يمكن )1027حيث

وللتنازليه (- التصاعديه ) 1للمتسلسلة قيمة وجود عدم االفتراضي والوضع للمتسلسله قيمه ادنى تحديد يتم الخامس السطر

NOMINVALUE) الى تصل للمتسلسلة يمكن التصاعدية) 1حيث المسلسلة حالة فيالى (- التنازليه )1026وحالة

السادس وصلت cycleالسطر اذا المتسلسلة بتكرارا يسمحعدم هو االفتراضي والوضع قيمه وأدنى قيمه أقصى الى

التكرار مع التعامل لسرعه وذلك للمتسلسلة الذاكره في اماكن حجز فيه يتم السادس السطر

في نكتب حيث اكون n5المتسلسلة أن االفتراضي والوضوع الخانات واذا 20عددالذاكره NOCACHEاخترنا في اماكن حجز اليتم فانه

مثال

CREATE SEQUENCE s_dept_id INCREMENT BY 1

74

Page 75: Oracle ara

START WITH 51 MAXVALUE 9999999 NOCACHE NOCYCLE;

من عدد ألكبر الذاكره في اماكن بحجز نقوم للمتسلسلة أداء أفضل على نحصل لكيمع التعامل ونبطئ الذاكؤه سنشغال فإننا كبير عدد ستخدمنا اذا ولكن نعرفه المصفوفات

للمتسلسله كافي يكون لن قليل عدد ستخدمنا واذا الجهاز

المتسلسالت مولد مايسمى نستخدم sequence generatorلذلك

المتسلسالت -7 استخدام

تستخدم متسلسلة الى جديدة قيمه اضافة اردنا اذا

6-Table_name.NEXTVAL

نستخدم الحاليه القيمة اردنا واذا

Table_name.CURRVAL

المثال هذا ولنأخذ

INSERT INTO s_dept(id, name, region_id)VALUES (s_dept_id.NEXTVAL, ‘Finance’, 2);

خانة في المتسلسلة الى جديدة قيمه بإضافة قمنا قمنا idحيث ثمخانة financeباضافة خانة 2و nameالى region_idفي

نستخدم الحالية القيمة اردنا واذا

SELECT s_dept_id.CURRVALFROM SYS.dual;

مالحظةالمتسلسالت في ثغرات توجد لكن

المتسلسلة- 1 في خلل يحدث فإانه اخر الى مكان من سجل نقل تم اذاجدول- 2 من اكثر في نتستخدم أن يمكن المتسلسلة

متسلسلة تعديلأو قيمه وادنى وقيمه اكبر ونحديد للمتسلسله االبتدائية القيمه أو الزياده مقدار تعديل يمكن

االمر طريق عن الذاكره التكراراو خيار ALTERتغيبر

العامه الصيغه

ALTER SEQUENCE sequence75

Page 76: Oracle ara

[INCREMENT BY n][{MAXVALUE n | NOMAXVALUE}][{MINVALUE n | NOMINVALUE}][{CYCLE | NOCYCLE}][{CACHE n | NOCACHE}]

التغيير لهذا قواعد توجد ولكن

المتسلسله -1 هذه لتعديل السماحية لك تكون أن يجبالجديده -2 القيم على الحادث التغيير تطبيق سيتمثم -3 اوال بمسحها نقوم أـن يجب المتسلسلة جميع على التغيير يتم ان اردت اذا

انشائها اعادة

متسلسلة حذف

األمر طريق عن متسلسلة حذف DROPيتم

مثال

DROP SEQUENCE s_dept_id;

الفهرسة

مثل الجداول من بسرعه البيانات على الحصول لتسهيل مصممه وسبلة عن عبارة الفهرسةاوال الفهرس الى ننظر بسرعة معلومة الى الوصول نريد فعندما كتاب بأي الموجود الفهرس

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

واالدخال االخراج وسائل خالل المنتقله البيانات عدد تقلل انهامن بدال السلع ارقام او المناطق ارقام مثل تلقائي ترقيم الحقول ترقيم احيانا الضروري من

العادي الترقيم

؟ الفهرسة تتم كيف

التلقائية الفهرسه

يفهرس تلقائيا فانه فريد حقل جعلناه اذا أو أساسي مفتاح انه على حقل بتعريف نقوم عندما

العادية الفهرسة

اليها الوصول لتسهيل فريدة غير بيانات بفهرسة نقوم أن يمكن

الفهرسة أنواع

( منها ( األعمدة من مجموعة او واحد عمود حقل فهرسة يمكن يث للفهرسه أنواع عدة توجد76

Page 77: Oracle ara

الفريدة unique indexالفهرسةواحدة مرة اال تتكرر ال قيمة كل ان حيث بتقييد ولكن مفهرسة قيم عن عبارة هي

فريدة الغير nonunique indexالفهرسةتقييد أي بدون ولكن مفهرسة قيم عن عبارة هي

المركبة composite indexالفهرسةمختلفة قيم له عمود كل أن حيث اعمدة عدة فهرسة يتم حيث

جملة تعود عندما المركبه الفهرسة طريق SELECTوتستخدم عن ترتيبها فيتم قيم بعدةالمركبة الفهرسة استخدام

الفهرسة مع بالتعامل االوراكل يقوم كيف

مايسمى بتكوين يقوم االوراكل فإن حقل بفهرسة نقوم فيها index segmentعندما بتمالمعلومات هذه أن حيث البيانات الى الوصول تسرع والتي بالفهرسة خاصة معلومات تخزين

االخرج وسائل طريق عن اليها للوصول الطرق أقصر وتوضح السجالت أماكن توضحواالدخال

يسمى الفهرسة عليه تعتمد الذي شجري B*-tree indexوالمصطلح محطط عن عبارة هيالقيم كتلة مع مقارنتها يتم تاليه قيمة الى ننتقل كلما حيث تنازليا مرتبة القيم من لمجموعة

الكتل هذه وتسمى تعلوها اخرى branch blocksالتي كتل مع مقارنته يتم المقارنه هذه وناتجويسمى الكتل هذه في درجة أدنى البيانات leaf blocksإلى كل على الكتلة هذه تحتوي حبث

يسمى ما ويوجد البيانات ROWIDالمفهرسه لهذه

يوجد فإنه فردية البيانات كانت ان ROWIDاذا يمكن فانه فردية تكن لمت اذا ولكن قيمة لكلمن أكثر حسب ROWIDيتواجد البيانات ترتيبها يتم الحالة هذه ثم وفي الفهرسه مفتاح

ROWIDحسب

77

Page 78: Oracle ara

العامة الصيغة

CREATE INDEX indexON table (column[, column]...);

أن حيث

Index الفهرس اسمTable الجدول اسم

Column فهرستة المراد الحقل اسنمثال

CREATE INDEX s_emp_last_name_idxON s_emp(last_name);

مايلي مراعاة يجب الفهرسة عند

نستخدم -1 يث الصفوف من كبير بعدد عنها استعلم التي الجداول نفهرس اليتجاوز ال االستعالم يكون عندما الجدول % 5الفهرسه من

باستمرار -2 قيها التعديل ينم التي الحقول نفهرس البكثرة -3 متكررة قيم على تحتوي التي الجداول نفهرس الالتي -4 الحقول مع نفهرس الفهرسه نستخدم فال عالبا سهل عنها االستعالم يكون

معقدة شروطها استعالماتفريدة -5 قيم على تحتوي ال التي الحقول غالبا نفهرس الواخر -6 جدول بين رابطه حقول تعتبر التي الحقول نفهرس

الفهرسة حذفاألمر نستخدم الفهرسة DROP INDEXلحذف

مثال

DROP INDEX s_emp_last_name_idx;

العروض

على يحتوي وهمي جدول يعتبر حيث اكثر أو واحد جدول من استعالم عن عبارة العرضجملة من يأخذها التي موجود SELECTالبيانات غير الجدول هذا ان حقيقة ولكن

منها : مهام عدة في العالض استخدم ويمكن االمان مستوي في التحكم على يحافظ المستخدم عن البيناتا تعقيد اخفاء األعمدة تسمية اعادة

العامة الصيغة

CREATE VIEW view-name

78

Page 79: Oracle ara

(column1,...,columnN)ASselect-statement

أن حيث

view-name العرض اسمColumn1 عرضها ستم التي الحقول اسم

مثال

CREATE VIEW empvu45AS SELECT id, last_name, titleFROM s_empWHERE dept_id = 45;

االمر طريق عن العرض بهذا الخاصة المعلومات مشاهدة فنكتب DESCRIBEويمكنك

DESC empvu45;

األمان مستوى في التحكمكمدراء معيني لمسنخدمين مسموحة العروض او الجداول بعض نجعل أن الى احيانا نحتاج

بـ ونفيده جديد حقل باضافة نقوم فلذلك مدير CHECKالشبكة المستخدم كان اذا حبثYيعطي

يعطي يكن لم خطوات Nواذا بعدة نقوم ذلك ولعمل

اوال

79

Page 80: Oracle ara

alter table S_EMPadd (Manager char(1) check (Manager in ('Y','N')));

ثانيا

update S_EMPset Manager = 'N'whereID != 1001;

ثالثا

update S_EMPset Manager = 'Y'whereID = 1001;

الموظف رقم اذاكان حالة في وهو شرط بتحديد قمنا خطوتين اخر المدير 1001في هو فانهحقل في يعطي Yيعطي Managerلذلك ذلك Nوغير

رابعا

المستخدم اسم حيث مستخدم السم حقل بإضافة سنقوم تليها والتي الخطوة هذه فياالخير اسمه الى باالضافة للموظف األول االسم من حرف اول عن عبارة سيكون

alter table S_EMPadd(username varchar2(31));

خامسا

update S_EMPset username = substr(first_name,1,1) || last_name;

سادسا اسمه عرض بعمل سنقوم بالجدول Re_SALARYاالن S_EMPمربوط

create view Re_SALARY asselect e.id, e.last_name, e.first_name,decode(s.manager,'Y',e.salary,null) salaryfrom S_EMP e, S_EMP swhereuser = s.username(+);

80

Page 81: Oracle ara

user على تعتمد المتغيسر هذا قيمة لذلك الحالي البيانات لقاعدة المستخدم باسم تعةدخارجي ربط عملية بعمل قمنا حيث للقاعدة الحالي كان outer-joinالمستخدم اذا أنه شرطها

جدول في المستخدمين اسماء حقل في موجود اسمه البيانات لقاعدة الحالي المستخدمحقل في بقيمة يعود فانه الموظف Nاو Yاما Managerالموظفين رقم حسب قلنا كما

قيمة Decodeوالدالة مشاهدة كانت Managerتقوم عرض Yاذا وبتم مدير المستخدم فإنكانت واذا المرتب المرتب Nحقل حقل عرض يتم ال

أن االستعالم Ahmedفلنفرض بكتابة قام فاذا المدير هو

select *from Re_Salary;

ستكون المخرجات فان

ID LAST_NAME FIRST_NAME SALARY----------- ------------------------------ ------1001 AHMED AHMED 15001002 HERNANDEZ RANDY 30001003 EASON PAUL 15001004 BARRETT SARAH 15001005 HIGGINS BEN 30001006 YEN CINDY 15001007 GILROY MAX 15001008 CARSON BETH 30001009 SWANSON HARRY 2500

قام اذا المخرجات : MAXولكن فإن باالستعالم

ID LAST_NAME FIRST_NAME SALARY----------- ------------------------------ ------1001 AHMED AHMED 1002 HERNANDEZ RANDY 1003 EASON PAUL 1004 BARRETT SARAH 1005 HIGGINS BEN 1006 YEN CINDY 1007 GILROY MAX 1008 CARSON BETH 1009 SWANSON HARRY

81

Page 82: Oracle ara

العرض تعديل

االمر طريق عن العرض في التعديل يتم

7-CREATE OR REPLACE

مثال

CREATE OR REPLACE VIEW empvu45 (id_number, employee, job)

AS SELECT id, last_name, titleFROM s_empWHERE dept_id = 45;

عرض من اخر العرض

اخر عرض من عرض بعمل نقوم أن يمكن

مثال

create view EMBVY45asselect ID, Last_Name, First_Name, Middle_Initial,HireDate,from S_EMP;

عرض حذف

االمر نستخدم عرض DROPاللغاء

DROP VIEW empvu45;

الفصل ملخص

الى تطرقنا ثم حذفها وطريقة ونعدبلها المتسلسالت تكوين كيفية الفصل هذا في تناولناالى تطرقنا الفصل اخر وفي الغائها وكذلك وتعديلها عملها وكيفية وانواعها وفوائدها الفهرسة

والغائها تعديلها وكيفية وافكارها وفوائدها مفهومها العروض

82

Page 83: Oracle ara

pl/sqlنبذه

. الفصل أهدافعلى -1 PL/SQLالتعرفقاعدة -2 .IFاستخدامالتكرار -3 استخدام4-

83

Page 84: Oracle ara

على PL/SQLالتعرف

لغة كتابتها طريقة في في تشيه برمجية كتل عن عبارة لدعمها Cهي وتحتوي SQLباإلضافةمثل واومر بها خاصة اجراءات على اللغة مجهولة IFهذه برمجية وكتل دوال وكذلك وغيرهابقيمة تعود ال و اومر على تحتوي ال التي وهي

في البرنامج بنية تمثيل التالي PL/SQLويمكن الشكل في

تحتوي تتم pl/sql برامج البرمجة اوامر من كتل في عن علىكتابتها لالعالن منفصلة مقاطع. ( ) االخطاء االستثناءت ومعالجة البرامج واوامر المتغيرات

البيانات ومن قاعدة في االجراء تخزبن كتابتها كبرنامجالممكن او محدد اسم له  فرعيفي .ككتله sql * plusمباشرة مجهولة

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

في سنبدا مباشرة االجراء كتابة :وهي sql * plusاوال كمايلي

DECLAREتوجد والموشرات تعريفاتهنا المتغيرات

BEGINالبرنامج جسم

EXCEPTIONاالخطاء رموز معالجة

END:

:مع مايلي مالحظة

وجودهما هما exception وقسم declareقسم ان اليشترط اي اختيارينمتغيرات اي تعريف لديك اليوجد كان االخطاء واذا declare التستخدماذا مع تتعامل الن كنت

exception التستخدم في المتغيرات لتعريف العامة declareوالصيغة

84

Page 85: Oracle ara

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باإلضافة

BINARY_INTEGERالمتغير -1

بين الصحيحة األرقام 2.147.483.647و 2.147.483.647–وتشمل

PLS_INTEGERالمتعير -2

بين الصحيحة األرقام مساحة 2.147.483.647و 2.147.483.647–وتشمل يشغل ال النوع وهذامن وأسرع ة الذاكر من Numberو BINARY_INTEGERكبيرة

3 -NATURAL

من االرقام 2.147.483.647الى 0وتشمل

4 -POSITIVEمن فقط الموجبة االرقام 2.147.483.647الى 1وتشمل

3-BOOLEAN

القيمة يحمل متغير NULLأو FALSE أو TRUEوهو

4-%TYPE

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

4-%ROWTYPE

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

النوع من المتغير تعريف TYPE%طريقة

العامة الصيغة

85

Page 86: Oracle ara

variable-name table-name.column-name%TYPE;

مثال

v_last_names_emp.last_name%TYPE;المتغير بتعريف نقوم السطر هذا الحقل v_last_nameفي نوع نفس من أنه

last_name جدول القيم S_EMPفي نفس على ويحتوي

النوع من المتغير تعريف ROWTYPE %طريقة

العامة الصيغة

variable-name table-name%ROWTYPE;

مثال

emp_record s_emp%ROWTYPE;المركب المتغير بتعريف الجدول emp_record قمنا صفوف من صف قيمة يحمل الذي

s_emp

االسناد طرق

قيمة مثل ان تقول ان اردت :فيتم i=5اذا كمايلي ذلك

i:=5;

قبل =يجب النقطتين   وضع 

ذلك سوف على مثال ناخذ

اوامر يوجد DBMS_OUTPUT.PUT_LINE االمر sqlضمنفي يستخدم النتيجة تعرض للحزمة sql * plusلكي تابع أمر DBMS_OUTPUTوهو

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

له :والصيغة العامة

DBMS_OUTPUT.PUT_LINE(massege)

حيث

massageعرضة هي تريد الذي الشي او النص

لفهم تم ونستخدمه به نبدأ لكي االمر هذا سوف لكن pl/sqlال اوامرشرح المستقبل فياالمر هذا ان كثيرا اليهمكتعرف

86

Page 87: Oracle ara

مثال. :

:يتم sql * plusالشاشة على "hi all"طباعة نريد كمايلي ذلك

SET SERVEROUTPUT ON;BEGIN

DBMS_OUTPUT.PUT_LINE('hi all');End;

/ولعلك جرب النتائج والحظ االول تتسالهذا السطر وجود سبب عن

يخبر السطر الخ بأن sql * plusاالول به مايعود كل دم.ايكتبعندما ويكفي واحدة مرة sql * plus تدخلكتابته

 

المتغيرات مثال باستخدام اخرDeclare

i   number(5);BEGINi:=5;

DBMS_OUTPUT.PUT_LINE('i = ' || i);END;

عملة || فائدة ضمن التعبيرين الطباعةالموجدة بين للوصل هي

87

Page 88: Oracle ara

IF THENعبارة الشرط

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

اخذ بعد وذلك المؤشراتالبيانات

لها الصيغة :كمايليالعامة

IF condition THEN statement; ... statement; [ELSIF condition THENstatement; ... statement;]... [ELSIF condition THENstatement; ... statement;] [ELSEstatement; ... statement;]END IF;

أن حيث

conditional الشرط هي

مالحظةELSE وELSIF اختيارية جملةIF عبارات عدة على عبارة ELSIFنحنوي على تحتوي واحدة ELSEولكن كتابة طريقة أن الى ELSEIFوليست ELSIFانتبه

ذلك : على مثال

Declare i   number(5);BEGINi:=5;IF i=5 thenDBMS_OUTPUT.PUT_LINE('i = ' || i);ELSE DBMS_OUTPUT.PUT_LINE('i not eqal 5 ');    END IF;END;

 

شرط الشرط من اكثر باستخدام

88

Page 89: Oracle ara

Declare i   number(5);BEGINi:=5;IF i>1 thenDBMS_OUTPUT.PUT_LINE(i  || ' > 1');ELSIF i<1 thenDBMS_OUTPUT.PUT_LINE(i  || ' < 1');ELSIF i=1 thenDBMS_OUTPUT.PUT_LINE(i  || ' = 1'); END IF;END;

الـــتكرار

للتكرار يوجد اوامر :وهيعدة

1 - loop-exit-end

أل وهنا شرط وضع من الحلقة نهاءالبدذلك نأخذ على بسيط مثال

Declare i   number(5);BEGINi:=1;LOOPIF i>10 thenEXIT;END IF;DBMS_OUTPUT.PUT_LINE('i =' || i);i:=i+1;End loop;END;/

الشرح 

نوع : السطر من متغير تعريف رقم  الثانيالبداية :السطر الثالثابتدائية : السطر قيمة المتغير اعطاء i=1 وهيالرابعاالنهاء : السطر شرط الخامسكان : السطر اذا االنهاء يكمل وال i<10السادسانها : السطر ifالسابعطباعة : السطر iالثامنقيمة : السطر زيادة بواحد iالتاسع

89

Page 90: Oracle ara

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

i =1i =2

3=i i =4i =5i =6i =7i =8i =9

i =10

2- LOOP-   EXIT WHEN -   END

Declare i   number(5);BEGINi:=1;LOOPEXIT WHEN i>10;DBMS_OUTPUT.PUT_LINE('i =' || i);i:=i+1;End loop;END;/

االنهاء شرط استخدم الحظ لكن السابق نفس الناتج ويكون

EXIT WHEN i<10;

3- WHILE  - LOOP -  END

Declare i   number(5);BEGINi:=1;WHILE i <= 10 LOOPDBMS_OUTPUT.PUT_LINE('i =' || i);i:=i+1;End loop;END;

90

Page 91: Oracle ara

/

السابق المثال نفس الناتج ويكون

4-FOR - IN - LOOP - END 

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

االتي على هي لها العامه والصيغة

LOOP  ..البداية  FOR   i  IN  النهايةتكرارها المراد الجمل

END LOOP

مثـــال:Declare

i   number(5);BEGIN

FOR  i   IN  1..10 LOOPDBMS_OUTPUT.PUT_LINE('i =' || i);

End loop;END;

/:( ) السابق نفس كمايلي الناتج يكون وسوف

i =1i =2i =3i =4i =5i =6i =7i =8i =9

i =10 

GOTOجملة

فان البرمجة لغات باقي في اخرى GOTOكما الى نقطه من البرامج عمل تسلسل تنقل

العامة الصيغة

GOTO <<my_label>>

أن حيث91

Page 92: Oracle ara

my_label اليها االنتقال سيتم التي النقظة عنوان

مثال

declarei positive := 1;max_loops constant positive := 100;begini := 1;loopi := i + 1;if i > max_loops thengoto more_processing;end if;end loop;<<more_processing>>i := 1;end; /

التعليقات

في التعليقات كتابة طرق PL/SQLيمكن بعدة

التعليق (--) -1 ثم كتابة

مثال

-- DON’T FORGET MY NAME

أخرى (***) (***) -2 مرة ثم التعليق ثم كتابة

مثال *** DON’T FORGET MY NAME ***

اخرى) ( /*) /*كتابة (-3 مرة ثم التعليق ثن

مثال */ DON’T FORGET MY NAME /*

92

Page 93: Oracle ara

أوامر كتل SQLاستخدام PL/SQL في

جمل استعمال بـ SQLيمكنك الخاصة البرمجية الكتل وجود PL/SQLداخل مع ولكنجملة كل حيث منقوطة (SQLاختالفات بفاصلة ) ;تنتهي

مثال

DECLAREmax_records CONSTANT int := 100;i int := 1;BEGINFOR 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;/

االمر باستخدام قمنا المثال هذا أوامر sysdateو INSERTفي من SQLوهي

93

Page 94: Oracle ara

CURSORS المؤشرات

الفصل اهداف

على قادر ستكون الله شاء إن الفصل هذا مهاية قيالصريحه -1 المؤشرات مع التعاملالضمنية -2 المؤشرات مع النعامل

CURSORS المؤشرات

التحديد cursorsالمؤشرات pl/sqlتستخدم عبارات لغة selectألدارة الحظنا sqlفي وكمامثل السابقة من ifاالوامر البد ذلك ولعمل المخزنه الجداول بيانات مع نستخدمها لم والتكرار

. المؤشرات هذه استخدامالمؤشرات من نوعين بالتفصيل  وهناك واحد لك نتطرق وسوف والصريحة الضمنية هي

. الالزمة واالمثلة

الصريحه- :1 المؤشرات

االعالن من كجزء المؤشرات من النوع هذا تعريف عبارة declareيتم تشتمل ان sqlويجبالتحديد عبارة على االساسية selectالمعرفه الكلمات استخدام اليمكن حيث فقط

insert,update,delete: كمايلي مكونات اربعة ماستكتب دائما الصريحه المؤشرات استخدام وعند

الجزء- 1 في المؤشر تعريف declareيتمعبارة- 2 بعد المؤشر فتح beginيتم 

: كمايلي الصريح المؤشر لتعريف العامة الصيغة

DECLARE     IS   المؤشر CURSOR  اسماالستعالم

حقيقي مؤشر باسم المؤشر اسم باستبدال تقوماالستعالم جملة بوضع االستعالم selectوتقوم مكان في

 االمر باستخدام بفتحه نقوم وتستخدمه المؤشر هذا بفتح تقوم :openولكي كمايلي

المؤشر OPEN  اسم

( ) تم الذي المؤشر من واحد سجل سطر البيانات تحميل او باسترجاع تقوم المؤشر فتح وبعداالمر باستخدام :FETCHتعريفه كمايلي

94

Page 95: Oracle ara

المؤشر  INTO 1متغير,2متغير......., FETCHاسم

وحملها اسمه المعطى المؤشر من البيانات باسترجاع قم اي هذا المتغيرات intoومعنى الى. المؤشر استعالم في الموجودة الحقول عدد يساوي المتغيرات عدد ان مالحظة كع

: كمايلي اغالقه ويتم اغالقه عليك يجب المؤشر على العمليات اجراء من االنتهاء وبعد

close cursor_name  

مؤشر : تعريف طريقة على مثال

الجدول هذا لدينا انه افرض

age name no

23 mohammed 11122 talal 22224 majed 333

: كمايلي الجدول هذا بانشاء قم اوالcreate table stud)no number(4),name varchar2(40),

age number(2) ;(: كمايلي الجدول هذا في السابقة البيانات بادخال قم ثانيا

insert into stud values(111,'mohammed',23);insert into stud values(222,'talal',22);insert into stud values(333,'majed',24);

 مايلي بنتفيذ قم ثم

set serveroutput on;DECLAREname_stu varchar2(40);CURSOR  name_student ISselect name from studwhere no=111;BEGINOPEN name_student;FETCH name_student INTO name_stu;DBMS_OUTPUT.PUT_LINE(name_stu);CLOSE name_student;END;/

95

Page 96: Oracle ara

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

mohammedصحيح الشي وهذا

صريح مؤشر مع نتعامل لكي ذكرناه التي الخطوات نفس اتبعنا اننا الحظ

في االستعالم ان السابق المثال في يحدث cursorالحظنا ماذا لكن واحد بسجل يعود سوف؟ السجالت كافة على المرور واردنا سجل من اكثر المؤشر اعاد لو

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

mycur%found

حيث :

mycur: . المؤشر اسم هي

% . خصائصه : احد هي المؤشر اسم مايلي انا توضح

found: ال ام السجالت جميع من االنتهاء تم هل نعرف خاللها من التي خاصية

مثال :

المقرر الدرجة النتيجة الطالب كود اسمRESULTMARKSUBJECTNO_STU

 88216CS111 75225CS222 40225CS333

في ناجح كان اذا الطالب درجة الى وينظر الجدول على بالمرور يقوم اجراء انشاء نريدكان فاذا ال ام يساوي markالمقرر او قيمة 50اكبر حقل trueضع قيمة resultفي ضع واال

false حقل resultفي

الجدول : هذا بانشاء اوال نقوم

create table stu_study(NO_STU number(4),SUBJECT varchar2(8),MARK number(3),RESULT varchar2(20));

بادخال نقوم الجدول انشاء السابقة وبعد المدخالت

96

Page 97: Oracle ara

insert into stu_study (NO_STU,SUBJECT,MARK) values (111,'216CS',88);

insert into stu_study (NO_STU,SUBJECT,MARK) values (222,'225CS',75);

insert into stu_study (NO_STU,SUBJECT,MARK) values (333,'225CS',40);

: االجراء بانشاء نقوم ذلك بعد

declaremar number(3);no number(3);cursor res_stu isselect no_stu,markfrom stu_study;beginopen res_stu;loopfetch res_stu into no,mar;exit when res_stu%notfound;if mar>=50 thenupdate stu_study set result='TRUE' where no_stu=no;elseupdate stu_study set result='FALSE' where no_stu=no;end if;end loop;close res_stu;end;/

الجدول في النتائج تكون كمايلي : وبهذا

RESULTMARKSUBJECTNO_STUTRUE88216CS111TRUE75225CS222FALSE40225CS333

الحقل ان السابق الجدول في الحظ المتغيرات لتعريف اخرى طريقة تعريفه no_Stuهناك تمنوع من انه المتغير  number على تعريف انه noوتم على االجراء يتم   numberفي لكي ايضا

من الجدول في الحقل نوع تغير تم لو الحظ لكن فيه الطالب رقم varchar2الى numberوضعالمتغير نوع تغير عليك يجب االجراء noفانه التعدل تجعلك طريقه هناك لكن ايضا االجراء في

المتغير لتعريف التالي االمر استخدام وهي مرة االجراء   noكل في

97

Page 98: Oracle ara

NO  stu_study.no_stu%type

حيث :

NO المتغير اسم هي

stu_study : الجدول اسم

no_stu : الجدول في المطلوب الحقل

%type : الحقل نوع خاصية

اسمه متغير بتعريف قم ماسبق اسمه noومعنى الذي الحقل نوعية نفس NO_STUلهالجدول في .stu_studyالموجود

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

: كمايلي التعديل بعد االجراء يصبح وبذلك

declaremar stu_study.mark%type;no stu_study.no_stu%type;cursor res_stu isselect no_stu,markfrom stu_study;beginopen res_stu;loopfetch res_stu into no,mar;exit when res_stu%notfound;if mar>=50 thenupdate stu_study set result='TRUE' where no_stu=no;elseupdate stu_study set result='FALSE' where no_stu=no;end if;end loop;close res_stu;end;/

98

Page 99: Oracle ara

الضمنية المؤشرات

المؤشرات فائد على سابقا منها cursorsتعرفنا االول النوع الفصل ودرسنا هذا عندنا وفيالصريحه المؤشرات من اسهل وهي الضمنية المؤشرات وهو اخر نوع

التعامل عند هامتين نقطتين الضمنيه : وتوجد المؤشرات مع

االجراء* جسم في الضمني المؤشر في bodyيظهر كمافي declareوليس باالجراء الخاصالصريحه المؤشرات

مؤشر* يسترجع ان .selectالبد واحد سطر الضمني

: كمايلي الضمني للمؤشر العامه والصيغة

SELECT COLUM1,COLUM2,.......  INTO  VARIABLE1,VARIABLE2.....,             

FROM  table_name

هذا الحقل  ومعنى باختيار الحقل 1قم منغير 2و المتغيرات في متغير 1وضعها الجدول 2و منtable_name

نستخدم وسوف ذلك على مثال نأخذ الثاني  سوف الدرس في سابق انشئناه الذي الجدولالجدول اسم وكان الصريحة المؤشرات مع تعاملنا studعندما

agenameno

23mohammed11122talal22224majed333

ذلك ( اليحتاج انه البعض يقول قد الطالب اعمار متوسط بحساب يقوم اجراء كتابة مثال واردناجملة استخدام فمجرد اجراء احب selectالى لكن صحيح هذا نعم اقول انا ذلك عمل نستطيع

بعد نرى سوف ولكن الضمني المؤشر عمل طريقة نرى لكي المثال هذا في االجراء استخدامشامل مثال )  قليل واالن الوقت نفس في والضمنية الصريحه الموشرات استخدام فيه يتم

كمايلي : االجراء بكتابة نقوم

set serveroutput on;declareaveage number(4,2);beginselect avg(age)into aveage

99

Page 100: Oracle ara

from stud;DBMS_OUTPUT.PUT_LINE(aveage);end;/

الوقت*** : نفس في والضمنيه الصريحة الموشرات الستخدام شامل مثال

اسمه : االول الجدول التاليين الجدولين لدينا انه ):coursesلنفرض المقررات (

الساعات المقرر عدد المقرر اسم رقمhourscourse_namecode

3NETWORK216CS3ASSEMBLY225CS4DATABASE325CS

: كمايلي الجدول بانشاء وقم

create table courses(code varchar2(8),course_name varchar2(40),hours number(3),primary key(code));

: كمايلي بالجدول الموجود البيانات بادخال وقم

insert into courses values('216CS','NETWORK',3); 

insert into courses values('225CS','ASSEMBLY',3);   

insert into courses values('325CS','DATABASE',4);

وهو الثاني الجدول بتكوين نقوم :studysثم

اسمالمقرر كودالدرجةالنقاط عددالطالب

POINTMARKCOURSE_CODENO_STU

100

Page 101: Oracle ara

 88216CS111 75225CS222 40225CS333 90225CS111 78216CS222 85216CS333

: كمايلي االنشاء ويتم

create table studys(NO_STU varchar2(6),COURSE_CODE varchar2(8),MARK number(3),point number(5,2),primary key(NO_STU,COURSE_CODE));

  ادخال كمايلي ويتم بالجدول الموجودة بالبيانات :

insert into studys(NO_STU,COURSE_CODE,MARK)values ('111','216CS',88);insert into studys(NO_STU,COURSE_CODE,MARK)values ('222','225CS',75);insert into studys(NO_STU,COURSE_CODE,MARK)values ('333','225CS',40);insert into studys(NO_STU,COURSE_CODE,MARK)values ('111','225CS',90);insert into studys(NO_STU,COURSE_CODE,MARK)values ('222','216CS',75);insert into studys(NO_STU,COURSE_CODE,MARK)values ('333','216CS',85);

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

averageMARK

101

Page 102: Oracle ara

595-1004.7590-944.585-89480-843.575-79370-742.565-69260-6411-59

كمايلي : النقاط حساب  ويتم

* ( عدد = ( السابق الجدول كمافي الدرجة وليس المادة معدل مقرر اي في النقاط عددالمقرر ساعات

رقمه الذي الطالب معدل لحساب المقرر 111مثال 216CSفي

جدول من درجة studysنالحظ على تحصل قد الطالب الجدول  88ان من الدرجة ان ونالحظبين هي هو 89- 85السابق المقرر هذا في الطالب معدل فإن الطريقة ( 4.5وبالتالي وهي

, ( جدول ومن الجامعات اغلب في وبالتالي coursesالمتبعة للمقرر الساعات عدد على نحصلفان :

النقاط = .13.5 = 3 * 4.5عدد عمله االجراء من المطلوب هو وهذا الطالب جميع في وهكذا

: كمايلي يكون سوف االجراء فان وبالتالي

DECLAREno_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 isselect NO_STU,COURSE_CODE,MARK from studys;BEGINopen st_point;loopexit when st_point%notfound;fetch st_point into no_Student,cou_code,mark;select hoursinto houfrom courseswhere code=cou_code ;if (mark>=95)and(mark<=100) then

102

Page 103: Oracle ara

poi:=5 * hou;elsif mark>=90 thenpoi:=4.75 * hou;elsif mark>=85 thenpoi:=4.5 * hou;elsif mark>=80 thenpoi:=4 * hou;elsif mark>=75 thenpoi:=3.5 * hou;elsif mark>=70 thenpoi:=3 * hou;elsif mark>=65 thenpoi:=2.5 * hou;elsif mark>=60 thenpoi:=2 * hou;elsepoi:=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اوال يكون ثمشرط وطبعا الصريح المؤشر في الموجودة الطالب سجالت جميع على يمر لكي دورانية

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

fetch st_point into no_Student,cou_code,mark;

االن نحن االن ولنفرض المقرر في والدرجة المقرر ورقم الطالب رقم هي المتغيرات وطبعارقمه الذي الطالب ووهو االول السجل المقرر 111عند هي 216CSورقم سوف 88ودرجته

103

Page 104: Oracle ara

, المادة ساعات عدد يحضر لكي ضمني مؤشر يستخدم ثم المتغيرات في البيانات هذه يضعالطالب درسها هو 216CSوهي 111التي المؤشر و

select hoursinto houfrom courseswhere code=cou_code ;

هو رقمه الذي المقرر ساعات عدد احضر هذا من cou_code  ومعنى معروف هو المتغير وهذافي موجودة المقرر ساعات عدد ان هو المؤشر هذا استخدامنا وسبب االول الصريح المؤشر . عند اننا فرضنا اننا وبما الساعات عدد يحضر لكي المؤشر هذا استخدام من والبد اخر جدول

المقرر ساعات عدد يحضر فسوف االول الدرجة 3وهي   216CSالسجل يختبر بدأ ثم ساعاترقمه الذي الطالب درجة كانت حيث والمعدالت الدرجات للجدول طبقا المقرر 111وذلك في

216cCS  النقاط 88هي عدد يكون من , 13.5 = 3 * 4.75كمايلي =  وبالتالي االنتهاء وبعديقوم المعدل قيمة  حساب وتحديث الجدول على , pointبنعديل يمر وهكذا الجديدة بقيمتها

. النتائج تكون وبالتالي السجالت نهاية الى يصل ان الى السابقة الطريقة بنفس طالب كلالجدول في :studysكمايلي

POINTMARKCOURSE_CODENO_STU13.588216CS11110.575225CS222340225CS33314.2590225CS11110.578216CS22213.585216CS333

واقعيه وبامثله تام بشكل بنوعيها المؤشرات انهينا نكون المثال هذا من االنتهاء بعد

104

Page 105: Oracle ara

و المخزنة المصفوفات الدوال و االجرائيات

الفصل اهداف

الله باذن القصل هذا في سنتعلممعها -1 والتعامل المصفوفات انشاءاجراء -2 انشاء كيفيةالمخزنة -3 الوظائف مع التعامل

)pl/sqlفي  ـداولالج المصفوفات (

( هي ( في المصفوفات مثل المصفوفات الجداول هذه لو  تستخدم مثل البرمجة لغات من لغةويتم للتخزين الجداول هذه تستخدم فانك تخزينها وتريد االرقام من سلسلة لديك كانت

كمايلي النوع هذا من متغير النوع : تعريف هذا تعريف يتم اوال

TYPE   _النوع المتغير_ IS TABLE OF اسم INDEX BY نوعBINARY_INTEGER

ذلك : على مثال

DECLARETYPE num_array IS TABLE OF number(4) INDEX BY BINARY_INTEGER;num num_array;BEGIN................END;

واسماه نوع تعريف تم اوال متغير,   num_arrayالحظ بتعريف قام نوع numثم واعطاهnum_array  . بانشاءه قمنا الذي الجديد النوع وهو

عملي / مثال

set serveroutput on;DECLARETYPE num_array IS TABLE OF number(4) INDEX BY BINARY_INTEGER;i   number(4);num    num_array;BEGINFOR  i  IN  1..10 LOOPnum(i) := i * i ;END LOOP;

105

Page 106: Oracle ara

FOR  i  IN  1..10 LOOPDBMS_OUTPUT.PUT_LINE(i || '*' || i || '= ' || num(i) );END LOOP;END;/

العدد : بضرب تقوم االولى الحلقة كمايلي االجراء هذا عمل في   iوويكون وتخزنه نفسه فيكمايلي :iبرتبه numالمتغير الناتج ويكون للطباعة الثانية والحلقة وهكذا

1*1= 12*2= 43*3= 94*4= 165*5= 256*6= 367*7= 498*8= 649*9= 8110*10= 100

المخزنة االجرائيات

مرة من اكثر استخدامة اردت اذا اني بكتابة نقوم اجراء اي ان الماضية الدروس في شاهدنافي مرة كل بكتابة اقوم نقوم sql * plusفاني لو رأيك ماهو لكن النتائج على احصل لكي

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

بمايلي : نقوم مخزن اجراء بانشاء نقوم ولكي

CREATE [OR REPLACE] PROCEDURE procedure-name [(argument1 ... [, argumentN) ] IS [local-variable-declarations]BEGINexecutable-section [exception-section]END [procedure-name];

أن حيث

procedure_name . المستخدم االجراء اسم

106

Page 107: Oracle ara

.OR REPLACEاما السابق من موجود االجراء ان تعلم حينما توضع فهي

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

كمايلي : يكون الشكل بهذا متغير ولتعريف

student_id  in number(9)

هو المتغير اسم الكلمة   student_idالحظ وضعنا بعده يعتبر   inثم المتغير هذا ان ومعنىكمدخل

يتم الطالب بمعدل يرجع متغبر تعرف اردنا لو مثال االجراء من بقيمة يعود متغير لتعريف اماكمايلي : التعريف

ave out number(5,2)

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

تنفيذ وبعد اوال القيمه به تمرر حيث والمخرجات للمدخالت متغير تعريف يمكن انه العلم معكمايلي : وتتم المتغير نفس في القيمه وضع يتم االجراء

ave in out number(5,2)

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

مــــثال :

في بدراسته قمنا الذي الجدول السابقة في بأسم الفصول  studysوكان

كمايلي : وكان

POINTMARKCOURSE_CODENO_STU13.588216CS11110.575225CS222340225CS33314.2590225CS11110.578216CS22213.585216CS333

ورقم الطالب رقم تمرير بعد الطالب درجة بطباعة يقوم لكي مخزن اجراء تصميم اردنا لوالمقرر.

107

Page 108: Oracle ara

المخزن كمايلي : االجراء يكون سوف

create or replace procedure stu_mark(stu_id in studys.NO_STU%type,cou in studys.COURSE_CODE%type) asmar studys.mark%type;beginselect markinto marfrom studyswhere NO_STU=stu_idand COURSE_CODE=cou;DBMS_OUTPUT.PUT_LINE(mar);end;/

باستدعاءه نقوم ولكي البيانات قاعدة في مخزن االجراء يكون االجراء تنفيذ من االنتهاء بعدبمايلي نقوم

beginstu_mark(111,'216CS');end;/

على الناتج يكون سوف وبذلك االجراء اسم خالل من السابق االجراء استدعاء تم كيف الحظكمايلي الطالب    88الشاشة رقم تمرير بعد صحيحة  216CSومقرر 111وهي

ان مأرايك لكن اخراج متغيرات نستخدم لم اننا الحظ بنفس  لكن يقوم اخر اجراء نصممبها يقوم التي نجعل  الوظيفة لكي االستدعاء بعد تكون الطباعة عملية لكن السابق االجراء

بمتغير الطالب درجة بارجاع يقوم كمايلي : االجراء االجراء فان لذلك

create or replace procedure stu_mark22(stu_id in studys.NO_STU%type,cou in studys.COURSE_CODE%type,mara out studys.mark%type) asbeginselect markinto marafrom studyswhere NO_STU=stu_idand COURSE_CODE=cou;end;/

108

Page 109: Oracle ara

اليقوم االجراء الحظت لو الن الدرجة طباعة ثم ومن االجراء باستدعاء نقوم ذلك بعدالمتغير في وضعها تم الدرجة ان ايضا والحظ القيمة   maraبالطباعة بهذه يعود سوف ولذلك

كمايلي : االستدعاء يكون وسوف

declarem studys.mark%type;beginstu_mark1(111,'225CS',m);DBMS_OUTPUT.PUT_Line(m);end;/ هو الناتج يكون الجدول 90وسوف على بناء صحيح وهذا .

المخزنة الوظائف

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

: كمايلي وظيفة لتكوين العامة والصسغة

CREATE [OR REPLACE] FUNCTION function-name [(argument1 ... [, argumentN) ]RETURN function-datatype IS [local-variable-declarations]BEGINexecutable-section [exception-section]RETURN function-valueEND [function-name];

أنحيث

function_name . المستخدمه الوظيفة اسم

.OR REPLACEاما السابق من موجود االجراء ان تعلم حينما توضع فهي

حساب اجراء لديك كان اذا مثل مدخله متغيرات اما فهي القوسين بين التي المغيرات عن اماكمدخالت , تعتبر هي فهذه معدله حساب تريد الذي الطالب رقم تمرير وتريد طالب معدل

وطرق المتغيرات على التغير المخزنة االجراءت مع بها تعاملنا التي الطريقة بنفس وهياما. الوظيفة . فهي  RETURN datatype  تعريفها من المعادة القيمة نوع على تدل

الرابع : الدرس في بدراسته قمنا الذي الجدول في بأسم  مثــــــــال وكان  studysوكانكمايلي :

POINTMARKCOURSE_CODENO_STU13.588216CS111

109

Page 110: Oracle ara

10.575225CS222340225CS33314.2590225CS11110.578216CS22213.585216CS333

الوظيفة الى الطالب رقم تمرير يتم اي الفصل الطالب بمعدل ترجع وظيفة تصميم اردنا لوللطالب الفصلي المعدل حساب يتم ثم

الساعات = ÷ عدد مجموع النقاط مجموع كمايلي للطالب الفصل المعدل حساب ويتملمقررات

كمايلي : الوظيفة والنشاء

 create or replace function stu_avea(stnum in studys.NO_STU%type) return real as  hour courses.hours%type; avrage number(4,2); sum_hours courses.hours%type:=0;  point studys.POINT%type; total_Point studys.POINT%type:=0; codem courses.CODE%type; cursor sumpoint is select COURSE_CODE,POINT from studys where NO_STU=stnum; begin open sumpoint; loop fetch sumpoint into codem,point; 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;

12345678910111213141516171819202122232425262728

110

Page 111: Oracle ara

 avrage:=total_Point/sum_hours; return avrage; end;

2930

الشرح :

رقم الوظيفة: 1السطر لتعريفرقم الوظيفة: 2السطر بها ترجع سوف التي القيمة نوعرقم الموجودة: 4السطر المقرر ساعات عدد حقل نفس وهو الساعات عدد متغير تعريف

جدول coursesفيرقم المعدل: 5السطر به نضع سوف الذي متغير تعريفرقم المواد: 6السطر كل في للطالب الساعات مجموعات به يوضع لكي متغير تعريفرقم مقرر: 7السطر اي في الطالب نقاط عدد به يوضع لكي متغير تعريفرقم المقرر: 8السطر كل في الطالب نقاط عدد مجموع به يوضع لكي متغير تعريفرقم المادة: 9السطر لكود متغير تعريفرقم الحصول: 10السطر في منه نستفيد لكي المادة كود على للحصول صريح مؤشر تعريف

النقاط مجموع الى نضيفها لكي المقرر ذلك في النقاط وعدد الساعات عدد علىرقم معه: 16السطر نتعامل لكي المؤشر هذا فتحرقم الجدول: 17السطر جميع على نمر لكي حلقة على الدخولرقم المتغيرات: 18السطر في الحالي للسجل المؤشر قيم codem,pointتحديثرقم المؤشر: 19السطر في سجل اي يجد لم اذا وهو الحلقة انهاء شرطرقم المقرر: 20السطر في الطالب ساعات عدد على بالحصول يقوم لكي ضمني مؤشر

المتغير في الساعات عدد ويضع الصريح المؤشر في حاليا hourالموجودرقم السابق: 24السطر النقاط مجموع الى الحالي للمقرر النقاط عدد اضافةرقم السابق: 25السطر الساعات مجموع الى الحالي للمقرر الساعات عدد اضافةرقم الحلقة: 26السطر من الخروجرقم الضمني: 27السطر المؤشر انهاءرقم الساعات: 28السطر عدد مجموع تقسيم النقاط مجموع وهو المعدل حسابرقم المعدل: 29السطر بقيمة الرجوعرقم االنهاء: 30السطر

االستدعاء : طريقة دور جاء الوظيفة تصميم طريقة شرح من االنتهاء بعد االن

رقمه الذي الطالب معدل يدويا لنحسب االستدعاء قبل بعد 111لكن بالنتائج نقارنه لكي مثلاالستعالم :

الطالب =   نقاط 27.75= 14.25+13.5مجموع

المقرر = (   ساعات عدد الساعات عدد المقرر ) + ( 216CSمجموع ساعات )225CSعدد                              = 3 + 3 = 6

الطالب = معدل فان             4.63 = 6 ÷ 27.75وبالتالي

النتائج ونشاهد الدالة نستدعي دعنا االن لكن111

Page 112: Oracle ara

SELECT distinct(NO_STU),stu_avea(no_stu) from studyswhere no_stu=111;

الدالة استخدام والحظ االستعالم خالل من الدالة استدعاء تم كيف لعدم   distinct  الحظ وهيالنتائج : واليك السجل تكرار

NO_STU                 STU_AVEA(NO_STU)------      ;         ----------------111                    4.63 

بدون االستعالم كان لو الدالة  الحظ ظهوره   distinctوجود عدد الطالب رقم يتكرر فسوفكمايلي : لوكان لذلك الجدول في

SELECT NO_STU,stu_avea(no_stu) from studyswhere no_stu=111;

هكذا ستصبح النتائج فان

NO_STU                 STU_AVEA(NO_STU)------      ;      ----------------111                      4.63111                       4.63

الدالة   ظهور سبب distinctوهذا

112

Page 113: Oracle ara

البرمجية الزنادات الحزم و

الفصل أهداف

الله : شاء ان الفصل هذا في سنتناول

البرمجية -1 الحزم ماهيةومكوناتها -2 البرمجية الحزم انشاء كيقية

الزنادات -3 ماهية

الزنادات -4 مع التعامل

الزنادات -5 قوائد

البرمجية الحزم

سابق . اتعلمنا قاعدة لدينا وجد لو مارأيك لكن المخزنة والوظائف االجراءت انشاء كيفيةعلى تحتوي انها مثال ولنضرب جدا كبيرة عمل 50بيانات لها اجراء او وظيفة وظيفة او اجراء

وبيانات العمالء بيانات على يحتوي ضخم تجاري لمحل هي القاعدة هذه ان ولنفرض خاصبعض , فان ولذلك بيانات من وغيرها المخزون وبيانات التجارية االصناف وبيانات الموظفينعميل اجمالي لحساب اجراء وجود مثال بالعمالء مختص المخزنة والوظائف االجرائيات هذه

بحساب , خاصة اجرائية مثال بالموظفين خاصة اجرئيات وجود ومثل االجرائيات من وغيرهاهذا , في وضعها لكن ايضا وغيرها العالوات واضافة الحسومات حذف بعد الموظف راتب

الوظائف كل تجمع بان مارأيك لذلك االرباك بعض لك يسسب قد البيانات قاعدة في الشكلالحزمه تدعي المجموعة وهذه لوحدها مجموعة في قسم بكل الخاصة packageواالجرائيات

خاصة حزمة في بالعمالء الخاصة والوظائف اجرائيات كل نجمع مثال

الحزمة استخدام فوائد

وحدات- 1 .pl/sqlتجميع المرتبطة 2. افضل- اداء3. افضل- السرية تكون4. الحزم- باستخدامم الصيانة عملية تسهل حيث الصيانه عملية في هو شيء اهم

الحزم مكونات

الوصف وهو االول جزءين من الحزمة مثل specificationتتكون التعاريف على ويحتوي . ومتحولتها االجراءت اسماء او مؤشرات او متغيرات

وغيرها والعمليات االجراءت تفاصيل على ويحتوي الحزمة جسم فهو الثاني الجز اماكمايلي : االول الجزء النشاء العامة والصيغة

CREATE OR REPLACE PACKAGE pack_name AS.........

113

Page 114: Oracle ara

.........

.........end;

114

Page 115: Oracle ara

كمايلي : الثاني الجزء النشاء العامة والصيغة

CREATE OR REPLACE PACKAGE BODY pack_name AS.........

الحزمة جسم.........end;

في الحزمة اسم يكون ان يجب .  لكن الثاني الجزء في الحزمة اسم نفس هو االول الجزء

مــثال :

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

stu_avea . من االول الجزء الحزمة بانشاء نبداء واالن الطالب معدل بحساب تقوم والتيكمايلي :specificationالحزمة

CREATE OR REPLACE PACKAGE student ASfunction stu_avea(stnum in studys.NO_STU%type)return real;procedure print_ave(avrage in real);end;

. كمايلي التفاصيل على تحتوي والتي الحزمة جسم بانشاء نقوم االن

CREATE OR REPLACE PACKAGE BODY student ASfunction stu_avea(stnum in studys.NO_STU%type)return realas hour courses.hours%type;avrage number(4,2);sum_hours courses.hours%type:=0; point studys.POINT%type;total_Point studys.POINT%type:=0;codem courses.CODE%type;cursor sumpointisselect COURSE_CODE,POINTfrom studyswhere NO_STU=stnum;beginopen sumpoint;loop

115

Page 116: Oracle ara

fetch sumpoint into codem,point;exit when sumpoint%notfound;select hoursinto hourfrom courseswhere code=codem;total_Point:=total_Point+point;sum_hours:=sum_hours+hour;end loop;close sumpoint;avrage:=total_Point/sum_hours;return avrage;end;

procedure print_ave(avrage in real)asbeginDBMS_OUTPUT.PUT_LINE(avrage);end;end;

وصف في تعريفهما تم الذي واالجراء الوظيفة مكونات على كمانالحظ الحزمة جسم ويحتوي. المعدل لطباعة واالجراء المعدل لحساب الوظيفة ان حيث الحزمة

حزمة : داخل موجود وظيفة او اجراء استدعاء طريقة

كمايلي : االستدعاء عملية      تتم

pack_name.func_proc_name

مـــــــثال : الوظيفة او االجراء اسم ثم نقطة ثم اوال الحزمة اسم اي

set serveroutput ondeclareaa real;beginaa:=student.stu_avea(111);student.print_ave(aa);end;/

رقمه الذي الطالب معدل هو الناتج يكون التفيذ داله 111وبعد استدعينا شي اول الحظالمتغير في ووضعناها المعدل .aaحساب الشاشة على طبعة ليتم الطباعة اجراء استدعينا ثم

116

Page 117: Oracle ara

الحزم فائدة على تعرفت ان بعد و كتابة  واالن في الحزم تستخدم ان فصاعد االن من مارأيكوالوظائف االجرائيات

117

Page 118: Oracle ara

TRRIGERsالزنادات

التالية : الطرق في اال الفرعية البرامج مع الزنادات تتشابه

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

البيانات* بقاعدة الخاص للجدول الزنادات تعريف يتم

المعامالت* الزنادات التقبل

باالنتاج . الخاصة الموجهة البيانات نظم تطوير في جدا هامة الزنادات تعد

الزناد : تركيب

create [or replace] Trigger >TRRIGER_NAME<>before|after] [instead of] trigger event on >table name<[for Each row [whene triggering restriction]]>trigger body<

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

الخيارين بواسطة الزناد اغالق بعد او قبل الزناد نفذ سواء بالزناد الخاص التوقيت beforeينفذخيار , afterو مرة afterلكن منطقيا تقراء ان يجب المؤثرة البيانات قطع الن كفاءة اكثر

لعبارة ومرة triggerللزنادجملة/ هو الزناد اطالق حدث ان اما sqlمالحظة االطالق وحدث الزناد تجعل او updateالتي

delete اوinsert.. بكليهما او: الزنادات من انواع اربعة ويوجد

.afterصف- 1.afterجملة- 2.beforeصف- 3.beforeجملة- 4

جملة اجل من زناد من (deleteاو insertاو updateوكل واحد نوع يعد زناد , instead ofكلafter,before.. الواحد) للجدول زنادات تسع تعريف ويمكن

الزناد * اطالق احداث : معالجةعملية على الزناد اطالق حدث هذه delete او update او insert يحتوي من توليفة على او

, دعائم تستخدم ان فيمكنك واحدة عملية من اكثر مع واحد زناد يتعامل عندما العملياتالزناد في بالرمز الخاص الجزء لتنفيذ تستخدم التي العبارة نوع على للتعرف شرطية

كمايلي هي :والدعائمIF inserting then .....end if;IF updating then .....end if;IF deleting then .....end if;

صف ** :لكلfor each row بالزناد تاثر صف لكل واحدة مرة ينطلق سوف الزناد كان اذا ما الخيار هذا يعد

118

Page 119: Oracle ara

السطر بزناد الخاص الزناد نص القديمة , for each row في القيم الى الوصول من يمكنكعمليتي في حيث الحالي للصف القديمة update و insert والحديثة القيم من الوصول يمكنك

لعملية بالنسبة اما فقط delete والحديثة القديمة القيم هو المتاح ان الطبيعي فمنزنادات في والحديثة القديمة القيم استخدام القيم before و after ويمكنك تكون وسوف

في فقط الموجودة هي والحديثة . before trigger القديمة كان اذا يقوم after trigger اما فانهالتحديث بعد القيمة .بالتقاط

الزناد قيد

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

student_id من 100اقل

create or replace trigger stduent_triggerbefore insert or update on studentfor each rowwhen(new.student_id>100)

: الزنادات انشاء على قيود

جمل- 1 على يحتوي ان للنص جمل dml sqlيمكن جمل selectلكن تكون ان select intoيجبالتحكم- 2 بجمل )commit,savepoint,rollback( اليسمحبواسطة- 3 استدعائه تم اذا السابقة التحكم جمل يتضمن ان مخزن فرعي لبرنامج اليمكن

الزناد.

مـــــــــــــــــثال :

: التالية جداول الثالث لدينا انه لنفرض

جدول : هو درجة playerاالول او شباب درجة سواء النادي في الالعبين جميع ممتاز : بيانات

levelsaddressphonedate_birthnameno_player1riyadh112345611/11/1973talal12riyadh26543211/1/1982mohammed22riyadh31237891/1/1988sami31riyadh412312312/3/1970yosif4

حيث levelحيث الالعب بها يلعب التي الدرجة و - 1تمثل الممتاز االولى الدرجة تمثل 2تمثلالشباب .

كمايلي : الجدول والنشاء

119

Page 120: Oracle ara

create table player(no_player varchar2(6) primary key,name varchar2(50),date_birth date,phone varchar2(9),address varchar2(20),levels number(2));

120

Page 121: Oracle ara

الجدول : واسم بالرواتب خاص وهو الممتاز درجة في الالعبين جدول هو larg_playerالثاني

salarylevel_nono_player 11 14

كمايلي : الجدول والنشاء

create table larg_player(no_player varchar2(6) primary key,level_no number(2),salary number(7,2));

 

الشباب : درجة في الالعبين جدول هو الجدول  الثالث واسم بالرواتب خاص youthوهو

salarylevel_nono_player 22 23

كمايلي : الجدول والنشاء

create table youth(no_player varchar2(6) primary key,level_no number(2),salary number(7,2));

مستواه وتحديد جديد العب اسم بادخال المستخدم يقوم حينما بحيث زناد عمل نريد االن ( جدول( في الالعب رقم اضاف شباب كان فاذا المستوى باختبار الزناد يقوم ممتاز او شباب

جدول في الالعب رقم يضيف فانه الممتاز اولى درجة مستواه لوكان وكذلك الشبابlarg_player: كمايلي الزناد يكون وبذلك

create or replace trigger player_agebefore insert on playerfor each rowbeginif inserting thenif :new.levels=1 theninsert into larg_player(no_player,level_no) values (:new.no_player,:new.levels);elsif :new.levels=2 theninsert into larg_player(no_player,level_no) values (:new.no_player,:new.levels);end if;end if;end;

121

Page 122: Oracle ara

مايلي : بادخال قم ذلك بعد

insert into player values('1','talal','11/11/1973','123456','riyadh1',1);

جدول على تمت المدخالت ان جدول  playerالحظ في باالستعالم وقما اذهب ذلك بعدlarg_player. هناك الالعب رقم اضاف انه تجد سوف

التجميعات

: البيانات قاعدة في التجميعات انواع

النوع نفس من العناصر من مجموعة هي التجميعة

: نوعين على هي والتجميعات

التجميعةvarray

مثل البرمجة لغات من لغة اي في للمصفوفات ومشابهة متغيرة كمصفوفة ++cو cوهيفي التخزين ويتم السفلية االرقام باستخدام التجميعة هذه في عنصر اي الى االشارة وتتم

خطية بصورة التجميعة inlineهذه

التجميعةnested table

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

في-- : التجميعات مع التعامل sql plus اوال

التجميعة - البسيط   varrayأ النوع من

رقم/ على يحتوي سوف والذي مستشفى في االقسام جدول انشاء تريد انك نفرض مثالاسماء , , , . ان العلم مع القسم موظفين اسماء ثم ومن القسم واسم القسم اسم القسم

تجميعة في تكون سوف . varray الموظفين

: كمايلي التجميعة بانشاء اوال نقوم

Create type namev as varray(30) of varchar2(50);

/

هو للموظفين عدد اكبر ان فرضنا لو هو 30حيث لالسم طول .50واكبر

/ كمايلي بانشاءه ونقوم الجدول بأنشاء نقوم ثم

Create table deptv)nodept number(5) primary key,

namedept varchar2(50),

122

Page 123: Oracle ara

emp namev;(

اوامر بتنفيذبعض فيمايلي الجدول   sqlونقوم على

:insertاالدراج     -1

Insert into deptv values(10,'medical',namev('ali','sami','fahad','fady'));

:updateالتحديث- 2

استخدام يتطلب التجميعة في العناصر خالل pl/sqlلتحديث من ذلك تنفيذ sqlواليمكن: مثال القياسية

Declare   Editname namev;

   I   number:=1;BeginSelect emp into editnameFrom deptv where nodept=10;LoopIf (i=editname.count+1) thenExit;Elsif (editname(i)='sami') thenEditname(i):='mohammed;'

End if;i:=i+1;end loop;update deptv set emp=editname where nodept=10;end ;

 : السابق المثال شرح

الموظف اسم بتغير يقوم الى samiسوف وتبديلة بادخال قمنا وشرح mohammedالذيكمايلي الخطوات

متغير بتعريف قمنا التجميعة   editnameاوال نوع نفس بتخزين namevمن نقوم لكي وذلكمتغير ايضا ونعرف فيه الموظفين اسماء على يحتوي والذي يستخدم  Iالمؤشر من وهو

كعداد.

كمايلي وهي الموظفين اسماء الستخراج مؤشر بعمل نقوم ثم

 Select emp into editname

From deptv where nodept=10;

للقسم الموظفين اسماء باستخراج هنا المتغير 10يقوم في االستعالم ناتج وتخزينeditname   التجميعة نوع نفس من هو والذي

123

Page 124: Oracle ara

هل يختبر ثم ومن حلقة يبدأ االجراء   Iثم بانهاء قام نعم كان اذا التجميعة نهاية الى وصلتيساوي هو هل الحالي التجميعة عنصر يختبر التجميعة نهاية الى يصل لم ال   samiواذا ام

يساوي كان الى samiاذا القيمة هذه بتغير بواحد   mohammedيقوم العداد يزيد ثم ومنالعناصر جميع من االنتهاء وبعد التجميعة نهاية الى يصل ان الى جديد من يعود ثم ومن

للجدول التحديث بعمل يقوم

update deptv set emp=editname where nodept=10;

. االجراء بانهاء يقوم ثم ومن

:)delete)Trimالحذف     -2 

اجراء   عمل يتطلب التجميعة من عنصر   pl/sqlحذف

التجميعات في واحد   varrayوالحذف عنصر حذفنا لو اي التجميعة في عنصر اخر على يتماخر على يتم العنصر  فانه تحديد يمكن وال عنصر

مثال:

DeclareNamedel namev;BeginSelect emp into namedelFrom deptv where nodept=10;Namedel.trim(1);update deptv set emp=namedel where nodept=10;end;/

باالضافة- 4  )update)appendالتحديث

لالضافة يستخدم االمر هذا

القسم الى الموظفين من مزيدا نضيف كيف ذهنك الى يتبادر نستخدم 10ألم تقول ان يمكناالمر   insertاالمر نستخدم عندما الننا صحيح غير هذا القسم   insertلكن رقم يظهر 10وندخل

رئسي مفتاح القسم رقم حقل الن خطاء لنا

توسع   بعمل نقوم اوال الموظفين من المزيد اضافة اردنا اذا لكي   extendلذلك للتجميعةلذلك . االجراء ونستخدم جديد عنصر باضافة لنا تسمح

 : كمايلي االجراء ويكون

DeclareNewname namev;BeginSelect emp into newnameFrom deptv where nodept=10;Newname.extend;

124

Page 125: Oracle ara

Newname(newname.last):='khaled;'update deptv set emp=newname where nodept=10;end;/

125

Page 126: Oracle ara

التجميعة - :  varrayب الشيء النوع من

المستخدم بواسطة معرفة تجميعة هي التجميعة هذه

ذلك : مثال

اسم على تحتوي تجميعة �ون نك اخر حقل وفي الوظيفة مسمى على يحتوي جدول انشاء اردنا لوالوظيفة هذه موظفين لجميع وراتبة الموظف

EMPLOYEEJOB_NAME)ali,5000),(sami,6000),(fahad,4000(manager

)laui,7500),(mohammed,7500(Analysis)fady,8000),(saed,6000(Programming

انشاء هي االولى الخطوة فإن كمايلي  objectوبالتالي

Create type empobj

as object (nameemp varchar2(50),salary number(6));

/

التجميعة بانشاء نقوم ثم

Create type employeeobj as varray(20) of empobj;

/

استخدمنا اننا الفرق االسم   objectالحظ بهذا النوع هذا سمي ولذلك انشئناه الذي

: كمايلي الجدول بإنشاء نقوم التجميعة انشاء وبعد

 Create table jobobj)job_name varchar2(50),

employee employeeobj;(

خالل   من الجدول هذا مع التعامل كيفية على االن نتعرف سوف الجدول انشاء * sqlوبعدplus

االضافة- :1 

نقوم السابق الجدول إلى صف بمايلي : الضافة

Insert into jobobj values

')manager',employeeobj)

126

Page 127: Oracle ara

                               empobj('ali',5000),

                               empobj('sami',6000),

                               empobj('fahad',4000);((

السابق الجدول في االول الصف اضفنا قد نكون وبهذا

الى ذهبنا مايلي sql * plusولو منه وطلبنا

Select * from jobobj

JOB_NAME

---------------------------------------------------

EMPLOYEEobj(NAMEEMP, SALARY(

-------------------------------------------------------------

manager

EMPLOYEE1(EMPOBJ('ali', 5000), EMPOBJ('sami', 6000), EMPOBJ('fahad', 4000((

الجديد الصف اضافة تم لقد ونالحظ

التحديث- : 2قطعة   تطبيق :pl/sqlيجب كمايلي

DeclareEditname employeeobj;Editobj empobj;i number:=1;BeginSelect employee into editname From jobobj where job_name='manager;'

LoopEditobj:=editname(i);If (i=editname.count) thenExit;

Elsif editobj.nameemp='sami' thenEditobj.salary:=10000;Editname(i):=editobj;End if;i:=i+1;End loop;Update jobobj set employee=editnameWhere job_name='manager;'

End;127

Page 128: Oracle ara

اسمه الذي الموظف راتب تعديل يتم قسم samiوبهذا في راتبه   managerالموجود وجعل10000

3: الحذف-

DeclareEditemp employeeobj;begin

      select Select employee into editemp From jobobj where job_name='manager;'

Editemp.trim(1);Update jobobj set employee=editempWhere job_name='manager;'

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

التجميعة- :NESTED TABLEج البسيط النوع من

التجميعة نفس التجميعة هذه بواسطة   varrayتعتبر بتعريفها نقوم والتي البسيط النوع منمثل الموجودة البيانات انواع الذي varchar2و   numberاحد المثال نفس هنا نستخدم وسوف

التجميعة في الشيئ .  varrayاستخدمناه النوع من

رقم/ على يحتوي سوف والذي مستشفى في االقسام جدول انشاء تريد انك نفرض مثالاسماء , , , . ان العلم مع القسم موظفين اسماء ثم ومن القسم واسم القسم اسم القسم

تجميعة في تكون سوف nested table الموظفين

: كمايلي وتكون التجميعة بانشاء نقوم اوال

 Create type namenested as table of varchar2(50);

/

: كمايلي الجدول بأنشاء نقوم ثم

 

Create table deptnested)nodept number(5) primary key,

namedept varchar2(50),emp namenested(nested table emp store as nestedtablesimple;

 

اضافنته تم الذي االخير السطر الحظ

استخدمنا اذا وضعه دائم يمثل nested tableفيجب والذي االحمر باللون المكتوب تغير معالنوع من هو الذي الحقل .nested tableاسم

128

Page 129: Oracle ara

لهذا كأسم يعتبر خط تحته nested tableوالذي

 

اوامر**   خالل من السابق الجدول مع sql التعامل

االضافة- :1

Insert into deptnested values(1,'medical',namenested('ali','sami','fahad','fady'));

:updateالتحديث- 2

استخدام يتطلب التجميعة في العناصر خالل pl/sqlلتحديث من ذلك تنفيذ sqlواليمكن: مثال القياسية

 

Declare   Editname namenested;

   I   number:=1;BeginSelect emp into editnameFrom deptnested where nodept=1;LoopIf (i=editname.count+1) thenExit;Elsif (editname(i)='sami') thenEditname(i):='mohammed;'

End if;i:=i+1;end loop;update deptnested set emp=editname where nodept=1;end ;

/

 

: السابق المثال شرح

الموظف اسم بتغير يقوم الى samiسوف وتبديلة بادخال قمنا وشرح mohammedالذيكمايلي الخطوات

متغير بتعريف قمنا التجميعة   editnameاوال نوع نفس نقوم namenestedمن لكي وذلكمتغير ايضا ونعرف فيه الموظفين اسماء على يحتوي والذي المؤشر وهو  Iبتخزين

. كعداد يستخدم

كمايلي وهي الموظفين اسماء الستخراج مؤشر بعمل نقوم ثم

129

Page 130: Oracle ara

 

Select emp into editname

From deptnested where nodept=1;

 

للقسم الموظفين اسماء باستخراج هنا المتغير 1يقوم في االستعالم ناتج وتخزينeditname   التجميعة نوع نفس من هو والذي

هل يختبر ثم ومن حلقة يبدأ االجراء   Iثم بانهاء قام نعم كان اذا التجميعة نهاية الى وصلتيساوي هو هل الحالي التجميعة عنصر يختبر التجميعة نهاية الى يصل لم ال   samiواذا ام

يساوي كان الى samiاذا القيمة هذه بتغير بواحد   mohammedيقوم العداد يزيد ثم ومنالعناصر جميع من االنتهاء وبعد التجميعة نهاية الى يصل ان الى جديد من يعود ثم ومن

للجدول التحديث بعمل يقوم

update deptnested set emp=editname where nodept=1;

. االجراء بانهاء يقوم ثم ومن

باالضافة- 3 :)update)appendالتحديث

توسع بعمل نقوم اوال الموظفين من المزيد اضافة اردنا لنا   extendاذا تسمح لكي للتجميعةلذلك . االجراء ونستخدم جديد عنصر باضافة

: كمايلي االجراء ويكون

 

DeclareNewname namenested;BeginSelect emp into newnameFrom deptnested where nodept=1;Newname.extend;Newname(newname.last):='khaled;'

update deptnested set emp=newname where nodept=1;end;/

الحذف- :4 

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

130

Page 131: Oracle ara

 DeclareNamedel namenested;BeginSelect emp into namedelFrom deptnested where nodept=1;Namedel.trim(1);update deptnested set emp=namedel where nodept=1;end;/

االمر باستخدام فهي الثانية الطريقة يتم delete(m)اما بل االخير من تحذف ال الطريقة وهذهوضعنا فلو حذف تريد الذي العناصر اي سابقا   m=2اختيار فعال كما الجدول المدخالت وكانتالموظف هو والذي الثاني العنصر حذف   samiسيتم

DeclareNamedel namenested;BeginSelect emp into namedelFrom deptnested where nodept=1;Namedel.delete(2);update deptnested set emp=namedel where nodept=1;end;/

  ) طريقة الطريقة بين) deleteوهذه الفوارق ابرز من varrayحيث   nested tableو   varrayهيبعكس االخير العنصر فقط تحذف ولكن عنصر اي حذف يمكنها nested tableال

  

التجميعة- :NESTED TABLEد الشيئ النوع من

التجميعة ان الحظنا فإن   varrayكما الشيء النوع من انشاءها يتم NESTED TABLEيتم. المستخدم بواسطة المعرف الشيء النوع من ايضا إنشاءه

في استخدمناه الذي المثال نفس المثال هذا لشرح نستخدم النوع    varrayسوف objectمن

ذلك : مثال

على تحتوي تجميعة �ون نك اخر حقل وفي الوظيفة مسمى على يحتوي جدول انشاء اردنا لوالوظيفة هذه موظفين لجميع وراتبة الموظف اسماء

 

الشيء انشاء هي خطوة بشرح   empobjاول قمنا عندما سابق انشاءه تم vaarayوالذيالكود : فهذا بانشاءه تقم لم كنت واذا الشيء النوع من

Create type empobj

131

Page 132: Oracle ara

as object (nameemp varchar2(50),salary number(6));/

التجميعة إنشاء هي خطوة الشيء nested tableثاني كمايلي  empobjباستخدام

 Create type empnestedobj as table of empobj;

/

132

Page 133: Oracle ara

: كمايلي الجدول بإنشاء نقوم خطوة ثالث

 Create table jobnested

)job_name varchar2(50),employee empnestedobj(nested table employee store as nestedtablesimple;

اوامر*   خالل من السابق الجدول مع sqlالتعامل

االضافة- :1

: بمايلي نقوم السابق الجدول في بيانات بادراج تقوم لكي

Insert into jobnestedValues('manager',             empnestedobj(empobj('ali',6000),empobj('sami',7000),     empobj('fahad',6500)));

 التحديث :    -1 

باستخدام التحديث كمايلي:  pl/sqlيتم

الموظف راتب لتغير وظيفتها   aliمثال مسمى في اي االداري 9000الى managerالموظف

DeclareEditsal empnestedobj;Editempobj empobj;i number:=1;BeginSelect employee into editsalFrom jobnested where job_name='manager';LoopEditempobj:=editsal(i);If (i=editsal.count) thenExit;Elsif (editempobj.nameemp='fahad') thenEditempobj.salary:=9900;Editsal(i):=editempobj;End if;i:=i+1;end loop;update jobnested set employee=editsal where job_name='manager';end;

133

Page 134: Oracle ara

/

باالضافة- 3 :-)update)appendالتحديث

DeclareEditemp empnestedobj;BeginSelect employee into editempFrom 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هناك التجميعة في صف اخر تحذف الطريقة وهذه: التجميعة في عنصر اي اختيار

declareempdel empnestedobj;beginSelect employee into empdelFrom jobnested where job_name='manager';Empdel.trim(1);update jobnested set employee=empdel where job_name='manager';end;/

االمر باستخدام فهي الثانية الطريقة يتم delete(m)اما بل االخير من تحذف ال الطريقة وهذهوضعنا فلو حذف تريد الذي العناصر اي سابقا   m=2اختيار فعال كما الجدول المدخالت وكانت

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

134

Page 135: Oracle ara

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

declareempdel empnestedobj;beginSelect employee into empdelFrom jobnested where job_name='manager';Empdel.delete(2);update jobnested set employee=empdel where job_name='manager';end;/

المراجع

1-Oracle 8 Unleashed Second Edition – Sams2-Introduction to Oracle: SQL and PL/SQL Using

Procedure Builder (Electronic Presentation)19953-Oracle8 How-To4-Teach Yourself Oracle 8 In 21 Days

135