You are on page 1of 84

‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.

com‬‬
‫‪ Structural query language‬لغة االستعالم البنيوية ‪SQL‬‬
‫‪Relational Data Base‬‬ ‫قواعد البيانات العالئقية أوراكل‬
‫يمكن تقسيم عبارات لغة ‪ SQL‬بالشكل التالي ‪:‬‬

‫‪Statement‬‬ ‫وصف ‪Description‬‬


‫‪Select‬‬ ‫استرجاع البيانات من قاعدة البيانات‬
‫‪Insert‬‬ ‫‪ DML _ Data manipulation Language‬وتعرف بلغة معالجة البيانات تستخدم‬
‫‪Update‬‬ ‫إلدخال صفوف جديدة أو تغيير في صفوف موجودة وحذف صفوف غير ضرورية من‬
‫‪Delete‬‬ ‫جدول في قاعدة البيانات‬
‫‪Create‬‬
‫‪Alter‬‬
‫‪ DDL _ Data definition language‬وتعرف بلغة تعريف البيانات )التعامل مع‬
‫‪Drop‬‬
‫الكائنات ( وتستخدم لتثبيت و تغيير تركيبات أو أبنية البيانات في الجدول بشكل عام‬
‫‪Rename‬‬
‫‪Truncate‬‬
‫‪Grant‬‬ ‫‪ DCL _ Data control language‬تعرف بلغة التحكم بالبيانات وعن طريقھا يتم‬
‫‪Revoke‬‬ ‫تحديد السماحيات بالدخول على قاعدة البيانات أو التغيير في بنيتھا‬

‫عبارة االختيار ‪ Select‬األساسية )‪: (Basic select statement‬‬


‫الصيغة العامة ‪:‬‬
‫}‪Select {*, Column name , ----‬‬
‫‪From Table name:‬‬
‫‪Examples :‬‬ ‫أمثلة‬
‫* ‪1) 1. SQL> select‬‬ ‫‪ (1‬اختيار كافة األعمدة‬
‫‪2.‬‬ ‫; ‪from emp‬‬ ‫‪Select all column‬‬
‫‪2) 1.SQL> Select deptno ,dname ,loc‬‬ ‫‪ (2‬اختيار بعض األعمدة بأسمائھا‬
‫‪2.‬‬ ‫; ‪from emp‬‬ ‫‪Selecting specific column‬‬
‫‪Arithmetic Operators‬‬ ‫‪ (3‬استخدام التعابير الحسابية‬
‫‪3) 1. SQL> select ename,sal,sal+300‬‬
‫‪2.‬‬ ‫;‪from emp‬‬
‫جدول الرموز الحسابية ‪:‬‬
‫الرمز ‪Operator‬‬ ‫وصف ‪Description‬‬
‫‪+‬‬ ‫‪Add‬‬
‫‪-‬‬ ‫‪Subtract‬‬
‫*‬ ‫‪Multiply‬‬
‫‪/‬‬ ‫‪Divide‬‬

‫أسبقية العمليات الحسابية ) الضرب ‪ -‬القسمة – الجمع الطرح (‬


‫‪) Using Parentheses‬استخدام األقواس (‪ :‬يمكن استخدام األقواس لتحديد أسبقية العملية الحسابية‬
‫مثالً ‪ 12*(sal+100)=1260 :‬تختلف عن ‪ 12*sal+100=160‬وذلك باعتبار ‪sal =5‬‬
‫القيمة ‪ NULL‬أي عدم الوج‪5‬ود أو باطل‪5‬ة ‪ :‬وھ‪U‬ي قيم‪U‬ة غي‪U‬ر موج‪U‬ودة وغي‪U‬ر مح‪U‬ددة ‪ Unassigned‬وغي‪U‬ر معروف‪U‬ة ‪ Unknown‬وغي‪U‬ر‬
‫قابلة لالستعمال و التطبيق ‪ Inapplicable‬وھي ال تشبه الصفر أو الفراغ وأي عملي‪U‬ة ح‪U‬سابية عل‪U‬ى القيم‪U‬ة ‪ NULL‬تن‪U‬تج القيم‪U‬ة ‪NULL‬‬
‫نفسھا ‪.‬‬
‫‪Using column aliases‬‬ ‫‪ (4‬استخدام أسماء مستعارة لألعمدة‬
‫‪ -‬إما أن نستعمل ‪ AS‬أو نكتب االسم القديم واالسم الجديد مباشرة بعده و بينھما فراغ ‪:‬‬
‫‪4) 1.SQL>select ename As name ,sal salary‬‬
‫‪2.‬‬ ‫;‪from emp‬‬
‫‪-‬أو نضع االسم الجديد ضمن فواصل علوية و خاصة في اللغة العربية كما يلي ‪:‬‬
‫"‪1.SQL>select ename "name" , sal*12 "annual salary‬‬
‫‪2.‬‬ ‫;‪from emp‬‬
‫‪-1-‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬
‫‪Using Literal Character String‬‬ ‫‪ (5‬استخدام السالسل الحرفية البسيطة‬
‫يمكننا دمج السالسل الحرفية لحقلين أو أكثر ووضع فراغات بينھا باستخدام الرمز || كما يلي ‪:‬‬
‫"‪5) 1.SQL>select ename ||' '|| job as "Employee Details‬‬
‫‪2.‬‬ ‫;‪from emp‬‬ ‫وفي ھذه الحالة يجب استخدام ‪ AS‬حتماً‬
‫"‪1.SQL>select ename || job as "Employees‬‬ ‫كما يمكننا دمج الصفوف بدون فراغات‬
‫‪2.‬‬ ‫;‪from emp‬‬
‫‪Duplicate Rows‬‬ ‫‪(6‬الصفوف المزدوجة )المكررة(‬
‫عند عرض الجدول يقوم البرنامج بعرض كل الصفوف والصفوف المكررة يمكن استخدام عبارة ‪ Distinct‬إلزالة الصفوف المكررة‬
‫‪6) 1.SQL>select Distinct deptno‬‬ ‫إزالة الصفوف المكررة‬
‫‪2.‬‬ ‫;‪from emp‬‬
‫وصف بنية الجدول ‪: Displaying Table Structure‬‬
‫يمكننا وصف بنية الجدول باستخدام العبارة ‪ DESCRIBE‬مع اسم الجدول ويمكن اختصار العبارة بكتابة ‪ DESC‬والذي يعطينا وص‪U‬ف‬
‫‪SQL> Desc dept‬‬ ‫للجدول وألنواع البيانات في الحقول والقيم الباطلة أو الفارغة كما يلي ‪:‬‬

‫‪SOME DATA TYPE‬‬ ‫بعض أنواع البيانات ‪:‬‬


‫)‪ : NUMBER (P,S‬النوع العددي حيث ‪ P‬أكبر طول رقم قيل الفاصلة العشرية و ‪ S‬أكبرطول رقم بعد الفاصلة العشرية ‪.‬‬
‫)‪ : VARCAR(S‬نوع بيانات حرفي أو رمزي أكبر عدد لحروفه ‪. S‬‬
‫‪ : DATE‬بيانات من النوع تاريخ ويأخذ أكبر قيمة له ‪. 31/ December /9999‬‬
‫)‪ : CHAR(S‬بيانات نوع حرفي تأخذ طول ثابت ‪. S‬‬

‫‪SQL*PLUS EDITING COMMANDS‬‬ ‫أوامر التحرير في لغة الــ ‪SQL PLUS‬‬

‫‪ .I‬األمر ‪ APPEND‬وبعده نص )يمكن اختصاره بحرف ‪ : (A‬يقوم ھذا األمر بإضافة النص إلى آخر السطر الح‪U‬الي أو ال‪U‬سطر األخي‪U‬ر‬
‫في عبارة ‪ SQL‬السابقة بمعنى آخر في حالة وضع عبارة ناقصة وتنفيذھا يمكن إكمالھا بعد التنفيذ باستخدام األمر ‪. A‬‬
‫‪ .II‬األمر ‪) CHANGE‬اختصاراً ‪ : (C‬كما يلي ‪ C /old text/new text‬يق‪U‬وم بتغيي‪U‬ر ال‪U‬نص ‪ OLD‬إل‪U‬ى ال‪U‬نص ‪ NEW‬ف‪U‬ي عب‪U‬ارة‬
‫‪SQL‬األخيرة ‪.‬‬
‫‪ .III‬األمر ‪ CHNGE /text/‬أو ‪ : C /text/‬يحذف النص ‪ text‬نھائياً من عبارة ‪ SQL‬األخيرة أي يستبدلھا بفراغ ‪.‬‬
‫‪ .IV‬األم‪5‬ر ‪ CLEAR BUFFER‬أو اخت‪5‬صارا ‪ : CL BUFF‬يح‪U‬ذف ك‪U‬ل ال‪U‬سطور أو التعليم‪U‬ات الموج‪U‬ودة ض‪U‬من الح‪U‬اجز أو الم‪U‬صد‬
‫) الـ ‪.( Buffer‬‬
‫‪ .V‬األمر ‪ :DEL‬يقوم بحذف السطر الحالي أي السطر األخير في عبارة ‪ SQL‬األخيرة ‪.‬‬
‫‪ .VI‬األمر ‪ RUN‬أو ‪: R‬يقوم ھذا األمر بعرض وتشغيل عبارة ‪ SQL‬األخيرة والموجودة ضمن المصد الـ ‪. Buffer‬‬

‫‪SQL*PLUS FILE COMMANDS‬‬ ‫أوامر الملفات في لغة الــ ‪SQL PLUS‬‬

‫‪ .i‬األمر ‪ SAVE Filename‬أو ‪ : SAV Filename‬يق‪U‬وم بحف‪U‬ظ تعليم‪U‬ة ال‪U‬ـ ‪ SQL‬األخي‪U‬رة ض‪U‬من المل‪U‬ف الم‪U‬سمى ؟ وال‪U‬ذي يمك‪U‬ن‬
‫استدعاؤه وتنفيذ التعليمة ضمنه باستخدام األمر التالي ‪. GET‬‬
‫‪ .ii‬األمر ‪ : GET Filename‬يقوم باستدعاء تعليمة الـ ‪ SQL‬المخزنة ضمن الملف النصي المذكور ‪.‬‬
‫‪ .iii‬األمر ‪ START Filename‬أو ‪ : STA Filename‬يقوم مباش‪U‬رة بتنفي‪U‬ذ تعليم‪U‬ة ال‪U‬ـ ‪ SQL‬المخزن‪U‬ة ف‪U‬ي المل‪U‬ف الم‪U‬ذكور ويمك‪U‬ن‬
‫االستعاضة عنه باألمر ‪. @filename‬‬
‫‪ .iv‬األمر ‪ EDIT‬أو اختصارا ‪ : ED‬يقوم بتحرير آخر تعليمة ‪ SQL‬ضمن محرر نصوص المفك‪U‬رة عن‪U‬دھا يمك‪U‬ن إص‪U‬الحھا ث‪U‬م حفظھ‪U‬ا‬
‫وتنفيذھا من جديد باستخدام األمر ‪. R‬‬
‫‪ .v‬األم‪5‬ر ‪ EDIT Filename‬أو ‪ : ED Filename‬يق‪U‬وم بتحري‪U‬ر المل‪U‬ف ال‪U‬ذي قمن‪U‬ا بحف‪U‬ظ تعليم‪U‬ة ‪ SQL‬ض‪U‬منه م‪U‬سبقا ً ض‪U‬من مح‪U‬رر‬
‫نصوص ‪.‬‬
‫‪.vi‬األمر ‪ SPOOL Filename‬أو اختصاراً ‪ : SPO Filename‬يقوم ھذا األمر بتخزين نتائج االستفسار في ملف ‪ ،‬بإضافة ‪OFF‬‬
‫إل‪U‬ى األم‪U‬ر فإن‪U‬ه يق‪U‬وم ب‪U‬إغالق المل‪U‬ف ‪ ،‬أم‪U‬ا بإض‪U‬افة ‪ OUT‬فإن‪U‬ه يق‪U‬وم ب‪U‬إغالق المل‪U‬ف وإرس‪U‬ال النت‪U‬ائج إل‪U‬ى طابع‪U‬ة النظ‪U‬ام ‪SPO .‬‬
‫‪ filename|OFF‬أو ‪. SPO filename|out‬‬
‫‪ .vii‬األمر ‪ EXIT‬يقوم بالخروج من واجھة الـ ‪. SQL*PLUS‬‬

‫‪-2-‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
: (Were Clause ) WHERE ‫عبارة‬
LIMITING ROWS SELECTED ‫تحديد الصفوف المختارة‬
Restrict the rows returned by using the where clause _ Where ‫تحديد الصفوف التي تظھر باستخدام عبارة‬
SQL>select Distinct ------- ‫الصيغة العامة‬
From table name
Where conditions ;
SQL>select ename , job , deptno : ‫مثال‬
from emp
Where job= 'clerk' ;

COMPARISON OPERATORS ‫رموز )عوامل( المقارنة‬

Example :
‫ المعنى‬Meaning Operator
SQL>Select ename , sal , comm ‫ يساوي‬Equal to =
From emp ‫ أكبر من‬Greater than >
Where sal<=comm ; ‫ أكبر أو يساوي‬Greater than or equal to >=
‫ أقل من‬Less than <
‫ أقل أو يساوي‬Less than or equal to <=
‫ ال يساوي‬Not equal to <>

OTHER COMPARISON OPERATORS ‫عوامل مقارنة أخرى‬

Examples : ‫ المعنى‬Meaning Operator


‫ بين قيمتين‬Between tow values Between…and…
SQL>Select empno , enam , mgr, deptno Match any of a list of values
From emp IN (list)
List ‫يطابق مع كل قيمة ضمن القائمة‬
Where ename in ('ford',allen') ;
Mach a character pattern
Or Where sal between 1000 and 1500; LIKE
‫يطابق نموذج الحرف‬
Or Where mgr in (7902,7566,7788) ;
‫ كقيمة باطلة‬Is a null value IS NULL
Or Where mgr is null ;

Using The Like Operator LIKE ‫استخدامات معامل‬

Operator ‫ المعنى والتوصيف‬Meaning and Description


(per cent) Represent any sequence of zero or more characters
%
‫تمثل أي سلسلة مكونة من عدة أحرف أو وال حرف‬
(under score) Represent any single characters
_
‫تمثل أي حرف وحيد‬

Example :
SQL>select ename , hiredate
From emp
Where hiredate like '%81' ;
Or Where ename like '_ A%' ;

-3-
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

LOGICAL OPERATOTS ‫المعامالت المنطقية‬

Operator ‫المعنى‬Meaning
Returns true if both component condition is true
AND ً ‫يعيد قيمة صحيحة عندما يكون كل من الشرطين صحيحا‬
Returns true if either component condition is true
OR ً ‫يعيد قيمة صحيحة عندما يكون أحد الشرطين صحيحا‬
Returns true if the following condition is false
NOT
‫يعيد قيمة صحيحة عندما تكون العبارة خاطئة‬

AND true table AND ‫جدول الحقيقة للمعامل‬


Example : Unknown False True AND
SQL>select * from emp Unknown False True True
Where sal >= 100 False False False False
AND Job='clerk' ;
Unknown False Unknown Unknown
OR true table OR ‫جدول الحقيقة للمعامل‬
Example : Unknown False True OR
SQL>select * from emp True True True True
Where sal >= 100 Unknown False True False
OR Job='clerk' ; Unknown Unknown True Unknown
NOT true table NOT ‫جدول الحقيقة للمعامل‬
Example : Unknown False True
SQL>select * from emp NOT
Unknown True False
Where Job is NOT in ( 'clerk','manager' );
Rules of Precedence ‫قوانين أسبقية المعامالت‬
Example : ‫ المعامل‬Operator ‫رقم األولوية‬
SQL>select ename,job,sal All comparison operators
From emp 1
‫كافة معامالت المقارنة‬
Where Job = 'salesman' NOT 2
Or Job = 'president'
AND 3
And sal > 1500 ;
OR 4
: ( Order by Clause) Order By ‫عبارة‬
Sort rows with the order by clause Order By ‫اختيار الصفوف باستخدام عبارة‬
. Select ‫ في آخر عبارة االختيار‬Order By ‫تأتي عبارة‬
SQL>select ename , job , hiredate : ‫مثال‬
from emp
Order By hiredate ;
‫ بترتيب طريقة ظھور الصفوف المسترجعة‬Order By ‫تقوم عبارة‬
Order By specifies the order in witch the retrieved rows are displayed .if order by clause not
used the sort order is undefined and the Oracle server may not fetch rows in the same order for
the same query twice .
‫ة‬U‫س نتيج‬U‫ادة نف‬U‫ل بإع‬U‫دم أوراك‬U‫ تصبح طريقة الترتيب غير محددة وربما ال يقوم مخ‬Order By ‫إذا لم تستخدم عبارة الترتيب‬
. ‫االستفسار بنفس الترتيب مرتين‬
Sorting with descending order :(‫ )الترتيب بشكل تنازلي‬Order By ‫ مع عبارة الترتيب‬DESC ‫استخدام‬
‫ يصبح الترتيب‬Order by ‫ مع عبارة‬DESC ‫ بترتيب الصفوف بشكل تصاعدي وباستخدام‬Order by ‫افتراضيا ً تقوم عبارة‬
. ‫بشكل تنازلي‬
The default sort order is ascending . ‫طريقة الترتيب االفتراضية ھي بشكل تصاعدي‬
-4-
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

SQL>select ename , job , hiredate : ‫مثال‬


from emp
Order by hiredate DESC ;
Notices :
Numeric values are displayed with the lowest values first ‫تظھر القيم الرقمية بدءاً بأقل قيمة ثم األكبر واألكبر‬
Date values are displayed with the earliest values first ً‫تظھر قيم التواريخ حسب أبكر قيمة أوال‬
Character values are displayed in alphabetical order ‫تظھر القيم النصية حسب التسلسل األبجدي‬
Null values are displayed last for ascending sequences ‫تظھر القيم الفارغة أخيراً في الترتيبات التصاعدية‬
and first for descending sequences ‫وأوالً في الترتيبات التنازلية‬

Sorting by Multiple columns ‫الترتيب وفق حقول متعددة أي حسب أكثر من عمود‬

SQL>select ename , deptno , sal : ‫مثال‬


from emp
Order by deptno , sal DESC ;
You can sort by a column that is not in the select list . ‫يمكنك الترتيب وفق عمود غير موجود ضمن قائمة الحقول المختارة‬
The sort limit is the number of columns in the given table .‫يمكن الترتيب وفق عدد حقول موافق لعدد حقول الجدول المرتب‬

SQL Functions SQL ‫توابع‬


ً‫ التابعة ألوراكل حصرا‬SQL ‫معظم الدوال التالية مخصصة لنسخة الـ‬
Most of the functions are specific to Oracle version of SQL .
Two Types of SQL Functions SQL ‫نوعي دوال الـ‬
1-Single – Row Functions ‫ توابع وحيدة الصف‬.1
2-Multiple – Row Functions ‫ توابع متعددة الصفوف‬.2
‫ تعمل ھذه التوابع بصف واحد فقط وتعيد نتيجة واحدة لكل صف‬: ‫ التوابع وحيدة الصف‬.1
1-Single–Row Functions : These functions operate on single row only and return one
result per row.
. ‫ وھي تركيب مجموعات من الصفوف تعطي نتيجة واحدة لكل مجموعة صفوف‬: ‫ التوابع متعددة الصفوف‬.2
2- Multiple – Row Functions :these functions multiplate groups of rows to give one
result per group of rows .
Character Functions ‫الدوال الحرفية‬
1-Case Conversion Functions : ( Lower , Upper , Initcap ) ‫ دوال تحويل الحالة‬.1
2-Character Manipulation Functions :( Concat , Substr ,Length , Instr, Lpad )
‫ دوال معالجة األحرف‬.2
Function ‫ الھدف‬Purpose
Convert alpha character values to lowercase ‫يقوم بتحويل الرموز‬
Lower (‫)اسم العمود‬
‫واألحرف إلى أحرف صغيرة‬
Convert alpha character values to uppercase ‫يقوم بتحويل األحرف‬
Upper(‫)اسم العمود‬
‫إلى أحرف كبيرة‬
Convert alpha character values to uppercase for the first letter
Initcap(‫)اسم العمود‬ of each word and all other letters in lowercase ‫يقوم بتحويل الحرف‬
‫األول من كل كلمة على حرف كبير وبقية األحرف من كل كلمة صغيرة‬

-5-
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪Function‬‬ ‫‪ Purpose‬الھدف‬
‫يقوم ‪Concatenates the first character value to the second character value‬‬
‫‪ , Expre..‬اسم العمود‪Concat(1‬‬
‫بدمج التعبير في العمود األول بسلسلة واحدة مع التعبير في العمود الثاني ويمكن إضافة نص‬
‫) اسم العمود‪…,2‬‬ ‫وھو مرادف للرمز || الذي رأيناه سابقاً‬
‫ابتداء من الحرف رقم ‪ 6‬وينتھي بعد ‪ 4‬حروف بتعبير آخر‬ ‫ً‬ ‫يقوم ھذا التابع بالقص‬
‫)‪Substr(column,6,4‬‬ ‫)‪ Substr(column,start,count‬إذا لم يحدد العدد أي القيمة‪Count‬‬
‫يعطينا األحرف بدءاً من‪ start‬حتى نھاية الكلمة‬
‫‪ Return the number of character in value‬يعيد عدد أحرف كل قيمة من قيم الحقل‬
‫)‪Length(column‬‬ ‫المحدد ‪column‬‬
‫يقوم بالبحث عن حرف أو كلمة ضمن سلسلة أحرف يمثل ‪ column‬اسم الحقل و‪ set‬الحرف أو‬
‫مجموعة األحرف المراد البحث عنھا ويجب أن تكون بين فاصلتين علويتين و‪ start‬رقم الحرف‬
‫)‪Instr(column,'set',start,n‬‬ ‫الذي يبدأ منه البحث و‪ n‬رقم التكرار ألننا قد نقوم بالبحث عن التكرار الثاني أو الرابع للحرف أو‬
‫الكلمة‬
‫يقوم بإضافة أحرف أو رموز إلى يسار الكلمة يمثل ‪ column‬اسم الحقل و ‪ length‬طول‬
‫)'‪Lpad(column,length,'set‬‬ ‫السلسلة الحرفية المطلوب بعد اإلضافة و‪ set‬الحرف أو مجموعة األحرف المراد إضافتھا‬
‫يقوم بإضافة أحرف أو رموز إلى يمين الكلمة يمثل ‪ column‬اسم الحقل و ‪ length‬طول‬
‫)'‪Rpad(column,length,'set‬‬ ‫السلسلة الحرفية المطلوب بعد اإلضافة و‪ set‬الحرف أو مجموعة األحرف المراد إضافتھا‬
‫مالحظة ‪ :‬يجب التمييز بين األحرف الكبيرة والصغيرة ضمن التوابع السابقة أي في حالة البحث عن حرف صغير فإننا ال نجده‬
‫إذا كان بھيئة حرف كبير ‪.‬‬
‫|| )‪SQL> select 'the job title for' || Initcap(ename‬‬ ‫مثال ‪: 1‬‬
‫‪'is' || Lower(Job) As Employee Details‬‬
‫; ‪from emp‬‬

‫)'‪SQL> select Lpad(ename,10,'F')||Rpad(ename,10,'J‬‬ ‫مثال ‪: 2‬‬


‫‪As Name‬‬
‫; ‪from emp‬‬

‫)‪SQL>select ename , Instr(ename,'E',1,1‬‬ ‫مثال ‪: 1‬‬


‫‪As Number‬‬
‫; ‪from emp‬‬
‫‪ 1‬األولى تمثل رقم الحرف الذي يبدأ منه البحث وھنا يبدأ البحث من الحرف األول و ‪ 1‬الثانية تعبر عن رقم التكرار للحرف ويعيد التابع‬
‫رقم مكان توضع الحرف المطلوب أو الكلمة المطلوبة والموضوعة ضمن فواصل علوية ‪.‬‬

‫‪Using The Round Function‬‬ ‫استخدام دالة التدوير )التقريب (‬


‫‪The round function rounds the column expression or value to n decimal places .‬‬
‫تقوم دالة التدوير بتقريب العدد إلى ‪ n‬فاصلة عشرية أو عدد عشري ‪.‬‬
‫) ‪SQL> select Round ( 45.923 , 2) , Round( 45.923 , -1‬‬ ‫مثال ‪: 1‬‬
‫; ‪from dual‬‬
‫‪Round ( 45.923 , 0) = 46 , Round ( 45.923 , 2) = 45.92 , Round ( 45.923 , -1) = 50 ,‬‬
‫‪Round ( 499.923 , -2) = 500 , Round ( 45.923 , 1) = 45.9‬‬
‫‪If the second argument is 0 or is missing the value is rounded to zero decimal places . If the‬‬
‫‪second argument is 2 the value is rounded to two decimal places . If the second argument is -2‬‬
‫‪the value is rounded to two decimal places to the left .‬‬
‫إذا كان المعامل الثاني لدالة التدوير مساويا ً الصفر أو غير موجود يتم حذف األرقام العشرية ويتم التقريب إلى أول رقم صحيح‬
‫وإذا كان المعامل الثاني لدالة التدوير مساويا ً للعدد ‪ 2‬يتم تقريب الرقم إل‪U‬ى أق‪U‬رب رقم‪U‬ين بع‪U‬د الفاص‪U‬لة وف‪U‬ي حال‪U‬ة ك‪U‬ون المعام‪U‬ل‬
‫الثاني مساويا ً لـ ‪ -2‬يتم تقريب الرقم منزلتين عشريتين إلى اليسار ‪.‬‬

‫‪-6-‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Using The TRUNC Function ( ‫استخدام دالة القطع )البتر‬


The TRUNC function truncates the column expression or value to n decimal places .
. ‫ مرتبة أو فاصلة عشرية‬n ‫تقوم دالة القطع بقطع العدد إلى‬
SQL> select TRUNC ( 45.923 , 2) , TRUNC ( 45.923 , -1 ) : 1 ‫مثال‬
from dual ;
TRUNC ( 45.923) = 45 , TRUNC ( 45.923 , 2) = 45.92 , TRUNC ( 45.923 , -1) = 40 ,
TRUNC ( 499.923 , -2) = 400 , Round ( 45.923 , 1) = 45.9
The TRUNC function works with arguments similar to those of the Round function . If the
second argument is 0 or is missing the value is truncate to zero decimal places . If the second
argument is 2 the value is truncate to two decimal places . If the second argument is -2 the value
is truncate to two decimal places to the left .
‫ود‬U‫ر موج‬U‫صفر أو غي‬U‫ساويا ً ال‬U‫تعمل دالة القطع تعمل نفس عمل دالة التدوير مع المعامالت إذا كان المعامل الثاني لدالة القطع م‬
‫ي‬U‫لة وف‬U‫د الفاص‬U‫ين بع‬U‫ يتم قطع الرقم إلى أول رقم‬2 ‫يتم بتر األرقام العشرية وإذا كان المعامل الثاني لدالة التدوير مساويا ً للعدد‬
. ‫ يتم القطع منزلتين عشريتين إلى اليسار‬-2 ‫حالة كون المعامل الثاني مساويا ً لـ‬
Using The MOD Function (MOD) ‫استخدام دالة باقي القسمة‬
The MOD function finds the remainder of value1 divided by value2 .
. 2‫ على القيمة‬1‫تقوم دالة باقي القسمة بإيجاد باقي قسمة القيمة‬
SQL> select ename , sal , comm, MOD(sal , comm) : 1 ‫مثال‬
from dual
Where job = 'SALESMAN' ;

Working with Dates (Dates) ‫العمل مع التواريخ‬


Oracle stores dates in an internal numeric format : century , year , month , day , hours ,minutes
, seconds . ‫ ثواني‬، ‫ دقائق‬، ‫ ساعات‬، ‫ يوم‬، ‫ شھر‬، ‫ سنة‬،‫ قرن‬: ‫يخزن أوراكل التواريخ بشكل عددي داخلي‬
The default date format is DD-MON-YY DD-MON-YY ‫الشكل االفتراضي للتاريخ ھو‬
SYSDATE is a function returning current date an d time . ‫ إجراء يعيد التاريخ والوقت الحالي‬SYSDATE
‫د‬U‫ي واح‬U‫ل حرف‬U‫ى حق‬U‫وي عل‬U‫ارغ يحت‬U‫ي ف‬U‫دول وھم‬U‫و ج‬U‫راء وھ‬U‫ذا اإلج‬U‫ة ھ‬U‫ار نتيج‬U‫ إلظھ‬DUAL ‫سنقوم باستخدام جدول يسمى‬
‫ستخدم‬UU‫ل الم‬UU‫ن قب‬UU‫شأ م‬UU‫و من‬UU‫دة وھ‬UU‫ة وحي‬UU‫ادة قيم‬UU‫دول إلع‬UU‫ذا الج‬UU‫ستخدم ھ‬UU‫ ي‬X ‫ي‬UU‫دة ھ‬UU‫ة وحي‬UU‫ى قيم‬UU‫وي عل‬UU‫ويحت‬. dummy ‫م‬UU‫باس‬
SYSTEM
Valid oracle dates are between January 1.4712 B.C and December 31.9999 A.D
‫د أو‬U‫ل الجدي‬U‫م للحق‬U‫ار اس‬U‫ واختي‬select ‫ارة‬U‫تخدام عب‬U‫ك باس‬U‫دول وذل‬U‫ع أي ج‬U‫ م‬SYSDATE ‫راء‬U‫ابع أو اإلج‬U‫تخدام الت‬U‫يمكنك اس‬
SQL> select SYSDATE today from emp ; ‫بدون اسم‬
SQL> select SYSDATE from dual ; ‫أو‬
Arithmetic With Dates ‫العمليات الحسابية على التواريخ‬
: ‫تشمل العمليات التالية‬
-Add or subtract a number to or from a date for ‫إضافة أو حذف رقم من أو إلى تاريخ إلنتاج تاريخ‬
a resultant date value
-Subtract two dates to find the number of days ‫طرح تاريخين إليجاد عدد األيام بينھما‬
between those dates .
-Add hours to a date by dividing the number of 24 ‫إضافة ساعات للتاريخ بتقسيم عدد الساعات على‬
hours by 24
‫يمكنك إنجاز العمليات الحسابية على التاريخ باستخدام المعامالت الحسابية كالجمع والطرح ألن التاريخ يخزن بشكل رقم كما يمكنك‬
. ‫إضافة أو طرح رقم ثابت من وإلى التاريخ‬
You can perform calculation using arithmetic operators such as additional and subtraction . You can
add and subtract number constants as well as dates .
You can perform the following operations:

-7-
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪Operation‬العملية‬ ‫النتيجة‪Result‬‬ ‫الوصف‪Description‬‬


‫‪Date + number‬‬ ‫‪Date‬‬ ‫إضافة عدد أيام إلى التاريخ‬
‫‪Date - number‬‬ ‫‪Date‬‬ ‫طرح عدة أيام من التاريخ‬
‫‪Date - Date‬‬ ‫‪Number of days‬‬ ‫طرح تاريخ من آخر‬
‫‪Date + number/24‬‬ ‫‪Date‬‬ ‫إضافة عدد من الساعات إلى التاريخ‬
‫‪SQL> select ename , (sysdate-hiredate)/ 7 weeks‬‬ ‫مثال ‪: 1‬‬
‫‪from emp‬‬
‫; ‪Where deptno = 10‬‬
‫يظھر ھذا المثال أسماء وعدد أسابيع العمل لجميع الموظفين أو العمال في القسم رقم ‪ 10‬ألن الفرق بين التاريخ الحالي الناتج عن‬
‫التابع ‪ Sysdate‬وتاريخ االستخدام للعامل ‪ Hiredate‬يعطي المدة الزمنية باأليام وبالقسمة على ‪ 7‬تكون النتيجة باألسابيع ‪.‬‬
‫‪DATE FUNCTIONS‬‬
‫‪FUNCTION‬‬ ‫‪DESCRIPTION‬‬
‫)‪MONTHS_BETWEEN(D1,D2‬‬ ‫عدد األشھر بين تاريخين ‪ D1‬و ‪D2‬‬
‫)‪ADD_MONTHS(D1,n‬‬ ‫إضافة ‪ n‬شھر إلى التاريخ ‪D1‬‬
‫)'‪NEXT_DAY(DATE ,'CH‬‬ ‫يعطينا تاريخ أول يوم اسمه ‪ CH‬بعد التاريخ ‪Date‬‬
‫)‪LAST_DAY(DATE‬‬ ‫يعطي تاريخ آخر يوم من الشھر المذكور‬
‫في حالة ‪ Day‬يقوم التابع بتقريب التاريخ إلى تاريخ أقرب يوم أحد من‬
‫'‪ROUND(DATE , 'DAY' or 'MONTH‬‬ ‫التاريخ الحالي وفي حالة ‪ Month‬يقوم بتقريب التاريخ إلى تاريخ‬
‫) '‪or 'YEAR‬‬ ‫أقرب أول شھر من التاريخ الحالي أما في حالة ‪ Year‬فإنه يقرب‬
‫التاريخ إلى أقرب أول يوم من أقرب عام‬
‫في حالة ‪ Day‬يقوم التابع بتقريب التاريخ إلى تاريخ أقرب يوم أحد قبل‬
‫'‪TRUNC( DATE , 'DAY' or 'MONTH‬‬ ‫التاريخ الحالي وفي حالة ‪ Month‬يقوم بتقريب التاريخ إلى تاريخ‬
‫) '‪or 'YEAR‬‬ ‫أقرب أول شھر قبل التاريخ الحالي أما في حالة ‪ Year‬فإنه يقرب‬
‫التاريخ إلى تاريخ بداية العام الحالي‬

‫أمثلة عن استخدام توابع التواريخ ‪:‬‬


‫‪SQL> select empno , hiredate,‬‬ ‫مثال ‪: 1‬‬
‫‪Months_between(sysdate,hiredate) Tenure,‬‬
‫‪Add_months(hiredate,6) Review ,‬‬
‫)‪Next_day(hiredate,'Friday') , Last_day(hiredate‬‬
‫‪from emp‬‬
‫; ‪Where Months_between(sysdate,hiredate )<200‬‬
‫‪For all employees employed for fewer than 200 month .display the employee number ,hiredate , number‬‬
‫‪of months employed , six-month review date , first Friday after hire date ,and last day of the month‬‬
‫‪when hired .‬‬
‫من أجل جميع الموظفين الذين تم استخدامھم ألقل من ‪ 200‬شھر قم بإظھار رقم الموظف وتاريخ االستخدام )التوظيف( وعدد أشھر‬
‫االستخدام و تاريخ التوظيف مضاف إليه ‪ 6‬أشھر وتاريخ أول يوم جمعة بعد االستخدام وتاريخ آخر يوم من شھر االستخدام‬
‫‪ROUND('25-JUL-95' , 'MONTH' ) →→→→ 01-AUG-95‬‬ ‫أمثلة ‪:‬‬
‫‪ROUND('25-JUL-95' , 'YEAR' ) →→→→→ 01-JAN-96‬‬
‫‪TRUNC('25-JUL-95' , 'MONTH' ) →→→→ 01-JUL-95‬‬
‫‪TRUNC ('25-JUL-95' , 'YEAR' ) →→→→→ 01-JAN-95‬‬

‫‪SQL> select empno , hiredate,‬‬ ‫‪EMPNO HIREDATE ROUND(HI TRUNC(HI‬‬ ‫مثال ‪:‬‬
‫‪Round (hiredate , 'MONTH') , ---------- --------------‬‬ ‫‪--------‬‬ ‫‪------‬‬
‫)'‪Trunc ( hiredate , 'MONTH‬‬ ‫‪82/01/01 82/02/01‬‬ ‫‪82/01/23‬‬ ‫‪7934‬‬
‫‪from emp‬‬
‫; '‪Where hiredate LIKE '%82‬‬
‫‪Compare the hire dates for all employees who started in 1982 display the employee number ,hire date ,‬‬
‫‪and month started using the ROUND and TRUNC functions.‬‬

‫‪-8-‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

CONVERSION FUNCTIONS ‫توابع التحويل‬


Implicit Datatype Conversion ‫التحويل الضمني ألنواع البيانات‬

For assignments the Oracle can automatically convert the following :


: ‫من أجل المھام يستطيع أوراكل تحويل ما يلي بشكل أوتوماتيكي‬
FROM TO
‫ محرفي‬VARCHAR2 or CHAR ‫رقم‬ NUMBER
‫ محرفي‬VARCHAR2 or CHAR ‫تاريخ‬ DATE
‫رقم‬ NUMBER ‫ محرفي‬VARCHAR2
‫تاريخ‬ DATE ‫ محرفي‬VARCHAR2
‫ محرف أما العرض األعظمي‬2000 CHAR ‫أن العرض األعظمي لعمود من النمط‬VARCHAR2 ‫ و‬CHAR ‫الفرق بين‬
. ‫ محرف‬4000 ‫ فيصل إلى‬VARCHAR2 ‫لعمود من النمط‬
For expression evaluation the Oracle Server can automatically convert the following :
: ‫من أجل عبارة التقدير يستطيع أوراكل تحويل ما يلي بشكل أوتوماتيكي‬
FROM TO
‫ محرفي‬VARCHAR2 or CHAR ‫رقم‬ NUMBER
‫ محرفي‬VARCHAR2 or CHAR ‫تاريخ‬ DATE

NOTE: CHAR to NUMBER conversions succeed only if the character string represents a valid number
.
CHAR to DATE conversions succeed only if the character string has the default format DD-MON-YY
‫يتم التحويل التلقائي من المحارف إلى األرقام بنجاح في حالة كون المحارف بصورة أرقام كما يتم التحويل التلقائي الضمني من المحارف‬
. DD-MON-YY ‫إلى التاريخ عندما يكون لسلسلة المحارف الشكل االفتراضي للتاريخ‬

Explicit Datatype Conversion ‫التحويل الصريح ألنواع البيانات‬


SQL provides three functions to convert a value from one datatype to another :
: ‫ ثالثة دوال تحويل ألنواع البيانات وھي‬SQL.‫تحوي لغة الـ‬

FUNCTION‫الدالة‬ Purpose ‫الھدف‬


Converts number or date value to a VARCHAR2 character string
TO_CHAR(number or date ,'fmt') with format model 'fmt'
'fmt' ‫تحويل األرقام أو التواريخ إلى سلسلة محرفية من الشكل‬
Converts a character string containing digits to a number with the
TO_NUMBER(char , 'fmt' ) optional format model 'fmt'
'fmt' ‫تحويل السلسلة المحرفية التي تحتوي أرقام إلى رقم من الشكل‬
Converts a character string representing a date to a date value
according to the fmt specified ( If fmt is omitted format is DD-
TO_DATE(char , 'fmt' ) MON-YY)
‫ ) بحيث‬fmt ‫تحويل السلسلة الحرفية التي تمثل التاريخ إلى قيمة تاريخ حسب الشكل‬
( DD-MON-YY ‫ بالشكل االفتراضي ألوراكل وھو‬fmt ‫يكون شكل النمط‬

TO_CHAR Function with dates TO_CHAR (date , 'fmt' ) to display date in a specific format .
The format model fmt must be enclosed in single quotation marks and is case sensitive and separated
From the date value by a comma
. ‫ ' و مفصولة عن التاريخ بفاصلة‬fmt ' ‫ محصورة بين عالمتي اقتباس مفردتين‬fmt ‫يجب أن تكون صيغة التاريخ المطلوبة‬
SQL> select empno , TO_CHAR( hiredate , 'MM/YY' ) Month_Hired : ‫مثال‬
from emp
Where ename = ' BLAKE ' ;

-9-
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
Elements of Date Format Model ‫عناصر نموذج شكل التاريخ‬
Element Description
YYYY Full year in numbers ‫كامل التاريخ باألرقام‬
YEAR Year spelled out ‫التاريخ مكتوب بالكلمات‬
MM Two digit value for month ‫قيمة التاريخ من رقمين‬
MONTH Full name of the month ‫اسم الشھر كامل‬
DY Three letter abbreviation of the day of the week ‫ثالثة أحرف اختصار من اسم اليوم‬
DAY Full name of the day ً‫اسم اليوم كامال‬
SCC or CC Century prefixes BC date with ‫القرن الذي يقع التاريخ ضمنه‬
Y,YYY Year with a comma in the position ‫رقم العام مع فاصلة بنفس الموضع‬
YYY or YY or Y Last three ,two , or one digits of year ‫ أرقام أو رقمين أو رقم من العام‬3 ‫آخر‬
SYYYY -1000 ‫ ھو‬1000 B.C ‫رقم العام مع وجود اإلشارة مثل‬
IYYY or IYY or Four ,three ,two or one digit year based on the ISO standard .
IY or I ISO ‫أربع أو ثالث خانات أو خانتين أو خانة واحدة للعام من المقياس‬
BC or AD ‫ بحسب التاريخ و لھما نفس العمل‬AD ‫ أو‬BC‫ يظھر المؤشر‬- BC or AD indicator
B.C. or A.D. (‫ – نفس السابق مع عالمات توقف )نقاط‬BC or AD indicator with Periods
Q ‫ – رقم الربع من العام الذي يقع‬Quarter of year
MON Three letter abbreviation - ‫اسم الشھر ثالثة أحرف اختصار‬
RM Roman mineral month - ‫رقم الشھر بالترميز الروماني‬
WW or W Week of year or month – ‫رقم األسبوع في السنة أو الشھر‬
DDD or DD or D Day of year ,month , or day - ‫رقم اليوم في السنة أو الشھر أو األسبوع‬
J ‫ قبل الميالد‬4713 ‫ كانون األول عام‬31 ‫عدد األيام منذ‬
Use the formats listed in the following tables to display time information and literals and to
change numerals to spelled numbers
‫استخدم قائمة األشكال الموجودة في الجدول التالي إلظھار معلومات الوقت واألحرف و تحويل األعداد إلى أرقام مقروءة‬
Element Description
AM or PM Meridian indicator – ‫مؤشر منتصف النھار‬
A.M. or P.M. Meridian indicator with periods - ‫مؤشر منتصف النھار مع عالمات توقف‬
HH or HH12 or HH24 (24-0) ‫ ساعة‬24 ‫( أو‬12-1) ‫ ساعة‬12 ‫الساعة في اليوم و ترميز اليوم‬
MI ( 59-0) ‫الدقيقة في الساعة‬
SS (59-0 ) ‫الثانية في الدقيقة‬
SSSSS Seconds past midnight - ‫عدد الثواني منذ منتصف الليل‬
TH Ordinal number - ( 4TH – 24TH ) ‫الحقة لعدد ما مثل‬
SP Spelled out number ( DDSP for FOUR) – ‫الحقة لعدد تجبره على كتابة العدد بشكل نص‬
SPTH or THSP Spelled out number (DDSPTH for FOURTH ) ‫الحقة تركيبية تجمع بين االثنين‬
Using the TO_CHAR Function with dates ‫ مع التواريخ‬To_Char ‫استخدام تابع التحويل‬
SQL> select ename , : ‫مثال‬
TO_CHAR( hiredate , 'MM/YY' ) Month_Hired
from emp ;
Example : Modify the slide example to display the dates in a format that appears as Seventh of
February 1981 08:00:00 AM .
Seven of February 1981 08:00:00 AM ‫حول التاريخ ليظھر بالشكل‬
SQL> select ename ,
TO_CHAR(hiredate , ‘fmDdspth “of” Month yyyy fmHH:MI:SS AM’ )
From emp ;

- 10 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
TO_CHAR Function with Numbers ‫ مع األعداد‬To_Char ‫استخدام تابع التحويل‬
TO_CHAR(number , ‘fmt’ )
Use these formats with the TO_CHAR function to display a number value as a character:
: ‫ لتظھر القيم الرقمية كأحرف‬TO_CHAR ‫استخدم األشكال التالية مع التابع‬
9 Represents a number ‫تمثل الرقم‬
0 Forces a zero to displayed ‫تجبر الصفر على الظھور‬
$ Places a floating dollar sign ‫يظھر عالمة الدوالر‬
L Use the floating local currency symbol ‫رمز الفاصلة العائمة‬
.
Prints a decimal point ‫يطبع الفاصلة العشرية‬
,
Prints a thousand indicator ‫يطبع مؤشر اآلالف‬
SQL> select TO_CHAR( sal , ‘$99,999 ‘ ) SALARY : ‫مثال‬
FROM emp
Where ename = ‘SCOTT’ ;
When working with number values such as a character string you should convert those numbers to the
character datatype using the TO_CHAR function which translates a value of NUMBER datatype to
VARCHAR2 datatype . This technique is specially useful with concatenation .
‫ والذي يحول نمط‬TO_CHAR ‫عند العمل مع القيم الرقمية على أنھا أحرف عليك تحويل تلك األرقام إلى النمط الحرفي باستخدام التابع‬
. ‫ وھذه التقنية مفيدة بشكل خاص في السالسل‬VARCHAR2 ‫البيانات العددية إلى النمط الحرفي‬
TO_NUMBER and TO_DATE Functions
Convert a character string to a number format using the TO_NUMBER function .
TO_NUMBER(char , ‘fmt’) TO_NUMBER ‫تحويل السلسلة الحرفية إلى ھيئة رقمية باستخدام التابع‬

Convert a character string to a date format using the TO_DATE function .


TO_DATE(char , ‘fmt’ ) ‫تحويل السلسلة الحرفية إلى ھيئة تاريخ باستخدام التابع‬
SQL> select ename , hiredate : ‫مثال‬
FROM emp
Where hiredate = TO_DATE( ‘February 22 ,1981 ‘ ,’Month dd , YYYY’) ;
NVL function ‫تابع تعويض القيمة الخالية‬
Convert null to an actual value ‫يحول القيمة الخالية إلى قيمة حقيقية‬
Datatypes that can be used are date, character, and number.‫أنواع المعطيات التي يستخدم معھا التواريخ واألحرف واألرقام‬
EX: NVL(comm,0) , NVL(hiredate,’01-JAN-97’) , NVL(job ,’No Job Yet’)
SQL> select ename , sal , comm , (sal*12)+NVL(comm.,0) : ‫مثال‬
FROM emp ;
Note: If any column value in an expression is null the result is null .
. ‫إذا كانت القيمة في أي عمود خالية وأجرينا عليھا عملية حسابية تنتج لدينا القيمة الخالية‬

- 11 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

DECODE function ‫تابع البحث والمطابقة وإجراء العمليات بشكل منفصل‬


DECODE(Value , if 1 ,then 1, if 2 , then 2 , if 3 , then 3 ,….,else ) ‫الشكل العام‬
 The DECODE function decodes an expression in a way similar the IF-THEN-ELSE logic used
in various languages . The DECODE function decodes expression after comparing it to each
search value . If the expression is the same as search result is returned .If the default value is
omitted a null value is returned where a search value dose not mach any of the result values .
‫ المنطقية والتي تستعمل بشكل في لغات‬IF-THEN-ELSE ‫ بحل العبارة الجبرية بطريقة مشابھة لعبارة‬DECODE ‫يقوم التابع‬
‫ أما إذا كانت‬. ‫ يحل التابع العبارة الجبرية بعد مقارنتھا مع كل قيمة من قيم البحث إذا كان التعبير مطابق لقيمة البحث يعيد قيمة‬. ‫متنوعة‬
. ‫القيمة األصلية محذوفة أو فارغة تعاد قيمة فارغة وذلك عندما ال تتطابق قيمة البحث مع أي قيمة من قيم البحث‬
SQL> select job , sal : ‫مثال‬
DECODE( job, 'ANALYST’ , sal*1.1 ,
‘CLERK’ , sal*1.15 ,
‘MANAGER’ , sal*1.20 ,
sal )
REVISED_SALARY
FROM emp ;
Display the applicable tax rate for each employee in department 30 .
. 30 ‫استعراض معدل الضريبة المالئم لكل موظف في القسم‬
SQL> select ename , sal : ‫مثال‬
DECODE(TRUC(sal/1000,0) ,
0 , 0.00 ,
1 , 0.09 ,
2 , 0.20 ,
3 , 0.30 ,
4 , 0.40 ,
5 , 0.42 ,
6 , 0.44 ,
0.45 ) TAX_RATE
FROM emp
WHERE deptno = 30 ;
NESTING FUNCTIONS SAMPLES ‫أمثلة عن التوابع المتداخلة‬
SQL> select ename , : 1‫مثال‬
NVL(TO_CHAR(mgr) , ‘No Manager’)
From emp
Where mgr Is NULL ;

SQL> select TO_CHAR(NEXT_DAY(ADD_MONTHS : 2‫مثال‬


(hiredate , 6 ) , ‘FRIDAY’ ) ,
‘fmDAY , Month ddth , YYYY)
“ Next 6 Month Review “
From emp
Order By hiredate ;

- 12 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
Displaying data from multiple tables ‫عرض البيانات من جداول متعددة‬
 -Write SELECT statements to access data from more than one tables using equality and none
quality joins
 View data that generally does not meet a join condition by using outer joins .
 Join a table to itself
. ‫ للوصول إلى البيانات من أكثر من جدول باستخدام الربط المتساوي وغير المتساوي‬SELECT ‫ كتابة عبارة االختيار‬
. ‫ عرض البيانات التي ال تلتقي عادة بشرط ربط باستخدام الروابط الخارجية‬
‫ ربط الجدول بنفسه‬
Use a join to query data from more than one table ‫استخدام الربط لالستفسار عن البيانات من أكثر من جدول‬
SELECT table1.column , table2.column
FROM table1 , table2
WHERE table1.coulumn1 = table2.coulumn2 ;
WHERE ‫قم بكتابة شرط الربط ضمن عبارة‬ Write the join condition in the WHERE clause
Prefix the column name with the table name when the same column name appears in more than one table .
. ‫يجب أن يسبق اسم الحقل اسم الجدول المحتوى ضمنه إذا كان الحقل يظھر أو موجود في أكثر من جدول‬

Types of Joins ‫أنواع الربط‬


There are two main types of join conditions: : ‫ھناك نوعان رئيسيان من حاالت الربط‬
- Equijoins . . ‫ الربط المتساوي‬-
- Non-equijoins . . ‫ الربط الغير متساوي‬-
Additional join methods include the following : : ‫تتضمن طرق الربط اإلضافية ما يلي‬
+ Outer joins . . ‫ الربط الخارجي‬+
+ Self joins . . ‫ الربط الذاتي‬+
+ Set operators . . ‫ مجموعة المشغالت‬+
: Equijoins or Inner Joins ( ‫الربط المتساوي )الداخلي‬
. ‫يجب أن يكون ھناك حقل مشترك على األقل بين الجدولين المرتبطين بحيث تكون القيم في الحقول المتقابلة متساوية من كال الجدولين‬
. ‫ھذا النوع من الربط يشكل تتمة للمفتاح األساسي والثانوي‬
EMP DEPT

DEPTNO DNAME LOC


EMPNO ENAME DEPTNO ------- -------------- ---------
------ ---------- ---------- 10 ACCOUNTING NEW YORK
7369 SMITH 20 20 RESEARCH DALLAS
7499 ALLEN 30 30 SALES CHICAGO
7521 WARD 30 40 OPERATIONS BOSTON
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
7782 CLARK 10
7788 SCOTT 20
7839 KING 10
7844 TURNER 30 Primary Key
7876 ADAMS 20

Foreign Key

- 13 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
Retrieving records with Equijoins ‫استرجاع السجالت مع الربط المتساوي‬

SQL> select emp , empno , emp.ename , emp.deptno , : ‫مثال‬


Dept.deptno , dept.loc ,
From emp , dept
Where emp.deptno=dept.deptno ;

The Where clause specifies how the tables are to be joined .


AND ‫حاالت بحث إضافية باستخدام المعامل‬ Additional search conditions Using the AND operator
In addition to the join , you may have criteria for your WHERE clause .
. WHERE ‫باإلضافة إلى الربط قد تحتاج إلى بعض المعايير من أجل عبارة‬
SQL> select empno , ename , emp.deptno , loc : ‫مثال‬
FROM emp , dept
WHERE emp.deptno = dept.deptno
AND INITCAP(ename) = ‘king’ ;
Using Table Aliases ‫استخدام األسماء المستعارة للجداول‬
Simplify queries by using table aliases . ‫تبسيط االستعالمات باستخدام األسماء المستعارة للجداول‬
You can use table aliases instead of table names . Just as a column aliases gives a column another name
.a table aliases give a table another name . Table aliases help to keep SQL code smaller , therefore using
less memory.
‫ تساعد األسماء المستعارة‬. ‫يمكنك استخدام اسم مستعار للجدول بدالً من اسم الجدول تماماً مثل األسماء المستعارة للحقول أو األعمدة‬
. ‫ أصغر والذي يستعمل ذاكرة أقل‬SQL ‫للجداول في جعل كود الـ‬
SQL> select emp.empno , emp.ename , emp.deptno , : ‫مثال‬
Dept.deptno , dept.loc
FROM emp , dept
WHERE emp.deptno = dept.deptno ;
: ‫بغد تطبيق األسماء المستعارة على الجداول يصبح المثال السابق بالشكل التالي‬
SQL> select e.empno , e.ename , e.deptno , : ‫مثال‬
d.deptno , d.loc
FROM emp e , dept d
WHERE e.deptno = d.deptno ;

Join more than two tables ‫الربط ألكثر من جدولين‬


SQL> select c.name , i.itemid , i.itemotot , o.total , : ‫مثال‬
FROM customer c , ord o , item i
WHERE c.custid = o.custid
AND o.ordid = i.ordid
AND c.name = ‘TKP SPORT SHOP’ ;
: ‫حيث الجداول بالشكل التالي‬
CUSTOMER ORD ITEM
NAME CUSTID CUSTID ORDID ORDID ITEMID
---------- ----------- ---------- ----------- ---------- -----------
JOCKSPORTS 100 101 610 610 3
THE SPORT SHOP 101 102 611 611 1
VOLLYRITE 102 104 612 612 1
JUST TENNIS 103 106 601 611 1
K+T SPORTS 105 102 602 601 1
SHAPE UP 106 106 605 602 1

- 14 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
: Non-Equijoins ‫الربط الغير متساوي‬
‫ال يشترط وجود حقل أو أكثر متساوي من الجدولين ولكن يوجد عالقة ما بين حقل أو أكثر من الجدول األول و حقل أو أكثر من الجدول‬
. ‫الثاني و ھذه العالقة ليست مساواة‬
The relationship between tables is obtained using an operator other than equal (= ) .
Retrieving records with Non-Equijoins ‫استرجاع السجالت مع الربط الغير متساوي‬
‫ والحقلين‬EMP ‫ من الجدول‬SAL ‫ وتوجد عالقة بين الحقل‬SALGRADE ‫ والثاني‬EMP ‫في المثال التالي لدينا جدولين األول‬
. HISAL ‫ و‬LOSAL ‫ تقع بين القيمتين‬SAL ‫ وھي أن أي قيمة في الحقل‬HISAL‫ و‬LOSAL
SQL> select e.ename , e.sal , s.grade , : ‫مثال‬
From emp e , salgrade s
Where e.sal
Between s.losat and s.hisat ;
: Outer joins ‫الربط الخارجي‬
You use an Outer join to also see rows that does not usually meet the join condition .
Outer join operator is the plus sign ( + ) .
‫يستخدم الربط الخارجي إلظھار الصفوف التي ال تظھر ألنھا ال تحقق شرط الربط وكمثال على ذلك المثال القادم إذا استخدمنا الربط‬
‫ من الجدول‬DEPTNO ‫ بحيث يتساوى رقم القسم‬EMP‫ و‬DEPT ‫المتساوي وأردنا معرفة أسماء الموظفين وأقسامھم من الجدولين‬
‫ ورقمه ال يظھران لدينا في نتيجة االستعالم وذلك لعدم وجود‬OPERATIONS ‫األول مع رقم القسم من الثاني نجد أن قسم العمليات‬
‫ غير موجود وفي حالة أردنا ظھور رقم القسم نستخدم الربط‬EMP‫أشخاص يعملون في ذلك القسم وبالتالي رقم القسم في جدول الموظفين‬
: ‫ ( كما يلي‬+ ) ‫الخارجي والذي يستخدم المعامل‬

SQL> select e.ename , e.deptno , d.dname , ‫ باستخدام الربط المتساوي‬: ‫مثال‬


From emp e , dept d
WHERE e.deptno = d.deptno ;
SQL> select e.ename , d.deptno , d.dname : ‫ و باستخدام الربط الخارجي يصبح كما يلي‬: ‫مثال‬
From emp e , dept d
WHERE e.deptno(+) = d.deptno
ORDER BY e.deptno ;
: (Join the table to itself) Self joins ‫الربط الذاتي‬
‫ بنفسه بالشكل‬EMP ‫تحتاج في بعض األحيان إلى ربط الجدول بنفسه فمثالً إليجاد اسم مدير كل موظف من الجدول عليك ربط الجدول‬
: EMP ‫ أسماء مستعارة للجدول نفسه‬MANAGER , WORKER ‫التالي حيث‬
SQL> select worker.ename||’ works for ‘||manager.ename
From emp worker , emp manager EMPNO ENAME MGR
Where worker.mgr = manager.empno ; ------ ---------- ----------
7369 SMITH 7902
WORKER.ENAME||'WORKSFOR'||MANAGER.ENAME 7499 ALLEN 7698
--------------------------------------------------------------------- 7521 WARD 7698
SMITH works for FORD 7566 JONES 7839
ALLEN works for BLAKE 7654 MARTIN 7698
WARD works for BLAKE 7698 BLAKE 7839
JONES works for KING 7782 CLARK 7839
MARTIN works for BLAKE 7788 SCOTT 7566
BLAKE works for KING 7839 KING
CLARK works for KING 7844 TURNER 7698
SCOTT works for JONES 7876 ADAMS 7788
TURNER works for BLAKE
ADAMS works for SCOTT
JAMES works for BLAKE

Aggregating Data Using Group Functions: ‫تحصيل البيانات باستخدام توابع قيمة المجموعة‬
Group functions: Unlike single-row functions operate on sets of rows to give one result per group .
These sets may be the whole table or the table split into groups.

- 15 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
‫ ال تشبه التوابع وحيدة الصف وھي تؤثر على مجموعات من الصفوف لتعطي نتيجة واحدة لكل مجموعة ولكن‬: ‫توابع قيمة المجموعة‬
. ‫ھذه المجموعات ممكن تكون الجدول كامالً أو الجدول مقسم إلى مجموعات‬
Types of Group Functions ‫أنماط من توابع قيمة المجموعة‬
Function Description
Average value of n ignoring null values
AVG( [DISTICT|ALL] n )
‫ قيمة ويقوم بتجاھل القيم الفارغة‬n‫قيمة المتوسط لـ‬
Number of rows where expr evaluates to something other than
null ( Count all selected rows using * , including duplicates and
rows with nulls )
COUNT( * [DISTICT|ALL] expr )
‫ )استخدم‬null ‫يعيد ھذا التابع عدد الصفوف في حال كانت القيم مغايرة للقيمة الفارغة‬
‫* مع التابع ليعيد عدد كل الصفوف إضافة إلى الصفوف المكررة والقيم الفارغة‬
( NULL
Maximum value of expr , ignoring null values .
MAX( [DISTICT|ALL] expr )
‫ ويتجاھل القيم الفارغة‬expr ‫أكبر قيمة من قيم‬
Minimum value of expr , ignoring null values
MIN( [DISTICT|ALL] expr )
‫ ويتجاھل القيم الفارغة‬expr ‫أصغر قيمة من قيم‬
Standard deviation of n ignoring null values
STDDEV( [DISTICT|ALL] x )
‫ قيمة يتجاھل القيم الفارغة‬n‫االنحراف المعياري لـ‬
Sum values of n , ignoring null values
SUM( [DISTICT|ALL] n )
‫ قيمة ويتجاھل القيم الفارغة‬n ‫مجموع‬
Variance of n , ignoring null values
VARIANCE( [DISTICT|ALL] x )
‫ قيمة ويتجاھل القيم الفارغة‬n ‫التباين لـ‬
 Distinct makes the function consider only nonduplicate values ; ALL makes it consider every value
including duplicates . The default is ALL and therefore does not need to be specified .
 The datatypes for the arguments may be CHAR, VARCHAR2, NUMBER, DATE where exp is
listed.
 All group functions except COUNT( * ) ignore null values .To substitute a value for null values . use
the NVL function .
 The Oracle Server implicitly sorts the result set in ascending order when using a GROUP BY clause.
To override this default ordering. DESC can be used in the ORDER BY clause.
‫ فيجعل التابع يأخذ بعين االعتبار كل قيمة بما فيھا‬ALL ‫ أما‬. ‫ يجعل التابع يأخذ بعين االعتبار القيم الغير مكررة فقط‬Distinct ‫األمر‬ 
.‫ عبارة عن أمر افتراضي ولذلك لست بحاجة إلدخاله‬ALL . ‫القيم المكررة‬
. expr‫ وذلك حسب التعبير‬CHAR , VARCHAR2 , NUMBER , DATE ‫أنماط البيانات يمكن أن تكون أي من التالي‬ 
‫ ولكي تقوم باستبدال القيم الفارغة عليك استخدام تابع‬null ‫ تتجاھل القيم الفارغة‬COUNT( * ) ‫جميع توابع قيمة المجموعة ما عدا‬ 
. NVL ‫االستبدال‬
‫ وحتى‬ORDER BY ‫يقوم مزود أوراكل بشكل ضمني بترتيب مجموعة النتائج بشكل تصاعدي عندما تقوم باستخدام عبارة الترتيب‬ 
. ORDER BY ‫ مع عبارة الترتيب‬DESC ‫تقوم بتغيير نمط الترتيب االفتراضي عليك باستخدام األمر‬

SAMPLES : : ‫أمثلة‬
SQL> select AVG(sal), MAX(SAL), MIN(sal), MAX(sal) : ‫مثال‬
From emp
WHERE job LIKE 'SALES%' ;
SQL> select MIN(ename), MAX(ename) : ‫مثال‬
From emp ;
‫ مع البيانات الحرفية تكون النتيجة حسب الترتيب األبجدي كما في المثال السابق يكون‬MIN ‫ و‬MAX ‫باستخدام التابعين‬
: ‫الناتج كما يلي‬
MIN(ENAME) MAX(ENAME)
------- --------- ----------
ADAMS WARD

SQL> select MIN(hiredate), MAX(hiredate) : ‫مثال‬


From emp ;

- 16 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
SQL> select COUNT( * ) : ‫مثال‬
From emp
WHERE deptno = 30 ;
SQL> select COUNT( comm ) : ‫مثال‬
From emp
WHERE deptno = 30 ;
SQL> select COUNT( deptno ) : ‫مثال‬
From emp ;
SQL> select COUNT(DISTINCT( deptno) ) : ‫مثال‬
From emp ;
Group functions ignore null values in the column. ‫تتجاھل توابع قيمة المجموعة القيمة الفارغة لكن ال تتجاھل الصفر‬
SQL> select AVG ( comm. ) COMM ‫قيمة المتوسط الحسابي للعمود‬: ‫مثال‬
From emp ;
The NVL function forces group functions to include null values.
. ‫ توابع التصنيف بأن تتضمن القيمة الفارغة كما في المثال التالي‬NVL ‫يجبر التابع‬
SQL> select AVG ( NVL (comm. )) ‫ باستخدام الربط المتساوي‬: ‫مثال‬
From emp ;

Creating Groups of DATA: GROUP BY Clause


: GROUP BY ‫إنشاء مجموعات بيانات باستخدام عبارة التجميع‬
You can use the GROUP BY clause to divide the rows in a table into groups. You can then use the
group functions to return summary information for each group.
‫صل‬U‫ة لتح‬U‫ع المجموع‬U‫تخدام تواب‬U‫دھا اس‬U‫ك عن‬U‫ يمكن‬. ‫ لتقسيم الصفوف ضمن الجدول إلى مجموعات‬GROUP BY ‫يمكنك استخدام عبارة‬
. ‫على خالصة معلومات عن كل مجموعة‬
 You must include the columns in the GROUP BY clause.
 You cannot use the column alias in the GROUP BY clause.
. ‫ كما ال يمكنك استخدام األسماء المستعارة معھا‬GROUP BY ‫يجب تضمين األعمدة في عبارة‬
All columns in the SELECT list that are not in group functions must be in the GROUP BY clause.
GROUP ‫ والتي لم تطبق عليھا التوابع السابقة يجب أن تذكر ضمن عبارة‬SELECT ‫جميع األعمدة المذكورة في قائمة عبارة االختيار‬
: ‫ كما في المثال التالي‬BY
SQL> select deptno , AVG ( sal ) DEPTNO AVG(SAL) : ‫مثال‬
From emp ---------- --------------
GROUP BY deptno ; 10 2916.66667
20 2175
30 1566.66667

The GROUP BY column does not have to be in the SELECT list .


. SELECT ‫ موجوداً ضمن قائمة األعمدة المذكورة في عبارة‬GROUP BY ‫ليس من الضروري أن يكون العمود المذكور في عبارة‬
SQL> select AVG ( sal ) : ‫مثال‬
AVG(SAL)
From emp
--------------
GROUP BY deptno ; 2916.66667
2175
1566.66667
You can use the group function in the ORDER BY clause.
. GROUP BY ‫يمكنك استخدام توابع التصفية ضمن عبارة‬
SQL> select deptno, AVG ( sal ) : ‫مثال‬
DEPTNO AVG(SAL)
From emp ---------- --------------
GROUP BY deptno 30 1566.66667
ORDER BY AVG(SAL) ; 20 2175
- 17 - 10 2916.66667
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Using the GROUP BY Clause on Multiple Columns


: ‫ مع أعمدة متعددة‬GROUP BY ‫استخدام عبارة‬
You can return summary results for groups and subgroups by listing more than one GROUP BY column
You can determine the default sort order of the results by the order of columns in the GROUP BY clause
. GROUP BY ‫يمكنك الحصول على ملخص عن المجموعات والمجموعات الثانوية بإدخال أكثر من عمود ضمن عبارة‬
. GROUP BY ‫كما يمكنك أن تقوم بتغيير طريقة الترتيب االفتراضية للنتائج بترتيب األعمدة ضمن عبارة‬
SQL> select deptno, job, SUM ( sal ) : ‫مثال‬
DEPTNO JOB SUM (SAL)
From emp ---------- --------- -------------
GROUP BY deptno, job ; 10 CLERK 1300
10 MANAGER 2450
10 PRESIDENT 5000
20 ANALYST 6000
20 CLERK 1900
20 MANAGER 2975
30 CLERK 950
30 MANAGER 2850
30 SALESMAN 5600
Any column or expression in the SELECT list that is not an aggregate function must be in the GROUP
BY clause.
‫ وإال ينتج خطأ‬GROUP BY ‫ وليس تابع تجميع يجب أن يكون موجوداً ضمن عبارة‬SELECT ‫أي عمود أو تعبير ضمن قائمة عبارة‬
: ‫ويكون عليك تصحيحه ليصبح مثل المثال التالي‬

DEPTNO COUNT (ENAME)


SQL> select deptno, COUNT ( ename ) ------------ ------- : ‫مثال‬
From emp 10 3
GROUP BY deptno ; 20 5
30 6

You cannot use the WHERE clause to restrict groups.


You use the HAVING clause to restrict groups.
. HAVING ‫ من أجل تقييد المجموعات ولكنك تستخدم بدالً عنھا عبارة‬WHERE ‫ليس بإمكانك استخدام عبارة‬
‫ مع الفرق أنھا مرتبطة بنتيجة تنفيذ توابع مجموعة أي أنھا تأثي مع توابع‬WHERE ‫ عمالً مشابھاً لعمل تعليمة‬HAVING ‫تعمل تعليمة‬
: ‫ كما يلي‬GROUP BY ‫المجموعة وعبارة‬
SQL> select deptno, AVG ( sal ) : ‫مثال‬
From emp DEPTNO AVG(SAL)
---------- -------
GROUP BY deptno
10 2916.66667
HAVING AVG (sal) > 2000 ; 20 2175

Excluding Group Results: HAVING Clause


:‫ الستثناء مجموعات من النتائج‬HAVING ‫استخدام عبارة‬
You use the HAVING clause to specify which groups are to be displayed. Therefore you further restrict
the groups on the basis of aggregate information.
‫ات‬UU‫من معلوم‬UU‫ات ض‬UU‫صر المجموع‬UU‫سن ح‬UU‫ن المستح‬UU‫ذلك م‬UU‫ا ول‬UU‫د إظھارھ‬UU‫ي نري‬UU‫ات الت‬UU‫صيص المجموع‬UU‫ لتخ‬HAVING ‫ارة‬UU‫ستخدم عب‬UU‫ت‬
. ‫التجميع‬
SQL> select deptno, MAX ( sal ) DEPTNO MAX(SAL) : ‫مثال‬
From emp ---------- -------
GROUP BY deptno 10 5000
20 3000
HAVING MAX (sal) > 2000 ;
30 2850
- 18 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

You can use the GROUP BY clause without using a group function in the SELECT list.
If you restrict rows based on the result of a group function. You must have a GROUP BY clause as well
as the HAVING clause.
. SELECT ‫ بدون استخدام تابع تجميع ضمن عبارة‬GROUP BY ‫بإمكانك استخدام عبارة‬
. HAVING ‫ باإلضافة إلى عبارة‬GROUP BY ‫إذا كنت تريد تقييد الصفوف ضمن نتيجة تابع التجميع عليك أن تستخدم‬
SQL> select deptno, AVG ( sal ) : ‫مثال‬
DEPTNO AVG(SAL)
From emp -------- --------------
GROUP BY deptno 10 2916.66667
HAVING MAX (sal) > 2900 ; 20 2175

SQL> select job, SUM ( sal ) PAYROLL : ‫مثال‬


JOB PAYROLL
From emp
---------- ---------
WHERE job not like 'sales%' SALESMAN 5600
GROUP BY job ANALYST 6000
HAVING SUM (sal) > 5000 MANAGER 8275
ORDER BY SUM(sal) ;

Nesting Group Functions ‫تداخل توابع قيمة المجموعة‬


SQL> select MAX(AVG ( sal ) ) MAX(AVG(SAL)) : ‫مثال‬
From emp -------------------
GROUP BY deptno ; 2916.66667

- 19 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Subqueries ‫االستفسارات الجزئية‬


Select select_list ‫الصيغة العامة‬
From table
Where expr operator
(select select_list
From table ) ;
 The subquery (inner query ) executes once before the main query .
 The result of the subquery is used by the main query (outer query).
.‫ االستفسار الجزئي )الداخلي ( ينفذ أوالً قبل االستفسار الرئيسي‬
.‫ تستخدم نتيجة االستفسار الجزئي أو الداخلي من قبل االستفسار الرئيسي أو الخارجي‬
A subquery is a SELECT statement that is embedded in a clause of another SELECT statement. You can
build powerful statements out of simple ones by using subqueries. They can be very useful when you
need to select rows from a table with a condition that depends on the data in the table itself.
‫تخدام‬U‫سيطة باس‬U‫ارات ب‬U‫ارج عب‬U‫ة خ‬U‫ارات فعال‬U‫اء عب‬U‫ك بن‬U‫ يمكن‬.‫رى‬U‫ أخ‬SELECT ‫ارة‬U‫ مغلفة بعب‬SELECT ‫االستفسار الجزئي ھو عبارة‬
.‫تكون مفيدة جداً عندما تريد اختيار صفوف من جدول مع شرط يعتمد على بيانات التابع نفسه‬.‫االستفسارات الجزئية‬
SQL> Select ename : ‫مثال‬
From emp ENAME
WHERE sal > 2975 --------
( SELECT sal SCOTT
From emp KING
WHERE empno = 7566 ) ; FORD

Guidelines for Using Subqueries ‫إرشادات عامة الستخدام االستفسارات الجزئية‬


• Enclose subqueries in parentheses.
• Place subqueries on the right slide of the comparison operator.
• Do not add an ORDER BY clause to a subquery.
• Use single-row operators with single-row subquery.
• Use multiple-row operators with multiple-row subqueries.
. ‫قم بوضع االستعالمات الجزئية ضمن أقواس‬ •
.‫قم بوضع االستعالمات الجزئية في الجھة اليمنى من معامالت المقارنة‬ •
.‫ إلى االستفسار الجزئي‬ORDER BY ‫ال تقم بإضافة عبارة‬ •
.‫استخدم المعامالت وحيدة الصف مع االستعالم الجزئي وحيد الصف‬ •
.‫استخدم المعامالت متعددة الصفوف مع االستعالمات الجزئية متعددة الصفوف‬ •
Types of subqueries ‫أنماط االستفسارات الجزئية‬
Single-row subquery: query that return only one row from the inner SELECT statement.
Multiple-row subquery: query that return more than one row from the inner SELECT statement.
Multiple -column subquery: query that return more than one column from the inner SELECT statement.
. ‫ الداخلية‬SELECT ‫ ھو استفسار يعيد صف واحد فقط من عبارة‬: ‫االستفسار الجزئي الوحيد الصف‬
. ‫ الداخلية‬SELECT ‫ ھو استفسار يعيد أكثر من صف من عبارة‬: ‫االستفسار الجزئي متعدد الصفوف‬
. ‫ الداخلية‬SELECT ‫ ھو استفسار أكثر من صف من عبارة‬: ‫االستفسار الجزئي متعدد األعمدة‬
Single-row subqueries:
‫ المعنى‬Meaning Operator
‫ يساوي‬Equal to = ‫االستفسار الجزئي وحيد الصف‬
‫ أكبر من‬Greater than > Use single-row comparison operators
‫ أكبر أو يساوي‬Greater than or equal to >=
‫ أقل من‬Less than <
‫ أقل أو يساوي‬Less than or equal to <=
‫ ال يساوي‬Not equal to <>

- 20 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

7369 ‫ قم بعرض الموظفين الذين يطابق عملھم عمل الموظف رقم‬: ‫مثال‬
SQL> Select ename, job
From emp ENAME JOB
WHERE job = CLERK ------- ----------
(select job SMITH CLERK
From emp ADAMS CLERK
WHERE empno = 7369 ) ; JAMES CLERK
MILLER CLERK
7876 ‫ و رواتبھم تساوي راتب الموظف رقم‬7369 ‫ قم بعرض الموظفين الذين يطابق عملھم عمل الموظف رقم‬: : ‫مثال‬
SQL> Select ename, job
From emp
WHERE job = CLERK
(select job
From emp ENAME JOB
WHERE empno = 7369 ) --- ------- ----------
AND SAL > MILLER CLERK
1100
(select sal
From emp
WHERE empno = 7876 ) ;

Using Group Functions in a subquery ‫استخدام توابع التجميع ضمن االستفسار الجزئي‬
: ‫مثال‬
SQL> Select ename, job, sal
From emp ENAME JOB SAL
WHERE sal = 800 ---------- ---------- ---------
(select MIN(sal) SMITH CLERK 800
FROM emp );

HAVING clause with subqueries ‫ مع االستفسار الجزئي‬HAVING ‫استخدام عبارة‬


The Oracle Server executes subqueries first.
The Oracle Server returns results into the HAVING clause of the main query.
.ً‫يقوم مزود أوراكل بإنجاز االستفسارات الجزئية أو الداخلية أوال‬
.(‫ التابعة لالستفسار الرئيسي )الخارجي‬HAVING ‫يعيد مزود أوراكل النتائج إلى عبارة‬
: ‫مثال‬
SQL> Select deptno, MIN( sal)
From emp DEPTNO MIN(SAL)
GROUP BY deptno ---------- --------
HAVING MIN(sal) > 800 1300 10
(select MIN(sal) 950 30
FROM emp
WHERE deptno = 20 );
Find the job with the lowest average salary : ‫ أوجد العمل الموافق ألقل معدل راتب‬: ‫مثال‬
SQL> Select job, AVG( sal)
From emp JOB AVG(SAL)
GROUP BY job 1037.5 -------- --------
HAVING AVG(sal) = CLERK 1037.5
(select MIN(AVG(sal))
FROM emp
GROUP BY job );

- 21 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫مثال خاطئ ‪ :‬الخطأ في المثال التالي أننا استخدمنا معامل وحيد الصف مع استفسار جزئي متعدد الصفوف ھذا يعني أن االستفسار‬
‫‪SQL> Select empno, ename‬‬ ‫الداخلي سوف يعيد أكثر من صف ‪:‬‬
‫‪From‬‬ ‫‪emp‬‬
‫‪WHERE sal =(select MIN(sal) FROM‬‬ ‫‪emp‬‬ ‫‪ERROR‬‬
‫;) ‪GROUP BY deptno‬‬ ‫خطأ‬
‫‪Multiple-Row Subqueries‬‬ ‫االستفسارات الجزئية متعددة الصفوف )التي تعيد أكثر من صف(‬
‫‪ Meaning‬المعنى‬ ‫‪Operator‬‬
‫‪Equal to any member in the list‬‬
‫‪IN‬‬
‫مساو ألي قيمة ضمن القائنة‬
‫ٍ‬
‫‪Compare value to each value returned by the subquery‬‬
‫‪ANY‬‬
‫يقارن القيمة مع أي قيمة من القيم المعادة من قبل االستفسار الجزئي‬
‫‪Compare value to every value returned by the subquery‬‬
‫‪ALL‬‬
‫يقارن القيمة مع كل قيمة معادة من قبل االستفسار الجزئي‬
‫‪Use Multiple-row comparison operators‬‬ ‫قم باستخدام معامالت المقارنة متعددة الصفوف‬
‫‪Subqueries that return more than one row are called Multiple-row subqueries. You use a multiple-row‬‬
‫‪operator instead of single row operator. With a multiple-row subquery. The multiple-row operator‬‬
‫‪expects one or more value.‬‬
‫تسمى االستفسارات الجزئية التي تعيد أكثر من صف باالستفسارات متعددة الصفوف‪ .‬تستخدم المعامالت متع‪U‬ددة ال‪U‬صفوف باإلض‪U‬افة إل‪U‬ى‬
‫المعامالت وحيدة الصف مع االستفسارات متعددة الصوف‪ .‬المعامالت متعددة الصفوف تتوقع قيمة أو أكثر‪.‬‬
‫يقوم المعامل ‪ IN‬بالمقارنة مع كل قيمة من القيم المعادة من االستفسار الجزئي ويعيد كل نتيجة على حدة ‪.‬‬
‫‪Using IN operator in Multiple-Row Subqueries‬‬ ‫استخدام المعامل ‪ IN‬مع االستفسارات الجزئية متعددة الصفوف‬
‫يقوم المعامل ‪ IN‬بالمقارنة مع كل قيمة من القيم المعادة من االستفسار الجزئي ويعيد كل نتيجة على حدة‬
‫مثال ‪ :‬أوجد العامل الذي يحصل على أقل راتب في كل قسم‪:‬‬
‫‪SQL> Select ename, sal, deptno‬‬
‫‪From‬‬ ‫‪emp‬‬ ‫‪ENAME‬‬ ‫‪SAL DEPTNO‬‬
‫‪WHERE‬‬ ‫‪sal IN‬‬ ‫‪(800, 950, 1300) ----------‬‬ ‫‪-----‬‬ ‫‪----------‬‬
‫)‪(select MIN (sal‬‬ ‫‪SMITH‬‬ ‫‪800‬‬ ‫‪20‬‬
‫‪FROM‬‬ ‫‪emp‬‬ ‫‪JAMES‬‬ ‫‪950‬‬ ‫‪30‬‬
‫;) ‪GROUP BY deptno‬‬ ‫‪MILLER‬‬ ‫‪1300‬‬ ‫‪10‬‬

‫استخدام المعامل ‪ ANY‬مع االستفسارات الجزئية متعددة الصفوف ‪Using ANY operator in Multiple-Row Subqueries‬‬
‫يقوم المعامل ‪ ANY‬بالمقارنة مع كل قيمة من القيم المعادة من االستفسار الجزئي ويعيد كل نتيجة على حدة‬
‫‪SQL> Select empno, ename, job‬‬ ‫مثال ‪:‬‬
‫‪From‬‬ ‫‪emp‬‬
‫‪WHERE‬‬ ‫‪sal < ANY‬‬ ‫)‪(800, 950, 1300, 1100‬‬
‫‪(select‬‬ ‫‪sal‬‬
‫‪FROM emp‬‬ ‫‪EMPNO ENAME‬‬ ‫‪JOB‬‬
‫‪WHERE job = 'CLERK' ) ----------- ----------‬‬ ‫‪------------‬‬
‫‪7521‬‬ ‫‪WARD‬‬ ‫‪SALESMAN‬‬
‫; '‪AND job <> 'clerk‬‬
‫‪7654‬‬ ‫‪MARTIN‬‬ ‫‪SALESMAN‬‬
‫استخدام المعامل ‪ ALL‬مع االستفسارات الجزئية متعددة الصفوف ‪Using ALL operator in Multiple-Row Subqueries‬‬
‫يقوم المعامل ‪ ALL‬بالمقارنة مع كل القيم المعادة من االستفسار الجزئي ‪.‬‬
‫مثال ‪ :‬قم بعرض رقم الموظف واسمه و عمله للموظفين الذين تكون رواتبھم أكبر من معدل الرواتب لكل قسم‬
‫‪SQL> Select empno, ename, job‬‬
‫‪From‬‬ ‫‪emp‬‬ ‫)‪(1566.6667, 2175, 2916.6667‬‬
‫‪WHERE‬‬ ‫‪sal > ALL‬‬
‫‪(select‬‬ ‫)‪AVG( sal‬‬
‫‪FROM emp‬‬ ‫‪EMPNO ENAME JOB‬‬
‫;) ‪GROUP BY deptno‬‬ ‫‪---------‬‬ ‫‪---------- -------‬‬
‫‪7566‬‬ ‫‪JONES‬‬ ‫‪MANAGER‬‬
‫‪7788‬‬ ‫‪SCOTT‬‬ ‫‪ANALYST‬‬
‫‪7839‬‬ ‫‪KING‬‬ ‫‪PRESIDENT‬‬
‫‪- 22 -‬‬ ‫‪7902‬‬ ‫‪FORD‬‬ ‫‪ANALYST‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫الفرق بين المعامالت ‪ :‬مع المعامل ‪ IN‬يقوم االستفسار الرئيسي بالمقارنة مع كل قيمة من القيم المعادة ويعيد النتائج المطابقة لكل قيمة‬
‫من قيم القائمة التي يعيدھا االستفسار الجزئي أما مع المعامل ‪ ANY‬فيقوم االستفسار الرئيسي بالمقارنة مع كل قيمة من القيم المعادة‬
‫على حدة ويعيد النتائج بشكل منفصل لكل قيمة من القيم التي يعيدھا االستفسار الجزئي أما مع المعامل ‪ ALL‬فيقوم االستفسار الرئيسي‬
‫بالمقارنة مع كل القيم المعادة مجتمعة ويعيد النتائج التي تحقق الشرط على جميع القيم التي يعيدھا االستفسار الجزئي ‪.‬‬
‫‪Multiple-Column Subqueries‬‬ ‫االستفسارات الجزئية متعددة األعمدة‬
‫‪So far you have written single-row subqueries and multiple-row subqueries where only one column was‬‬
‫‪compared in the WHERE clause or HAVING clause of the SELECT statement. If you want to compare‬‬
‫‪two or more columns. You must write a compare WHERE clause using logical operators. Multiple-‬‬
‫‪column subqueries enable you to combine duplicate WHERE conditions into a single WHERE clause.‬‬
‫لقد قمت سابقاً بكتابة استفسارات جزئية وحيدة الصف واستفسارات جزئي‪U‬ة متع‪U‬ددة ال‪U‬صفوف والت‪U‬ي يك‪U‬ون فيھ‪U‬ا عم‪U‬ود واح‪U‬د يق‪U‬ارن ض‪U‬من‬
‫عبارة ‪ WHERE‬أو ضمن عبارة ‪ HAVING‬التابعة لعب‪U‬ارة ‪ . SELECT‬إذا كن‪U‬ت تري‪U‬د مقارن‪U‬ة عم‪U‬ودين أو أكث‪U‬ر علي‪U‬ك كتاب‪U‬ة عب‪U‬ارة‬
‫المقارنة الخاصة بـ ‪ WHERE‬باستخدام المعامالت المنطقية‪ .‬تمكنك االستفسارات الجزئية متعددة األعمدة من ضم شروط متع‪U‬ددة ض‪U‬من‬
‫عبارة ‪ WHERE‬واحدة‪.‬‬
‫‪Example: Display the order number, product number and quantity of any item in which the product‬‬
‫‪number and quantity match both the product number and quantity of an item in order 605.‬‬
‫يقوم المثال التالي بعرض رقم الترتي‪U‬ب ورق‪U‬م المن‪U‬تج والكمي‪U‬ة لك‪U‬ل عن‪U‬صر يك‪U‬ون في‪U‬ه رق‪U‬م المن‪U‬تج والكمي‪U‬ة مم‪U‬اثلين )كالھم‪U‬ا( ل‪U‬رقم المن‪U‬تج‬
‫والكمية الموافقة للعنصر ذو الترتيب ‪. 605‬‬
‫‪SQL> Select ordid, prodid, qty‬‬ ‫مثال ‪:‬‬
‫‪From‬‬ ‫‪item‬‬ ‫‪ORDID PRODID QTY‬‬
‫‪WHERE (prodid, qty ) IN‬‬ ‫‪----------- ---------- ---------‬‬
‫‪617‬‬ ‫‪100861‬‬ ‫‪100‬‬
‫‪(select‬‬ ‫‪prodid, qty‬‬
‫‪617‬‬ ‫‪100870‬‬ ‫‪500‬‬
‫‪FROM item‬‬
‫‪616‬‬ ‫‪102130‬‬ ‫‪10‬‬
‫) ‪WHERE ordid = 605‬‬
‫; ‪AND ordid <> 605‬‬
‫ھذا يعني أنه توجد ثالث عناصر بترتيب آخر تحتوي على نفس رقم المنتج والكمية الموجودة ضمن الترتيب رقم ‪.605‬‬

‫‪Column Comparisons‬‬ ‫مقارنات العمود‬


‫يوجد نوعان من المقارنة في حالتنا ھذه المقارنة الذكية للزوج )‪ ( PAIRWISE‬كما في المثال السابق و التي تكون كما في الشكل ‪:‬‬

‫‪Nonpairwise‬‬ ‫‪Pairwise‬‬
‫‪PRODID‬‬ ‫‪QTY‬‬ ‫‪PRODID‬‬ ‫‪QTY‬‬
‫‪----------‬‬ ‫‪---------‬‬ ‫‪----------‬‬ ‫‪---------‬‬
‫‪100863‬‬ ‫‪100‬‬ ‫‪100863‬‬ ‫‪100‬‬
‫‪100861‬‬ ‫‪100‬‬ ‫‪100861‬‬ ‫‪100‬‬
‫‪102130‬‬ ‫‪10‬‬ ‫‪102130‬‬ ‫‪10‬‬
‫‪100890‬‬ ‫‪5‬‬ ‫‪100890‬‬ ‫‪5‬‬
‫‪100870‬‬ ‫‪500‬‬ ‫‪100870‬‬ ‫‪500‬‬
‫‪101860‬‬ ‫‪50‬‬ ‫‪101860‬‬ ‫‪50‬‬

‫‪- 23 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

: ‫ (كما في الشكل السابق والمثال التالي‬NONPAIRWISE ) ‫والمقارنة الثانية تسمى المقارنة الغير ذكية للزوج‬
Example: Display the order number, product number and quantity of any item in which the product
number and quantity match any product number and any quantity of an item in order 605.
‫ة‬U‫تج أي كمي‬U‫م من‬U‫اثلين ألي رق‬U‫ة مم‬U‫تج والكمي‬U‫م المن‬U‫ه رق‬U‫ون في‬U‫يقوم المثال التالي بعرض رقم الترتيب ورقم المنتج والكمية لكل عنصر يك‬
. 605 ‫موافقة للعنصر ذو الترتيب‬
SQL> Select ordid, prodid, qty : ‫مثال‬
From item ORDID PRODID QTY
WHERE Prodid IN (select prodid ----------- ---------- ---------
FROM item 609 100870 5
WHERE ordid = 605 ) 616 100861 10
616 102130 10
AND qty IN (select qty
621 100861 10
FROM item 618 100870 10
WHERE ordid = 605 ) 618 100861 50
AND ordid <> 605 ; 616 100870 50
‫ة‬UU‫تج أو أي كمي‬UU‫م من‬UU‫اثلين ألي رق‬UU‫ر مم‬UU‫ب آخ‬UU‫صر بترتي‬UU‫ عن‬16 ‫د‬UU‫ه يوج‬UU‫ي أن‬UU‫ذا يعن‬UU‫ھ‬ 617 100861 100
.605 ‫موجودة ضمن الترتيب رقم‬ 619 102130 100
615 100870 100
617 100860 100
621 100870 100
617 102130 100

Null Values in a Subquery ‫القيم الفارغة في االستفسار الجزئي‬


Return Nulls in the Resulting Set of a Subquery ‫إعادة القيم الفارغة ضمن مجموعة النتائج التي يعيدھا االستفسار الجزئي‬
SQL> Select employee.ename : ‫مثال‬
From emp employee No rows selected
WHERE employee.empno NOT IN
(select manager.mgr
FROM emp manager );
‫ والسبب في ذلك‬NULL ‫ال يعيد المثال السابق أي صف وذلك ألن أحد القيم التي يعيدھا االستفسار الجزئي أو الداخلي ھي قيمة فارغة‬
‫ولذلك مع أي استفسار جزئي قد ينتج قيم فارغة ال تستخدم معامل‬. NULL ‫أن أي نتيجة مقارنة مع القيمة الفارغة تعطينا قيمة فارغة‬
‫= كما في‬ANY ‫ لن يكون ھناك مشكلة ألن ھذا المعامل يكافئ‬IN ‫=! و لكن باستخدام المعامل‬ALL ‫ ألنه يكافئ‬NOT IN ‫المقارنة‬
:‫المثال التالي‬
SQL> Select employee.ename ENAME : ‫مثال‬
---------
From emp employee JONES
WHERE employee.empno IN BLAKE
(select manager.mgr CLARK
FROM emp manager ); SCOTT
KING
FORD

Using a Subquery in the FROM Clause FROM ‫استخدام االستفسار الجزئي ضمن عبارة‬
SQL> Select a.ename, a.sal ,a.deptno , b.salavg : ‫مثال‬
From emp a ,( SELECT deptno , avg(sal) salavg
FROM emp
GROUP BY deptno ) b
WHERE a.demptno = b.deptno
AND a.sal > b.salavg ; ENAME SAL DEPTNO SALAVG
---------- ---------- ---------- ----------
KING 5000 10 2916.66667
FORD 3000 20 2175
SCOTT 3000 20 2175
JONES 2975 20 2175
ALLEN 1600 30 1566.66667
- 24 - BLAKE 2850 30 1566.66667
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

‫ التقارير التفاعلية‬Interactive Reports


( ‫ المتحوالت البديلة )متحوالت اإلبدال‬Substitution Variables
Use SQL*Plus substitution variables to temporarily store values.
.‫تستخدم متحوالت التبديل من أجل التخزين المؤقت للقيم‬
 Single ampersand (&). ‫العالمة‬
 Double ampersand (&&).‫العالمة المزدوجة‬
 DEFINE and ACCEPT commands. ‫األوامر‬
Pass variable values between SQL statements.
SQL ‫تمرير قيم المتحوالت بين عبارات الـ‬
Dynamically alter headers and footers. (‫التغيير الديناميكي للعناوين)الرؤوس( والذيول )الھوامش السفلية‬

Using the & substitution variable & ‫استخدام المتحول البديل‬


Use the variable prefixed with an ampersand (&) to prompt the user for a value.
. ‫قم باستخدام المتحول البديل مع وضع العالمة & في بدايته وذلك ليقوم بدعوة المستخدم إلدخال القيمة‬
Notation Description
Indicates a variable in a SQL statement; if the variable does not exist.
SQL*Plus prompts the user for a value (SQL*Plus discards a new variable
&user_variable once it is used )
‫ بحث المستخدم على‬SQL ‫إذا لم يكن المتحول مدخالً تقوم‬. SQL ‫يدل على المتحول في عبارة‬
‫ باالستغناء عن القيمة المدخلة عند استخدامھا مرة واحدة‬SQL ‫إدخال قيمة المتحول ) تقوم‬

SQL> Select empno, ename ,sal , deptno : ‫مثال‬


From emp Enter value for employee_num : 7367
WHERE empno = &employee_num;
EMPNO ENAME SAL DEPTNO
---------- ---------- -------- ----------
7369 SMITH 800 20

. 7367 ‫ويكون الخرج بالشكل السابق حيث يطالبنا بإدخال قيمة المتحول البديل نقوم بإدخال أحد أرقام الموظفين وليكن‬
Using the SET VERIFY Command ‫استخدام وتفعيل أمر التحقق‬
Toggling the display of the text of a command before and after SQL*Plus replaces substitution variables
with values.
.‫ بتبديل متحوالت البدل بقيمھا‬SQL ‫يقوم ھذا األمر بالتأكيد على عرض النص الخاص باألمر قبل وبعد أن تقوم‬
SQL> SET VERIFY ON : ‫مثال‬
SQL> Select empno, ename ,sal , deptno Enter value for employee_num : 7367
From emp old 3: where empno = &emplyee_num
WHERE empno = &employee_num; new 3: where empno = 7369
EMPNO ENAME SAL DEPTNO
---------- ---------- -------- ----------
7369 SMITH 800 20
‫ وعندما نريد إيقاف مجموعة التأكيد نكتب‬.‫بمعنى آخر يقوم ھذا األمر بإعطاء تقرير عن اسم المتحول قبل التغيير وقيمته بعد التغيير‬
. SET VERIFY OFF ‫التعليمة‬

- 25 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
Character and Data Values with Substitution Variables ‫المحارف وقيم البيانات مع المتحوالت البديلة‬
Use single quotation marks for data and character values.
.(‫قم باستخدام فواصل علوية مع البيانات والقيم الحرفية )المحارف‬
SQL> Select ename , deptno, sal*12 : ‫مثال‬
From emp Enter value for job_title: ANALYST
WHERE job = '&job_title' ;
ENAME DEPTNO SAL*12
---------- ---------- ----------
SCOTT 20 36000
FORD 20 36000

Specifying Column Names, Expressions, and Text at Runtime


‫ ونصوص مختارة في وضع التنفيذ‬، ‫ تعابير مختارة‬، ‫أسماء أعمدة مختارة‬
Use substitution variables to supplement the following:
: ‫قم باستخدام متحوالت البدل الستكمال ما يلي‬
WHERE condition
ORDER BY clause
Column expression.
Table name
Entire select statement
.‫ تامة‬SELECT ‫ و تعبير العمود و اسم الجدول و عبارة‬ORDER BY ‫ وعبارة‬WHERE ‫شرط‬
Not only can you use the substitution variables in the where clause of a SQL statement. But also these
variables can be used to substitute column names, expressions, or text.
‫ ولكن ھذه المتحوالت تستخدم الستبدال أسماء األعمدة و‬SQL ‫ الخاصة بعبارة‬WHERE ‫ال تستخدم متحوالت البدل فقط ضمن عبارة‬
.‫التعابير والنص‬
SQL> Select empno, &column_name : ‫مثال‬
From emp Enter value for column_name: job
WHERE &condition ; Enter value for condition: deptno = 10
EMPNO JOB
----------- ---------
7782 MANAGER
7839 PRESIDENT
7934 CLERK

SQL> Select empno, ename, job, &column_name : ‫مثال‬


From emp
WHERE &condition Enter value for column_name: sal
ORDER BY &order_column ; Enter value for condition: sal>=3000
Enter value for order_column: ename
EMPNO ENAME JOB SAL
------ ---------- --------- -------
7902 FORD ANALYST 3000
7839 KING PRESIDENT 5000
7788 SCOTT ANALYST 3000

- 26 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Using the && substitution variable && ‫استخدام المتحول البديل‬


Use the double-ampersand (&&) if you want to reuse the variable value without prompting the user each
time.
.‫قم باستخدام العالمة المزدوجة )&&( مع المتحول البديل في حالة أردت إعادة استخدام قيمة المتحول بدون إبالغ المستخدم في كل مرة‬
SQL> Select empno, ename, job, &&column_name : ‫مثال‬
From emp
ORDER BY & column_name ; Enter value for column_name: deptno

EMPNO ENAME DEPTNO


------ ---------- ----------
7782 CLARK 10
7839 KING 10
7934 MILLER 10
7369 SMITH 20
7876 ADAMS 20
7902 FORD 20
……
14 rows selected

‫في ھذه الحالة يقوم المتحول البديل بحفظ القيمة المدخلة ضمنه من أول تنفيذ‬

Defining User Variables ‫تعريف متحوالت خاصة بالمستخدم‬


Command ‫األمر‬ ‫ الوصف‬Description
Creates a CHAR datatype user variable and assigns a
DEFINE variable - value
value to it. ‫إنشاء متحول حرفي خاص با لمستخدم وتحديد قيمة له‬
Display the variable, its value, and its datatype
DEFINE variable
‫عرض المتحول وقيمته ونوع بياناته‬
Display all user variables with value and datatype
DEFINE
‫عرض جميع متحوالت المستخدم مع قيمھا وأنواعھا‬
Reads the line of user input and store it in a variable
ACCEPT (see syntax on next slide )
‫قراءة السطر المدخل من المستخدم وتخزينه ضمن المتحول‬
DEFINE‫األمر‬ The DEFINECommand

Variables remains defined until you either: : ‫المتحوالت تبقى معرفة حتى تقوم بأحد األمرين‬
-Use the UNDEFINE command to clear it. . ‫ لمسحھا‬UNDEFINE ‫ استخدام األمر‬-
- Exit SQL*Plus. . SQL*Plus ‫ الخروج من بيئة‬-
To define variables for every session modify your login.sql file so that the variables are created at startup.
.‫ عندھا تتولد المتحوالت تلقائيا ً عند اإلقالع‬Login.sql ‫لتبقى المتحوالت معرفة في كل مرة تريد فيھا الدخول قم بتعديل الملف‬
Create a variable to hold the department name ‫ إنشاء متحول يحمل اسم الشقة‬: ‫مثال‬
SQL> DEFINE deptname = sales
SQL> DEFINE deptname
DEFINE DEPTNAME = "sales" (CHAR)

- 27 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
Use the variable as you would any other variable ‫ قم باستخدام المتحول كأي متحول آخر‬: ‫مثال‬
SQL> Select *
FROM dept DEPTNO DNAME LOC
Where dname = UPPER( '&deptname') ; ------- -------------- -------
30 SALES CHICAGO

To erase the variable you use the UNDEFINE command UNDEFINE ‫لمحو المتحول أو إزالته نستخدم األمر‬
SQL> UNDEFINE deptname
SQL> DEFINE deptname Symbol deptname is UNDEFINED

ACCEPT‫األمر‬ The ACCEPT Command

ACCEPT variable [datatype] [FORMAT format] :‫الشكل العام‬


[PROMPT text] [HIDE]
variable is the name of the variable that stores a value (If it does not exist SQL*Plus creates it )
( ً ‫ بإنشائه تلقائيا‬SQL*Plus ‫ اسم المتحول الذي يقوم بتخزين القيمة ) إذا لم تقم بإنشائه تقوم‬variable
datatype is NUMBER, CHAR, or DATE (CHAR has a maximum length limit of 240 bytes. DATE
checks against a format model, and the datatype is CHAR)
‫ه‬U‫ق علي‬U‫شكل المطب‬U‫ والتاريخ يأخذ ال‬،‫ بايت‬240 ‫ نوع البيانات عددية أو حرفية أو تاريخ ) البيانات الحرفية تأخذ طول أعظمي‬datatype
( ‫ ونوع بياناته حرفية‬format ‫ضمن‬
FOR[MAT] format specifies the format model—for example, A10 or 9.999
PROMPT text displays the text before the user can enter the value.
.‫ عرض النص الذي يقوم بإخبار المستخدم بإدخال القيمة قبل إدخالھا‬PROMPT text
HIDE suppresses what the user enters--- for example, a password.
.‫ يقوم بإخفاء القيمة المدخلة من قبل المستخدم يستخدم على سبيل المثال لكلمة المرور‬HIDE
♦ ACCEPT: Read user input and store it in a variable.
♦ Creates a customized prompt when accepting user input.
♦ Explicitly defines a NUMBER or DATE datatype variable.
♦ Hides user input for security reasons.
.‫♦ يقوم ھذا األمر بقراءة القيمة التي يدخلھا المستخدم ثم يقوم بتخزينھا في المتحول‬
.‫♦ يستخدم لوضع عبارة اختيارية من أجل إخبار المستخدم بعملية اإلدخال‬
.‫♦ يستخدم للتحديد الصريح لنوع بيانات المتحول إن كان رقم أو تاريخ‬
.(‫♦ و يستخدم إلخفاء القيم المدخلة من قبل المستخدم ألسباب أمنية )للحفاظ على السرية‬
: ‫مثال‬
SQL>ACCEPT dept PROMPT ' Provide the department name : '
Select *
Provide the department name : Sales
From dept
DEPTNO DNAME LOC
WHERE dname = UPPER( '&dept') ; ------- -------------- -------
30 SALES CHICAGO

- 28 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Customizing the SQL*Plus Environment ‫تخصيص بيئة االس كيو ال بلس‬

SET system_variable value :‫الشكل العام‬

system_variable is a variable that controls one aspect of the session environment .


value is a value for the system variable .
.‫ متحول يتحكم بمظھر واحد من مظاھر بيئة الجلسة الحالية‬system_variable
.‫قيمة متحول النظام‬ Value
. ‫ يمكنك التحكم بإعدادات الجلسة الحالية‬SET ‫باستخدام أمر‬
. SHOW ‫يمكن التأكد من اإلعدادات باستخدام أمر التأكد‬
.‫ لرؤية كافة متحوالت النظام وأوضاعھا‬SHOW ALL ‫يمكنك استخدام األمر‬

SQL> SET ECHO ON : ‫مثال‬


SQL> SHOW ECHO echo ON
‫ مسؤول عن التكرار‬Echo ‫حيث‬

SET Command Variables SET (‫متحوالت أمر التفعيل )التحديد‬


The underscore values indicate default values ‫الخط السفلي في الجدول موضوع تحت القيم االفتراضية‬
SET Variable and Value ‫ الوصف‬Description
ARRAYSIZE {20|n} Set the database data fetch size ‫تحديد حجم البيانات المستخرجة من قاعدة البيانات‬
Sets text to be printed between columns ( The default is single space)
CLOSEP { |text}
( ‫ضبط النص الذي نريد طباعته بين األعمدة ) االفتراضي فراغ وحيد‬
Display a number of records returned by a query when the query selects
FEED[BACK]{6 |n |OFF|ON} at least n records. Example ( 13 rows selected.)‫في نھاية نتيجة االستعالم‬
‫ سجل كحد أدنى‬n ‫يعرض عدد السجالت المعادة من االستعالم عندما يقوم االستعالم باختيار‬
HEA[DING] {OFF|ON} ‫مسؤول عن إظھار وإخفاء أسماء األعمدة في نتيجة االستعالم‬
‫ حرف وبذلك يمكن إظھار الجدول‬n ‫ضبط وتحديد عدد األحرف األعظمي لكل سطر حتى‬
LIN[ESIZE] {80| n }
SET LIN 100 : ً‫كامالً إذا كانت السجالت طويلة أو عدد األعمدة كبير مثال‬
LONG {80| n } LONG ‫تحديد الطول األعظمي لعرض قيم البيانات الطويلة‬
‫تحديد عدد األسطر األعظمي في كل صفحة من صفحات الخرج بذلك يمكن تحديد عدد‬
PAGES[IZE] {24| n }
‫صفوف معينة لكل جزء من الخرج أي يمكن تجزيء الناتج إلى جداول بدل من جدول‬
Allow you to control scrolling of your terminal ( You must press
PAU[SE] {OFF|ON| text}
[Return] after seeing each pause) ‫تمكنك من التحكم بتحريك الطرف السفلي‬
Determines whether output is displayed on screen
TERM[OUT] {OFF|ON}
‫يحدد فيما إذا كان الخرج قد ظھر على الشاشة‬
ECHO {OFF|ON} ‫مسؤول عن التكرار‬
The login.sql file contains standard set and other SQL*Plus commands that are implemented at login.
You can modify login.sql to contain additional set commands .
. ‫ والتي تنفذ عند الدخول‬SQL*Plus ‫ األوامر القياسية باإلضافة إلى أوامر أخرى من‬login.sql ‫يحتوي الملف‬
.‫ ليحوي أوامر إضافية‬login.sql ‫بإمكانك القيام بتعديل ملف الدخول‬
SQL*Plus Format Commands SQL*Plus ‫أوامر الشكل في الـ‬
Command ‫ الوصف‬Description
COL[UMN] [column option] Control column formats ‫التحكم بتصميمات العمود بإضافة خيار كما في الفقرة التالية‬
Specifies a header to appear at the top of each page
TTI[TLE] [text|OFF|ON]
‫تخصيص عنوان يظھر في أعلى كل صفحة‬
Specifies a footer to appear at the bottom of each page of the report
BTI[TLE] [text|OFF|ON]
‫تخصيص ھامش سفلي يظھر في أسفل كل صفحة‬
Suppresses duplicate value and sections rows of data with line feeds
BRE[AK] [ON report element]
‫طمس وإخفاء القيم المضاعفة ومقاطع من الصفوف بسطر فارغ‬

- 29 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫"‪SQL>TTI "Students Table‬‬ ‫تكتب ھذه األوامر مع معامالتھا مباشرة بدون سابق كما يلي ‪:‬‬
‫"‪SQL>BTI "END Report‬‬

‫‪The COLUMN Command‬‬ ‫أوامر العمود‬


‫‪Controls display of a column‬‬ ‫تحكمات بطريقة عرض العمود‬
‫]‪COL[UMN‬‬ ‫]]‪[{column|alias} [option‬‬

‫‪COLUMN Command Options‬‬ ‫جدول خيارات أمر العمود‬


‫الخيار ‪Option‬‬ ‫‪ Description‬الوصف‬
‫]‪CLE[AR‬‬ ‫مسح أي إعداد لشكل العمود مثال‪COL ename CLE :‬‬
‫‪FOR[MAT] format‬‬ ‫تغيير طريقة عرض بيانات العمود‬
‫‪HEA[DING] text‬‬ ‫تغيير طريقة عرض عنوان العمود )رأس العمود( مثال‪COL ename HEA employee :‬‬
‫يجعل اسم العمود )الرأس( وليس البيانات يكون في اليسار أو الوسط أو اليمين حسب اإلتجاه‬
‫}‪JUS[TIFY] {align‬‬
‫مثال ‪COL job JUS CENTER:‬‬
‫]‪NOPRI[NT‬‬ ‫إخفاء أعمدة ضمن التقرير مثال ‪COL sal NOPRI :‬‬
‫‪NUL[L] text‬‬ ‫اختيار قيمة لتعبئتھا في التقرير مكان القيم الفارغة مثال ‪COL comm NUL 0 :‬‬
‫]‪PRI[NT‬‬ ‫إظھار العمود المخفي مثال ‪COL sal PRI :‬‬
‫]‪TRU[NCATED‬‬ ‫يقوم بقطع السلسلة في نھاية السطر األول من العرض‬
‫]‪WRA[PPED‬‬ ‫التفاف نھاية السلسلة إلى السطر التالي )السطور ملتفة(‬

‫أمثلة ‪:‬‬
‫‪SQL>COLUMN ename HEADING 'Employee|Name' FORMAT A15‬‬ ‫إنشاء رؤوس )عناوين ( لألعمدة ‪:‬‬
‫‪SQL>COLUMN sal JUSTIFY LEFT FORMAT $99,990.00‬‬
‫'‪SQL>COLUMN mgr FORMAT 999999999 NULL 'No manager‬‬
‫; ‪SQL>SELECT ename, mgr , sal FROM emp‬‬ ‫وعندھا يصبح ناتج ما يلي ‪:‬‬

‫‪Employee‬‬
‫‪Name‬‬ ‫‪MGR‬‬ ‫‪SAL‬‬ ‫‪ COLUMN Format Models‬نماذج لشكل العمود‬
‫‪--------------- ------------‬‬ ‫‪----------------‬‬ ‫‪Element‬‬ ‫‪Description‬‬ ‫‪Example Result‬‬
‫‪SMITH‬‬ ‫‪7902‬‬ ‫‪$800.00‬‬ ‫يقوم بإعدادالعرض حسب قيمة‬
‫‪An‬‬ ‫‪N/A‬‬ ‫‪N/A‬‬
‫‪ALLEN‬‬ ‫‪7698‬‬ ‫‪$1,600.00‬‬ ‫‪ n‬كما في المثال السابق‪A15‬‬
‫‪WARD‬‬ ‫‪7698‬‬ ‫‪$1,250.00‬‬ ‫‪9‬‬ ‫أقرب عدد صحيح‬ ‫‪999999‬‬ ‫‪1234‬‬
‫‪JONES‬‬ ‫‪7839‬‬ ‫‪$2,975.00‬‬ ‫‪0‬‬ ‫يضع صفر يساري إجباري‬ ‫‪099999‬‬ ‫‪01234‬‬
‫‪MARTIN‬‬ ‫‪7698‬‬ ‫‪$1,250.00‬‬ ‫‪$‬‬ ‫عالمة دوالر ‪$‬‬ ‫‪$9999‬‬ ‫‪$1234‬‬
‫‪BLAKE‬‬ ‫‪7839‬‬ ‫‪$2,850.00‬‬ ‫‪L‬‬ ‫رمز للعملة المحلية مھما يكن‬ ‫‪L9999‬‬ ‫‪L1234‬‬
‫‪CLARK‬‬ ‫‪7839‬‬ ‫‪$2,450.00‬‬
‫‪SCOTT‬‬ ‫‪7566‬‬ ‫‪$3,000.00‬‬ ‫‪.‬‬ ‫الفاصلة العشرية‬ ‫‪9999.99 1234.00‬‬
‫‪KING‬‬ ‫‪No manager‬‬ ‫‪$5,000.00‬‬ ‫‪,‬‬ ‫فاصلة اآلالف‬ ‫‪9.999‬‬ ‫‪1,234‬‬
‫‪TURNER‬‬ ‫‪7698‬‬ ‫‪$1,500.00‬‬
‫‪ADAMS‬‬ ‫‪7788‬‬ ‫‪$1,100.00‬‬
‫‪JAMES‬‬ ‫‪7698‬‬ ‫‪$950.00‬‬
‫‪FORD‬‬ ‫‪7566‬‬ ‫‪$3,000.00‬‬
‫‪MILLER‬‬ ‫‪7782‬‬ ‫‪$1,300.00‬‬

‫‪- 30 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
: ‫أمثلة‬
Display the current setting for the ENAME column ENAME ‫ عرض اإلعدادات الحالية للعمود‬
SQL>COLUMN ename
COLUMN ename ON
HEADING 'Employee'
FORMAT A15

Display the current setting for all columns ‫ عرض اإلعدادات الحالية لكافة األعمدة‬
SQL>COLUMN
Clear setting for the ENAME column ENAME ‫ مسح اإلعدادات الحالية للعمود‬
SQL>COLUMN ename CLEAR
Clear setting for all columns ‫ مسح اإلعدادات الحالية لكافة األعمدة‬
SQL> CLEAR COLUMN
SQL> CLE COL ◌ً‫أو اختصارا‬
Suppresses duplicate value ‫ إخفاء القيم المضاعفة‬
SQL>BREAK ON ename ON job
To section out rows at break value ‫ القتطاع صفوف أو وضع صفوف فارغة بين سجالت التقرير‬
SQL>BREAK ON ename SKIP4 ON job SKIP2
Clear all BREAK setting BREAK ‫ مسح كل إعدادات تعليمة الــ‬
SQL>CLEAR BREAK
Set the report header ‫ وضع عنوان للتقرير‬
SQL>TTITLE 'Salary|Report'
Set the report footer ‫ وضع ھامش سفلي للتقرير‬
SQL>BTITLE ' Confidential '

Creating a Script File to Run a Report ‫إنشاء ملف نصي لحفظ وتشغيل التقرير‬
A. Create the SQL SELECT statement at the SQL prompt. Ensure that the data required for the
report is accurate before you save the statement to a file and apply formatting commands. Ensure
that the relevant ORDER BY clause is included if you intend to use breaks.
B. Save the SELECT statement to a script file.
C. Edit the script file to enter the SQL*Plus commands.
D. Add the required formatting commands before the SELECT statement. Be certain not to place
SQL*Plus commands within the SELECT statement.
E. Verify that the SELECT statement is followed by a run character. Either a semicolon ( ; ) or a
slash ( / ).
F. Add the format-clearing SQL*Plus commands after the run character. As an alternative, you can
call a reset file that contains all the format-clearing commands.
G. Save the script file with your changes.
H. In SQL*Plus, run the scripting file by entering START filename or @filename. This command is
required to read and execute the script file.
‫ تأكد أن البيانات المطلوبة للتقرير دقيقة قبل حفظ التعليمة إلى ملف وتفعيل أوامر‬.SQL ‫ ضمن ملقن‬SQL ‫ قم بإنشاء عبارة‬.A
. BREAK ‫ مناسبة إذا كنت تنوي استخدام أوامر الكسر‬ORDER BY ‫ تأكد من وجود عبارة‬. ‫التنسيقات‬
.‫ التي قمت بإنشائھا ضمن ملف نصي‬SELECT ‫ قم بحفظ تعليمة‬.B
. SQL*Plus ‫ قم بتحرير الملف النصي إلدخال أوامر‬.C
. SELECT ‫ ضمن عبارة‬SQL*Plus ‫ كن واثقا من عدم وضع أوامر‬. SELECT ‫ قم بإضافة أوامر التنسيقات قبل عبارة‬.D
ً
.( / ) ‫ متبوعة برمز تشغيل وھو أياً من الفاصلة المنقوطة ) ; ( أو الخط المائل بالشكل‬SELECT ‫ تحقق من أن عبارة‬.E
‫ الذي‬reset ‫ كأحد الخيارات غير أنه يمكنك استدعاء ملف إعادة اإلفتراضيات‬،‫ قم بإضافة أوامر مسح التنسيق بعد رمز التشغيل‬.F
. ‫يحتوي بدوره على كافة أوامر مسح التنسيق‬
.‫ إحفظ الملف النصي مع التغييرات‬.G

- 31 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
‫@ ھذا األمر‬filename ً‫ مع اسم الملف أو اختصارا‬START ‫ قم بتشغيل الملف النصي باستخدام األمر‬SQL*Plus ‫ ضمن‬.H
.‫مطلوب لقراءة وتنفيذ الملف النصي‬
‫ قم بوضع عنوان للتقرير مكون من سطرين‬$3000 ‫ قم بإنشاء تقرير يظھر نوع العمل واس وراتب كل موظف راتبه أقل من‬: ‫مثال‬
‫ يكون‬Job Category ‫ باسم‬Job ‫ قم بوضع عنوان آخر للعمود‬Confidential ‫ وفي وسط وأسفل الصفحة أكتب‬Employee Report
‫ باسم‬Sal ‫ثم قم بوضع عنوان آخر لعمود الراتب‬. Employee ‫ باسم‬Ename ‫ ثم قم بوضع عنوان آخر للعمود‬. ‫مقسوما ً إلى سطرين‬
: $2,500.0 ‫ وقم بتنسيقه إلى الشكل‬Salary

‫ الملف النصي‬Script File


SET PAGESIZE 37
SET LINESIZE 60
SET FEEDBACK OFF
TTITLE 'Employee|Report'
BTITLE 'Confidential'
BREAK ON job
COLUMN job HEADING 'Job|Category' FORMAT A15
COLUMN ename HEADING 'Employee' FORMAT A15
COLUMN sal HEADING 'Salary' FORMAT $99,999.99
REM ** Insert SELECT statement
SELECT job, ename, sal ‫التقرير‬
FROM emp Fri Oct 12 page 1
WHERE sal < 3000 Employee
ORDER BY job, ename Report
/
SET FEEDBACK ON Job
REM clear all formatting commands Category Employee Salary
--------------- --------------- --------------
CLERK ADAMS $1,100.00
JAMES $950.00
MILLER $1,300.00
SMITH $800.00
MANAGER BLAKE $2,850.00
CLARK $2,450.00
JONES $2,975.00
SALESMAN ALLEN $1,600.00
MARTIN $1,250.00
TURNER $1,500.00
WARD $1,250.00

Confidential

- 32 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪Data Manipulation Language‬‬


‫لغة معالجة البيانات‬
‫‪Data manipulation language (DML) is a core part of SQL . When you want to add, update, or delete‬‬
‫‪data in the database, you execute a DML statement .‬‬
‫‪A collection of DML statements that from a logical unit of work is called a transaction .‬‬
‫لغة معالجة البيانات ويرمز لھا اختصاراً ‪ DML‬تعتبر جزء رئيسي أو مركزي من لغة اـ ‪ SQL‬عندما تريد إضافة أو تعديل أو حذف‬
‫بيانات من قاعدة البيانات عليك إنجاز عبارة ‪. DML‬‬
‫مجموعة عبارات لغة ‪ DML‬من وحدة منطقية من العمل تسمى إجراء أو صفقة )معاملة تجارية(‪.‬‬
‫على سبيل المثال إذا قام أحد عمالء بنك بتحويل مبلغ من الحساب المودع إلى حساب الشيكات )الج‪U‬اري ( ھ‪U‬ذا اإلج‪U‬راء ربم‪U‬ا يك‪U‬ون مؤلف‪U‬اً‬
‫من ثالث عمليات منفصلة ‪ .‬إنق‪U‬اص الح‪U‬ساب الم‪U‬ودع وزي‪U‬ادة الح‪U‬ساب الج‪U‬اري وت‪U‬سجيل عملي‪U‬ة التحوي‪U‬ل ض‪U‬من س‪U‬جل التحوي‪U‬ل ‪ .‬يج‪U‬ب أن‬
‫مخدم أوراك‪U‬ل إنج‪U‬از جمي‪U‬ع عب‪U‬ارات ‪ SQL‬ليح‪U‬افظ عل‪U‬ى الح‪U‬سابات ف‪U‬ي ت‪U‬وازن ص‪U‬حيح ‪ .‬وإذا أع‪U‬اق ش‪U‬يء م‪U‬ا أح‪U‬د ھ‪U‬ذه العب‪U‬ارات‬‫يضمن ّ‬
‫الخاصة بعملية التحويل يجب أن ال تنجز باقي العمليات ‪.‬‬
‫‪The INSERT statement‬‬ ‫عبارة اإلدخال ‪INSERT‬‬
‫‪Add new rows to a table by using the INSERT statement‬‬ ‫إدخال صفوف جديدة باستخدام ‪INSERT‬‬
‫])]‪INSERT INTO table [ (column [, column….‬‬ ‫الصيغة العامة‪:‬‬
‫‪Values‬‬ ‫; )]‪(value [, value….‬‬

‫‪table is the name of table‬‬ ‫‪ table‬تعبر عن اسم الجدول‬


‫‪column is the name of the column in the table to populate‬‬ ‫‪ column‬تعبر عن اسم العمود ضمن الجدول لإلدخال‬
‫‪value is the corresponding value for the column‬‬ ‫‪ value‬تعبر عن القيمة المناظرة للعمود‬
‫إرشادات ‪ :‬عند إدخال صف جديد عليك التقيد بما يلي ‪:‬‬
‫أدخل الصف الجديد بحيث يحتوي على قيم لكل عمود بدون استثناء ‪.‬‬
‫قم بترتيب القيم المدخلة حسب الترتيب االفتراضي لألعمدة في الجدول ‪.‬‬
‫بإمكانك ترتيب أسماء األعمدة في الجدول بشكل اختياري لكن ترتيب القيم يجب أن يطابق ترتيب األعمدة ‪.‬‬
‫قم بإحاطة القيم الموافقة للبيانات الحرفية والتواريخ بفواصل علوية )عالمات اقتباس( مفردة ‪.‬‬
‫)‪SQL> INSERT INTO dept (deptno, dname, loc‬‬ ‫مثال ‪:‬‬
‫‪VALUES‬‬ ‫; ) '‪( 50, 'DEVELOPMENT' , 'DETRIOT‬‬
‫‪1 row created.‬‬

‫‪Inserting Special Value‬‬ ‫إدخال قيم خاصة باستخدام التوابع‬

‫‪SQL> INSERT INTO emp‬‬ ‫‪(empno, ename, job, mgr, hiredate,‬‬ ‫مثال ‪:‬‬
‫)‪Sal, comm, deptno‬‬
‫‪VALUES‬‬ ‫‪( 7196, 'GREEN' , 'SALESMAN', 7782, SYSDATE,‬‬
‫; ) ‪2000, NULL, 10‬‬ ‫‪1 row created.‬‬
‫يقوم التابع ‪ SYSDATE‬في المثال السابق بإدراج قيمة التاريخ الحالي ضمن الحقل ‪hiredate‬‬
‫‪SQL> SELECT * FROM emp‬‬ ‫للتحقق نضع ‪:‬‬
‫; ‪WHERE empno = 7196‬‬

‫‪EMPNO ENAME‬‬ ‫‪JOB‬‬ ‫‪MGR‬‬ ‫‪HIREDATE‬‬ ‫‪SAL‬‬ ‫‪COMM DEPTNO‬‬


‫‪------‬‬ ‫‪----------‬‬ ‫‪---------‬‬ ‫‪---------- --------‬‬ ‫‪---------- ---------- ----------‬‬
‫‪7196‬‬ ‫‪GREEN‬‬ ‫‪SALESMAN‬‬ ‫‪7782‬‬ ‫‪13/06/04‬‬ ‫‪2000‬‬ ‫‪10‬‬

‫‪- 33 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
Inserting Special Date Value ‫إدخال قيم خاصة للتاريخ باستخدام التوابع‬
SQL> INSERT INTO emp : ‫مثال‬
VALUES ( 2296, 'ARMANO' , 'SALESMAN', 7782,
TO_DATE( 'FEB 3, 97' , 'MON DD, YY' ) , 1300, NULL, 10 ) ; 1 row created.

. INSERT ‫وبالتالي يمكننا استخدام توابع التواريخ ضمن تعليمة اإلدخال‬


Creating a Script with Customized Prompts ‫إنشاء ملف نصي مع إدخال خاص‬

‫ الملف النصي‬Script File


ACCEPT department_id PROMPT 'Please enter the department number : '
ACCEPT department_name PROMPT 'Please enter the department name : '
ACCEPT location PROMPT 'Please enter the location : '
INSERT INTO dept (deptno, dname, loc)
VALUES ( &department_id , '&department_name', '&location' ) ;

. ‫عند تشغيل ھذا الملف يطلب منا إدخال قيم المتحوالت واحد تلو اآلخر ثم يقوم بإدخالھا ضمن الجدول‬
Please enter the department number : 90
Please enter the department name : PAYROL
Please enter the location : HOUSTON

1 row created.

The UPDATE statement UPDATE ‫عبارة اإلدخال‬


Modify existing rows with the UODATE statement UPDATE ‫تعديل صفوف موجودة باستخدام‬
UPDATE table :‫الصيغة العامة‬
SET column = value [ , column = value, …..]
[WHERE condition ] ;

table is the name of table ‫ تعبر عن اسم الجدول‬table


column is the name of the column in the table to populate ‫ تعبر عن اسم العمود ضمن الجدول لإلدخال‬column
value is the corresponding value for the column ‫ تعبر عن القيمة المناظرة للعمود‬value
condition identifies the rows to be updated ‫ شرط يعين الصفوف التي سيتم تعديلھا‬Condition

Specific row or rows are modified when you specify the WHERE clause.
. WHERE ‫يتم تعديل صف واحد أو عدة صفوف محددة بشكل دقيق عند استخدام عبارة‬
SQL> UPDATE emp : ‫مثال‬
SET deptno = 20
WHERE empno = 7782 ; 1 row updated.

All rows in the table are modified if you omit the WHERE clause.
. WHERE ‫يتم تعديل كل الصفوف ضمن الجدول عند حذف عبارة‬
SQL> UPDATE emp : ‫مثال‬
SET deptno = 20 ; 14 rows updated.

- 34 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
Updating with Multiple-Column Subquery ‫التحديث باستخدام استفسار جزئي متعدد األعمدة‬

empno= 7499 ‫ لتكون مساوية للموظف رقم‬empno=7698 ‫ للموظف رقم‬deptno ‫ ورقم الشقة‬job ‫ تحديث عمل الموظف‬: ‫مثال‬
SQL> UPDATE emp
SET ( job, deptno ) =
( SELECT job, deptno 1 row updated.
FROM emp
WHERE empno = 7944 )
WHERE empno = 7698 ;
Multiple-column subqueries can be implemented in he SET clause of an UPDATE statement.
. UPDATE ‫ التابعة لتعليمة‬STE ‫االستفسار المتعدد األعمدة يمكن أن ينفذ ضمن عبارة‬

Updating Rows Based on Another Table ‫تحديث صفوف بناء على جدول ثاني‬

SQL> UPDATE employee : ‫مثال‬


SET deptno = ( SELECT deptno 20
FROM emp
WHERE empno = 7788 )
2 rows updated.
WHERE job = ( SELECT job ANALYST
FROM emp
WHERE empno = 7788 ) ;

Updating Rows Integrity Constraint Error ‫تحديث الصفوف وخطأ قيد التكامل‬

SQL> UPDATE emp : ‫مثال‬


SET deptno = 55
UPDATE emp
WHERE deptno = 10 ;
*
ERROR at line 1:
‫ غير موجود‬55 ‫رقم القسم‬ ORA-02291: integrity constraint (SCOTT.FK_DEPTNO)
violated – parent key not found
‫( مفتاح العنصر الرئيسي غير موجود‬...) ‫تم انتھاك قيد التكامل‬

The DELETE statement DELETE ‫عبارة الحذف‬


Remove existing rows from a table by using the DELETE statement (DELETE ‫)حذف صفوف موجودة باستخدام‬
DELETE [FROM] table :‫الصيغة العامة‬
[WHERE condition ] ;

table is the name of table ‫ تعبر عن اسم الجدول‬table


condition identifies the rows to be deleted ‫ شرط يعين الصفوف التي سيتم حذفھا‬Condition

Specific rows are deleted when you specify the WHERE clause.
. WHERE ‫يتم حذف صفوف محددة بشكل دقيق عند استخدام عبارة‬
SQL> DELETE FROM dept : ‫مثال‬
1 row deleted.
WHERE dname = 'DEVELOPMENT' ;

All rows in the table are deleted if you omit the WHERE clause.
. WHERE ‫يتم حذف كل الصفوف ضمن الجدول عند حذف عبارة‬
SQL> DELETE FROM dept ; : ‫مثال‬
4 rows deleted.

- 35 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪SQL> DELETE FROM emp‬‬ ‫مثال ‪:‬‬


‫‪WHERE‬‬ ‫; ) '‪hiredate > TO_DATE ( '01.01.97' , 'DD.MM.YY‬‬
‫‪1 row deleted.‬‬
‫يقوم بحذف كل الموظفين الذين بدأوا بعد ‪January 1. 1997‬‬
‫‪Deleting Rows Based on Another Table‬‬ ‫حذف صفوف بناء على جدول ثاني‬

‫‪SQL> DELETE FROM emp‬‬


‫‪WHERE‬‬ ‫= ‪deptno‬‬ ‫‪30‬‬
‫‪( SELECT deptno‬‬ ‫‪6 rows deleted.‬‬
‫‪FROM dept‬‬
‫; ) '‪WHERE dname = 'SALES‬‬

‫‪Deleting Rows Integrity Constraint Error‬‬ ‫حذف صفوف وخطأ قيد التكامل‬

‫‪SQL> DELETE FROM‬‬ ‫‪dept‬‬ ‫مثال ‪:‬‬


‫‪WHERE‬‬ ‫; ‪deptno = 10‬‬
‫‪DELETE FROM dept‬‬
‫*‬
‫ال يمكنك حذف الصف الذي يحتوي على مفتاح أساسي‬ ‫‪ERROR at line 1:‬‬
‫يستخدم كمفتاح ثانوي في جدول آخر ‪.‬‬ ‫)‪ORA-02292: integrity constraint (SCOTT.FK_DEPTNO‬‬
‫‪violated – child record found‬‬
‫تم انتھاك قيد التكامل )‪ (...‬تم العثور على سجل عنصر فرعي‬

‫‪Database Transactions‬‬ ‫إجراءات قاعدة البيانات‬


‫‪Consist of one of the following statements:‬‬ ‫يتألف من أحد العبارات التالية‪:‬‬
‫‪DML (Data Manipulation Language )statements that make up one consistent change to the data.‬‬
‫أي عدد من عبارات ‪ DML‬التي تقوم بتغيير واحد على البيانات أي التي يعاملھا مزود أوراكل ككينونة واحدة أي كوحدة‬
‫منطقية تشكل جزء واحد من العمل‪.‬‬
‫تعليمة واحدة ‪One DDL (Data Definition Language) statement.‬‬
‫تعليمة واحدة ‪One DCL (Data Control Language) statement.‬‬
‫عند تعديل قاعدة المعطيات باإلضافة أو التحديث يمكنك حفظ ھذا التعديل أو عدم الحفظ وھذا مفيد عند اكتشاف أخطاء أثناء التعديل‬
‫و عملية تثبيت التعديل أو التراجع تكتبان باألوامر ‪ Commit‬للحفظ و ‪ Rollback‬للتراجع‪.‬‬

‫ تبدأ إجراءات قاعدة البيانات عندما تنفذ أول عبارة ‪ SQL‬قابلة للتنفيذ ‪.‬‬
‫ وتنتھي مع حدوث أي مما يلي ‪:‬‬
‫‪ .1‬إذا تم تنفيذ أي من األوامر ‪. COMMIT or ROLLBACK‬‬
‫‪ .2‬إذا تم تنفيذ أي من تعليمات ‪ DDL or DCL‬والتي تعد بمثابة الحفظ األوتوماتيكي ‪. Auto Commit‬‬
‫‪ .3‬خروج المستخدم ‪ User Exits‬والذي يقوم بالحفظ تلقائياً ‪.‬‬
‫‪ .4‬انھيار النظام أو فشل النظام ‪.‬‬
‫عندما تنتھي أحد العمليات أو اإلجراءات تقوم عبارة ‪ SQL‬التالية بشكل أوتوماتيكي ببدء اإلجراء التالي ‪.‬‬
‫كما وتقوم تعليمات ‪ DDL or DCL‬بالحفظ التلقائي ولذلك فإنھا تقوم ضمنياً بإنھاء اإلجراء‪.‬‬

‫‪- 36 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪Advantages of COMMIT and ROLLBACK Statements‬‬


‫ميزات عبارتي ‪ COMMIT‬و ‪ROLLBACK‬‬
‫‪ Ensure data consistency‬‬ ‫ تضمن ثبات البيانات‬
‫‪ Preview data changes before making changes permanent‬‬ ‫ تسمح بمراجعة التغييرات قبل تثبيتھا بشكل دائم‬
‫‪ Group logically related operations‬‬ ‫ تقوم بتجميع العمليات المنطقية‬

‫‪Controlling Transactions‬‬ ‫عملية التحكم باإلجراءات‬

‫‪Transaction‬‬
‫‪INSERT‬‬ ‫‪UPDATE‬‬ ‫‪INSERT‬‬ ‫‪DELETE‬‬
‫‪Savepoint A‬‬ ‫‪Savepoint B‬‬

‫‪COMMIT‬‬ ‫‪ROLLBACK to Savepoint B‬‬


‫التراجع إلى نقطة الحفظ المسماة ‪B‬‬

‫‪ROLLBACK to Savepoint A‬‬


‫التراجع إلى نقطة الحفظ المسماة ‪A‬‬

‫‪ROLLBACK‬‬
‫التراجع عن كل التعليمات اإلدخال والتحديث والحذف‬

‫‪Statement‬‬ ‫‪ Description‬الوصف‬
‫‪Ends the current transaction by making all pending data changes permanent‬‬
‫‪COMMIT‬‬
‫إنھاء اإلجراء الحالي بجعل كل التغييرات المتعلقة بالبيانات ثابتة ودائمة) حفظ التغييرات (‬
‫‪Marks a savepoint within the current transaction‬‬
‫‪SAVEPOINT name‬‬
‫تحديد نقطة حفظ خالل اإلجراء الحالي‬
‫‪ROLLBACK ends the current transaction by discarding all pending data changes‬‬
‫‪ROLLBACK [TO :ROLLBACK TO SAVEPOINT name discards the savepoint and all subsequent changes‬‬
‫]‪SAVEPOINT name‬‬ ‫التراجع عن اإلجراء الحالي بإلغاء كافة التغييرات األخيرة المتعلقة بالبيانات‬
‫التراجع إلى نقطة الحفظ تعمل على تجاھل نقطة الحفظ وكافة التغييرات الالحقة‬

‫ يحدث الحفظ األوتوماتيكي ‪ Automatic commit‬مع حدوث أي مما يلي ‪:‬‬


‫‪ .1‬تنفيذ تعليمة ‪. DDL‬‬
‫‪ .2‬تنفيذ تعليمة ‪. DCL‬‬
‫‪ .3‬الخروج بشكل عادي من بيئة ‪ SQL*Plus‬بدون تنفيذ ‪ COMMIT‬أو ‪ROLLBACK‬‬
‫ كما يحدث التراجع األوتوماتيكي ‪ Automatic rollback‬باإلنھاء الغير طبيعي للـ ‪ SQL*Plus‬أو بانھيار النظام وفي ھذه‬
‫الحالة يقوم مزود أوراكل بالتراجع إلى آخر نقطة حفظ ‪ COMMIT‬مع المحافظة على سالمة الجداول‪.‬‬

‫مالحظة ‪ :‬إن األمر ‪ AUTOCOMMIT‬ھو من تعليمات ‪ DML‬ويمكن استخدامه مع ‪ SET‬وتفعيله أو عدم تفعيله ‪ON or OFF‬‬
‫ولكن ال يمكنك عندھا تنفيذ عملية التراجع ‪ ROLLBACK‬في حالة تفعيله ويكون افتراضيا على الوضع ‪. OFF‬‬
‫‪SQL> SET AUTOCOMMIT ON‬‬
‫قبل تطبيق أحد عمليتي التثبيت أو التراجع ‪ COMMIT or ROLLBACK‬ال يستطيع أي مستخدم آخر مشاھدة نتائج عبارة ‪DML‬‬
‫المستخدمة من قبل المستخدم الحالي وتكون البيانات مقفلة بحيث ال يستطيع مستخدم آخر تغييرھا‪.‬‬
‫أما بعد عملية التثبيت أو التراجع ‪ COMMIT or ROLLBACK‬يستطيع المستخدمين اآلخرين مشاھدة النتائج أو التغييرات كما أن‬
‫جميع نقاط الحفظ ‪ Savepoints‬تمحى ‪.‬‬

‫‪- 37 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪Committing Data‬‬ ‫تثبيت التغييرات على البيانات‬

‫‪SQL> UPDATE emp‬‬ ‫مثال‪ : 1‬إحداث تغييرات على البيانات‬


‫‪SET deptno = 10‬‬
‫‪WHERE‬‬ ‫; ‪deptno = 7782‬‬ ‫‪1 row updated .‬‬

‫; ‪SQL> COMMIT‬‬ ‫تثبيت التغييرات على البيانات‬


‫‪Commit complete‬‬

‫) ‪SQL> INSERT INTO dept (deptno, dname, loc‬‬ ‫مثال‪ : 2‬إحداث تغييرات على البيانات‬
‫; ) '‪VALUES (50, 'ADVERTISING', 'MIAMI‬‬
‫‪1 row created .‬‬
‫‪SQL> UPDATE emp‬‬ ‫مثال‪ : 2‬إحداث تغييرات على البيانات‬
‫‪SET deptno = 10‬‬
‫‪WHERE‬‬ ‫; ‪deptno = 7782‬‬ ‫‪1 row updated .‬‬

‫; ‪SQL> COMMIT‬‬ ‫تثبيت التغييرات على البيانات‬


‫‪Commit complete‬‬

‫; ‪SQL> DELETE FROM emp‬‬ ‫مثال‪ : 3‬حذف بيانات جدول‬


‫‪14 row deleted.‬‬
‫; ‪SQL> ROLLBACK‬‬ ‫التراجع عن الحذف‬
‫‪Rollback complete‬‬

‫‪Rolling Back Changes to a Marker‬‬ ‫التراجع عن التغييرات حتى نقطة معلمة‬

‫‪ Create a marker in a current transaction by using the SAVEPOINT statement.‬‬


‫‪ Roll back to that marker by using the ROLLBACK TO SAVEPOINT statement.‬‬
‫‪ If you create a second savepoint with the same name as an earlier savepoint, the erlier savepoint is deleted‬‬
‫ إنشاء نقطة عالمة ضمن الجلسة الحالية أو اإلجراء الحالي باستخدام عبارة ‪. SAVEPOINT‬‬
‫ التراجع للخلف حتى تلك النقطة باستخدام عبارة ‪. ROLLBACK TO SAVEPOINT‬‬
‫ إذا قمت بإنشاء نقطة حفظ أخرى بنفس اسم األولى فإن األولى تلغى ‪.‬‬
‫مثال ‪:‬‬
‫… ‪SQL> UPDATE‬‬
‫; ‪SQL> SAVEPOINT update_done‬‬
‫‪Savepoint created .‬‬
‫… ‪SQL> INSERT‬‬
‫; ‪SQL> ROLLBACK TO update_done‬‬
‫‪Rollback complete .‬‬
‫يقوم المستخدم بعمليتي وصول إلى البيانات إما قراءة ‪ Reader‬أو كتابة ‪: Writer‬‬
‫) ‪(SELECT statement) or ( INSERT, UPDATE, DELETE statement‬‬
‫تحتاج في ھذه الحالة لقراءة متوافقة) ‪ ( Read Consistency‬وثابتة للبيانات وذلك لحدوث ما يلي ‪:‬‬
‫تضمن قراءة ثابتة للبيانات من قبل المستخدم الذي يقرأ والذي يكتب بنفس الوقت في قاعدة البيانات‬
‫ال يرى المستخدم القارىء البيانات التي تكون في طور التغيير ‪.‬‬
‫يضمن المستخدم ‪ Writer‬أن التغييرات التي تحدث على قاعدة البيانات انتھت بطريقة متماسكة‪.‬‬
‫التغييرات التي تحدث من قبل ‪ Writer‬واحد ال تتقاطع أو تتعارض مع التغيرات التي تحدث من قبل مستخدم آخر ‪.Writer‬‬

‫‪- 38 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬
‫‪ The purpose of read consistency is to ensure that each user sees data as it existed at the last‬‬
‫‪commit, before a DML operation started.‬‬
‫ الھدف من عملية القراءة المتوافقة ھو ضمان أن كل مستخدم يرى البيانات كما ھي موجودة عند آخر تثبيت لھا وذلك قبل بدء‬
‫أي عملية من عمليات لغة الــ ‪.DML‬‬

‫‪- 39 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪Data Definition Language‬‬


‫لغة تعريف البيانات )التعامل مع الكائنات(‬
‫‪ - Database Objects‬أشياء أو أغراض قاعدة البيانات‬
‫الغرض ‪Object‬‬ ‫‪ Description‬الوصف‬
‫‪Basic unit of storage; composed of rows and columns‬‬
‫الجدول ‪Table‬‬
‫وحدة التخزين األساسية للبيانات مؤلفة من صفوف وأعمدة‬
‫‪Logically represents subsets of data from one or more table‬‬
‫المنظور ‪View‬‬
‫إجراء ثانوي تمثل ) تصور ( بشكل منطقي البيانات من جدول أو أكثر‬
‫المسلسل ‪Sequence‬‬ ‫المسلسل (‬
‫ِ‬ ‫‪ Generates primary key values‬تولد قيم المفتاح األساسي )‬
‫الفھرس ‪Index‬‬ ‫‪ Improve the performance of some queries‬يقوم بتحسين أداء بعض االستفسارات‬
‫المرادف ‪Synonym‬‬ ‫‪ Give alternative names to objects‬إعطاء أسماء بديلة لألشياء‬

‫)‪Naming Conventions (Rules‬‬ ‫اصطالحات )قوانين( التسمية‬


‫‪Name database tables and columns according to the standard rules for naming any Oracle database object:‬‬
‫تسمية قاعدة البيانات والجداول واألعمدة خاضعة لقوانين قياسية خاصة بتسمية أغراض أوراكل كما يلي ‪:‬‬
‫‪ Must begin with a letter and can be 1 – 30 characters long.‬‬
‫يجب أن تبدأ أسماء الجداول واألعمدة بمحارف حصراً وبطول من ‪ 1‬إلى ‪ 30‬محرف كحد أقصى‪.‬‬
‫يجب أن تحوي فقط الرموز التالية‪ Must contain only A-Z , a – z , 0 – 9 , _ (underscore), $ , and # .‬‬
‫‪ Must not duplicate the name of another object owned by the same user.‬‬
‫ال يجب أن يكون إسم الغرض التابع لنفس المستخدم مكرراً ‪.‬‬
‫يجب أن ال تكون أحد الكلمات المحجوزة لمزود أوراكل ‪ Must not be an Oracle Server reserved word.‬‬
‫‪The CREATE TABLE statement‬‬ ‫عبارة إنشاء جدول ‪CREATE TABLE‬‬
‫بداية يجب أن يكون لديك امتياز إنشاء جدول ومساحة للتخزين ويجب أن تخصص اسم للجدول وأسماء األعمدة وأنواع البيانات لكل منھا‬
‫وقياس كل عمود ‪:‬‬
‫‪CREATE TABLE‬‬ ‫‪[ schema .] table‬‬ ‫الصيغة العامة‪:‬‬
‫; ) ] … ‪( column datatype [DEFAULT expr][ ,‬‬

‫‪schema is the same as the owner's name‬‬ ‫‪ schema‬تعبر عن نفس اسم المالك‬
‫‪table is the name of the table‬‬ ‫‪ table‬تعبر عن اسم الجدول‬
‫‪DEFAULT expr specifies a default value if a value is omitted in the INSERT statement‬‬
‫‪ DEFAULT expr‬تخصيص قيمة افتراضية إذا كانت ھذه القيمة قد حذفت من عبارة ‪INSERT‬‬
‫‪column is the name of the column‬‬ ‫‪ column‬تعبر عن اسم العمود‬
‫‪datatype is the column's datatype and length‬‬ ‫‪ Datatype‬تحديد نوع البيانات وطولھا األعظمي‬

‫يمكن تخصيص قيمة افتراضية للعمود أثناء عملية اإلدخال كما في المثال التالي ‪:‬‬
‫‪……. Hiredate DATE DEFAULT SYSDATE , ……..‬‬
‫القيم المقبولة أو القانونية ھي القيمة الحرفية أو التعابير أو توابع الــ ‪. SQL‬‬
‫القيم الغير قانونية أو الغير مقبولة ھي أسماء أعمدة أخرى أو األعمدة الزائفة ‪.‬‬
‫نوع بيانات القيمة االفتراضية يجب أن يكون مماثل لنوع بيانات العمود‪.‬‬
‫‪SQL> CREATE TABLE‬‬ ‫‪dept‬‬ ‫مثال ‪:‬‬
‫‪( deptno NUMBER(2),‬‬
‫‪dname VARCHAR2(14),‬‬ ‫‪Table created‬‬
‫‪loc‬‬ ‫; ) )‪VARCHAR2(13‬‬

‫‪Tables in the Oracle Database‬‬ ‫الجداول في مزود أوراكل‬


‫‪ .1‬جداول المستخدم ) ‪ : ( User Tables‬وھي مجموعة من الجداول المنشأة والمحفوظة من قبل المستخدم وتحوي معلومات‬
‫المستخدم ) ‪.( User Information‬‬

‫‪- 40 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
‫ وھي مجموعة من الجداول المنشأة والمحفوظة من قبل مخدم أوراكل والتي‬: ( Data Dictionary ) ‫ قاموس المعطيات‬.2
.( Database Information ) ‫تحتوي معلومات عن البيانات‬
There are four categories of data dictionary views : each category has a distinct prefix witch reflects
their intended use .
: ‫ كل صنف له بادئة واضحة تعكس اإلستخدام المطلوب كما الجدول‬: ‫ھناك أربعة من أصناف مناظر قواميس البيانات‬
Prefix ‫البادئة‬ ‫ الوصف‬Description
USER_ Contains objects owned by the user ‫يحتوي األغراض التي يملكھا المستخدم‬
ALL_ ‫يستطيع الوصول لألغراض التي منح المستخدم حقوق الوصول لھا باإلضافة إلى األغراض المملوكة من قبل المستخدم‬
DBA_ ‫يعطي اإلمتياز للدخول أو الوصول إلى أي غرض ضمن قاعدة البيانات‬
V$_ DBA ‫يعرض سلوك مزود قاعدة البيانات و القفل وھو متاح مبدئيا ً فقط لـ‬

Querying the Data Dictionary ‫االستعالم عن قاموس المعطيات‬


- Describe tables owned by the user ‫ وصف الجداول المملوكة للمستخدم‬-
SQL> SELECT *
FROM user_tables ;
- View distinct object types owned by the user ‫ إظھار أنواع األغراض التابعة للمستخدم بدون تكرار‬-
OBJECT_TYPE
SQL> SELECT DISTINCT object_type -----------
FROM user_objects ; FUNCTION
INDEX
PROCEDURE
SEQUENCE
TABLE
- View tables, views, synonyms, sequences owned by the user .
‫ إظھار الجداول والمناظير والمرادفات والمتسلسالت التابعة للمستخدم‬-
SQL> SELECT *
FROM user_catalog ;
The USER_CATALOG has a synonym called
CAT. You can use this synonym instead of TABLE_NAME TABLE_TYPE
USER_CATALOG in SQL statement. ------------------------------ ----------
BONUS TABLE
SQL> SELECT * DEPT TABLE
FROM CAT ; EMP TABLE
‫ن‬UUUUUUU‫دالً م‬UUUUUU‫ ب‬CAT ‫رادف‬UUUUUU‫م الم‬UUUUUU‫تخدام االس‬UUUUUU‫ن اس‬UUUUUU‫يمك‬ MICROSOFTDTPROPERTIES TABLE
. USER_CATALOG MICROSOFTSEQDTPROPERTIES SEQUENCE
SALGRADE TABLE

- 41 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫أنواع البيانات المتاحة في أوراكل ‪DATATYPES‬‬


‫النوع ‪Datatype‬‬ ‫‪ Description‬الوصف‬
‫نوع البيانات متحول حرفي متغير الطول يجب أن يكون ‪ size‬طول السلسلة بين حرف واحد ‪1‬على األقل‬
‫)‪VARCHAR2(size‬‬
‫و‪ 4000‬محرف على األكثر‬
‫نوع البيانات متحول حرفي ثابت الطول يجب أن يكون ‪ size‬طول السلسلة بين حرف واحد ‪1‬على األقل و‪2000‬‬
‫)‪CHAR(size‬‬
‫محرف على األكثر‬
‫متحول حرفي متغير الطول له الدقة ‪ P‬والمقياس ‪ S‬حيث ‪P‬أكبر طول لرقم قبل الفاصلة العشرية و‪ S‬أكبر طول لرقم‬
‫)‪NUMBER(p , s‬‬
‫بعد الفاصلة العشرية من جھة اليمين يأخذ ‪ p‬مجال القيم بين ‪ 1‬إلى ‪ 38‬أما ‪ S‬فيأخذ مجال القيم بين‪ -84‬وبين ‪127‬‬
‫‪DATE‬‬ ‫نوع البيانات تاريخ ووقت بين ‪ January 1. 4712B.C.‬وبين ‪December 31.9999A.D.‬‬
‫‪LONG‬‬ ‫نمط حرفي متغير الطول من البيانات يأخذ يصل حجمه إلى حتى ‪ 2‬جيجا بايت‬
‫‪CLOB‬‬ ‫متحول حرفي يصل حجمه إلى حتى ‪ 4‬جيجا بايت‬
‫‪ROW‬‬ ‫متحول ثنائي يأخذ طول محدد ‪size‬يمكن جعله حتى ‪ 2000‬كحد أقصى‬
‫‪LONG ROW‬‬ ‫متحول ثنائي متغير الطول يصل حجمه حتى ‪ 2‬جيجا بايت‬
‫‪BLOB‬‬ ‫بيانات ثنائية يصل حجمھا حتى ‪ 4‬جيجا بايت‬
‫‪BFILE‬‬ ‫بيانات ثنائية تخزن ضمن ملف خارجي يصل حجمھا حتى ‪ 4‬جيجا بايت‬

‫‪Create a Table by Using a Subquery‬‬ ‫إنشاء جدول باستخدام االستفسار الجزئي‬

‫‪SQL> CREATE TABLE dept30‬‬ ‫مثال‪:‬‬


‫‪2‬‬ ‫‪AS‬‬
‫‪3‬‬ ‫‪SELECT empno, ename, sal*12 ANNSAL, hiredate‬‬
‫‪Table created‬‬
‫‪4‬‬ ‫‪FROM‬‬ ‫‪emp‬‬
‫‪5‬‬ ‫‪WHERE‬‬ ‫; ‪deptno = 30‬‬

‫‪SQL> DESCRIBE‬‬ ‫‪dept30‬‬ ‫‪Name‬‬ ‫?‪Null‬‬ ‫‪Type‬‬


‫‪------------‬‬ ‫‪-----------------‬‬ ‫‪--------------‬‬
‫‪EMPNO‬‬ ‫‪NOT NULL‬‬ ‫)‪NUMBER(4‬‬
‫‪ENAME‬‬ ‫)‪VARCHAR2(10‬‬
‫‪ANNSAL‬‬ ‫‪NUMBER‬‬
‫‪HIREDATE‬‬ ‫‪DATE‬‬

‫‪The ALTER TABLE statement‬‬ ‫عبارة تعديل جدول ‪ALTER TABLE‬‬


‫‪Use the ALTER TABLE statement to: Add a new column, modify an existing column, and define a‬‬
‫‪default value for the new column.‬‬
‫تستخدم تعليمة ‪ ALTER TABLE‬إلضافة عمود جديد أو تعديل عمود موجود أو تحديد قيمة افتراضية للعمود جديد‪.‬‬
‫‪ALTER TABLE table‬‬ ‫الصيغة العامة‪:1‬‬
‫‪ADD‬‬ ‫]‪( column datatype [DEFAULT expr‬‬
‫; ) ‪[ , column datatype]….‬‬
‫‪ALTER TABLE table‬‬ ‫الصيغة العامة‪:2‬‬
‫‪MODIFY‬‬ ‫]‪( column datatype [DEFAULT expr‬‬
‫; ) ‪[ , column datatype]….‬‬
‫‪table is the name of the table‬‬ ‫‪ table‬تعبر عن اسم الجدول‬
‫‪DEFAULT expr specifies a default value for a new column‬‬ ‫تخصيص قيمة افتراضية للعمود الجديد‬
‫‪column is the name of the column‬‬ ‫‪ column‬تعبر عن اسم العمود‬
‫‪datatype is the datatype and length of the new column‬‬ ‫‪ Datatype‬تحديد نوع البيانات وطولھا للعمود الجديد‬

‫‪- 42 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬
‫‪Adding a Column‬‬ ‫إضافة عمود‬

‫‪You use the ADD clause to add columns‬‬ ‫نستخدم عبارة ‪ ADD‬إلضافة أعمدة‬
‫‪SQL> ALTER TABLE dept30‬‬ ‫‪Table altered.‬‬ ‫مثال‪:‬‬
‫‪2‬‬ ‫‪ADD‬‬ ‫; ))‪( job VARCHAR2(9‬‬
‫يصبح العمود الجديد في نھاية الجدول كما يلي ‪:‬‬
‫‪SQL> SELECT‬‬ ‫*‬
‫‪2‬‬ ‫‪FROM‬‬ ‫; ‪dept30‬‬ ‫‪EMPNO‬‬ ‫‪ENAME‬‬ ‫‪ANNSAL HIREDATE‬‬ ‫‪JOB‬‬
‫‪----‬‬ ‫‪--------‬‬ ‫‪----------‬‬ ‫‪----------‬‬ ‫‪------‬‬
‫‪7499‬‬ ‫‪ALLEN‬‬ ‫‪19200‬‬ ‫‪20/02/81‬‬
‫‪7521‬‬ ‫‪WARD‬‬ ‫‪15000‬‬ ‫‪22/02/81‬‬
‫‪7654‬‬ ‫‪MARTIN‬‬ ‫‪15000‬‬ ‫‪28/09/81‬‬
‫‪7844‬‬ ‫‪TURNER‬‬ ‫‪18000‬‬ ‫‪08/09/81‬‬
‫‪7900‬‬ ‫‪JAMES‬‬ ‫‪11400‬‬ ‫‪03/12/81‬‬

‫‪Modifying a Column‬‬ ‫تعديل عمود‬


‫‪You can change a column's datatype, size, and default value.‬‬
‫بإمكانك تغيير نوع بيانات العمود و الحجم والقيمة االفتراضية‬
‫لتعديل عمود تستخدم عبارة ‪ MODIFY‬مع تعليمة ‪ALTER TABLE‬‬
‫‪SQL> ALTER TABLE dept30‬‬ ‫مثال‪:‬‬
‫‪2‬‬ ‫‪MODIFY‬‬ ‫; ))‪( ename VARCHAR2(15‬‬ ‫‪Table altered.‬‬

‫يمكنك تغيير عرض أو دقة األعمدة الحاوية على بيانات عددية‪.‬‬ ‫‬
‫يمكن إنقاص عرض العمود إذا احتوى العمود على قيم فارغة فقط ‪ NULL‬أو إذا لم يحوي الجدول أي صفوف )فارغ(‪.‬‬ ‫‬
‫يمكن تغيير نوع البيانات إذا احتوى العمود قيم فارغة ‪.NULL‬‬ ‫‬
‫يمكن تحويل نوع البيانات ‪ CHAR‬إلى النوع ‪ VARCHAR2‬أو بالعكس إذا احتوى العمود على قيم فارغة ‪ NULL‬أو إذا لم‬ ‫‬
‫تقوم بتغيير الحجم ‪. size‬‬
‫‪Dropping a Table‬‬ ‫عبارة إسقاط ) حذف( جدول ‪DROP TABLE‬‬
‫‪- All data and structure in the table is deleted.‬‬ ‫‪ -‬جميع البيانات و البنى في الجدول ستمحى‪.‬‬
‫‪- Any pending transactions are committed.‬‬ ‫‪ -‬أي إجراءات قيد االنتظار سيتم تثبيتھا‪.‬‬
‫‪- All indexes are dropped‬‬ ‫‪ -‬جميع الفھارس ستحذف‪.‬‬
‫‪- You cannot roll back this statement.‬‬ ‫‪ -‬ال يمكن التراجع عن ھذه التعليمة‪.‬‬
‫‪- Any views and synonyms will remains but are invalid.‬‬ ‫‪ -‬تبقى المناظير والمرادفات لكنھا تعتبر باطلة‪.‬‬
‫‪DROP TABLE‬‬ ‫; ‪table‬‬ ‫الصيغة العامة‪:‬‬

‫‪SQL> DROP TABLE‬‬ ‫;‪dept30‬‬ ‫‪Table dropped.‬‬ ‫مثال‪:‬‬

‫‪Changing the name of an Object‬‬ ‫إعادة تسمية غرض باستخدام ‪RENAME‬‬


‫لتغيير اسم جدول أو منظور أو متسلسلة أو مرادف عليك تنفيذ تعليمة ‪. RENAME‬‬

‫‪RENAME old_name TO‬‬ ‫; ‪new_name‬‬ ‫الصيغة العامة‪:‬‬

‫‪SQL> RENAME dept TO‬‬ ‫;‪department‬‬ ‫‪Table renamed.‬‬ ‫مثال‪:‬‬

‫‪Truncating a Table‬‬ ‫بتر الجدول باستخدام تعليمة ‪TRUNCATE‬‬


‫تقوم تعليمة ‪ TRUNCATE TABLE‬بحذف كافة الصفوف أو السجالت من الج‪U‬دول والتخل‪U‬ي ع‪U‬ن م‪U‬ساحة التخ‪U‬زين الم‪U‬ستخدمة ل‪U‬ذلك‬
‫الج‪U‬دول كم‪U‬ا أن‪U‬ه ال يمكن‪U‬ك اس‪U‬تعادة ال‪U‬صفوف أو التراج‪U‬ع ع‪U‬ن ال‪U‬صفوف المحذوف‪U‬ة باس‪U‬تخدام التعليم‪U‬ة ‪ TRUNCATE‬كم‪U‬ا يمكن‪U‬ك ح‪UU‬ذف‬
‫صفوف اختيارياً باستخدام تعليمة ‪: DELETE‬‬

‫‪- 43 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
TRUNCATE TABLE table ; :‫الصيغة العامة‬

SQL> TRUNCATE TABLE department ; Table truncated. :‫مثال‬

Adding Comments to a table COMMENT ‫إضافة تعليق للجدول باستخدام‬


. COMMENT ‫يمكنك إضافة تعليقات للجدول أو العمود باستخدام التعليمة‬
COMMENT TO TABLE table|column table.column :‫الصيغة العامة‬
IS 'text' ;
table is the name of the table ‫ تعبر عن اسم الجدول‬table
column is the name of the column in a table ‫ تعبر عن اسم عمود في الجدول‬column
text is the text of the comment ‫ تعبر عن نص التعليق‬text

SQL> COMMENT ON TABLE emp :‫مثال‬


IS 'Employee Information' ; Comment craeated.

Comments can be viewed through the data dictionary views:


: ‫يظھر التعليق خالل مناظر قاموس المعطيات باستخدام ما يلي‬
 ALL_COL_COMMENTS
 USER_COL_COMMENTS
 ALL_TAB_COMMENTS
 USER_TAB_COMMENTS
SQL> SELECT * ‫ بعد إدراج التعليق السابق نجد‬:‫مثال‬
FROM user_tab_comments ;

TABLE_NAME TABLE_TYPE COMMENTS


------------------------------ ----------- -------- --------------
BONUS TABLE
DEPT TABLE
EMP TABLE Employee Information
MICROSOFTDTPROPERTIES TABLE
SALGRADE TABLE

- 44 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

‫القيود‬-Constraints
What Are Constraints ? ‫ما ھي القيود‬
- Constraints enforce rules at the table level. . ‫ تقوم القيود بفرض القوانين على مستوى الجدول‬-
- Constraints prevent the deletion of a table if there are dependencies.
.‫ القيود تمنع الحذف من الجدول إذا كان ھناك تبعيات‬-

The following constraint types are valid in Oracle ‫يبين الجدول التالي أنواع القيود المتاحة في أواكل‬
Constraint ‫القيد‬ ‫ الوصف‬Description
Specifies that this column may not contain a null values
NOT NULL
‫ال يمكن أن يحوي العمود المقيد بھذا القيد قيم فارغة‬
UNIQUE Specifies a column or combination of columns whose values must be unique for all rows in the table
‫المفتاح الفريد‬ ‫ھو عبارة عن تركيب من عمود أو مجموعة أعمدة التي تكون قيمھا وحيدة من أجل جميع الصفوف في الجدول‬
PRIMARY KEY Uniquely identifies each row of the table
‫المفتاح األساسي‬ ‫يعرف بشكل فريد كل صف من الجدول وھو أحد المفاتيح الفريد لكنه أعطي بعض الميزات الخاصة‬
FOREIGN KEY Establishes and enforces a foreign key relationship between the column and a column of the referenced table
(‫المفتاح الخارجي ) الغريب‬ ‫يؤسس و يؤكد على عالقة مفتاح ثانوي بين العمود الحالي وعمود من الجدول المرجع‬
CHECK Specifies a condition that must be true
‫قيد اإلختبار‬ ً ‫يوصف الشرط بوجوب كونه صحيحا‬ ّ

Defining Constraints ‫تعريف القيود‬

CREATE TABLE [schema.] table :‫الصيغة العامة‬


(column datatype [DEFAULT expr]
[ column_constraint] , ….
[ table_constraint ][ ,….]) ;
schema is the same as the owner's name ‫ تعبر عن نفس اسم المالك‬schema
table is the name of the table ‫ تعبر عن اسم الجدول‬table
DEFAULT expr specifies a default value if a value is omitted in the INSERT statement
INSERT ‫ تخصيص قيمة افتراضية إذا كانت ھذه القيمة قد حذفت من عبارة‬DEFAULT expr
column is the name of the column ‫ تعبر عن اسم العمود‬column
datatype is the column's datatype and length ‫ تحديد نوع البيانات وطولھا األعظمي‬Datatype
Column constraint is an integrity constraint as part of the column definition
. ‫ قيد العمود يعبر عن كمال القيد كجزء من تعريف العمود‬column constraint
Table constraint is an integrity constraint as part of the table definition
. ‫ قيد الجدول يعبر عن كمال القيد كجزء من تعريف الجدول‬table constraint
SQL> CREATE TABLE emp ( : ‫مثال‬
empno NUMBER(4),
ename VARCHAR2(10), Table created
……….
deptno NUMBER(7 , 2) NOT NULL,
CONSTRAINT emp_empno_pk PRIMARY KEY (EMPNO) ) ;

. ‫• عادة نقوم بإنشاء القيود في نفس وقت إنشاء الجدول إال أنه يمكننا إضافة القيود إلى الجدول بعد إنشائه‬
: ‫• تنشأ القيود على مستويين مستوى العمود ومستوى الجدول‬
Column [COMSTRAINT constraint_name] constraint_type ‫ يكون الشكل العام‬:‫على مستوى العمود‬
Column , ….. ‫ يكون الشكل العام‬: ‫على مستوى الجدول‬
[COMSTRAINT constraint_name] constraint_type
(column , …..) ,
- 45 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪The NOT NULL Constraint‬‬ ‫القيد ‪NOT NULL‬‬


‫‪Defined at the column level‬‬ ‫وھو يعرف على مستوى العمود‬
‫‪SQL> CREATE TABLE‬‬ ‫( ‪emp‬‬ ‫مثال ‪:‬‬
‫‪empno‬‬ ‫‪NUMBER(4),‬‬
‫‪ename‬‬ ‫‪VARCHAR2(10) NOT NULL,‬‬
‫‪job‬‬ ‫‪VARCHAR2(9),‬‬
‫‪mgr‬‬ ‫‪NUMBER(4),‬‬
‫‪hiredate‬‬ ‫‪DATE,‬‬
‫‪sal‬‬ ‫‪NUMBER(7 , 2),‬‬
‫‪comm‬‬ ‫‪NUMBER(7 , 2),‬‬
‫‪deptno‬‬ ‫; ) ‪NUMBER(7 , 2) NOT NULL‬‬
‫كما يمكنك تخصيص اسم للقيد عند إنشاء القيد وذلك بتعديل التعليمة السابقة كما يلي ‪:‬‬
‫‪……. deptno‬‬ ‫)‪NUMBER(7 , 2‬‬
‫‪CONSTRAINT emp_deptno_nn NOT NULL ….‬‬
‫يمكننا إعطاء القيود أسماء ويفضل أن يكون لھا عالقة بالجدول وبالحقل كما في السابق وإذا لم نفعل فإن أوراكل يتولى ھذه المھمة‬
‫بتوليد أسماء خاصة ‪.‬‬
‫‪The UNIQUE KEY Constraint‬‬ ‫قيد المفتاح الفريد‬
‫‪Defined at either the column level or the table level‬‬ ‫ي من مستوى العمود أو مستوى الجدول‬ ‫وھو يعرف على أ ﱟ‬
‫و ھو عبارة عن تركيب من عمود أو عدة أعمدة بحيث تكون قيمة ھذا المفتاح وحيدو حسب كل سطر في الجدول وإذا كان القيد ‪NOT‬‬
‫‪ NULL‬غير معرف على ھذا العمود فإن العمود يمكن أن يحوي القيمة ‪ NULL‬الفارغة ‪.‬‬
‫‪SQL> CREATE TABLE‬‬ ‫( ‪dept‬‬ ‫مثال ‪:‬‬
‫‪deotno‬‬ ‫‪NUMBER(2),‬‬
‫‪dname‬‬ ‫‪VARCHAR2(14) ,‬‬
‫‪loc‬‬ ‫‪VARCHAR2(13),‬‬
‫; ) )‪CONSTRAINT dept_dname_uk UNIQUE (dname‬‬
‫‪Note : The Oracle Server enforces the UNIQUE KEY constraint by implicitly creating a unique index‬‬
‫‪on the unique key.‬‬
‫مالحظة ‪ :‬ينفذ مزود أوراكل قيد المفتاح الوحيد بإنشاء فھرس وحيد ضمنياً على المفتاح الفريد‪.‬‬
‫‪The PRIMARY KEY Constraint‬‬ ‫قيد المفتاح األساسي‬
‫‪Defined at either the column level or the table level‬‬ ‫ي من مستوى العمود أو مستوى الجدول‬ ‫وھو يعرف على أ ﱟ‬
‫و ھو عبارة عن أحد المفاتيح الفريدة و لكننا قمنا بإعطائه بعض الميزات الخاصة ويمكن تعريف مفتاح أساسي واحد في الجدول و ال‬
‫يمكنه احتواء القيمة ‪. NULL‬‬
‫يمكننا تعريف المفتاح كمفتاح أساسي أو فريد إذا كان مكوناً من عمود واحد بواسطة قيد على عمود بدالً من قيد على جدول ‪.‬‬
‫‪SQL> CREATE TABLE‬‬ ‫( ‪dept‬‬ ‫مثال ‪:‬‬
‫‪deotno‬‬ ‫‪NUMBER(2),‬‬
‫‪dname‬‬ ‫‪VARCHAR2(14) ,‬‬
‫‪loc‬‬ ‫‪VARCHAR2(13),‬‬
‫)‪CONSTRAINT dept_dname_uk UNIQUE (dname‬‬
‫; ) )‪CONSTRAINT dept_deptno_pk PRIMARY KEY (deptno‬‬
‫ينشأ فھرس وحيد بشكل تلقائي من أجل عمود المفتاح األساسي‬

‫‪- 46 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪The FRREIGN KEY Constraint‬‬ ‫قيد المفتاح الخارجي ) الغريب (‬


‫‪Defined at either the column level or the table level‬‬ ‫ي من مستوى العمود أو مستوى الجدول‬‫وھو يعرف على أ ﱟ‬
‫و ھو عبارة عن تركيب من مجموعة أعمدة قيمھا موجودة في المفتاح األساسي لجدول آخر ‪.‬‬
‫‪SQL> CREATE TABLE‬‬ ‫( ‪emp‬‬ ‫مثال ‪:‬‬
‫‪empno‬‬ ‫‪NUMBER(4),‬‬
‫‪ename‬‬ ‫‪VARCHAR2(10) NOT NULL,‬‬
‫‪job‬‬ ‫‪VARCHAR2(9),‬‬
‫‪mgr‬‬ ‫‪NUMBER(4),‬‬
‫‪hiredate DATE,‬‬
‫‪sal‬‬ ‫‪NUMBER(7 , 2),‬‬
‫‪comm‬‬ ‫‪NUMBER(7 , 2),‬‬
‫‪deptno‬‬ ‫‪NUMBER(7 , 2) NOT NULL,‬‬
‫; ) )‪CONSTRAINT emp_deptno_fk FOREIGN KEY (deptno) REFERENCES dept (deptno‬‬
‫يمكن الرجوع للمفتاح األساسي في نفس الجدول أو في جدول آخر باستخدام تعليم‪U‬ة المراج‪U‬ع ‪ REFERENCES‬كم‪U‬ا ف‪U‬ي المث‪U‬ال ال‪U‬سابق‬
‫حيث أن الحقل ‪ deptno‬والذي ھو عبارة عن مفتاح خارجي في الجدول ‪ emp‬يرجع إلى العم‪U‬ود ‪ deptno‬وال‪U‬ذي ھ‪U‬و عب‪U‬ارة ع‪U‬ن مفت‪U‬اح‬
‫أساسي في الجدول ‪ dept‬وبالتالي عندما تريد حذف أسطر من الجدول األب فإنه من الضروري حذف األسطر المرتبطة ب‪U‬ه م‪U‬ن الج‪U‬دول‬
‫األب وذلك باستخدام التعليمة ‪ ON DELETE CASCADE‬والتي ت‪U‬ضاف إل‪U‬ى تعليم‪U‬ة‪ REFERENCES‬والت‪U‬ي تجب‪U‬ر أوراك‪U‬ل عل‪U‬ى‬
‫حذف األسطر المرتبطة من الجدول االبن عندما تحذف أسطر من الجدول األب ) األساسي (‪.‬‬
‫‪FOREIGN KEY Constraint Keywords‬‬
‫‪Identifies the table and column in the parent table‬‬
‫‪REFERENCES‬‬
‫تحدد الجدول والعمود المرجع من الجدول األب‬
‫‪Allows deletion in the parent table and deletion of the dependent rows in the child table‬‬
‫‪ON DELETE CASCADE‬‬ ‫تقوم بحذف الصفوف من الجدول االبن والمرتبطة مع الصفوف المحذوفة من الجدول األب‬

‫‪The CHECK Constraint‬‬ ‫قيد االختبار‬


‫‪Defines a condition that each row must satisfy‬‬ ‫وھو يحدد الشرط الذي يجب أن تحققه كافة الصفوف‬
‫‪Expressions that are not allowed:‬‬ ‫التعابير الغير مسموح بھا ‪:‬‬
‫ال يمكنك استخدام ھذه القيود على األعمدة الغير حقيقية مثل ‪:‬‬
‫•‬ ‫‪References to CURRVAL, NEXTVAL, LEVEL, and ROWNUM pseudo columns‬‬
‫•‬ ‫استدعاء التوابع التالية ‪Calls to SYSDATE, UID, USER, and USERENV functions.:‬‬
‫•‬ ‫االستفسارات التي تشير إلى قيم أخرى في صفوف أخرى‪Queries that refer to other values in other rows.‬‬

‫‪SQL> CREATE TABLE‬‬ ‫( ‪dept‬‬ ‫مثال ‪:‬‬


‫‪deotno‬‬ ‫‪NUMBER(2),‬‬
‫‪dname‬‬ ‫‪VARCHAR2(14) ,‬‬
‫‪loc‬‬ ‫‪VARCHAR2(13),‬‬
‫) )‪CONSTRAINT emp_dname_ck CHECK (deptno BETWEEN 10 and 99‬‬
‫;‬

‫‪- 47 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Adding a Constraint ‫إضافة قيد‬


- Add or drop, but not modify a constraint ‫ يمكن إضافة أو حذف قيد ولكن ال يمكن التعديل‬-
- Enable or disable constraints ‫ تمكين أو إلغاء تمكين القيود‬-
- Add a NOT NULL constraint by using the MODIFY clause.
MODIFY ‫ باستخدام عبارة‬NOT NULL ‫ يمكن إضافة القيد‬-
ALTER TABLE table ‫الصيغة العامة‬
ADD [CONSTRAINT constraint ] type (column) ;

table is the name of the table ‫ تعبر عن اسم الجدول‬table


constraint is the name of the constraint ‫ تعبر عن اسم القيد‬constraint
type is the constraint type ‫ تعبر عن نوع القيد‬type
column is the name of the column ‫ تعبر عن اسم العمود المتأثر بالقيد‬column

SQL> ALTER TABLE emp : ‫مثال‬


ADD CONSTRAINT emp_mgr_fk
FOREIGN KEY (mgr) REFERENCES emp (empno); Table altered.

Dropping a Constraint ‫إسقاط )إنھاء( قيد‬

- Remove the manager constraint from the EMP table EMP ‫ حذف قيد عمود المدراء من جدول‬-

SQL> ALTER TABLE emp : ‫مثال‬


Table altered.
DROP CONSTRAINT emp_mgr_fk ;

‫ باستخدام‬Deptno ‫ وھو العمود‬EMP ‫ وإسقاط قيد المفتاح الخارجي المرتبط به من جدول‬Dept ‫ حذف قيد المفتاح األساسي من جدول‬-
‫ال‬U‫ي المث‬U‫ا ف‬U‫دول األب كم‬U‫ن الج‬U‫ذوف م‬U‫د المح‬U‫ع القي‬U‫ة م‬U‫اء والمرتبط‬U‫داول األبن‬U‫ن الج‬U‫ود م‬U‫قاط القي‬U‫ و التي تقوم بإس‬CASCADE ‫التعليمة‬
: ‫التالي‬

SQL> ALTER TABLE dept : ‫مثال‬


Table altered.
DROP PRIMARY KEY CASCADE ;

Disabling Constraints ‫إلغاء تمكين القيود‬


- Execute the DISABLE clause of the ALTER TABLE statement to deactivate an integrity constraint.
.‫ لتبطل عمل القيد‬ALTER TABLE ‫ مع عبارة‬DISABLE ‫يتم تنفيذ عبارة‬
- Apply the CASCADE option to disable dependent integrity constraints.
.‫ لتبطل عمل القيود المرتبطة مع قيد الجدول األب‬CASCADE ‫يتم تفعيل خيار‬

ALTER TABLE table ‫الصيغة العامة‬


DISABLE CONSTRAINT constraint [CASCADE] ;

table is the name of the table ‫ تعبر عن اسم الجدول‬table


constraint is the name of the constraint ‫ تعبر عن اسم القيد‬constraint

SQL> ALTER TABLE emp : ‫مثال‬


DISABLE CONSTRAINT emp_empno_pk CASCADE ;
Table altered.

- 48 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Enabling Constraints ‫تمكين القيود‬


- Execute the ENABLE clause of the ALTER TABLE statement to activate an integrity constraint.
.‫ لتفعيل عمل القيد‬ALTER TABLE ‫ مع عبارة‬ENABLE ‫يتم تنفيذ عبارة‬
- A UNIQUE or PRIMARY KEY index is automatically created if you enable a UNIQUE KEY or
PRIMARY KEY constraint .
.‫يتم إنشاء فھرس المفتاح الرئيسي والمفتاح الفريد تلقائياً عند تفعيل أي من ھذين القيدين‬

ALTER TABLE table ‫الصيغة العامة‬


ENABLE CONSTRAINT constraint ;

table is the name of the table ‫ تعبر عن اسم الجدول‬table


constraint is the name of the constraint ‫ تعبر عن اسم القيد‬constraint

SQL> ALTER TABLE emp : ‫مثال‬


ENABLE CONSTRAINT emp_empno_pk ;
Table altered.

Viewing Constraints ‫عرض القيود‬


Query the USER_CONSTRAINTS table to view all constraint definitions and names.
:‫ كما في المثال التالي‬USER_CONSTRAINTS ‫إلظھار كافة أسماء و تعاريف القيود يجب إجراء استفسار على جدول القيود‬

SQL> SELECT constraint_name, constraint_type, search_condition : ‫مثال‬


FROM USER_CONSTRAINTS
WHERE table_name = 'EMP' ;
CONSTRAINT_NAME C SEARCH_CONDITION
------------------------------ ----- -------------------------------
EMP_MGR_FK R
PK_EMP P
FK_DEPTNO R

SYS_C00674 ‫ القيود التي لم تعطى اسم من قبل مالك الجدول يقوم أوراكل بإعطائھا أسماء مثل‬: ‫مالحظة‬
‫ يعبر عن المرجع و الحرف‬R ‫ والحرف‬PRIMARY KEY ‫ يعبر عن القيد‬P ‫ والحرف‬CHECK ‫ يعبر عن القيد‬C ‫بالنسبة لألحرف‬
. UNIQUE key ‫ يعبر عن القيد‬U
Viewing the Columns Associated with Constraints ‫عرض األعمدة مرافقة للقيود‬

SQL> SELECT constraint_name, column_name : ‫مثال‬


FROM user_cons_columns
WHERE table_name = 'EMP' ; CONSTRAINT_NAME COLUMN_NAME
----------------------------- -----------
FK_DEPTNO DEPTNO
PK_EMP EMPNO

- 49 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

(‫ المناظير)المشاھد‬-Views

What Is a View ? ‫ما ھو المنظور‬


You can present logical subsets or combinations of data by creating views of tables. A view is a logical
table based on a table or another view. A view contains no data of its own but is like a window through
witch data from tables can be viewed or changed. The tables on witch a view is based are called based
tables. The view is stored as a SELECT statement in the data dictionary.
‫ المنظور عبارة عن جدول منطقي مبني على‬.‫بإمكانك إظھارأو تقديم مجموعة منطقية أو مركبة من البيانات بإنشاء مناظير للجداول‬
‫ المنظور ال يحوي بيانات خاصة به وإنما ھو عبارة عن نافذة يظھر من خاللھا بيانات جداول يمكن عرضھا أو‬.‫جدول أو منظور آخر‬
‫ ضمن‬SELECT ‫ يخزن المنظور بشكل يشبه عبارة اإلختيار‬.‫ الجداول التي بني على أساسھا المنظور تمسى الجداول القاعدة‬.‫تغييرھا‬
.‫قاموس البيانات‬
.‫ ھو طريقة إلخفاء المنطق الذي أدى إلى ربط الجداول التي تشكل قاعدة المنظور‬: ‫المنظور‬
Why use View ? ‫لماذا تستخدم المناظير‬
- To restrict database access. . ‫ لتقييد عملية الوصول أو الدخول إلى البيانات‬-
- To make a complex queries easy. . ‫ لجعل اإلستعالمات المعقدة أبسط‬-
- To allow data in independence. . ‫ السماح باستقالل البيانات‬-
- To present different views of the same data. . ‫ لتقديم مناظير أو مشاھد مختلفة لنفس البيانات‬-

Simple Views and Complex Views ‫مقارنة بين المناظير البسيطة والمناظير المعقدة‬
Feature ‫الميزة‬ Simple Views Complex Views
Number of tables ‫عدد الجداول‬ One One or more
Contain functions ‫يحتوي على توابع‬ NO Yes
Contain groups of data ‫يحتوي على مجموعات من البيانات‬ NO Yes
DML through view ‫يحتوي تعليمات لغة التعامل مع البيانات‬ YES Not always

Creating a View ‫إنشاء منظور‬


.‫ يحوي المنظور استفسار جزئي كجزء أساسي أثناء إنشاء المنظور‬
.‫ معقدة‬SELECT ‫ االستفسار الجزئي يمكن أن يحوي تركيب عبارة‬
.ORDER BY ‫ ال يمكن أن يحوي االستفسار الجزئي عبارة‬

CREATE [ OR REPLACE ] [ FORCE|NOFORCE ] VIEW view :‫الصيغة العامة‬


[(alias [ , alias] …) ]
AS subquery
[ WITH CHECK OPTIN [ CONSTRAINT constraint ] ]
[ WITH READ ONLY ]
OR REPLACE re-creates the view if it already exists. .ً‫إعادة إنشاء المنظور إذا كان قد أنشأ قبال‬
FORCE creates the view regardless of whether or not the base tables exist
.‫إنشاء المنظور بغض النظر عن كون الجداول األساسية أو قاعدة المنظور منشأة‬

NOFORCE creates the view only if the base tables exist


.‫إنشاء المنظور فقط إذا كانت الجداول األساسية أو قاعدة المنظور قد تم إنشاؤھا وھو اإلفتراضي‬
view is the name of the view. ‫ اسم المنظور‬view
alias specifies names for the expressions selected by the view’s query.
.‫تحدد أسماء مستعارة للتعابير المختارة من قبل استفسار المنظور‬
subquery is a complete SELECT statement . ‫ كاملة‬select ‫ تعليمة‬Subquery
WITH CHECK OPTION specifies that only rows accessible to the view can be inserted or updated .
.‫تعين الصفوف المتصلة بالمنظور والتي يمكن فقط إدخالھا أو تعديلھا‬
constraint is the name assigned to the CHECK OPTION constraint .
- 50 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
CHECK OPTION ‫االسم المخصص لقيد اإلختيار‬
WITH READ ONLY ensures that no DML operations can be performed on this view .
.‫ في ھذا المنظور‬DML ‫تضمن عدم إنجاز أي عملية‬

SQL> CREATE VIEW empvu10 : ‫مثال‬


AS SELECT empno, ename, job
FROM emp View created.
WHERE deptno = 10 ;

SQL> DESCRIBE empvu10 ‫ وصف المنظور السابق‬: ‫تابع المثال السابق‬

Name Null? Type


------------ ------------------ --------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)

• The subquery that defines a view can contain complex SELECT syntax, including joins, groups,
and subqueries.
‫ مركبة تضم الروابط و عمليا ت التجميع‬SELECT ‫• يمكن أن يحوي االستفسار الجزئي الذي يعرف المنظور على عبارة‬
. ‫واستفسارات جزئية‬
• The subquery that defines the view cannot contain an ORDER BY clause. The ORDER BY
clause is specified when you retrieve data from the view .
ORDER BY ‫ ألن عبارة‬. ORDER BY‫• ال يمكن أن يحوي االستفسار الجزئي الذي يعرف المنظور على عبارة‬
.‫مخصصة لعملية استرجاع البيانات من المنظور‬
• If you do not specify a constraint name for a view created with the CHECK OPTION, the system
will assign a default name in the format SYS_Cn .
. SYS_Cn ‫• إذا لم تقم بتخصيص اسم للقيد المنشأ للمنظور يقوم النظام بتحديد اسم افتراضي يأخذ الشكل العام‬
• You can use the OR REPLACE option to change the definition of the view without dropping and
re-creating it .
. OR REPLACE ‫• يمكنك تغيير تعريف المنظور بدون حذفه أو إعادة إنشاءه وذلك باستخدام التعليمة‬

‫ كما في المثال التالي‬:( ‫ ضمن االستفسار الجزئي ) الداخلي‬Column Aliases ‫إنشاء منظور باستخدام أسماء مستعارة لألعمدة‬
SQL> CREATE VIEW salvu30 : ‫مثال‬
AS SELECT empno EMPLOYEE_NUMBER , ename NAME ,
sal SALARY
FROM emp View created.
WHERE deptno = 30 ;
Retrieving Data from the View : : ‫استعادة البيانات من المنظور‬
SQL> SELECT * EMPLOYEE_NUMBER NAME SALARY
FROM salvu30 ; ------------------------------- ---------- ------------
7499 ALLEN 1600
7521 WARD 1250
7654 MARTIN 1250
………….

- 51 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Modifying a View ‫تعديل المنظور‬


CREATE OR REPLACE VIEW ‫يمكن تعديل المنظور باستخدام تعليمة‬
: ‫ وإضافة اسم مستعار لكل عمود كما يلي‬EMPVU10 ‫في المثال التالي نقوم بتعديل المنظور السابق والمسمى‬
SQL> CREATE OR REPLACE VIEW empvu10 : ‫مثال‬
( employee_number , employee_name , job_title )
AS SELECT empno , ename , job
FROM emp
View created.
WHERE deptno = 10 ;

• Column aliases in the CREATE VIEW clause are listed in the same order as the columns in the
subquery.
.‫ بنفس ترتيب األعمدة ضمن االستفسار الجزئي‬CREATE VIEW ‫• ترتب األسماء المستعرة في عبارة‬

Creating a Complex View ‫إنشاء منظور مركب‬


• Create a complex view that contains group functions to display values from tow tables.
:‫• إنشاء منظور مركب يحوي توابع تجميع لعرض البيانات من جدولين كما في المثال التالي‬
SQL> CREATE VIEW dept_sum_vu : ‫مثال‬
( name , minsal , maxsal , avgsal )
AS SELECT d.dname , MIN(e.sal) , MAX(e.sal) , AVG(e.sal)
FROM emp e , dept d
WHERE e.deptno = d.deptno
GROUP BY d.dname ; View created.

dept_sum_vu ‫استرجاع البيانات من المنظور‬


SQL> SELECT * NAME MINSAL MAXSAL AVGSAL
FROM dept_sum_vu ; ---------- --------- ---------- --------------
ACCOUNTING 1300 5000 2916.66667
RESEARCH 800 3000 2175
SALES 950 2850 1566.66667

Rules for Performing DML Operations On a View ‫ على المنظور‬DML ‫قواعد تطبيق تعليمات‬
• You can perform DML operations on simple views.
.‫ ) لغة معالجة البيانات ( على المناظير البسيطة‬DML ‫• يمكنك تطبيق تعليمات‬
• You cannot remove a row if the view contains the following:
‫• ال يمكنك حذف أي صف أو سطر من السطور إذا احتوى على أ ﱟ‬
:‫ي مما يلي‬
o Group functions . ‫توابع تجميع‬
o A GROUP BY clause. ‫عبارة الترتيب‬
o The DISTINCT keyword .‫التعليمة الخاصة بإلغاء التكرار‬
• You cannot modify data in a view if it contains:
: ‫ي مما يلي‬‫• ال يمكن تعديل البيانات داخل منظور إذا احتوت أ ﱟ‬
o Any of the conditions mentioned in the previous slide. ‫أي من الشروط المذكورة في السابق‬
o Columns defined by expressions. ‫أعمدة معرفة بتعابير‬
o The ROWNIM pseudocolumn.
• You cannot add data:
o The view contains any of the conditions mentioned above or in the previous slide .
. ‫ إذا احتوى المنظور أي من الشروط السابقة أو الالحقة‬o
o There are NOT NULL columns in the base tables that are not selected by the view.
.‫ إذا كانت ھنالك أعمدة يشترط أن ال تكون فارغة في الجداول التي تشكل قاعدة المنظور ولم يتم اختيار ھذه األعمدة‬o

- 52 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Using the WITH CHECK OPTION Clause ‫استخدام عبارة خيار التحقق‬

WITH CHECK OPTION ‫ المطبقة على المنظور ضمن مجال المنظور باستخدام عبارة‬DML ‫يمكنك أن تضمن بقاء تعليمة الــ‬
SQL> CREATE OR REPLACE VIEW empvu20 : ‫مثال‬
AS SELECT *
FROM emp View created.
WHERE deptno = 20
WITH CHECK OPTION CONSTRAINT empvu20_ck ;
WITH ‫ في أي سطر ضمن المنظور ألنه يتعدى على قيد خيار التحقق‬deptno ‫• ستفشل أي محاولة لتغيير رقم القسم‬
. ‫ وبالتالي إذا قمنا بمحاولة تعديل المنظور السابق فإننا نحصل على رسالة خطأ‬CHECK OPTION

SQL> UPDATE empvu20 : ‫مثال‬


SET deptno = 10
WHERE empno = 7788 ;
ERROR at line 1 :
ORA-01402: view WITH CHECK OPTION where-clause violation

Denying DML Operations DML ‫رفض عمليات الـ‬

.‫ إلى تعريف المنظور‬WITH READ ONLY ‫ عند إضافة الخيار‬DML ‫يمكنك منع حدوث أي عملية‬ •

SQL> CREATE OR REPLACE VIEW empvu10 : ‫مثال‬


( employee_number , employee_name , job_title )
AS SELECT empno , ename , job
FROM emp
View created.
WHERE deptno = 10
WITH READ ONLY ;

:‫لو أننا قمنا بأي محاولة مثالً لحذف سطر من المنظور ستكون النتيجة رسالة خطأ‬ •

SQL> DELETE FROM empvu10 : ‫مثال‬


WHERE employee_number = 7782 ;

ERROR at line 1 :
ORA-01752: Cannot delete from view without exactly one key-preserved table

Removing a View ‫حذف )إسقاط( المنظور‬

• Remove a view without losing data because a view is based on underling tables on the database.
.‫• حذف المنظور بدون فقدان البيانات وذلك ألن المنظور مبني على أساس جداول تابعة في قاعدة البيانات‬

DROP VIEW view ; :‫الصيغة العامة‬

view is the name of the view. ‫ اسم المنظور‬view

SQL> DROP VIEW empvu10 ; : ‫مثال‬

View dropped.

- 53 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫المسلسل‬
‫ِ‬ ‫‪-Sequence‬‬
‫‪ -Index‬الفھرس‬
‫‪ -Synonym‬المرادف‬
‫? ‪What Is a Sequence‬‬ ‫ما ھو المسلسل‬
‫•‬ ‫‪Automatically generates unique numbers.‬‬
‫•‬ ‫‪Is a sharable object.‬‬
‫•‬ ‫‪Is typically used to create a primary key value.‬‬
‫•‬ ‫‪Replaces application code.‬‬
‫•‬ ‫‪Speeds up the efficiency of accessing sequence values when cached in memory.‬‬
‫يولد بشكل آلي أعداداً فريدة ‪.‬‬ ‫•‬
‫ھو غرض قابل للمشاركة ‪.‬‬ ‫•‬
‫يستخدم بشكل نموذجي لتوليد قيم المفتاح األساسي ‪.‬‬ ‫•‬
‫يستبدل رمز التطبيق‪.‬‬ ‫•‬
‫تقوم بتسريع فعالية دخول قيم السلسلة عندما يخبأھا في الذاكرة‪.‬‬ ‫•‬

‫‪The CREATE SEQUENCE Statement‬‬ ‫عبارة إنشاء مسلسل‬

‫تعريف قيم متسلسلة تقوم بتوليد أرقام متسلسلة بشكل تلقائي ‪:‬‬

‫‪CREATE SEQUENCE sequence‬‬ ‫الصيغة العامة‬


‫] ‪[ INCREMENT BY n‬‬
‫] ‪[ START WITH n‬‬
‫] } ‪[ { MAXVALUE n | NOMAXVALUE‬‬
‫] } ‪[ { MINVALUE n | NOMINVALUE‬‬
‫] } ‪[ { CYCLE | NOCYCLE‬‬
‫; ] } ‪[ { CACHE n | NOCACHE‬‬

‫‪sequence is the name of the sequence generator‬‬ ‫‪ sequence‬تعبر عن اسم مولد المسلسل‬
‫‪ INCREMENT BY n‬تحدد الفاصل بين األرقام السلسلة في حال كون السلسلة عبارة عن أرقام صحيحة وفي حالة إھمال ھذه‬
‫العبارة فإن السلسلة تتزايد بمقدار ‪. 1‬‬
‫‪ START WITH n‬يحدد أول رقم يتم توليده في السلسلة )بداية السلسلة( وفي حالة إھمال ھذه العبارة فإن السلسلة تبدأ بالرقم ‪1‬‬
‫‪ MAXVALUE n‬تحدد أكبر رقم يمكن أو تولده السلسلة ‪.‬‬
‫‪ NOMAXVALUE‬تحدد أكبر قيمة ممكن الوصول إليھا وھي تساوي ‪ 10^27‬للترتيب التصاعدي وتساوي ‪ -1‬للترتيب التنازلي‪.‬‬
‫‪ MINVALUE n‬تحدد أصغر رقم في السلسلة ‪.‬‬
‫‪ NOMAXVALUE‬تحدد أصغر قيمة ممكن الوصول إليھا وھي تساوي ‪ 1‬للترتيب التصاعدي وتساوي )‪ –(10^27‬للترتيب‬
‫التنازلي‪.‬‬
‫‪ CYCLE | NOCYCLE‬تحدد فيما إذا السلسلة ستستمر بتوليد القيم المتسلسلة حتى وإن بلغت الحد األعلى أو األدنى المخصص‬
‫لھا أو أن تتوقف عند ذلك الحد ‪ NOCYCLE‬وھو الخيار االفتراضي ‪.‬‬
‫‪ CACHE n | NOCACHE‬تحدد عدد القيم التي يقوم مزود أوراكل بتخصيصھا مسبقاً ووضعھا في الذاكرة ويقوم مزود أواكل‬
‫افتراضيا بتخصيص مسبق لـ ‪ 20‬قيمة ‪.‬‬

‫مثال ‪ :‬إنشاء سلسلة باسم ‪ DEPT_DEPTNO‬لتستخدم من أجل المفتاح األساسي في الجدول ‪ DEPT‬وال تقم بتفعيل الخيار ‪CYCLE‬‬
‫‪SQL> CREATE SEQUENCE dept_deptno‬‬
‫‪INCREMENT BY 1‬‬
‫‪START WITH 91‬‬
‫‪MAXVALUE‬‬ ‫‪100‬‬
‫‪NOCACHE‬‬ ‫‪Sequence created.‬‬
‫; ‪NOCYCLE‬‬

‫‪- 54 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪Confirming Sequences‬‬ ‫التثبت من المسلسل‬

‫يمكنك التحقق من قيم المسلسل ضمن جدول قاموس بيانات المسلسالت ‪ USER_SEQUENCES‬كما يلي ‪:‬‬
‫‪SQL> SELECT‬‬ ‫‪sequence_name , min_value , max_value , increment_by , last_number‬‬
‫‪FROM‬‬ ‫; ‪user_sequences‬‬

‫بحيث أن العمود ‪ last_number‬يعرض رقم المسلسل الالحق المتاح‬

‫‪SEQUENCE_NAME‬‬ ‫‪MIN_VALUE‬‬ ‫‪MAX_VALUE INCREMENT_BY LAST_NUMBER‬‬


‫‪--------------------------‬‬ ‫‪-----------------‬‬ ‫‪------------------- ------------------------ ---------------------‬‬
‫‪DEPT_DEPTNO‬‬ ‫‪1‬‬ ‫‪100‬‬ ‫‪1‬‬ ‫‪91‬‬

‫‪NEXTVAL and CURRVAL Pseudocolumns‬‬ ‫األعمدة الزائفة‬


‫‪• NEXTVAL returns the next available sequence value.‬‬
‫‪ NEXTVAL‬يعيد قيمة المسلسل المتاح التالي )الالحق ( كما يعيد قيمة المسلسل في كل مرة يتم فيھا الرجوع إليه حتى بالنسبة‬ ‫•‬
‫لمستخدمين مختلفين ‪.‬‬
‫يحصل على قيمة المسلسل الحالي ‪• CURRVAL obtains the current sequence value.‬‬

‫‪Rules for using NEXTVAL and CURRVAL‬‬ ‫قوانين استخدام ‪ NEXTVAL‬و ‪CURRVAL‬‬

‫يمكنك استخدام ‪ NEXTVAL‬و ‪ CURRVAL‬ضمن ما يلي ‪:‬‬


‫‪ -‬ضمن قائمة عبارة ‪ SELECT‬والتي ليست جزء من االستفسار الجزئي ‪.‬‬
‫‪ -‬ضمن قائمة عبارة ‪ SELECT‬في تعليمة ‪. INSERT‬‬
‫‪ -‬ضمن عبارة ‪ VALUES‬التابعة لتعليمة ‪. INSERT‬‬
‫‪ -‬ضمن عبارة ‪ SET‬التابعة لتعليمة ‪. UPDATE‬‬
‫ال يمكنك استخدام ‪ NEXTVAL‬و ‪ CURRVAL‬ضمن ما يلي ‪:‬‬
‫‪ -‬ضمن قائمة عبارة ‪ SELECT‬الخاصة بالمنظور ‪. VIEW‬‬
‫‪ -‬ضمن عبارة ‪ SELECT‬مع الكلمة المفتاحية ‪. DISTINCT‬‬
‫‪ -‬ضمن عبارة ‪ SELECT‬مع التعليمات ‪.ORDER BY ، HAVING ، GROUP BY‬‬
‫‪ -‬ضمن استفسار جزئي داخل تعليمات ‪ SELECT‬أو ‪ DELETE‬أو ‪. UPDATE‬‬
‫‪ -‬ضمن القيمة االفتراضية ‪ DEFAULT exp‬ضمن تعليمتي ‪ CREATE TABLE‬أو ‪. ALTER TABLE‬‬

‫‪Using a Sequence‬‬ ‫استخدام المسلسل‬

‫سنقوم بإدخال اسم قسم جديد ھو "‪ "MARKETING‬ضمن جدول األقسام كما يلي ‪:‬‬
‫) ‪SQL> INSERT INTO dept ( deptno , dname , loc‬‬ ‫مثال ‪:‬‬
‫‪VALUES‬‬ ‫‪( dept_deptno.NEXTVAL ,‬‬
‫; ) ' ‪' MARKETING ' , ' SAN DIEGO‬‬ ‫‪1 row created.‬‬

‫إظھار القيمة المضافة ضمن الحقل ‪ deptno‬بواسطة ‪ NEXTVAL‬وذلك باستخدام ‪ CURRVAL‬وذلك ضمن الجدول الفارغ‬
‫‪CURRVAL‬‬ ‫‪: DUAL‬‬
‫‪SQL> SELECT dept_deptno. CURRVAL‬‬ ‫‪--------------‬‬
‫‪FROM‬‬ ‫; ‪dual‬‬ ‫‪91‬‬
‫و السبب ھو أننا قد وضعنا القيمة ‪ 91‬كقيمة بدء في المثال صفحة ‪ 48‬باستخدام التعليمة ‪START WITH 91‬‬
‫أو باستعراض الجدول ‪ dept‬كما يلي ‪:‬‬
‫* ‪SQL> SELECT‬‬
‫‪DEPTNO‬‬ ‫‪DNAME‬‬ ‫‪LOC‬‬
‫‪FROM‬‬ ‫‪dept‬‬
‫‪------------‬‬ ‫‪-----------‬‬ ‫‪-------‬‬
‫; ' ‪WHERE dname = ' MARKETING‬‬
‫‪91 MARKETING‬‬ ‫‪SAN DIEGO‬‬

‫‪- 55 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪ o‬إن وضع قيم المسلسل في الذاكرة يسمح بتسريع الوصول إلى تلك القيم ‪.‬‬
‫‪ o‬تحدث الثغرات )الفجوات( ضمن قيم المسلسل إذا حدث أي مما يلي ‪:‬‬
‫ حدوث عملية تراجع ‪. Rollback‬‬
‫ انھيار النظام ‪.‬‬
‫ في حالة استخدام المسلسل ضمن جدول آخر‪.‬‬
‫‪ o‬يمكن عرض المسلسل التالي المتاح إذا تم إنشاؤه مع ‪ NOCACH‬باالستعالم عن جدول ‪. UER_SEQUENCES‬‬

‫‪Modifying a Sequence‬‬ ‫تعديل المسلسل‬

‫•‬ ‫‪Change the increment value , maximum value , minimum value , cycle option , or cache option .‬‬
‫• تعديل قيمة فارق الزيادة بين قيم المسلسل و القيمة العظمى والقيمة الصغرى و خيار الذاكرة ‪. Cache‬‬

‫‪ALTER SEQUENCE sequence‬‬ ‫الصيغة العامة‬


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

‫مثال ‪ :‬تعديل المسلسل المسمى ‪ DEPT_DEPTNO‬وذلك بتعديل القيمة العظمى ‪:‬‬


‫‪SQL> ALTER SEQUENCE dept_deptno‬‬
‫‪INCREMENT BY 1‬‬
‫‪MAXVALUE‬‬ ‫‪999999‬‬
‫‪NOCACHE‬‬ ‫‪Sequence altered.‬‬
‫; ‪NOCYCLE‬‬

‫• حتى تقوم بعملية تعديل المسلسل يجب أن تملك االمتياز أو الترخيص لھذه العملية باإلضافة إلى أنه فقط أرقام المسلسل الجديدة‬
‫أو المستقبلية ھي التي تتأثر بالتعديل كما أنه من أجل بدء المسلسل بقيمة جديدة أي تغيير قيمة البدء ‪ START WITH‬عليك‬
‫حذف المسلسل ثم إعادة إنشاؤه كما أنه ال يمكنك أثناء التعديل وضع قيمة عظمى تكون أصغر من القيمة الحالية أي الموجودة ‪.‬‬
‫مثال ‪ :‬تعديل المسلسل المسمى ‪ DEPT_DEPTNO‬وذلك بتعديل القيمة العظمى بقيمة أصغر من آخر قيمة ‪ 91‬موجودة بالجدول ‪:‬‬
‫‪SQL> ALTER SEQUENCE dept_deptno‬‬
‫‪INCREMENT BY 1‬‬ ‫‪ALTER SEQUENCE dept_deptno‬‬
‫‪MAXVALUE‬‬ ‫‪90‬‬ ‫*‬
‫‪NOCACHE‬‬ ‫‪ERROR at line 1:‬‬
‫; ‪NOCYCLE‬‬ ‫‪ORA-04009: MAXVALUE cannot be made to be less‬‬
‫‪than the current value‬‬

‫‪Removing a Sequence‬‬ ‫حذف ) إزالة ( المسلسل‬

‫يمكن إزالة المسلسل من قاموس البيانات ‪ data dictionary‬باستخدام تعليمة ‪: DROP‬‬

‫‪DROP SEQUENCE sequence‬‬ ‫الصيغة العامة‬


‫مثال ‪ :‬حذف المسلسل المسمى ‪: DEPT_DEPTNO‬‬
‫; ‪SQL> DROP SEQUENCE dept_deptno‬‬
‫‪Sequence dropped.‬‬

‫‪- 56 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬
‫‪ -Index‬الفھرس‬

‫? ‪What Is a Index‬‬ ‫ما ھو الفھرس‬

‫•‬ ‫‪Is a schema object .‬‬


‫•‬ ‫‪Is used by the Oracle Server to speed up the retrieval of rows by using a pointer .‬‬
‫•‬ ‫‪Can reduce disk I/O by using rapid path access method to locate the data quickly .‬‬
‫•‬ ‫‪Is independent of the table it indexes .‬‬
‫•‬ ‫‪Is used and maintained automatically by the Oracle Server .‬‬
‫• عبارة عن غرض مخطط ‪.‬‬
‫• يستخدم من قبل مزود أوراكل ليسرع عملية استرجاع الصفوف باستخدام المؤشر ‪.‬‬
‫• يمكنه تصغير القرص في عملية اإلدخال واإلخراج باستخدام طريق الوصول السريع لتحديد مكان البيانات بسرعة ‪.‬‬
‫• يستخدم ويحفظ آلياً من قبل خادم أوراكل ‪.‬‬
‫كيف تنشأ الفھارس ‪:‬‬
‫• ينشأ الفھرس الفريد بشكل أوتوماتيكي عندما نضع أحد القيود ‪ UNIQUE‬أو ‪ PRIMARY KEY‬ضمن تعريف الجدول ‪.‬‬
‫• أو يدوياً بحيث يمكن للمستخدمين إنشاء فھارس غير فريدة على األعمدة لتسرع من وقت عملية الوصول إلى الصفوف ‪.‬‬

‫نقوم باختيار الفھرس على أنه إما عمود يحوي قيم غير مكررة ويسمى بالفريد ومن الممكن أن ال يكون المفتاح األساسي للجدول أو عمود‬
‫يحوي قيم مكررة ويسمى الفھرس الغير فريد و ھو عمود يستخدم بشكل كبير ضمن تعليمة ‪ WHERE‬أي يتم الحصول على الصفوف‬
‫عن طريقه والفھرس في بنية مثل البنية الشجرية ‪.‬‬

‫‪Create Index‬‬ ‫إنشاء فھرس‬

‫يمكن إنشاء فھرس على عمود أو أكثر ‪:‬‬


‫‪CREATE INDEX index‬‬ ‫الصيغة العامة‪:‬‬
‫; ) … ] ‪ON table ( column [ , column‬‬
‫‪index‬‬ ‫‪is the name of the index.‬‬ ‫‪ index‬اسم الفھرس‬
‫‪table‬‬ ‫‪is the name of the table.‬‬ ‫‪ table‬اسم الجدول‬
‫‪column is the name of the column in the table to be indexed.‬‬ ‫‪ column‬اسم العمود المفھرس في الجدول‬

‫مثال ‪ :‬قم بتحسين سرعة استعالم الوصول إلى عمود ‪ ENAME‬من الجدول ‪: EMP‬‬
‫‪SQL> CREATE INDEX emp_ename_idx‬‬
‫‪ON‬‬ ‫; )‪emp(ename‬‬ ‫‪Index created .‬‬

‫‪When to Create an Index‬‬ ‫متى نقوم بإنشاء الفھارس‬

‫نستخدم الفھرس على العمود الذي يستخدم بشكل كبير ضمن عبارة ‪ WHERE‬أو في شرط الربط ‪. Join condition‬‬ ‫‪.1‬‬
‫على العمود الذي يحوي مجال واسع من القيم‪.‬‬ ‫‪.2‬‬
‫على العمود الذي يحوي عدد كبير من القيم الفارغة‪.‬‬ ‫‪.3‬‬
‫على عمودين أو أكثر يستخدمان بشكل كبير ضمن عبارة ‪ WHERE‬أو في شرط الربط ‪. Join condition‬‬ ‫‪.4‬‬
‫على الجدول الكبير ) الضخم ( والمطبق عليه استفسارات يُتوقع أن تعيد أقل من ‪ 2‬إلى ‪ % 4‬من إجمالي الصفوف ‪.‬‬ ‫‪.5‬‬

‫‪When Not to Create an Index‬‬ ‫متى ال نقوم بإنشاء الفھارس‬

‫الجدول الصغير ‪.‬‬ ‫‪.1‬‬


‫على أعمدة ال تستخدم في الغالب كشرط ضمن االستفسار ‪.‬‬ ‫‪.2‬‬
‫أغلب االستفسارات المتوقع أن تعيد أكثر من ‪ 2‬إلى ‪ % 4‬من إجمالي الصفوف ‪.‬‬ ‫‪.3‬‬
‫الجدول الذي يتم تحديثه كثيراً ‪.‬‬ ‫‪.4‬‬

‫‪- 57 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Confirming Indexes (‫التأكد من الفھارس )التثبت‬

UNIQUE or ‫ يحتوي اسم الفھرس كما يحوي صفة كونه وحيداً أو ال‬USER_INDEXES ‫إن منظور قاموس البيانات المسمى‬
: ‫ يحتوي اسم الفھرس واسم الجدول واسم العمود كما يلي‬USER_IND_COLUMNS ‫ كما أن المنظور‬NONUNIQUE
SQL> SELECT ic.index_name , ic.column_name , : ‫مثال‬
Ic. column_position col_pos , ix.uniqueness
FROM user_indexes ix , user_ind_columns ic
WHERE ic.index_name = ix.index_name
AND ic.table_name = ' EMP ' ;

INDEX_NAME COLUMN_NAME COL_POS UNIQUENESS


-------------------- ----------------------- ------------- -------------------
PK_EMP EMPNO 1 UNIQUE
EMP_ENAME_IDX ENAME 1 NONUNIQUE

Removing an Index ‫حذف ) إسقاط ( فھرس‬

: DROP ‫ باستخدام التعليمة‬Data dictionary ‫يتم حذف الفھرس من قاموس البيانات‬


DROP INDEX index ‫الصيغة العامة‬
: DEPT_DEPTNO ‫ حذف المسلسل المسمى‬: ‫مثال‬
SQL> DROP INDEX emp_ename_idx ;
Index dropped.

. DROP ANY INDEX ‫حتى تقوم بإسقاط الفھرس يجب أن تكون المالك للفھرس أو أن يكون لديك االمتياز‬

- 58 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

‫ المرادف‬- Synonym
What Is a Synonym ? ‫ما ھو المرادف‬

• Simplify access to objects by creating a synonym (another name for an object) .


• Refer to a table owned by another user.
• Shorten lengthy object names.
.(‫يمكنك تبسيط عملية الوصول إلى األغراض بإنشاء الرديف )وھو اسم آخر للغرض‬ •
.‫يشير إلى جدول مملوك من قبل مستخدم آخر‬ •
.‫يقوم بتقصير أطوال أسماء األغراض‬ •
.‫يقوم بإنشاء رديف السم جدول أو منظور محلي أو جدول أو منظور بعيد‬ •

CREATE [PUBLIC] SYNONYM synonym :‫الصيغة العامة‬


FOR object ;
PUBLIC create a synonym accessible to all user . ‫ يفعل ھذا الخيار إمكانية وصول كافة المستخدمين للرديف‬PUBLIC
synonym is the name of the synonym to be created. ‫ اسم الرديف‬synonym
object identifies the object for which the synonym is created.
.‫ اسم الغرض الذي نريد إنشاء رديف له‬object

:dept_sum_vu ‫ قم بإنشاء اسم مقصر للمنظور المسمى‬: ‫مثال‬


Create a shortened name for the DEPT_SUM_VU view.

SQL> CREATE SYNONYM d_sum Synonym created.


FOR dept_sum_vu ;

Drop a Synonym ‫حذف ) إسقاط ( مرادف‬

: DROP ‫ باستخدام التعليمة‬Data dictionary ‫يتم حذف المرادف من قاموس البيانات‬


DROP SYNONYM synonym ‫الصيغة العامة‬
: d_sum ‫ حذف المرادف المسمى‬: ‫مثال‬
SQL> DROP SYNONYM d_sum ;
Synonym dropped.

• The DBA can create public synonym accessible to all user.


. PUBLIC ‫يمكن لمدير قاعدة البيانات إنشاء رديف عام متاح لكافة المستخدمين باستخدام التعليمة‬ •

: Alice ‫ التابع للمستخدم‬DEPT ‫ للجدول‬DEPT ‫ نقوم في المثال التالي بإنشاء مرادف عام باسم‬: ‫مثال‬
SQL> CREATE PUBLIC SYNONYM d_sum
FOR alice.dept ; Synonym created.

. PUBLIC ‫يمكن فقط لمدير قاعدة البيانات حذف رديف عام‬ •

: DEPT ‫ حذف المرادف المسمى‬: ‫مثال‬


SQL> DROP SYNONYM dept ;
Synonym dropped.

- 59 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫التحكم بوصول المستخدم _ ‪Controlling User Access‬‬


‫‪In multiple user environment you want to maintain security of the database access and use. With Oracle‬‬
‫‪Server database security you can do the following :‬‬
‫‪• Control database access.‬‬
‫‪• Give access to specific object in the database.‬‬
‫‪• Confirm given and received privileges with the Oracle data dictionary.‬‬
‫‪• Create a synonym for database objects.‬‬
‫‪Database security can be classified into two categories : system security and data security .‬‬
‫‪System security covers access and use of the database at the system level such as username and‬‬
‫‪password, disk space allocated to users , and system operations allowed by the user .‬‬
‫‪Database security covers access and use of the database objects and the actions that those users can‬‬
‫‪have on the objects.‬‬
‫في بيئة متعددة المستخدمين ال بد من الحفاظ على أمن وسرية الدخول إلى البيانات واستخدامھا‪ .‬مع األمن الخاص بقاعدة بيانات خادم‬
‫أوراكل يمكنك القيام بما يلي ‪:‬‬
‫• التحكم بالوصول إلى قاعدة البيانات ‪.‬‬
‫• إعطاء ميزة الوصول إلى غرض معين من أغراض قاعدة البيانات‪.‬‬
‫• التأكد من إعطاء وتسلم أو تلقي االمتيازات عن طريق قاموس بيانات أوراكل ‪.‬‬
‫• إنشاء رديف أو مرادف ألغراض قاعدة البيانات‪.‬‬
‫أمن قاعدة البيانات يمكن أن يصنف ضمن فئتين ‪ :‬أمن النظام ‪ system security‬وأمن البيانات ‪. data security‬‬
‫أمن النظام ‪ :‬يشمل عملية الوصول واستخدام قاعدة البيانات على مستوى النظام مثل اسم المستخدم و كلمة المرور ‪ ،‬سعة القرص‬
‫المخصصة للمستخدمين ‪ ،‬عمليات النظام المسموح بھا من قبل المستخدم ‪.‬‬
‫أمن البيانات ‪ :‬يشمل عملية الوصول واستخدام أغراض البيانات واألحداث التي يمكن لمستخدمين أن يؤثروا بھا على ھذا الغرض ‪.‬‬

‫‪Privileges‬‬ ‫االمتيازات ) السماحيات (‬

‫•‬ ‫‪Database security : ( system security – data security ).‬‬


‫•‬ ‫‪System privileges : Gain access to the database.‬‬
‫•‬ ‫‪Object privileges : Manipulate the content of the database objects.‬‬
‫•‬ ‫‪Schema : Collection of objects , such as tables, views, and sequences.‬‬
‫• أمن قاعدة البيانات ‪ ) :‬أمن النظام – أمن البيانات (‪.‬‬
‫• امتيازات )سماحيات( النظام ‪ :‬الحصول على إذن للوصول إلى قاعدة البيانات ‪.‬‬
‫• امتيازات األغراض ‪ :‬يتعامل مع محتويات أغراض قاعدة البيانات ‪.‬‬
‫• المخطط ‪ :‬مجموعة من األغراض مثل الجداول والمناظير و المسلسالت ‪.‬‬
‫االمتيازات ‪ :‬تمثل الحق بتنفيذ عبارات ‪ SQL‬خاصة ‪ ،‬يقوم مدير قاعدة البيانات والذي يملك مستوى عالي من قابلية منح االمتيازات بمنح‬
‫السماحيات للمستخدمين للوصول إلى قاعدة البيانات‬
‫كما يمكن أن يعطى المستخدمون امتياز منح سماحيات إضافية لمستخدمين آخرين ‪.‬‬

‫‪- 60 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪System Privileges‬‬ ‫امتيازات النظام‬


‫•‬‫‪ .‬أكثر من ‪ 80‬امتياز متاح للمستخدمين والوظائف ‪More than 80 privileges are available for users and roles‬‬
‫•‬‫‪The DBA has high-level system privileges :‬‬
‫‪ .‬إنشاء مستخدمين ‪⇒ Create new users‬‬
‫‪ .‬حذف الجداول ‪⇒ Remove tables‬‬
‫‪ .‬إنشاء نسخة احتياطية للجداول ‪⇒ Back up tables‬‬
‫‪System Privilege‬‬ ‫العمليات المرخص بھا ‪Operations Authorized‬‬
‫‪CREATE USER‬‬ ‫ھذا االمتياز من وظائف مدير قواعد البيانات ‪DBA‬‬
‫‪DROP USER‬‬ ‫إسقاط ) حذف ( مستخدم ثاني‬
‫‪DROP ANY TABLE‬‬ ‫حذف جدول من أي خطة‬
‫‪BACKUP ANY TABLE‬‬ ‫إنشاء نسخة احتياطية ألي جدول في أي خطة باستخدام التصدير‬

‫‪Creating Users‬‬ ‫إنشاء مستخدمين‬

‫يقوم مدير قاعدة البيانات ‪ DBA‬بإنشاء المستخدمين باستخدام عبارة ‪ CREATE USER‬ال يملك المستخدم أي امتيازات في المرحلة‬
‫الحالية يقوم عندھا المدير بمنح عدد من االمتيازات للمستخدم ‪ ،‬تحدد ھذه االمتيازات ما الذي يمكن للمستخدم القيام به على مستوى قاعدة‬
‫البيانات ‪:‬‬
‫‪CREATE USER user‬‬ ‫الصيغة العامة‬
‫; ‪IDENTIFIED BY passwords‬‬

‫مثال ‪ :‬إنشاء المستخدم ‪ scott‬و كلمة المرور له ‪: tiger‬‬


‫‪SQL> CREATE USER scott‬‬
‫; ‪IDENTIFIED BY tiger‬‬ ‫‪User created.‬‬

‫‪user is the name of the user to be created.‬‬ ‫‪ user‬اسم المستخدم‬


‫‪password specifies that the user must login with this password.‬‬ ‫‪ password‬كلمة سر الدخول‬

‫‪User System Privileges‬‬ ‫امتيازات النظام للمستخدم‬

‫يمكن لمدير قاعدة البيانات ‪ DBA‬منح المستخدم امتيازات نظام محددة عندما يتم إنشاؤه كما يلي ‪:‬‬
‫]‪CRANT privilege [ , privilege ….‬‬ ‫الصيغة العامة‬
‫‪TO‬‬ ‫; ]… ‪user [ , user‬‬

‫•‬ ‫‪An application developer may have the following system privileges :‬‬
‫إنشاء جلسة ‪⇒ CREATE SESSION‬‬
‫إنشاء جدول ‪⇒ CREATE TABLE‬‬
‫إنشاء مسلسل ضمن خطة مستخدم ‪⇒ CREATE SEQUENCE‬‬
‫إنشاء منظور ضمن خطة المستخدم ‪⇒ CREATE VIEW‬‬
‫إنشاء تابع أو إجراء مخزن أو رزمة ضمن خطة المستخدم ‪⇒ CREATE PROCEDURE‬‬

‫‪Creating and Granting Privileges to a Role‬‬ ‫إنشاء ومنح امتيازات لوظيفة‬

‫وظيفة أوراكل )‪ : (Oracle Role‬ھو مجموعة من االمتيازات أو نوع من أنواع الولوج إلى المعلومات التي يحتاجھا المستخدم والتي‬
‫تتعلق بالمسؤوليات والوظائف المتاحة له‪.‬تحوي وظيفة مدير قاعدة المعطيات كل سماحيات و امتيازات النظام بما فيھا إعطاء االمتيازات‬
‫لآلخرين ‪.‬‬
‫كما يمكنك إعطاء مجموعة امتيازات لوظيفة ثم منح ھذه الوظيفة لمستخدم أو أكثر وبالتالي أي مستثمر يمكنه مباشرة إعطاء سماحيات أو‬
‫امتيازات لمستثمر آخر‪.‬‬

‫‪- 61 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
: manager ‫ إنشاء الوظيفة‬: ‫مثال‬
SQL> CREATE ROLE manager ;
Role created.

: manager ‫ منح السماحيات للوظيفة‬: ‫مثال‬


SQL> GRANT create table , create view
TO manager ; Grant succeeded .

:CLARK ‫ و‬BLAKE ‫ للمستخدمين‬manager ‫ منح للوظيفة‬: ‫مثال‬


SQL> GRANT manager to BLAKE , CLEARK ;
Grant succeeded .

Changing Your Password ‫تغيير كلمة السر‬


• You can change your password by using the ALTER USER statement.
ALTER USER user IDENTIFIED BY passwords ; ‫الصيغة العامة‬
user is the name of the user to be created. ‫ اسم المستخدم‬user
password specifies the new password. ‫ كلمة السر الجديدة‬password

: scott ‫ تغيير كلمة السر للمستخدم‬: ‫مثال‬


SQL> ALTER USER scott
IDENTIFIED BY lion ; User altered .

Granting System Privileges ‫منح سماحيات النظام‬


. ‫يمكن لمدير قاعدة المعطيات أن يقوم بمنح امتيازات محددة للمستخدم‬

: scott ‫ منح بعض امتيازات النظام للمستخدم‬: ‫مثال‬


SQL> GRANT create table , create sequence , create view
TO scott ; Grant succeeded

What is a Role ? ‫ما ھي الوظيفة‬


• A role is a named group of related privileges that can be granted to the user. This method makes
granting and revoking privileges easier to perform and maintain .
• A user can have access to several roles , and several users can be assigned the same role. Roles
typically are created for a database application.
‫ تجعل ھذه الطريقة عملية منح وسحب االمتيازات‬، ‫• الوظيفة ھي عبارة عن اسم لمجموعة امتيازات يمكن أن تمنح لمستخدم‬
. ‫أسھل في التنفيذ واإلبقاء‬
‫ تم إنشاء‬، ‫ كما يمكن تخصيص نفس الوظيفة لعدد من المستخدمين‬. ‫• يمكن أن يمتلك للمستخدم الوصول إلى وظائف متعددة‬
. ‫الوظائف نموذجياً من أجل تطبيق قاعدة البيانات‬

CREATE ROLE role ; ‫الصيغة العامة‬


role is the name of the role to be created. ‫ اسم الوظيفة المنشأة‬role

- 62 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Object Privileges - ‫امتيازات األغراض‬


Object privilege Table View Sequence Procedure
ALTER
DELETE
EXECUTE
INDEX
INSERT
REFERENCES
SELECT
UPDATE

Object Privileges ‫امتيازات األغراض‬


• Object privileges vary from object to object .
• An owner has all the privileges on the object .
• An owner can give specific privilege on that owner's object .
. ‫تتنوع امتيازات الغرض من غرض إلى آخر‬ •
. ‫المالك أو صاحب الغرض يملك جميع االمتيازات على الغرض التابع له‬ •
.‫يستطيع المالك إعطاء سماحية معينة على غرض تابع له‬ •
Grant object_priv [ (columns) ] ‫الصيغة العامة‬
ON object
TO { user|role|PUBLIC }
[ WITH GRANT OPTION ] ;

object_priv is an object privilege to be granted. ‫ امتياز الغرض الممنوح‬object_priv


ALL specifies all object privileges. ‫ تحدد كافة امتيازات الغرض‬ALL
ON object is the object on witch the privileges are granted. ‫ اسم الغرض الممنوح وظيفة ما‬ON object
TO identifies to whom the privilege is granted. ‫ يحدد المستخدم الذي منح إليه االمتياز‬TO
PUBLIC grant object privileges to all users. ‫ منح سماحيات الغرض لكافة المستخدمين‬PUBLIC
[ WITH GRANT OPTION ] allows the grantee to grant the object privileges to other users and roles .
. ‫يسمح ھذا الخيار للشخص الممنوح بمنح امتيازات الغرض لمستخدمين أو وظائف آخرين‬

: rich ‫ و‬sue ‫ للمستخدمين‬EMP ‫ منح امتيازات االستفسار على الجدول‬: 1‫مثال‬


SQL> GRANT select
ON emp Grant succeeded
TO sue , rich ;

:‫ منح االمتيازات لتحديث أعمدة معينة للمستخدم والوظيفة‬: 2‫مثال‬


SQL> GRANT update (dname , loc)
ON dept Grant succeeded
TO scott , manger ;
‫ الخاصة بك أو أن تكون قد منحت‬Schema ‫حتى تقوم بمنح امتيازات على غرض ما يجب أن يكون ھذا الغرض من ضمن الخطة‬
. ‫ والذي يمنحك الحق بتمرير أو منح امتيازات الغرض لمستخدمن آخرين أو لوظائف أخرى‬WITH GRANT OPTION ‫الخيار‬

: WITH GRANT OPTION ‫ منح المستخدم الحق بتمرير االمتيازات باستخدام الخيار‬: 3‫مثال‬
SQL> GRANT select , insert
ON dept
TO scott Grant succeeded
WITH GRANT OPTION ;

- 63 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬
‫مثال‪ : 4‬السماح لكافة المستخدمين ضمن النظام باالستفسار عن الجدول ‪ DEPT‬الخاص بالمستخدم ‪ Alice‬باستخدام الكلمة المفتاحية‬
‫‪ PUBLIC‬والتي تجعل مالك الجدول من منح حق الوصول للجدول لكافة المستخدمين ‪:‬‬
‫‪SQL> GRANT select‬‬
‫‪ON‬‬ ‫‪alice.dept‬‬ ‫‪Grant succeeded‬‬
‫‪TO‬‬ ‫; ‪PUBLIC‬‬

‫بعض الجداول الخاصة بقاموس البيانات‬


‫‪Data Dictionary Table‬‬ ‫الوصف ‪Description-‬‬
‫‪ROLE_SYS_PRIVS‬‬ ‫يحوي امتيازات النظام الممنوحة للوظائف ‪System privileges granted to roles -‬‬
‫‪ROLE_TAB_PRIVS‬‬ ‫يحوي امتيازات الجدول الممنوحة للوظائف – ‪Table privileges granted to roles‬‬
‫‪USER_ROLE_PRIVS‬‬ ‫يحوي الوظائف التي يمكن الوصول إليھا من قبل المستخدم ‪Roles accessible by the user -‬‬
‫يحوي سماحيات الغرض الممنوحة على أغراض المستخدم‬
‫‪USER_TAB_PRIVS_MADE‬‬
‫‪Object privileges granted on the user’s objects‬‬
‫‪USER_ TAB _PRIVS_RECD‬‬ ‫يحوي امتيازات الغرض الممنوحة للمستخدم ‪Object privileges granted to the user -‬‬
‫يحوي سماحيات الغرض الممنوحة على أعمدة من غرض المستخدم‬
‫‪USER_COL_PRIVS_MADE‬‬
‫‪Object privileges granted on the columns of the user’s objects‬‬
‫يحوي سماحيات الغرض الممنوحة للمستخدم على أعمدة محددة‬
‫‪USER_COL_PRIVS_RECD‬‬
‫‪Object privileges granted to the user on specific columns‬‬

‫‪Revoking Object Privileges‬‬ ‫سحب )إلغاء( امتيازات الغرض‬

‫نستخدم التعليمة ‪ REVOKE‬لسحب االمتيازات الممنوحة لمستخدمين آخرين ‪.‬كما ان االمتيازات الممنوحة باستخدام الخيار‬ ‫•‬
‫‪ WITH GRANT OPTION‬يتم سحبھا أيضاً بنفس التعليمة ‪.‬‬

‫} ‪REVOKE { privilege [ , privilege … ]|ALL‬‬ ‫الصيغة العامة‬


‫‪ON‬‬ ‫‪object‬‬
‫‪FROM‬‬ ‫} ‪{ user [, user …]|role|PUBLIC‬‬
‫; ] ‪[ CASCADE CONSTRAINTS‬‬

‫‪CASCADE CONSTRAINTS is required to remove any referential integrity constraints made to the object‬‬
‫‪by means of the REFERENCES privilege .‬‬
‫ھذا الخيار مطلوب لحذف أي قيود مرجعية منشأة للغرض بواسطة امتياز المراجع ‪.‬‬

‫مثال ‪ :‬سحب االمتيازين ‪ Select‬و ‪ Insert‬على الجدول ‪ DEPT‬والممنوحين للمستخدم ‪: SCOTT‬‬


‫‪SQL> REVOKE select , insert‬‬
‫‪ON‬‬ ‫‪dept‬‬ ‫‪Revoke succeeded‬‬
‫‪FROM‬‬ ‫; ‪scott‬‬

‫إذا منح المستخدم امتياز ما مع الخيار ‪ WITH GRANT OPTION‬يستطيع عندھا أن يمنح ھذا االمتياز أيضا ً ‪،‬وعندھا يمكن‬ ‫•‬
‫حدوث سلسلة طويلة من عملية منح االمتيازات لكن ال يسمح بعملية المنح بشكل دائري ‪ .‬عند سحب المالك االمتياز الذي منحه‬
‫لمستخدم تقوم تعليمة سحب االمتياز ‪ REVOKE‬بسحب كافة االمتيازات الممنوحة بناء على ھذا االمتياز‪.‬‬

‫مثال ‪ :‬إذا قام مستخدم ما ‪ A‬بمنح امتياز االستفسار ‪ SELECT‬إلى مستخدم ثاني ‪ B‬مع خيار المنح ‪WITH GRANT OPTION‬‬
‫يستطيع المستخدم ‪ B‬عندھا أن يمنح ھذا االمتياز مع خيار المنح ‪ WITH GRANT OPTION‬إلى مستخدم ثالث ‪ C‬وھكذا إلى‬
‫مستخدم رابع ‪ C‬وفي حالة قرر المستخدم ‪ A‬سحب ھذا االمتياز من المستخدم ‪ B‬عندھا يتم سحب االمتياز الممنوح إلى كل من‬
‫المستخدمين ‪ B‬و‪. C‬‬

‫‪- 64 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫)‪Procedural Language/SQL - (PL/SQL‬‬

‫‪About PL/SQL‬‬ ‫حول لغة اإلجراءات ‪PL/SQL‬‬


‫•‬ ‫‪PL/SQL is an extension to SQL with design features of programming languages.‬‬
‫•‬ ‫‪Data manipulation and query statements of SQL are included within procedural units of code.‬‬
‫تعتبر لغة ‪ PL/SQL‬إمتداد للغة الـ ‪ SQL‬باإلضافة إلى ميزات التصميم الخاصة بلغات البرمجة‪.‬‬ ‫•‬
‫تكون تعليمات االستفسار ومعالجة البيانات الخاصة بـ ‪ SQL‬متضمنة ضمن وحدات إجرائية تحوي كود ‪.‬‬ ‫•‬
‫‪Benefits of PL/SQL‬‬ ‫ميزات وفوائد ‪PL/SQL‬‬
‫‪Modularize program development‬‬ ‫الصيغة القياسية لبرنامج التطوير‬
‫‪DECLARE‬‬ ‫التصريح‬
‫• من ضمن ميزات لغة ‪ PL/SQL‬أنك تحصل على ميزة الكفاءات اإلجرائية‬
‫والغير متاحة في لغة الـ ‪. SQL‬‬
‫‪BEGIN‬‬ ‫البدء‬

‫‪EXCEPTION‬‬ ‫االستثناء‬

‫; ‪END‬‬ ‫النھاية‬
‫‪PL/SQL Block Structure‬‬ ‫بنية كتلة ‪PL/SQL‬‬
‫‪Every unit of PL/SQL comprises one ore more blocks. These blocks can be entirely separate or nested‬‬
‫‪one within another. The basic unit (procedures, functions, and anonymous blocks) that make up a‬‬
‫‪PL/SQL program are logical blocks, witch can contain any number of nested subblocks. Therefore, one‬‬
‫‪block can represent a small part of another block, which in turn can be part of the whole unit of code.‬‬
‫كل وحدة من ‪ PL/SQL‬تتضمن واحدة أو أكثر من الكتل‪ .‬يمكن ان تكون ھذه الكتل منفصلة كلياً أو متداخلة الواحدة باألخرى ‪ .‬الوحدة‬
‫األساسية والتي ھي عبارة عن )إجراءات‪ ،‬توابع‪ ،‬و كتل مجھولة االسم تعطى تلقائيا ً االسم ‪ (anonymous‬التي تصنع برنامج الـ‬
‫‪ PL/SQL‬ھي كتل منظقية‪ ،‬والتي يمكن أن تحتوي أي عدد كان من الكتل الجزئية المتداخلة‪ .‬لذلك كتلة واحدة يمكن أن تمثل جزء‬
‫صغيرمن كتلة أخرى ‪ ،‬والتي يمكن تباعاً أن تكون جزء من الوحدة الكاملة للكود ‪.‬‬
‫• من ضمن ميزات لغة ‪ PL/SQL‬أنھا قابلة للنقل والحمل ‪. Portable‬‬
‫أي أنه يمكنك نقل أي برنامج إلى أي بيئة تدعم لغة الـ‪ PL/SQL‬أو ‪ ) Oracle Server‬نظام تشغيل أو برنامج ( بمعنى آخر برنامج الـ‬
‫‪ PL/SQL‬يمكن أن يعمل في أي مكان يمكن أن يعمل فيه مزود أوراكل ‪ .‬كما يمكنك أيضاً نقل الكود بين خادم أوراكل وتطبيقاتك يمكنك‬
‫كتابة رزم برامج محمولة ‪ Portable Program Packages‬و إنشاء مكتبات يمكن إعادة استخدامھا في بيئات مختلفة ‪.‬‬
‫• من ضمن ميزات ‪ PL/SQL‬أنه يمكن التصريح عن المعرفات‪.‬‬
‫يصرح عن المتحوالت )المتغيرات( ‪ variables‬والمؤشرات ‪ cursors‬و الثوابت ‪ constants‬واالستثناءات ‪ exceptions‬ثم استخدامھا‬
‫ضمن عبارة ‪ SQL‬و عبارات إجرائية ‪ .‬التصريح عن المتغيرات ديناميكياً باالعتماد على بنى المعطيات من الجداول واألعمدة في قاعدة‬
‫المعطيات‪.‬‬
‫• يمكن أن تبرمج بنى تحكم لغة إجرائية ‪.‬‬
‫• يمكنھا معالجة األخطاء ‪.‬‬

‫‪- 65 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
PL/SQL Block Structure PL/SQL ‫بنية كتلة‬
• DECLARE - Optional ‫ إختياري‬- ‫التصريح‬
- Variables, cursors, user-defined exceptions ‫ المتغيرات و المؤشرات واسثناءات المستخدم‬-
• BEGIN – Mandatory ‫ إجباري‬- ‫البدء‬
- SQL statements.
- PL/SQL statements.
• EXCEPTION - Optional ‫ إختياري‬- ‫استثناء‬
- Action to perform when errors occur. ‫ عمل ما يحدث في حالة حدوث أخطاء‬-
• END ; – Mandatory ‫ إجباري‬- ‫إنھاء‬

‫ أو‬SQL ‫ في نھاية عبارة‬semicolon ( ; ) ‫قم بوضع فاصلة منقوطة‬ • DECLARE


. PL/SQL ‫عبارة‬ v-variable VARCHAR2(5) ;
‫ المجھولة‬PL/SQL‫ لتنفيذ كتلة الـ‬slash ( / ) ‫استخدم عالمة الشرطة‬ • BEGIN
‫في حالة تم إنجاز الكتلة بنجاح وبدون حصول‬، (buffer) ‫ضمن المصد‬ SELECT column_name
: ‫أخطاء من أي نوع الرسالة التي ستظھر في الخرج بالشكل التالي‬ INTO v-variable
PL/SQL procedure successfully completed FROM table_name ;
EXCEPTION
‫ إن‬. SQL*Plus‫ إلغالق مصد الـ‬period ( . ) ‫قم بوضع عالمة توقف‬ • WHEN exeption_name THEN
‫ تعامل كعبارة واحدة مستمرة ضمن المصد والفاصل‬PL/SQL‫كتلة الـ‬ …..
. ‫المنقوطة ضمن الكتلة ال توقف أو تشغل المصد‬ END ;
. ‫ باإلستثناء‬PL/SQL ‫يسمى الخطأ في‬ •

Anonymous Procedure Function


[ DECLARE ] PROCEDURE name FUNCTION name
IS RETURN datatype
IS
BEGIN BEGIN
BEGIN ---statements
---statements RETURN value ;
---statements [ EXCEPTION ]
[ EXCEPTION ]
[ EXCEPTION ]
END ;
END ; END ;

‫المجھول‬ ‫اإلجراء‬ ‫التابع‬


: ‫ الكتل المجھولة‬- Anonymous Blocks
. ‫ لتنفيذه في زمن التشغيل‬PL/SQL ‫ھي كتل ليس لھا تسمية يتم التصريح عنھا في لحظة تنفيذ التطبيق وتمريره إلى محرك‬
Note : A function is similar to a procedure, except that a function must return a value.
.‫ التابع أو الدالة مشابھة تماما ً لإلجراء باستثناء أن التابع يجب أن يعيد قيمة أما اإلجراء فال يستطيع إرجاع قيمة‬: ‫مالحظة‬

Anonymous Stored
block DECLARE‫التصريح‬ Procedure or
function

Application BEGIN‫البدء‬ Application


trigger Procedure or
function
EXCEPTION‫االستثناء‬

Database - 66 - Packaged
trigger END ;‫النھاية‬ Procedure or
function
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪ : Anonymous block‬كتلة ‪ PL/SQL‬بدون اسم ضمن تطبيق أو مصدر بشكل تفاعلي ‪.‬‬ ‫•‬
‫‪ : Stored procedure or function‬عبارة عن كتلة ‪ PL/SQL‬لھا اسم مخزنة في مزود أوراكل وھو يقبل بارامترات ويمكن‬ ‫•‬
‫ان يستدعى باالسم بشكل متكرر ‪.‬‬
‫‪ : Application procedure or function‬عبارة عن كتلة ‪ PL/SQL‬لھا اسم مخزنة ضمن منشىء تطبيقات أوراكل‬ ‫•‬
‫‪ Developer‬أو مكتبة مشتركة وھو يقبل بارامترات ويمكن ان يستدعى باالسم بشكل متكرر‪.‬‬
‫‪ ) Package‬الرزمة ( ‪ :‬عبارة عن وحدة ) ‪ PL/SQL ( Module‬وھي مجموعة إجرائيات‪ ،‬توابع‪ ،‬متحوالت أو عبارات ‪SQL‬‬ ‫•‬
‫مجمعة سوية ضمن وحدة واحدة ‪ .‬يتم تحديد اسم لھا ‪.‬‬
‫‪) Database trigger‬القوادح(‪ :‬عبارة عن كتلة ‪ PL/SQL‬وھي أفعال أوتصرفات يجب أن تقوم بھا قاعدة المعطيات عند حدوث‬ ‫•‬
‫أو تحقق حادث أو حوادث في قاعدة المعطيات وھي تكون مرافقة لجدول قاعدة البيانات‪.‬‬
‫‪) Application trigger‬القوادح(‪ :‬عبارة عن كتلة ‪ PL/SQL‬وھي أفعال أوتصرفات يقوم بھا التطبيق عند حدوث أو تحقق‬ ‫•‬
‫حادث أو حوادث فيه وھي تكون مترافقة مع حدث يحدث للتطبيق وتعمل أوتوماتيكياً‪.‬‬

‫‪Use of Variables‬‬ ‫استخدام المتحوالت‬


‫يمكنك في ‪ PL/SQL‬التصريح عن متحوالت ومن ثم استخدامھا في ‪ SQL‬وفي البعبارات اإلجرائية في أي مكان يستخدم فيه التعبير ‪:‬‬
‫‪) Temporary storage of data .1‬التخزين المؤقت للبيانات( ‪:‬‬
‫يمكن أن تخزن البيانات بشكل مؤقت ضمن متحول أو أكثر الستخدامھا فيما بعد ‪.‬‬
‫‪)Manipulation of stored values .2‬معالجة والتالعب بالقيم المخزنة( ‪:‬‬
‫أي أنه يمكننا تطبيق العمليات الحسابية وعمليات أخرى بدون الدخول إلى قاعدة المعطيات ‪.‬‬
‫‪) Reusability .3‬قابلية إعادة االستخدام( ‪:‬‬
‫بعد التصريح يمكن استخدام المتحوالت بشكل متكرر ضمن التطبيقات بسھولة ‪.‬‬
‫‪) Ease of maintenance .4‬سھولة الصيانة(‬

‫ھناك ثالث أنواع من البارامترات ‪ IN‬وھو االفتراضي و ‪ OUT‬و ‪ IN OUT‬يستخدم البارانتر ‪ IN‬لتمرير القيم إلى البرنامج الجزئي‬
‫الذي يقوم باستدعائھا ‪ .‬ويستخدم البارامتر ‪ OUT‬إلعادة القيم إلى البرنامج الجزئي المستدعي ‪ .‬ويستخدم البارامتر ‪ IN OUT‬لتمرير‬
‫القيم االبتدائية إلى البرنامج الجزئي وإعادة القيم المحدثة إلى المستدعي ‪.‬‬

‫‪Types of Variables‬‬ ‫أنماط المتحوالت‬


‫ تدعم ‪ PL/SQL‬أربع فئات من أنواع البيانات ‪:‬‬

‫‪ Scalar‬وحيد البعد ‪ :‬يحمل قيمة وحيدة ‪،‬أنماط البيانات الرئيسة ھي تلك التي تتوافق مع أنماط أعمدة جداول خادم اوراكل‬ ‫•‬
‫وتدعم ‪ PL/SQL‬أيضاً المتحوالت المنطقية ‪. Boolean‬‬
‫‪ Composite‬مركب ‪ :‬مثل السجالت والتي تسمح بمجموعات من الحقول لتكون معرفة ومعالجة ضمن كتل ‪. PL/SQL‬‬ ‫•‬
‫‪ Reference‬مرجعي ‪ :‬يخبئ البيانات يستدعى بالمؤشرات‪.‬‬ ‫•‬
‫)‪ LOB(large objects‬األغراض الكبيرة ‪ :‬تستخدم لتخزين العناصر الكبيرة والمعلومات الكبيرة والتي تحفظ بشكل ثنائي‬ ‫•‬
‫مثل الصور وبعض األغراض الكبيرة والتي قد يصل حجمھا إلى ‪ 4GB‬تخزن في قاعدة المعطيات أو خارجھا ‪.‬‬

‫ وھناك أنواع معطيات ليست تابعة لـ ‪ PL/SQL‬تسمى ‪Non-PL/SQL variables‬‬

‫بعض األمثلة عن أنماط المعطيات ‪:‬‬


‫‪ TRUE o‬يمثل قيمة منطقية ‪. Boolean‬‬
‫‪ 25-OCT-99 o‬يمثل تاريخ ‪. DATE‬‬
‫‪ o‬الصور الفوتوغرافية تمثل ‪ BLOB‬وھو غرض كبير ممثل بشكل ثنائي قد يصل حجمه حتى ‪ 4GB‬يخزن في قاعدة المعطيات ‪.‬‬
‫‪ o‬نص الخطاب أو النص الطويل يمثل بالنوع ‪. LONG ROW‬‬
‫‪ 256120.08 o‬يمثل بنمط المعطيات ‪ NUMBER‬مع الدقة و القياس ‪.‬‬
‫‪ o‬الفيلم أو الفيديو يمثل بنمط المعطيات ‪ BFILE‬وھو ملف يحوي معلومات ممثلة ثنائيا ً للقراءة فقط يخزن خارج قاعدة المعطيات ‪.‬‬
‫‪ o‬إسم المدينة يمثل بنمط المعطيات ‪. VARCHAR2‬‬

‫‪- 67 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪Declaring PL/SQL Variables‬‬ ‫التصريح عن متحوالت ضمن ‪PL/SQL‬‬


‫] ‪identifier [ CONSTANT ] datatype [ NOT NULL‬‬ ‫الصيغة العامة‬
‫; ] ‪[ := | DEFAULT expr‬‬

‫‪identifier is the name of variable.‬‬ ‫‪ identifier‬يعبر عن اسم المتحول‬


‫‪CONSTANT constrains the variable so that its value cannot change.‬‬
‫‪ CONSTANT‬تقيد المتغير وتجعله ثابتاً بحيث ال تتغير قيمته ‪.‬‬
‫‪datatype is a scalar, composite , reference, or OLB datatype.‬‬
‫‪ datatype‬نمط المتغير وحيد البعد أو مركب أو مرجعي او من األغراض الكبيرة ‪.‬‬
‫‪ NOT NULL‬تجبر المتحول أن يكون له قيمة ‪NOT NULL constrains the variable so that it must contain a value.‬‬
‫‪expr is any PL/SQL expression that can be literal, another variable….‬‬
‫‪ expr‬أي تعبير من تعابير ‪ PL/SQL‬يمكن أن يكون حرفي أو متحول آخر أو أي تعبير متضمن توابع أو مشغالت ‪. operators‬‬

‫‪Declare‬‬ ‫مثال ‪:‬‬


‫‪v_hiredate‬‬ ‫; ‪DATE‬‬
‫‪v_deptno‬‬ ‫; ‪NUMBER(2) NOT NULL := 10‬‬
‫‪v_location‬‬ ‫; ’‪VARCHAR2(13) := ‘Atlanta‬‬
‫‪c_comm‬‬ ‫; ‪CONSTANT NUMBER := 1400‬‬

‫التصريح عن كل متحول في سطر منفصل يجعل الكود سھل القراءة واإلصالح ‪.‬‬ ‫•‬
‫إذا قمت باستخدام القيد ‪ NOT NULL‬فإنه يتوجب عليك تحديد قيمة ‪.‬‬ ‫•‬
‫اسناد قيمة إلى المتحول يكون باستخدام معامل اإلسناد ) =‪ ( :‬وإذا لم تقم بإسناد قيمة إلى المتحول فإنه سيحوي القيمة‬ ‫•‬
‫الفارغة ‪ NULL‬في الوضع اإلفتراضي وذلك حتى تقوم بإسناد قيمة له فيما بعد ‪.‬‬
‫في التصريح عن قيمة ثابتة يجب أن تسبق الكلمة المفتاحية ‪ CONSTANT‬نوع المعطيات كما في المثال التالي حيث يتم‬ ‫•‬
‫التصريح عن متحول عددي ‪ NUMBER‬من النوع ‪ REAL‬ثم اسناد القيمة ‪ 50000‬إلى المتحول المسمى ‪. v_sal‬‬
‫‪v_sal‬‬ ‫; ‪CONSTANT REAL := 50000.00‬‬

‫قوانين التسمية ‪: Naming Rules‬‬


‫‪ o‬يمكن أن يكون لمتحولين االسم ذاته بشرط أن يكون كل منھما في كتل ‪ Blocks‬مختلفة ‪.‬‬
‫‪ o‬ال يجب ان يكون اسم المتحول مطابق لنفس اسم أعمدة الجدول المستخدم في الكتلة ‪.‬‬
‫‪ o‬قم بتبني قاعدة في التسمية كما يلي ‪ :‬قم باستخدام ) _‪ ( v‬كبادئة لتمثيل المتحول ‪ variable‬والبادئة ) _‪ ( g‬لتمثيل المتحول‬
‫العام ‪ global variable‬وتجنب التسمية بأسماء تتعارض مع أغراض قاعدة البيانات كما في المثال التالي ‪:‬‬
‫‪DECLARE‬‬
‫‪v_hiredate‬‬ ‫; ‪date‬‬
‫‪g_deptno‬‬ ‫; ‪number(2) NOT NULL := 10‬‬
‫‪BEGIN‬‬
‫‪……….‬‬

‫‪Assigning Values to Variables‬‬ ‫إسناد قيم إلى المتحوالت‬

‫‪identifier‬‬ ‫; ‪:= expr‬‬ ‫الصيغة العامة‬


‫‪identifier‬‬ ‫‪is the name of scalar variable.‬‬ ‫‪ identifier‬يعبر عن اسم متحول وحيد البعد‬

‫; ’‪v_hiredate := ’31-DEC-98‬‬ ‫مثال‪: 1‬‬


‫; ’‪v_ename := ‘Maduro‬‬ ‫مثال‪: 2‬‬

‫‪- 68 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫♦ ھناك طريقة أخرى إلسناد القيم إلى المتحوالت وذلك باختيار ‪select‬أو جلب ‪ fetch‬القيم إلى داخلھا كما في المثال التالي‬
‫والذي يحسب نسبة ‪ 10%‬عالوة )‪( bonus‬عند اختيار راتب الموظف ‪: salary‬‬
‫‪SELECT‬‬ ‫‪sal * 0.10‬‬ ‫مثال ‪:‬‬
‫‪INTO‬‬ ‫‪v_bonus‬‬
‫‪FROM‬‬ ‫‪emp‬‬
‫‪WHERE‬‬ ‫; ‪empno = 7369‬‬

‫وعندھا يمكنك استخدام المتحول ‪ bonus‬في حسابات أخرى أو إدخال قيمته في قاعدة البيانات‪.‬‬
‫♦ استخدم معامل اإلسناد ) =‪ ( :‬للمتحوالت التي تملك قيم غير نموذجية ‪.‬‬
‫‪v_hiredate‬‬ ‫; ) ’‪:= to_date ( ’15-SEP_1999’ , ‘DD_MON_YYYY‬‬ ‫مثال ‪:‬‬
‫♦ ‪ : DEFAULT‬يمكننك استخدام الكلمة المفتاحية ‪ DEFAULT‬للمتحوالت التي تملك قيمة نموذجية ‪.‬‬
‫; ‪g_mgr NUMBER(4) DEFAULT 7839‬‬ ‫مثال ‪:‬‬
‫♦ ‪ : NOT NULL‬قم بفرض ھذا القيد إذا كان المتحول يجب أن يمتلك قيمة حتماً وال يمكنك اسناد القيمة الفارغة للمتحول ‪.‬‬
‫; ’‪v_location VARCHAR2(13) NOT NULL := ‘CHICAGO‬‬ ‫مثال ‪:‬‬

‫‪Scalar Datatypes‬‬ ‫أنماط المتحوالت وحيدة البعد‬


‫نمط المتحوالت وحيدة البعد يحجز قيمة وحيدة ال تملك مكونات داخلية ‪ ،‬يمكن أن تكون المتحوالت وحيدة البعد مصنفة ضمن ضمن‬
‫أربعة فئات ) ‪ )( number – character – date – Boolean‬رقم أو حرف أو تاريخ أو منطقي ( ‪.‬‬
‫تملك المتحوالت من النمط الحرفي ‪ Character‬أو العددي ‪ Number‬أنماط جزئية وكمثال يعتبر النمطين ‪INTEGER‬‬
‫و‪ POSITIVE‬أنماط جزئية للنمط األساسي ‪. NUMBER‬‬

‫أنماط المتحوالت وحيدة البعد األساسية ‪Base Scalar Datatypes -‬‬


‫النمط ‪Datatype -‬‬ ‫الوصف ‪Description-‬‬
‫نمط أساسي من المتحوالت الحرفية متغيرة الطول يصل طولھا إلى ‪ 32.767bytes‬وليس لھا حجم افتراضي )‪VARCHAR2(maximum length‬‬
‫])‪NUMBER[(precision , scale‬‬ ‫نمط أساسي يمثل المتحوالت الثابتة والممثلة بالفاصلة العائمة‬
‫‪DATE‬‬ ‫نمط أساسي يمثل متحوالت التاريخ والوقت تأخذ القيم بين ‪ 4712 B.C.‬وبين ‪9999 A.D.‬‬
‫نمط أساسي يمثل متحوالت بطول محرفي ثابت الطول يصل إلى ‪ 32,767bytes‬إذا لم تخصص قيمة عظمى فإنه‬
‫])‪CHAR[(maximum length‬‬
‫يأخذ افتراضيا ً القيمة ‪1‬‬
‫نمط أساسي يمثل متحوالت بطول محرفي متغير الطول يصل إلى ‪32.760bytes‬‬
‫‪LONG‬‬ ‫عرض العمود من النمط ‪ LONG‬يصل إلى ‪2,147,483,647 bytes‬‬
‫نمط أساسي يمثل بيانات ثنائية وسالسل تصل إلى ‪32.760bytes‬‬
‫‪LONG RAW‬‬ ‫النمط ‪ LONG ROW‬غير مترجم ضمن ‪PL/SQL‬‬
‫‪BOOLEAN‬‬ ‫نمط أساسي يخزن واحدة من ثالث قيم ممكنة تستخدم في الحسابات المنطقية )‪( TRUE-FALSE-NULL‬‬
‫‪BINARY_INTEGER‬‬ ‫نمط أساسي لألعداد الصحيحة التي تقع بين ‪ -2,147,483,647 bytes‬وبين ‪2,147,483,647 bytes‬‬
‫نمط أساسي لألعداد الصحيحة المؤشرة التي تقع بين ‪ -2,147,483,647 bytes‬وبين ‪2,147,483,647 bytes‬‬
‫‪PLS_INTEGER‬‬ ‫يحتاج ھذا النمط إلى مساحة تخزين أقل وأسرع من ‪ NUMBER‬و ‪BINARY_INTEGER‬‬
‫أمثلة ‪:‬‬
‫‪v_job‬‬ ‫; )‪VARCHAR2(9‬‬ ‫لتخزين عمل الموظف‬
‫‪v_count‬‬ ‫; ‪BINARY_INTEGER := 0‬‬ ‫لتخزين عداد مرات تكرار الحلقة ويعيد المتحول إلى ‪0‬‬
‫‪v_total_sal‬‬ ‫; ‪ˆUMBER( 9,2 ) := 0‬‬ ‫لتجميع إجمالي الراتب لألقسام و إعادة المتحول إلى ‪0‬‬
‫‪v_orderdate‬‬ ‫; ‪DATE := SYSDATE + 7‬‬ ‫يخزن تاريخ شحن الطلبية ويعيد المتحول إلى تاريخ أسبوع بعد اليوم‬
‫‪v_text_rate‬‬ ‫; ‪CONSTANT NUMBER ( 3,2 ) := 8.25‬‬ ‫ثابت يخزن معدل الضريبة والذي ال يتغير‬
‫‪v_valid‬‬ ‫فيماإذا كانت البيانات صحيحة أو خطأ ويعيد المتحول إلى صح ; ‪BOOLEAN NOT NULL := TRUE‬‬

‫‪- 69 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪ ) THE %TYPE Attribute‬الخاصية ‪:( %TYPE‬‬


‫عندما تقوم بالتصريح عن متحوالت ‪ PL/SQL‬لتقوم باحتجاز قيم العمود ‪.‬يجب أن تكون متأكداً بأن نوع البيانات صحيح ودقيق ‪،‬ألنه إن‬
‫لم يكن كذلك فإنه سيحدث خطأ في عبارة ‪ PL/SQL‬أثناء التنفيذ ‪.‬‬
‫يمكنك استخدام الخاصية ‪ %TYPE‬للتصريح عن المتحول طبقاً لمتحول آخر مصرح عنه سابقا ً أو طبقاً لعمود من قاعدة البيانات ألن‬
‫ھذه الخاصية تورث نمط العمود وھذا يعني انه إذا تم تغيير نمط العمود في الجدول فلن تحتاج إلجراء أي تعديل على إجرائية‬
‫‪PL/SQL‬ألن التغيير يتم اوتوماتيكيا ً ليتناسب مع النمط الجديد وذلك أثناء التنفيذ ‪.‬‬
‫غالباً ما تستخدم الخاصية ‪ %TYPE‬بشكل كبير عندما يتم تخزين القيمة في المتحول الذي سوف يتم اشتقاقه من جدول في قاعدة البيانات‬
‫إذا أردت استخدام ھذه الخصية في التصريح عن المتحوالت عليك إسباقھا بإسم جدول وعمود قاعدة البيانات ‪ .‬كما يلي ‪:‬‬
‫……‬ ‫أمثلة ‪:‬‬
‫‪v_ename‬‬ ‫; ‪emp.ename%TYPE‬‬ ‫متحوالت لتخزين اسم الموظف‬
‫‪v_balance‬‬ ‫; ) ‪NUMBER( 7,2‬‬ ‫متحوالت لتخزين الرصيد في الحساب البنكي‬
‫‪v_min_balance‬‬ ‫; ‪v_balance%TYPE‬‬ ‫أقل حساب والذي يبدأ من ‪10‬‬
‫……‬
‫الغاية من استخدام ھذه الخاصية ھو جعل تعريف األنماط ضمن نص ‪ PL/SQL‬مستقل عن بنى المعطيات المستخدمة ‪.‬‬
‫التصريح عن متحوالت منطقية من النوع ‪: Boolean‬‬
‫• فقط القيم )‪ (TRUE , FALSE , NULL‬يمكن اسنادھا أو تخصيصھا للمتحول المنطقي ‪.‬‬
‫• ترتبط المتحوالت المنطقية بالمعامالت المنطقية )‪. (AND , OR , NOT‬‬
‫• ينتج عن المتحوالت المنطقية إما ‪ TRUE‬أو ‪ FALSE‬أو ‪. NULL‬‬
‫• يمكن استخدام التعابير الحسابية و الحرفية والتواريخ للحصول على قيمة منطقية ‪. Boolean‬‬
‫; ‪v_sal1 := 50000‬‬ ‫أمثلة ‪:‬‬
‫; ‪v_sal2 :=60000‬‬
‫‪v_sal1 < v_sal2‬‬ ‫ينتج ھذا التعبير القيمة ‪TRUE‬‬
‫) ‪v_comm_sal BOOLEAN := ( v_sal1 < v_sal2‬‬ ‫التصريح عن متحول منطقي وإعطاؤه قيمة إبتدائية‬
‫‪Composite Datatypes‬‬ ‫أنماط المتحوالت المركبة‬
‫• جداول ‪. PL/SQL TABLES‬‬
‫• سجالت ‪. PL/SQL RECORDS‬‬
‫نمط البيانات المركبة والتي تعرف أيضاً بالمجموعات و تشمل الجدول ‪ TABLE‬والسجل ‪ RECORD‬والجدول المتداخل‬
‫‪ NESTED TABLE‬و الـ ‪ . VARRAY‬تستخدم السجالت السترجاع ومعالجة مجموعات البيانات كغرض واحد متكامل‪.‬‬
‫‪LOB Datatypes‬‬ ‫أنماط المتحوالت األغراض الكبيرة‬
‫يمكن لمزود أوراكل ‪ 8‬باستخدام نمط المعطيات األغراض الكبيرة تخزين كتل من البيانات الغير منظمة والغير مبنية مثل النصوص‬
‫‪ text‬والصور الفوتوغرافية ‪ graphic images‬وملفات الفيديو ‪ video clips‬و موجات األصوات ‪ sound wave‬والتي يصل حجمھا‬
‫حتى ‪: 4 gigabytes‬‬
‫• النمط ‪ ( character large object ) CLOB‬يستخدم لتخزين الكتل الضخمة من البيانات الحرفية مثل الوصفات ‪. Recipe‬‬
‫• النمط ‪ ( binary large object ) BLOB‬يستخدم لتخزين األغراض الثنائية الكبيرة مثل الصور ‪. Photo‬‬
‫• النمط ‪ ( binary file ) BFILE‬يستخدم لتخزين األغراض الثنائية الضخمة خارج قاعدة البيانات ضمن ملفات نظام التشغيل‬
‫مثل الفيديو ‪. Movie‬‬
‫• النمط ‪ ( national language character large object ) NCLOB‬يستخدم لتخزين الكتل الكبيرة ‪.‬‬
‫‪ Bind Variables‬متحوالت الربط من النوع ‪ Bind‬مؤقت ‪:‬‬
‫يصرح عن ھذا النوع من المتحوالت في بيئة مضيف وتستخدم لتمريرالقيم في زمن التنفيذ ‪ ،‬كل من الرقم أو الحرف ‪ ،‬داخل أو خارج‬
‫رنامج واحد أو أكثر من برنامج ‪ ، PL/SQL‬والذي يمكنه استخدام المتحول كأي متحول آخر ‪.‬‬
‫♦ للتصريح عن متحوالت من النوع ‪ Bind‬في بيئة ‪ SQL*Plus‬يجب أن تستخدم األمر ‪ VARIABLE‬على سبيل المثال‬
‫يمكنك التصريح عن متحول رقمي ‪ NUMBER‬أو حرفي ‪ VARCHAR2‬كما يلي ‪:‬‬
‫‪VARIABLE return_code NUMBER‬‬
‫)‪VARIABLE return_msg VARCHAR2(30‬‬
‫لعرض القيمة الحالية للمتغير في بيئة ‪ SQL*Plus‬يجب أن تستخدم األمر ‪ PRINT‬كما يلي ‪:‬‬
‫‪SQL>VARIABLE g_n NUMBER‬‬
‫‪SQL>PRINT g_n‬‬

‫‪- 70 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

:PL/SQL ‫ إسناد المتحوالت من خارج‬Referencing Non-PL/SQL Variables


: ‫ مضيف‬SQL*Plus ‫تخزين الدخل السنوي لموظف ضمن متحول‬
:g_monthly_sal := v_sal / 12 ;
( : ) ‫يجب إسباق عملية اإلسناد بالرمز‬

‫ يقوم المثال التالي بحساب الراتب الشھري باإلعتماد على الراتب السنوي المدخل من قبل المستخدم يحوي النص التالي أوامر‬: ‫مثال‬
: ‫ كاملة‬PL/SQL ‫ ككتلة‬SQL*Plus
VARIABLE g_monthly_sal NUMBER
ACCEPT p_annual_sal PROMPT ‘ Please inter the annual salary: ‘
DECLARE
v_sal NUMBER ( 9,2 ) := &p_annual_sal ; p_annual_sal ‫عند التنفيذ يطلب إدخال قيمة للمتحول‬
BEGIN : ‫ ثم ينتج القيمة التالية من األمر األخير‬12000 ‫ولتكن‬
:g_monthly_sal := v_sal / 12 ;
END ; G_MONTHLY_SAL
/ --------------------------
PRINT g_monthly_sal 1000

: DBMS_OUTPUT.PUT_LINE ‫♦ يمكنك استخدام طريقة أخرى لطباعة النتيجة السابقة باستخدام األمر‬

SET SERVEROUTPUT ON
ACCEPT p_annual_sal PROMPT ‘ Please inter the annual salary: ‘

DECLARE
v_sal NUMBER ( 9,2 ) := &p_annual_sal ;
BEGIN
v_sal := v_sal / 12 ;
DBMS_OUTPUT.PUT_LINE ( ‘The monthly salary is’ || TO_CHAR(v_sal) ) ;
END ;
/
Writing Executable Statements ‫كتابة تعابير قابلة للتنفيذ‬
. PL/SQL ‫ تكون متاحةأيضاً في لغة‬SQL ‫ فإن قوانين البناء العام المتاحة لـ‬SQL ‫ ھي امتداد‬PL/SQL ‫بما أن‬
• Lexical units can be separated by : ( Spaces – Delimiters – Identifiers – Literals – Comments )

Delimiters - ‫المعينات‬
‫ﱢ‬ :

Delimiters are simple or compound symbols that have special meaning to PL/SQL .
. PL/SQL ‫المعينات عبارة عن رموز بسطة أو مركبة تملك معنى خاص بالنسبة لـ‬
‫ﱢ‬

Simple Symbols Compound Symbols


Symbol Meaning Symbol Meaning
+ Addition operator –‫معامل الجمع‬ <> Relational operator –‫معامل عالقة‬
- Subtraction/negation operator –‫معامل الطرح والنفي‬ != Relational operator –‫معامل عالقة‬
* Multiplication operator –‫معامل الضرب‬ || Concatenation operator –‫معامل السلسلة‬
_
/ Division operator –‫معامل القسمة‬ Single line comment indicator‫مؤشرتعليق وحيد السطر‬
= Relational operator –‫معامل عالقة‬ /* Beginning comment delimiter - ‫مؤشر بداية التعليق‬
@ Remote access indicator –‫مؤشر الوصول عن بعد‬ */ Ending comment delimiter - ‫مؤشر نھاية التعليق‬
; ُْ
Statement terminator – ‫منھي العبارة‬ := Assignment operator – ‫معامل اإلسناد‬

- 71 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪ :‬المعرفات ‪Identifiers -‬‬

‫‪Identifiers are used to name PL/SQL program items and units, which include constants, variables,‬‬
‫‪exceptions, cursors, cursor variables, subprograms, and packages .‬‬
‫تستخدم المعرفات لتسمية عناصر ووحدات برنامج الـ‪ PL/SQL‬والتي تحوي الثوابت والمتحوالت و اإلستثناءات والمؤشرات‬
‫والمتحوالت المشيرة والبرامج الجزئية والرزم ‪.‬‬
‫♦ يمكن أن تحوي المؤشرات حتى ‪ 30‬حرف ولكن يجب أن تبدأ بحرف حصرا‪ً.‬‬
‫♦ ال تستخدم اسم المعرف كاسم لألعمدة ضمن جدول ضمن الكتلة ‪.‬‬
‫♦ ال تستخدم الكلمات المحجوزة مثل ‪ SELECT‬كمعرفات إال في حالة وضعھا ضمن عالمتي إقتباس كما يلي ”‪. “select‬‬
‫♦ يجب أن تكتب الكلمات المحجوزة بحروف كبيرة لتسھيل إمكانية القراءة‪.‬‬

‫‪ :‬الحرفية ‪Literals -‬‬

‫♦ تضم الحروف الرمزية كافة الرموز القابلة للطباعة ضمن مجموعة رموز ‪: PL/SQL‬أحرف ‪ – Letters‬أعداد‬
‫‪ – Numerals‬مسافات ‪ – Spaces‬ورموز خاصة ‪. Special symbols‬‬
‫♦ يمكن أن تكون الحروف الرمزية قيمة بسيطة مثل ‪ -32.5‬أو ترقيم علمي مثل ‪ 2E5‬والتي تعني ‪ 2*10‬مرفوعة لألس ‪5‬‬
‫وتساوي = ‪. 200000‬‬
‫♦ يجب أن تحاط الحروف الرمزية بعالمات اقتباس فريدة كما يلي ‪v_ename := ‘Henderson’:‬‬

‫‪Commenting Code‬‬ ‫كتابة تعليق ضمن الشيفرة‬


‫يجب إسباق التعليق وحيد السطر بخطين )‪. two dashes (--‬‬ ‫•‬
‫التعليق المتعدد السطور يتم وضعه ضمن العالمتين *‪ /‬و ‪. */‬‬ ‫•‬

‫‪………….‬‬ ‫مثال ‪ :‬حساب الدخل السنوي عن طريق الدخل الشھري‬


‫; ) ‪v_sal NUMBER( 9,2‬‬
‫‪BEGIN‬‬
‫‪/* Compute the annual salary on the‬‬
‫‪monthly salary input from the user */‬‬
‫; ‪v_sal := &p_monthly_sal * 12‬‬
‫‪END ; -- This is the end of the transaction‬‬

‫‪SQL Functions in PL/SQL‬‬ ‫توابع ‪ SQL‬المتاحة ضمن ‪PL/SQL‬‬


‫أغلب الدوال المتاحة ضمن ‪ SQL‬متاحة أيضا ضمن تعابير ‪: PL/SQL‬‬
‫♦‬ ‫‪Single-row number functions .‬‬ ‫‪ -‬التوابع الرقمية وحيدة الصف ‪.‬‬
‫♦‬ ‫‪Single-row character functions.‬‬ ‫‪ -‬التوابع الرمزية وحيدة الصف‪.‬‬
‫♦‬ ‫‪Datatype conversion functions.‬‬ ‫‪ -‬توابع التحويل بين أنماط المعطيات‪.‬‬
‫♦‬ ‫‪Data functions.‬‬ ‫‪ -‬توابع المعطيات ‪.‬‬

‫أما التوابع التالية فھي غير متاحة ضمن العبارات اإلجرائية ‪:‬‬
‫‪♦ DECODE .‬‬ ‫‪ -‬تابع البحث والمطابقة ‪.‬‬
‫‪♦ Group functions : AVG, MIN, MAX, COUNT, SUM, STDDEV, and VARIANCE .‬‬
‫‪ -‬توابع قيمة المجموعة المذكورة سابقاً مخصصة لمجموعات الصفوف في الجدول ولذلك فھي متاحة فقط ضمن عبارات ‪SQL‬‬
‫الموجودة ضمن كتل ‪. PL/SQL‬‬
‫مثال ينتج خطأ ‪ :‬قم بتنفيذ عملية جمع كافة األرقام المخزنة ضمن جدول ‪ PL/SQL‬يسمى ‪: NUMBER_TABLE‬‬
‫; ) ‪v_total := SUM ( number_table‬‬

‫‪- 72 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪ - PL/SQL Functions‬توابع ‪: PL/SL‬‬


‫تزودك لغة ‪ PL/SQL‬بالعديد من التوابع الفعالة والتي تساعدك في معالجة البيانات ‪ .‬تندرج ھذه التوابع ضمن الفئات التالية ‪:‬‬
‫‪ - Error reporting o‬تقرير الخطأ ‪.‬‬
‫‪ – Number o‬الرقمية ‪.‬‬
‫‪ – Character o‬الرمزية ‪.‬‬
‫‪ – Conversion o‬التحويل ‪.‬‬
‫‪ – Date o‬التاريخ ‪.‬‬
‫‪ – Miscellaneous o‬متنوع ‪.‬‬
‫||)‪v_mailing_address := v_name||CHR(10‬‬ ‫مثال‪ : 1‬بناء قائمة بريدية لشركة ‪:‬‬
‫||‪v_address||CHR(10)||v_state‬‬
‫; ‪CHR(10)||v_zip‬‬

‫‪ CHR is the SQL function that converts an ASCII code to its corresponding character, 10 is the‬‬
‫‪code for a line feed.‬‬
‫ ‪ CHR‬ھو تابع ‪ SQL‬يقوم بتحويل رمز الـ‪ ASCII‬إلى رمزه المطابق أو الموافق‪ 10 ،‬ھو رمز المتداد السطر‪.‬‬
‫)‪v_ename := LOWER (v_ename‬‬ ‫مثال‪ : 2‬تحويل اسم الموظف إلى حالة األحرف الصغيرة ‪:‬‬
‫‪ - Datatype Conversion‬التحويل بين أنماط المعطيات ‪:‬‬
‫تزودك لغة ‪ PL/SQL‬بالعديد من التوابع الفعالة والتي تساعدك في معالجة البيانات ‪ .‬تندرج ھذه التوابع ضمن الفئات التالية ‪:‬‬
‫‪ o‬تحويل البيانات إلى نمط معطيات قابل للمقارنة ‪.‬‬
‫‪ o‬أنماط البيانات المختلطة يمكن أن تسبب أخطاء وتؤثر على األداء ‪.‬‬
‫‪ o‬توابع التحويل ‪:‬‬
‫ ) ‪. TO_CHAR( value , fmt‬‬
‫ ) ‪. TO_DATE( value , fmt‬‬
‫ ) ‪. TO_NUMBER( value , fmt‬‬
‫حيث ‪ value‬تعبر عن السلسلة الحرفية أو الرقم أو التاريخ و ‪ fmt‬شكل نموذج التحويل ‪.‬‬
‫‪DECLARE‬‬ ‫مثال ‪:‬‬
‫; )‪v_date VARCHAR2(15‬‬
‫‪BEGIN‬‬
‫‪SELECT TO_CHAR (hiredate‬‬
‫)’‪‘MON. DD, YYYY‬‬
‫‪INTO‬‬ ‫‪v_date‬‬
‫‪FROM emp‬‬
‫; ‪WHERE empno = 7839‬‬
‫; ‪END‬‬

‫ في حالة تم التصريح عن المتحول ‪ v_date‬على أنه من نمط المعطيات ‪ date‬وقمنا بإسناد قيمة له بالشكل التالي ‪:‬‬
‫; ’‪v_date := ‘January 13, 1998‬‬ ‫فإنه ينتج خطأ تصنيف لتصحيحه نستخدم تابع لتحويل‬
‫; ) ’‪v_date := TO_DATE (‘January 13, 1998’ , ‘Month DD, YYYY‬‬ ‫كما يلي ‪:‬‬

‫‪- 73 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪Nested Blocks and Variable Scope‬‬ ‫الكتل المتداخلة والمجال المتغير‬


‫يمكن للعبارات أن تتداخل حيثما تكون العبارة القابلة للتنفيذ مسموحة ‪.‬‬
‫الكتلة المتداخلة تصبح عبارة ‪.‬‬
‫يمكن لقسم االستثناءات أن يحوي كتل متداخلة ‪.‬‬
‫مجال الغرض ‪ Scope‬ھو منطقة البرنامج التي تشير إلى الغرض ‪.‬‬

‫‪Example :‬‬
‫‪….‬‬
‫; ‪x BINARY_INTEGER‬‬
‫‪BEGIN‬‬ ‫في ھذا المثال يمكن للمتحول المسمى ‪ y‬أن يرجع إلى‬
‫‪Scope of x‬‬
‫‪….‬‬ ‫المتحول ‪ x‬أما المتحول ‪ x‬فال يمكن أن يرجع إلى‬
‫‪DECLARE‬‬ ‫المتحول ‪ . y‬أما إذا قمنا بإعطاء كال المتحولين االسم‬
‫; ‪y NUMBER‬‬ ‫ذاته فإن قيمته تكون سارية المفعول فقط لمدة الكتلة‬
‫‪BEGIN‬‬ ‫‪Scope of y‬‬ ‫المتداخلة ‪.‬‬
‫‪….‬‬
‫; ‪END‬‬
‫‪….‬‬
‫; ‪END‬‬

‫‪Operators in PL/SQL‬‬ ‫المعامالت في ‪PL/SQL‬‬


‫‪ Logical R‬منطقية ‪.‬‬
‫‪ Arithmetic R‬حسابية ‪.‬‬
‫‪ Concatenation R‬سلسلة )تسلسل( ‪.‬‬
‫‪ Parentheses to control order of operations R‬عالمات حصر ) أقواس ( للتحكم بترتيب العمليات ‪.‬‬
‫جميع المعامالت السابقة ھي نفسھا في ‪ SQL‬أما المعامل التالي فھو معامل ‪:PL/SQL‬‬
‫األسي ‪.‬‬
‫‪ Exponential operator (**) R‬المعامل ﱢ‬

‫‪ Order of Operations‬ترتيب العمليات ‪ :‬أسبقية المعامالت‬


‫المعامل ‪Operator -‬‬ ‫العملية ‪Operation -‬‬
‫‪** , NOT‬‬ ‫أس ‪ ،‬نفي منطقي‬
‫مالحظة ‪ :‬من الضروري استخدام األقواس مع‬
‫‪+ , -‬‬ ‫تطابق ‪ ،‬نفي‬
‫التعابير المنطقية ولكنھا ال تجعل النص سھل‬
‫‪* , /‬‬ ‫ضرب ‪ ،‬قسمة‬
‫القراءة ‪.‬‬
‫|| ‪+ , - ,‬‬ ‫جمع ‪ ،‬طرح ‪ ،‬تسلسل‬
‫‪= , != , < , > , <= , >= , IS NULL ,‬‬
‫مقارنة‬
‫‪LIKE , BETWEEN , IN‬‬
‫‪AND‬‬ ‫توحيد ) اقتران (‬
‫‪OR‬‬ ‫تضمين‬

‫‪Example1 : Increment the index for a loop.‬‬ ‫مثال ‪ : 1‬قم بإنشاء تزايد من أجل الحلقة‬
‫; ‪v_count := v_count + 1‬‬

‫‪Example2 : Set the value of Boolean flag.‬‬ ‫مثال ‪ : 2‬وضع قيمة منطقية‬
‫; )‪v_equal := (v_n1 = v_n2‬‬

‫مثال ‪ : 3‬صادق على رقم الموظف إن كان يحوي قيمة‪Example3 : Validate an employee number if it contains a value .‬‬
‫; ) ‪v_valid := (v_empno IS NOT NULL‬‬

‫مالحظة ‪ :‬أثناء عملك مع القيم الفارغة ‪ NULL‬يجب أن تتجنب بعض األخطاء الشائعة من خالل وضع ما يلي في اعتبارك ‪:‬‬
‫‪ O‬المقارنات التي تتضمن القيمة ‪ NULL‬تكون نتيجتھا ‪ NULL‬دائماً ‪.‬‬
‫‪ O‬تطبيق المعامل المنطقي ‪ NOT‬على القيمة ‪ NULL‬ينتج ‪. NULL‬‬
‫ُ‬
‫‪ O‬في عبارات التحكم الشرطية إذا نتجت عن الشرط القيمة ‪ NULL‬فإن السلسلة المترابطة لعبارتھا لن تنجز ‪.‬‬
‫‪- 74 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬
VARIABLE g_salary NUMBER : g_salary ‫ يقوم المثال التالي باستخدام متحول الربط‬: ‫مثال‬
DECLARE
v_sal emp.sal%TYPE ; SQL>PRINT g_salary
BEGIN
SELECT sal G_ SALARY
INTO v_sal -----------------
FROM emp 800
WHERE empno = 7369 ;
:g_salary := v_sal ;
END ;
/
: ‫ كيف تجعل صيانة الكود أسھل‬R
. ‫ قم بتوثيق الكود باستخدام التعليقات‬
.‫ التطوير لحالة الكود المصطلح عليھا‬
.‫ واألغراض األخرى‬identifiers ‫ تطوير اصطالحات التسمية للمعرفات‬
. ‫ تحسين قابلية القراءة بترك فراغات عند الكتابة في بداية الفقرة‬
Code Conventions – ‫اصطالحات الشيفرة‬
Category - ‫الفئة‬ Case convention-‫اصطالح الحالة‬ Examples - ‫أمثلة‬
SQL statements Uppercase SELECT , INSERT
PL/SQL keywords Uppercase DECLARE , BEGIN , IF
Datatypes Uppercase VARCHAR2 , BOOLEAN
Identifiers and parameters Lowercase v_sal, emp_cursor, g_sal, p_empno
Database tables and columns Lowercase emp , orderdate , deptno

Code Naming Conventions – ‫اصطالحات التسمية في الكود‬


Identifier - ‫المعرف‬ Naming convention-‫اصطالح التسمية‬ Example - ‫مثال‬
Variable v_name v_sal
Constant c_name c_company_name
Cursor name_cursor emp_cursor
Exception e_name e_too_many
Table type name_table_type amount_table_type
Table name_table order_total_table
Record type name_record_type emp_record_type
Record name_record customer_record
SQL*Plus substitution
variable (also referred to as p_name p_sal
substitution parameter)
SQL*Plus global variable
(also referred to as host or g_name g_year_sal
bind variable)
:‫ من أجل الوضوح يفضل تقسيم الشيفرة ووضع مسافات قبل السطور حسب مستويات الشيفرة كما في األمثلة التالية‬R
DECLARE
v_deptno NUMBER(2) ;
v_location VARCHAR2(13) ;
BEGIN BEGIN
SELECT deptno , IF x=0 THEN
loc y :=1 ;
INTO v_deptno , END IF ;
v_location END ;
FROM dept
WHERE dname = ‘SALES’ ;
END ; - 75 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

: ‫لنقم بمقارنة بسيطة بين طريقتي كتابة كود كما في المثال التالي‬
IF x>y THEN
v_max := x ; IF x>y THEN v_max:=x; ELSE v_max:=y; END IF ;
ELSE
v_max := y ;
END IF ;

Determining Variable Scope ‫تحديد مجال المتحول‬


: ‫لنأخذ التمرين التالي‬
…. ‫ في‬PL/SQL‫قيم كتلة الـ‬
DECLARE ‫ ثم قم بتحديد‬. ‫العرض السابق‬
V_SAL NUMBER( 7,2 ) := 60000 ; ‫قيم كل من المتحوالت التالية‬
V_COMM NUMBER( 7,2 ) := V_SAL * .20 ; . ‫وفقاً لقواعد المجال‬
V_MESSAGE VARCHAR2(255) := ‘ eligible for commission ‘ ;
BEGIN …
DECLARE
V_SAL NUMBER( 7,2 ) := 50000 ;
V_COMM NUMBER( 7,2 ) := 0 ;
V_TOTAL_COMP NUMBER( 7,2 ) := V_SAL + V_COMM ;
BEGIN …
V_MESSAGE := ‘ CLERK not ‘||V_MESSAGE ;
END ;
V_MESSAGE := ‘ SALESMAN ‘||V_MESSAGE ;
END ;

\ Evaluate the PL/SQL block on the slide. Determine each of the following values according to the
rules of scoping.
o The value of V_MESSAGE in the subblock is :
“CLERK not eligible for commission “ and the data type is VARCHAR2 .
o The value of V_TOTAL_COMP in the main block is :
Illegal because V_TOTAL_COMP is not visible outside the subblock .
o The value of V_COMM in the main block is :
“12000 “ and the data type is NUMBER.
o The value of V_COMM in the subblock is :
“ 0 “ and the data type is NUMBER.
o The value of V_MESSAGE in the main block is :
“ SALESMAN eligible for commission “ and the data type is VARCHAR2 .

: PL/SQL ‫ وعبارات‬SQL ‫مقارنة بين أنواع عبارات‬

‫ مستقلة عن‬Rollbacks ، Savepoints ، Commits ‫ أوامر التثبيت والتراجع‬. ‫ وحدة إجرائية‬PL/SQL ‫ ال تعتبر كتلة‬3
. ‫ ولكن يمكنك إصدارھا ضمن كتلة‬. ‫الكتل‬
DROP ‫ و‬ALTER TABLE ‫ و‬CREATE TABLE ‫ مثل‬DDL ‫ أوامر لغة تعريف البيانات‬PL/SQL ‫ ال تدعم‬3
. TABLE
. REVOKE ‫ أو‬GRANT ‫ مثل‬. DCL ‫ لغة التحكم بالبيانات‬PL/SQL ‫ ال تدعم‬3

- 76 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬
‫‪SQL Statements in PL/SQL‬‬ ‫تعليمات ‪ SQL‬ضمن ‪PL/SQL‬‬

‫‪SELECT Statement in PL/SQL‬‬ ‫عبارة االختيار ‪ SELECT‬في ‪PL/SQL‬‬


‫‪ %‬استرجاع البيانات من قاعدة البيانات باستخدام عبارة ‪: SELECT‬‬
‫‪SELECT‬‬ ‫‪select_list‬‬ ‫الصيغة العامة‬
‫‪INTO‬‬ ‫… ]‪{variable_name[ , variable_name‬‬
‫} ‪| record_name‬‬
‫‪FROM‬‬ ‫‪table‬‬
‫‪WHERE‬‬ ‫; ‪condition‬‬

‫قائمة من عمود واحد على األقل يمكن أن تحوي تعابير ‪ ، SQL‬توابع الصفوف ‪ ، Row functions‬توابع قيمة‬ ‫‪Select_list‬‬
‫المجموعة ‪. Group functions‬‬
‫‪ Variable_name‬متحول وحيد البعد ليقوم بحفظ )احتجاز( القيم المعادة ‪.‬‬
‫‪ Record_name‬مسجل ‪ PL/SQL‬ليقوم بحمل )احتجاز( القيم المعادة ‪.‬‬
‫تخصيص اسم جدول من قاعدة البيانات ‪.‬‬ ‫‪Table‬‬
‫مركب من أسماء أعمدة وتعابير و ثوابت و معامالت مقارنة تتضمن متحوالت وثوابت ‪. PL/SQL‬‬ ‫‪condition‬‬

‫عبارة ‪ INTO‬مطلوبة وإجبارية في ‪ PL/SQL‬عند استخدام تعليمة ‪ SELECT‬وتوضع بين عبارة ‪ SELECT‬وعبارة ‪WHERE‬‬
‫وذلك لتحديد أسماء المتحوالت التي تقوم بحمل القيم التي تعيدھا ‪ SQL‬والمتمثلة بتعليمة ‪ . SELECT‬يجب إعطاء متحول واحد لكل‬
‫عنصر يتم اختياره ويجب أن ينسجم ترتيبھا مع العناصر المختارة ‪.‬‬
‫‪You use the INTO clause to populate either PL/SQL variables or host variables .‬‬
‫‪DECLARE‬‬ ‫االستعالم يجب أن يعيد صف واحد وواحد فقط ‪.‬‬
‫‪v_deptno‬‬ ‫; ) ‪NUMBER( 2‬‬ ‫فإنه‬ ‫صف‬ ‫أي‬ ‫ألنه في حالتي إعادة أكثر من صف أو لم يعيد‬
‫‪v_loc‬‬ ‫; ) ‪VARCHAR2( 15‬‬ ‫ينتج خطأ ‪.‬‬
‫‪BEGIN‬‬ ‫اإلستثنائين‬ ‫استخدام‬ ‫يمكن‬ ‫لحالتين‬ ‫ا‬ ‫تلك‬ ‫في‬
‫‪SELECT deptno , loc‬‬ ‫‪ NO_DATA_FOUND‬أو ‪TOO_MANY_ROWS‬‬
‫‪INTO‬‬ ‫‪v_deptno , v_loc‬‬ ‫ضمن قسم االستثناءات ‪ . EXCEPTION‬والذي يمكن من‬
‫‪FROM‬‬ ‫‪dept‬‬ ‫خالله القيام بإجراء معين في حالة حدوث أحد األمرين ‪.‬‬
‫‪WHERE‬‬ ‫; ’‪dname = ‘SALES‬‬
‫‪….‬‬
‫; ‪END‬‬

‫‪Retrieving Data in PL/SQL‬‬ ‫استرجاع البيانات في ‪PL/SQL‬‬


‫‪% Retrieve the order date and the ship date for the specified order .‬‬
‫‪ %‬استرجاع تاريخ الطلبية و تاريخ الشحن من أجل طلبية محددة ‪.‬‬
‫‪DECLARE‬‬ ‫بھذا يرث المتحول ‪ v_orderdate‬نوع بيانات العمود‬
‫‪v_orderdate‬‬ ‫; ‪ord.orderdate%TYPE‬‬ ‫‪ orderdate‬من الجدول ‪ ord‬ألننا استخدمنا ‪%TYPE‬‬
‫‪v_shipdate‬‬ ‫; ‪ord.shipdate%TYPE‬‬
‫‪BEGIN‬‬ ‫كما يرث المتحول ‪ v_shipdate‬نوع بيانات العمود‬
‫‪SELECT orderdate, shipdate‬‬ ‫‪ shipdate‬من الجدول ‪ ord‬ألننا استخدمنا ‪%TYPE‬‬
‫‪INTO‬‬ ‫‪v_orderdate, v_shipdate‬‬
‫‪FROM‬‬ ‫‪ord‬‬
‫; ‪WHERE id = 620‬‬
‫‪….‬‬
‫; ‪END‬‬

‫قم بإنھاء أي تعليمة ‪ SQL‬باستخدام الفاصلة المنقوطة ) ; ( ‪.‬‬ ‫‪n‬‬


‫يجب استخدام عبارة ‪ INTO‬مع تعليمة ‪ SELECT‬إن كانت مضمنة في ‪. PL/SQL‬‬ ‫‪n‬‬
‫عبارة ‪ WHERE‬إختيارية ويمكن أن تستخدم لتخصيص المتحوالت المدخلة والثوابت والحروف وتعابير ‪. PL/SQL‬‬ ‫‪n‬‬
‫قم بتخصيص نفس عدد المتحوالت المخرجة في عبارة ‪ INTO‬كأعمدة في عبارة ‪ . SELECT‬وكن متأكداً أنھا متوافقة‬ ‫‪n‬‬
‫بالترتيب وأن نوع بياناتھا متوافقة‪.‬‬
‫‪- 77 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬
‫‪ %‬استرجاع مجموع الرواتب لجميع الموظفين في قسم محدد ‪.‬‬

‫‪DECLARE‬‬ ‫ال يمكن استخدام توابع قيمة المجموعة‬


‫‪v_sum_sal‬‬ ‫; ‪emp.sal%TYPE‬‬ ‫‪ Group Functions‬ضمن تركيب عبارة‬
‫‪v_deptno‬‬ ‫; ‪NUMBER NOT NULL := 10‬‬ ‫‪ PL/SQL‬فھي تستخدم ضمن تعليمات‬
‫‪BEGIN‬‬ ‫‪ SQL‬داخل أو خالل كتلة ‪. PL/SQL‬‬
‫‪SELECT‬‬ ‫‪SUM(sal) -- group function‬‬
‫‪INTO‬‬ ‫‪v_sum_sal‬‬
‫‪FROM‬‬ ‫‪emp‬‬
‫‪WHERE‬‬ ‫; ‪deptno = v_deptno‬‬
‫; ‪END‬‬

‫‪Manipulating Data in PL/SQL‬‬ ‫معالجة البيانات في ‪PL/SQL‬‬


‫‪Make changes to the database tables by using DML commands :‬‬
‫القيام بتغييرات على جداول قاعدة البيانات باستخدام أوامر ‪: DML‬‬
‫‪ INSERT %‬أمر إضافة صفوف جديدة من البيانات إلى الجدول ‪.‬‬
‫‪ UPDQTE %‬أمر التعديل يقوم بتعديل صفوف موجودة ضمن الجدول ‪.‬‬
‫‪ DELETE %‬أمر الحذف يحذف الصفوف التي ال نريدھا من الجدول ‪.‬‬
‫يمكنك إجراء تعديالت على قاعدة البيانات باستخدام أوامر ‪ DML‬ضمن ‪ . PL/SQL‬إن تضمين تعليمتي ‪ COMMIT‬أو‬
‫‪ ROLLBACK‬ضمن كود ‪ PL/SQL‬يحرر أقفال الصف وأقفال الجدول ‪.‬‬

‫‪ ‬إدخال البيانات ‪: Inserting Data‬‬


‫‪BEGIN‬‬ ‫إضافة بيانات موظف جديد إلى الجدول ‪: emp‬‬
‫) ‪INSERT INTO emp(empno, ename, job, deptno‬‬ ‫في ھذا المثال يجب أن يكون ھناك مسلسل‬
‫‪VALUES ( empno_sequence.NEXTVAL , ‘HARDING’ ,‬‬ ‫‪ sequence‬منشأ على العمود ‪ empno‬باسم‬
‫; ) ‪‘CLERK’ , 10‬‬ ‫‪. empno_sequence‬‬
‫; ‪END‬‬

‫‪ ‬تعديل البيانات ‪: Updating Data‬‬


‫‪DECLARE‬‬ ‫زيادة رواتب جميع الموظفين في الجدول ‪emp‬‬
‫‪v_sal_increase‬‬ ‫; ‪emp.sal%TYPE := 2000‬‬ ‫والذين يعملون كمحللين ‪. analysts‬‬
‫‪BEGIN‬‬ ‫إلسناد قيم إلى متحوالت نستخدم ) =‪ ( :‬أما في‬
‫‪UPDATE‬‬ ‫‪emp‬‬ ‫حالة إسناد أعمدة نستخدم ) = ( دائماً ‪.‬‬
‫‪SET‬‬ ‫‪sal = sal + v_sal_increase‬‬
‫‪WHERE‬‬ ‫; ’‪job = ‘ANALYST‬‬
‫; ‪END‬‬

‫‪ ‬حذف البيانات ‪: Deleting Data‬‬


‫‪DECLARE‬‬ ‫حذف الصفوف التي تخص القسم رقم ‪ 10‬من‬
‫‪v _deptno‬‬ ‫; ‪emp.deptno%TYPE := 10‬‬ ‫الجدول ‪. emp‬‬
‫‪BEGIN‬‬
‫‪DELETE‬‬ ‫‪emp‬‬
‫‪WHERE‬‬ ‫; ‪deptno = v_deptno‬‬
‫; ‪END‬‬

‫‪DECLARE‬‬ ‫‪ -‬حذف طلبية محددة ‪:‬‬


‫‪v _ordid‬‬ ‫; ‪ord.ordid%TYPE := 605‬‬
‫‪BEGIN‬‬
‫‪DELETE FROM item‬‬
‫‪WHERE‬‬ ‫; ‪ordid = v_ordid‬‬
‫; ‪END‬‬

‫‪- 78 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪Naming Conventions‬‬ ‫استخدام اصطالحات التسمية‬


‫?‬ ‫‪Use a naming convention to avoid ambiguity in the WHERE clause .‬‬
‫?‬ ‫‪Database columns and identifiers should have distinct names .‬‬
‫?‬ ‫‪Syntax errors can arise because PL/SQL checks the database first for column in the table .‬‬
‫استخدم اصطالح التسمية لتفادي أي إلتباس في عبارة ‪. WHERE‬‬ ‫?‬
‫يجب أن يكون ألعمدة ومعرفات قاعدة البيانات أسماء متميزة ‪.‬‬ ‫?‬
‫يمكن أن تحدث أخطاء نحوية ألن ‪ PL/SQL‬تتحقق من قاعدة البيانات من أجل العمود في الجدول ‪.‬‬ ‫?‬

‫‪DECLARE‬‬ ‫ولذلك يجب تطبيق اصطالحات التسمية المتفق عليھا‬


‫‪orderdate‬‬ ‫; ‪ord.orderdate%TYPE‬‬ ‫لتجنب حدوث الخطأ كما في المثال التالي ‪:‬‬
‫‪shipdate‬‬ ‫; ‪ord. shipdate%TYPE‬‬
‫‪ordid‬‬ ‫; ‪ord. ordid %TYPE := 601‬‬ ‫في ھذا المثال ينتج استثناء تنفيذ وذلك ألن‬
‫‪BEGIN‬‬ ‫‪ PL/SQL‬يقوم بالتحقق فيما إذا كان المعرف‬
‫‪SELECT orderdate , shipdate‬‬ ‫عبارة عن عمود في قاعدة البيانات وإن لم يكن فإنه‬
‫‪INTO‬‬ ‫‪orderdate , shipdate‬‬ ‫من المفروض أن يكون معرف ‪. PL/SQL‬‬
‫‪FROM‬‬ ‫‪ord‬‬ ‫ال توجد إمكانية لحدوث إلتباس في عبارة‬
‫; ‪WHERE ordid = ordid‬‬ ‫‪ SELECT‬ألن أي معرف ضمن تلك العبارة يجب‬
‫; ‪END‬‬ ‫أن يكون اسم عمود من قاعدة البيانات وال توجد‬
‫>‪SQL‬‬ ‫إمكانية لحدوث إلتباس في عبارة ‪ INTO‬ألن‬
‫‪DECLARE‬‬ ‫المعرفات ضمن عبارة ‪ INTO‬يجب أن تكون أسماء‬
‫*‬ ‫متحوالت ‪.‬‬
‫‪ERROR at line 1:‬‬ ‫فقط ضمن عبارة ‪ WHERE‬يمكن أن يحدث إلتباس‬
‫‪ORA-01422: exact fetch returns more than requested‬‬ ‫أو تشويش ‪.‬‬
‫‪number of rows‬‬
‫‪ORA-06512: at line 6‬‬

‫‪SQL Cursor‬‬ ‫مؤشر ‪SQL‬‬


‫‪φ A cursor is a private SQL work area.‬‬
‫‪φ There are two types of cursors :‬‬
‫‪o Implicit cursors .‬‬
‫‪o Explicit cursors.‬‬
‫‪φ The Oracle Server uses implicit cursors to parse and execute your SQL statements.‬‬
‫‪φ Explicit cursors are explicitly declared by the programmer.‬‬
‫المؤشرھو منطقة عمل خاصة بـ ‪. SQL‬‬ ‫‪φ‬‬
‫ھناك نوعين من المؤشرات ‪:‬‬ ‫‪φ‬‬
‫‪ o‬مؤشرات ضمنية ‪.‬‬
‫‪ o‬مؤشرات صريحة )واضحة( ‪.‬‬
‫يستخدم مزود أوراكل المؤشرات الضمنية إلعراب وتنفيذ تعليمات ‪.SQL‬‬ ‫‪φ‬‬
‫يتم التصريح عن المؤشرات الصريحة بوضوح من قبل المبرمج‪.‬‬ ‫‪φ‬‬

‫&خواص مؤشر ‪: SQL Cursor Attributes - SQL‬‬


‫يمكنك اختبار حصيلة تعليمات ‪ SQL‬باستخدام خواص المؤشر ‪ .‬حيث تتيح لك ھذه الخواص أن تخمن ما الذي حدث عندما يتم‬
‫استخدام المؤشر الضمني األخير‪ ،‬تستخدم ھذه الخواص كداالت وال يمكنك استخدامھا ضمن تعليمات ‪. SQL‬‬
‫‪Cursor Attributes‬‬
‫‪SQL%ROWCOUNT‬‬ ‫عدد الصفوف المتأثرة بآخر تعليمة ‪ – SQL‬وھو قيمة صحيحة‬
‫‪SQL%FOUND‬‬ ‫صفة منطقية تقدر بـ‪ TRUE‬إذا أثرت آخر تعليمة ‪ SQL‬على صف واحد أو أكثر‬
‫‪SQL%NOTFOUND‬‬ ‫صفة منطقية تقدر بـ‪ TRUE‬إذا لم تؤثر آخر تعليمة ‪ SQL‬على أي صف‬
‫‪SQL%ISOPEN‬‬ ‫دائماً تقدر بـ‪ FALSE‬ألن ‪ PL/SQL‬تغلق المؤشر الضمني مباشرة بعد تنفيذه‬
‫‪- 79 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫& قم بحذف الصفوف التي تحتوي رقم طلبية محدد من الجدول ‪ ، ITEM‬ثم قم بطباعة عدد الصفوف المحذوفة ‪.‬‬

‫)‪VARIABLE rows_deleted VARCHAR2(30‬‬


‫‪DECLARE‬‬
‫; ‪v_ordid NUMBER := 605‬‬
‫‪BEGIN‬‬
‫‪DELETE FROM item‬‬
‫‪WHERE‬‬ ‫; ‪ordid = v_ordid‬‬
‫|| ‪:rows_deleted := (SQL%ROWCOUNT‬‬
‫; ) ‘ ‪‘ rows deleted .‬‬
‫; ‪END‬‬
‫‪/‬‬
‫‪PRINT rows_deleted‬‬

‫‪Writing Control Structures‬‬ ‫كتابة بنى التحكم‬

‫‪Controlling PL/SQL Flow of Execution‬‬ ‫التحكم بتدفق تنفيذ ‪PL/SQL‬‬


‫يمكنك التحكم بالتدفق المنطقي للتعليمات باستخدام عبارة ‪ IF‬الشرطية وبنى التحكم الحلقية ‪:‬‬
‫‪ +‬عبارات ‪ IF‬الشرطية ‪:‬‬
‫‪. IF-THEN-END IF S‬‬
‫‪. IF-THEN-ELSE-END IF S‬‬
‫‪. IF-THEN-ELSIF-ENDIF S‬‬

‫‪IF condition THEN‬‬ ‫الصيغة العامة لعبارة ‪IF‬‬


‫; ‪statements‬‬
‫‪[ELSIF condition THEN‬‬
‫] ; ‪statements‬‬
‫‪[ELSE‬‬
‫] ; ‪statements‬‬
‫; ‪END IF‬‬

‫‪ condition‬متحول منطقي أو تعبير ما تكون نتيجته ‪ TRUE‬أو ‪ FALSE‬أو ‪ NULL‬ويأتي بشكل متسلسل مع التعليمات التي تنفذ‬
‫فقط إذا نتج عنه القيمة ‪. TRUE‬‬
‫عبارة ترافق التعبير المنطقي وتأتي بعدھا التعليمات التي تنفذ في حالة تحقق الشرط‪.‬‬ ‫‪THEN‬‬
‫‪ statements‬يمكن أن تكون تعليمة ‪ SQL‬أو ‪ PL/SQL‬واحدة أو أكثر ويمكن أن تحوي عبارات ‪ IF‬متداخلة ‪.‬‬
‫كلمة مفتاحية يأتي بعدھا تعبير منطقي يتم الوصول إليه إن كانت نتيجة التعبير األول ‪ FALSE‬أو ‪.NULL‬‬ ‫‪ELSIF‬‬
‫كلمة مفتاحية يأتي بعدھا مجموعة تعليمات تنفذ في حالة وصل التحكم إليھا‪.‬‬ ‫‪ELSE‬‬

‫‪- 80 -‬‬
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫‪ 2‬عبارة ‪ IF‬البسيطة ‪: Simple IF Statements‬‬


‫‪IF v_ename = ‘OSBORN’ THEN‬‬ ‫مثال‪ :1‬قم بوضع القيمة ‪ 22‬ضمن رقم المدير ‪manager‬‬
‫; ‪v_mgr := 22‬‬ ‫‪ ID‬إذا كان اسم الموظف ‪. Osborne‬‬
‫; ‪END IF‬‬

‫‪IF v_ename = ‘MILLER’ THEN‬‬


‫‪v_job‬‬ ‫; ’‪:= ‘SALESMAN‬‬ ‫مثال‪ : 2‬قم بوضع القيمة ‪ Salesman‬ضمن ‪ Job title‬و‬
‫;‪v_deptno := 35‬‬ ‫القيمة ‪ 35‬في رقم القسم ‪ Department number‬وعالوة‬
‫; ‪v_new_comm := sal * 0.20‬‬ ‫‪ commission‬تصل إلى ‪ 20%‬إذا كان االسم األخير‬
‫; ‪END IF‬‬ ‫للموظف ‪. Miller‬‬
‫‪....‬‬
‫عند كتابة كود تذكر بأن ‪ ELSIF‬كلمة واحدة وأن ‪ END IF‬كلمتين ‪.‬‬ ‫‪.i‬‬
‫إن كانت نتيجة الشرطا المنطقي األول ‪ TRUE‬ﱠ‬
‫تنفذ مجموعة التعليمات األولى أما إن كانت نتيجته ‪ FALSE‬أو ‪ NULL‬يتم‬ ‫‪.ii‬‬
‫تخطي مجموعة التعليمات واإلنتقال إلى الخطوة التالية كما يسمح بأي عدد من عبارات ‪. ELSIF‬‬
‫يمكن أن يكون ھنالك على األكثر عبارة ‪ ELSE‬واحدة ‪.‬‬ ‫‪.iii‬‬
‫قم بترك فراغات قبل التعليمات المنفذة للوضوح ‪.‬‬ ‫‪.iv‬‬

‫‪IF-THEN-ELSE Statement‬‬ ‫عبارة ‪ IF‬الشرطية من الشكل ‪IF-THEN-ELSE‬‬


‫فيما يلي مخطط تدفق تنفيذ عبارة ‪: IF‬‬
‫الشكل العام‬
‫‪IF condition1 THEN‬‬
‫; ‪statement1‬‬ ‫‪TRUE‬‬ ‫‪IF‬‬ ‫‪FALSE‬‬
‫‪ELSE‬‬ ‫‪condition‬‬
‫; ‪statement2‬‬
‫; ‪END IF‬‬

‫‪THEN actions‬‬ ‫‪ELSE actions‬‬

‫تعليمات ‪ IF‬المتداخلة ‪:‬‬


‫يمكن أيضا ً أن تضم مجموعة األحداث الناتجة عن تعليمة ‪ IF‬األولى تعليمات ‪ IF‬إضافية قبل أن تنجز األحداث ‪.‬يمكن أن تضم كل من‬
‫عبارتي ‪ THEN‬و ‪ ELSE‬تعليمات ‪. IF‬كل تعليمة من تعليمات ‪ IF‬المتداخلة يجب أن يتم إنھاؤھا باستخدام ‪. END IF‬‬

‫‪IF v_shipdate – v_orderdate < 5 THEN‬‬


‫‪v_ship_flag‬‬ ‫; ’‪:= ‘Acceptable‬‬ ‫مثال ‪ :1‬ضع إشارة ‪ flag‬للطلبيات ‪ Orders‬عندما يكون‬
‫‪ELSE‬‬ ‫ھناك أقل من خمسة أيام بين تاريخ الطلب ‪order date‬‬
‫‪v_ship_flag‬‬ ‫; ’‪:= ‘Unacceptable‬‬ ‫وبين تاريخ الشحن ‪. ship date‬‬
‫; ‪END IF‬‬
‫‪....‬‬

‫‪IF v_name = ‘KING’ THEN‬‬ ‫مثال‪ : 2‬قم بتغيير نوع عمل الموظف إلى ‪ Manager‬إذا‬
‫‪v_job‬‬ ‫; ’‪:= ‘MANAGER‬‬ ‫كان اسم الموظف ‪ . King‬وإذا كان اسم الموظف غير‬
‫‪ELSE‬‬ ‫‪ King‬ضع نوع العمل ‪. Clerk‬‬
‫‪v_job‬‬ ‫; ’‪:= ‘CLERK‬‬
‫; ‪END IF‬‬

‫‪- 81 -‬‬
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

IF-THEN-ELSIF Statement IF-THEN-ELSIF ‫ الشرطية من الشكل‬IF ‫عبارة‬

‫الشكل العام‬ IF ‫ باإلضافة إلى تعليمات‬ELSIF ‫عندما يكون ممكناً قم باستخدام عبارة‬
IF condition1 THEN ‫المتداخلة يصبح الكود أسھل للقراءة والفھم ويكون المنطق مميز بشكل‬
statement1 ; ‫ ثانية‬IF ‫ يتألف من تعليمة‬ELSE ‫ إذا كان الحدث ضمن عبارة‬. ‫واضح‬
ELSIF condition2 THEN ‫ وھذا يجعل الكود أسھل‬. ELSIF ‫فإنه يكون من األسھل استخدام عبارة‬
statement2 ; ‫المتداخلة في نھاية كل مجموعة من‬END IF ‫ألننا نقوم بحذف عبارات‬
ELSIF condition3 THEN . ‫الشروط واألحداث‬
Statement3 ;
END IF ;

: IF ‫فيما يلي مخطط تدفق تنفيذ عبارة‬


IF
TRUE condition FALSE

THEN actions
ELSIF
TRUE condition FALSE

ELSE
THEN actions actions

…. EX1 :Determine an employee's bonus


IF v_deptno = 10 THEN
based upon the employee's department.
v_comm := 5000 ;
‫ قم بوضع عالوة للموظفين وذلك باالعتماد‬:1 ‫مثال‬
ELSIF v_deptno = 20 THEN
. ‫على القسم أي حسب رقم قسم الموظف‬
v_comm := 7500 ;
ELSE
v_comm := 2000 ;
END IF ;
....

…. EX2 : For a given value, calculate a


IF v_start > 100 THEN
percentage of that value based on a
v_ start := 2 * v_ start ;
condition.
ELSIF v_ start >= 50 THEN
‫ من أجل قيمة مدخلة قم بحساب النسبة‬:2 ‫مثال‬
v_ start := .5 * v_ start ;
. ‫بناء على الشرط‬
ً ‫المئوية‬
ELSE
v_ start := .1 * v_ start ;
END IF ;
.... - 82 -
Fadi_jb@hotmail.com – ‫ فادي عبد الودود جبارة – سوريا – الالذقية‬: ‫ترجمة واعداد‬

Building Logical Conditions ‫بناء الشروط المنطقية‬


You can build a simple Boolean condition by combining number, character, or date expressions with a
comparison operator . In general, handle null values with the IS NULL operator.
‫يمكنك بناء شرط منطقي بسيط وذلك بضم أرقام وأحرف و تعابير التاريخ باستخدام معامل مقارنة ’ عموماً يتم التعامل مع القيم الفارغة‬
. IS NULL ‫ باستخدام المعامل‬NULL
Any expression containing a null value evaluates to NULL, with the exception of a concatenated
expression, witch treats the null value as an empty string.
‫ مع استثناء حالة ضم السالسل والتي تعامل القيمة الفارغة على أنھا سلسلة‬NULL ‫أي تعبير يحوي قيمة فارغة يقدر أو ينتج قيمة فارغة‬
. ‫فارغة‬
:‫ ذو قيمة فارغة‬v_sal ‫ إن كان المتحول‬NULL ‫ ينتج عن كل من التعبيرين التاليين القيمة‬: 1 ‫مثال‬
v_sal >1000 , v_sal * 1.1
: NULL ‫ فارغة أي‬v_string ‫ إن كانت قيمة المتحول‬NULL ‫ ال ينتج في ھذا المثال القيمة‬: 2 ‫مثال‬
‘PL’ || v_string || ‘SQL’
Logic Tables ‫جداول المنطق‬

: ‫يمكن بناء شرط منطقي بسيط باستخدام معامالت المقارنة والتي تبين الجداول التالية القيم المنطقية التي تنتج عن تلك الشروط‬
AND True False NULL OR True False NULL NOT
True True False NULL True True True True True False
False False False False False True False NULL False True
NULL NULL False NULL NULL True NULL NULL NULL NULL
: ‫ في كل حالة‬V_FLAG ‫ ما ھي قيمة‬: ‫مثال عن الشروط المنطقية‬
v_flag := v_order_flag AND v_available_flag ;

V_ORDER_FLAG V_AVAILABLE_FLAG V_FLAG


True True True
True False False
NULL True NULL
NULL False False

Iterative Control : LOOP Statements ‫ التعابير الحلقية‬: ‫التحكم التكراراي‬


Ρ Loops repeat a statement or sequence of statements multiple times .
Ρ There are three loop types :
 Basic loop .
 FOR loop .
 WHILE loop .
. ‫ تقوم الحلقات بتكرار التعليمة أوسلسلة التعليمات عدد من المرات‬Ρ
: ‫ يوجد ثالث أنواع من الحلقات‬Ρ
. ‫ الحلقة األساسية‬
. FOR ‫ حلقة‬
. WHILE ‫ حلقة‬

- 83 -
‫ترجمة واعداد ‪ :‬فادي عبد الودود جبارة – سوريا – الالذقية – ‪Fadi_jb@hotmail.com‬‬

‫&الحلقة األساسية – ‪: Basic Loop‬‬


‫‪LOOP‬‬ ‫‪-- delimiter‬‬ ‫الصيغة العامة‬
‫;‪Statement1‬‬ ‫‪-- statements‬‬
‫‪…..‬‬
‫; ] ‪EXIT [ WHEN CONDITION‬‬ ‫‪-- EXIT statement‬‬
‫; ‪END LOOP‬‬ ‫‪-- delimiter‬‬

‫وفي الختام الرجاء الدعاء‬


‫بالتوفيق والسداد ولكم جزيل‬
‫الشكر‬
‫أخوكم في ﷲ‬
‫فادي عبد الودود جبارة‬

‫‪- 84 -‬‬