You are on page 1of 85

‫‪ 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‬أ‪ ٞ‬ػدَ اٌ‪ٛ‬خو‪ ٛ‬أ‪ ٚ‬ابؽٍوت ‪٘ٚ :‬ي‪ ٟ‬ل‪ّ١‬يخ ؼ‪١‬يش ِ‪ٛ‬عي‪ٛ‬دح ‪ٚ‬ؼ‪١‬يش ِؾيذدح ‪ٚ Unassigned‬ؼ‪١‬يش ِعش‪ٚ‬ـيخ ‪ٚ Unknown‬ؼ‪١‬يش‬
‫لبثٍخ ٌ‪٩‬عزعّبي ‪ ٚ‬اٌزطج‪١‬ك ‪ ٨ ٟ٘ٚ Inapplicable‬رشجٗ اٌظفش أ‪ ٚ‬اٌفشاغ ‪ٚ‬أ‪ ٞ‬عٍّ‪١‬يخ ؽغيبث‪١‬خ عٍي‪ ٝ‬اٌم‪ّ١‬يخ ‪ NULL‬رٕيزظ اٌم‪ّ١‬يخ ‪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‬‬
‫‪Using Literal Character String‬‬ ‫‪ )5‬اعزخذاَ اٌغ‪٩‬عً اٌؾشـ‪١‬خ اٌجغ‪١‬طخ‬
‫‪-1-‬‬
‫‪ّ٠‬ىٕٕب دِظ اٌغ‪٩‬عً اٌؾشـ‪١‬خ ٌؾمٍ‪ ٓ١‬أ‪ ٚ‬أوضش ‪ٚٚ‬ػع ـشاؼبد ث‪ٕٙ١‬ب ثبعزخذاَ اٌشِض || وّب ‪: ٍٟ٠‬‬
‫"‪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‬اٌز‪٠ ٞ‬عط‪ٕ١‬ب ‪ٚ‬طيؿ‬
‫‪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‬م‪٘ َٛ‬زا ا‪ِ٤‬ش ثبػبـخ إٌض اٌ‪ ٝ‬آخش اٌغطش اٌؾيبٌ‪ ٟ‬أ‪ ٚ‬اٌغيطش ا‪٤‬خ‪١‬يش‬
‫ـ‪ ٟ‬عجبسح ‪ SQL‬اٌغبثمخ ثّعٕ‪ ٝ‬آخش ـ‪ ٟ‬ؽبٌخ ‪ٚ‬ػع عجبسح ٔبلظخ ‪ٚ‬رٕف‪١‬ز٘ب ‪ّ٠‬ىٓ اوّبٌ‪ٙ‬ب ثعذ اٌزٕف‪١‬ز ثبعزخذاَ ا‪ِ٤‬ش ‪. A‬‬
‫‪ .II‬األِس ‪( CHANGE‬اخخظبزاً ‪ : )C‬وّب ‪٠ C /old text/new text ٍٟ٠‬مي‪ َٛ‬ثزؽ‪١١‬يش اٌيٕض ‪ OLD‬اٌي‪ ٝ‬اٌيٕض ‪ NEW‬ـي‪ ٟ‬عجيبسح‬
‫‪SQL‬ا‪٤‬خ‪١‬شح ‪.‬‬
‫‪ .III‬األِس ‪ CHNGE /text/‬أ‪٠ : C /text/ ٚ‬ؾزؾ إٌض ‪ٙٔ text‬بئ‪١‬بً ِٓ عجبسح ‪ SQL‬ا‪٤‬خ‪١‬شح أ‪٠ ٞ‬غزجذٌ‪ٙ‬ب ثفشاغ ‪.‬‬
‫‪ .IV‬األِوس ‪ CLEAR BUFFER‬أ‪ ٚ‬اخخظوبزا ‪٠ : CL BUFF‬ؾيزؾ ويً اٌغيط‪ٛ‬س أ‪ ٚ‬اٌزعٍ‪ّ١‬يبد اٌّ‪ٛ‬عي‪ٛ‬دح ػيّٓ اٌؾيبعض أ‪ ٚ‬اٌّظيذ‬
‫( اٌـ ‪.) Buffer‬‬
‫‪ .V‬األِس ‪٠ :DEL‬م‪ َٛ‬ثؾزؾ اٌغطش اٌؾبٌ‪ ٟ‬أ‪ ٞ‬اٌغطش ا‪٤‬خ‪١‬ش ـ‪ ٟ‬عجبسح ‪ SQL‬ا‪٤‬خ‪١‬شح ‪.‬‬
‫‪ .VI‬األِس ‪ RUN‬أ‪٠: R ٚ‬م‪٘ َٛ‬زا ا‪ِ٤‬ش ثعشع ‪ٚ‬رشؽ‪ ً١‬عجبسح ‪ SQL‬ا‪٤‬خ‪١‬شح ‪ٚ‬اٌّ‪ٛ‬ع‪ٛ‬دح ػّٓ اٌّظذ اٌـ ‪. Buffer‬‬

‫‪SQL*PLUS FILE COMMANDS‬‬ ‫أ‪ٚ‬اِس اٌٍّفبث ف‪ٌ ٟ‬غت اٌــ ‪SQL PLUS‬‬

‫‪ .i‬األِس ‪ SAVE Filename‬أ‪٠ : SAV Filename ٚ‬مي‪ َٛ‬ثؾفيع رعٍ‪ّ١‬يخ اٌيـ ‪ SQL‬ا‪٤‬خ‪١‬يشح ػيّٓ اٌٍّيؿ اٌّغيّ‪ ٝ‬ل ‪ٚ‬اٌيز‪ّ٠ ٞ‬ىيٓ‬
‫اعزذعبإٖ ‪ٚ‬رٕف‪١‬ز اٌزعٍ‪ّ١‬خ ػّٕٗ ثبعزخذاَ ا‪ِ٤‬ش اٌزبٌ‪. GET ٟ‬‬
‫‪ .ii‬األِس ‪٠ : GET Filename‬م‪ َٛ‬ثبعزذعبء رعٍ‪ّ١‬خ اٌـ ‪ SQL‬اٌّخضٔخ ػّٓ اٌٍّؿ إٌظ‪ ٟ‬اٌّزو‪ٛ‬س ‪.‬‬
‫‪ .iii‬األِس ‪ START Filename‬أ‪٠ : STA Filename ٚ‬م‪ِ َٛ‬جبشيشح ثزٕف‪١‬يز رعٍ‪ّ١‬يخ اٌيـ ‪ SQL‬اٌّخضٔيخ ـي‪ ٟ‬اٌٍّيؿ اٌّيزو‪ٛ‬س ‪ّ٠ٚ‬ىيٓ‬
‫ا‪٨‬عزعبػخ عٕٗ ثب‪ِ٤‬ش ‪. @filename‬‬
‫‪ .iv‬األِس ‪ EDIT‬أ‪ ٚ‬اخخظبزا ‪٠ : ED‬م‪ َٛ‬ثزؾش‪٠‬ش آخش رعٍ‪ّ١‬خ ‪ SQL‬ػّٓ ِؾشس ٔظ‪ٛ‬ص اٌّفىيشح عٕيذ٘ب ‪ّ٠‬ىيٓ اطي‪٩‬ؽ‪ٙ‬ب صيُ ؽف ‪ٙ‬يب‬
‫‪ٚ‬رٕف‪١‬ز٘ب ِٓ عذ‪٠‬ذ ثبعزخذاَ ا‪ِ٤‬ش ‪. R‬‬
‫‪ .v‬األِوس ‪ EDIT Filename‬أ‪٠ : ED Filename ٚ‬مي‪ َٛ‬ثزؾش‪٠‬يش اٌٍّيؿ اٌيز‪ ٞ‬لّٕيب ثؾفيع رعٍ‪ّ١‬يخ ‪ SQL‬ػيّٕٗ ِغيجمبً ػيّٓ ِؾيشس‬
‫ٔظ‪ٛ‬ص ‪.‬‬
‫ً‬
‫‪.vi‬األِس ‪ SPOOL Filename‬أ‪ ٚ‬اخخظبزا ‪٠ : SPO Filename‬م‪٘ َٛ‬زا ا‪ِ٤‬ش ثزخض‪ٔ ٓ٠‬زبئظ ا‪٨‬عزفغبس ـ‪ٍِ ٟ‬ؿ ‪ ,‬ثبػبـخ ‪OFF‬‬
‫اٌي‪ ٝ‬ا‪ِ٤‬يش ـبٔيٗ ‪٠‬مي‪ َٛ‬ثيبؼ‪٩‬ق اٌٍّيؿ ‪ ,‬أِيب ثبػيبـخ ‪ OUT‬ـبٔيٗ ‪٠‬مي‪ َٛ‬ثيبؼ‪٩‬ق اٌٍّيؿ ‪ٚ‬اسعيبي إٌزيبئظ اٌي‪ ٝ‬ؽبثعيخ إٌ يبَ ‪SPO .‬‬
‫‪ filename|OFF‬أ‪. SPO filename|out ٚ‬‬
‫‪ .vii‬األِس ‪٠ EXIT‬م‪ َٛ‬ثبٌخش‪ٚ‬ط ِٓ ‪ٚ‬اع‪ٙ‬خ اٌـ ‪. SQL*PLUS‬‬

‫‪-2-‬‬
: )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 :

SQL>Select ename , sal , comm ٕٝ‫ اٌّؼ‬Meaning Operator


From emp ٞٚ‫غب‬٠ Equal to =
Where sal<=comm ; ِٓ ‫ أوجش‬Greater than >
ٞٚ‫غب‬٠ ٚ‫ أوجش أ‬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-
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 .
‫غيخ‬١‫ساويً ثبعيبدح ٔفيظ ٔز‬ٚ‫َ ِخيذَ أ‬ٛ‫م‬٠ ٨ ‫سثّب‬ٚ ‫ش ِؾذدح‬١‫ت ؼ‬١‫مخ اٌزشر‬٠‫ رظجؼ ؽش‬Order By ‫ت‬١‫ارا ٌُ رغزخذَ عجبسح اٌزشر‬
. ٓ١‫ت ِشر‬١‫عزفغبس ثٕفظ اٌزشر‬٨‫ا‬
Sorting with descending order :)ٌٟ‫ب اشىً حٕبش‬١‫ (اٌخسح‬Order By ‫ب‬١‫ ِغ ػببزة اٌخسح‬DESC َ‫اظخخدا‬
‫ت‬١‫ظجؼ اٌزشر‬٠ Order by ‫ ِع عجبسح‬DESC َ‫ثبعزخذا‬ٚ ٞ‫ؾ ثشىً رظبعذ‬ٛ‫ت اٌظف‬١‫ ثزشر‬Order by ‫َ عجبسح‬ٛ‫ب ً رم‬١‫اـزشاػ‬
. ٌٟ‫ثشىً رٕبص‬
The default sort order is ascending . ٞ‫ ثشىً رظبعذ‬ٟ٘ ‫خ‬١‫ـزشاػ‬٨‫ت ا‬١‫مخ اٌزشر‬٠‫ؽش‬

-4-
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-
‫‪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‬زُ رمش‪٠‬ت اٌشلُ اٌي‪ ٝ‬أليشة سلّي‪ ٓ١‬ثعيذ اٌفبطيٍخ ‪ٚ‬ـي‪ ٟ‬ؽبٌيخ وي‪ ْٛ‬اٌّعبِيً‬
‫اٌضبٔ‪ِ ٟ‬غب‪٠ٚ‬ب ً ٌـ ‪٠ -2‬زُ رمش‪٠‬ت اٌشلُ ِٕضٌز‪ ٓ١‬عشش‪٠‬ز‪ ٓ١‬اٌ‪ ٝ‬اٌ‪١‬غبس ‪.‬‬

‫‪-6-‬‬
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 .
‫د‬ٛ‫عي‬ِٛ ‫يش‬١‫ ؼ‬ٚ‫ب ً اٌظيفش أ‬٠ٚ‫ ٌذاٌخ اٌمطع ِغيب‬ٟٔ‫د ارا وبْ اٌّعبًِ اٌضب‬٩ِ‫ش ِع اٌّعب‬٠ٚ‫رعًّ داٌخ اٌمطع رعًّ ٔفظ عًّ داٌخ اٌزذ‬
ٟ‫ـي‬ٚ ‫ٓ ثعيذ اٌفبطيٍخ‬١‫ي سلّي‬ٚ‫ أ‬ٌٝ‫زُ لطع اٌشلُ ا‬٠ 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
‫اؽيذ‬ٚ ٟ‫ ؽميً ؽشـي‬ٝ‫ عٍي‬ٞٛ‫ؾزي‬٠ ‫ ـيبسغ‬ٟ‫ّ٘ي‬ٚ ‫ي‬ٚ‫ عيذ‬ٛ‫٘ي‬ٚ ‫عيشاء‬٦‫غيخ ٘يزا ا‬١‫يبس ٔز‬ٙ‫ظ‬٦ DUAL ّٝ‫غ‬٠ ‫ي‬ٚ‫َ ثبعزخذاَ عذ‬ٛ‫عٕم‬
َ‫ ِٕشييؤ ِييٓ لجييً اٌّغييزخذ‬ٛ‫٘يي‬ٚ ‫ييذح‬١‫ؽ‬ٚ ‫ّييخ‬١‫عييبدح ل‬٦ ‫ي‬ٚ‫غييزخذَ ٘ييزا اٌغييذ‬٠ X ٟ‫ييذح ٘يي‬١‫ؽ‬ٚ ‫ّييخ‬١‫ ل‬ٝ‫ عٍيي‬ٞٛ‫ؾزيي‬٠ٚ. dummy ُ‫ثبعيي‬
SYSTEM
Valid oracle dates are between January 1.4712 B.C and December 31.9999 A.D
ٚ‫يذ أ‬٠‫يبس اعيُ ٌٍؾميً اٌغذ‬١‫اخز‬ٚ select ‫رٌيه ثبعيزخذاَ عجيبسح‬ٚ ‫ي‬ٚ‫ عيذ‬ٞ‫ ِيع أ‬SYSDATE ‫عيشاء‬٦‫ ا‬ٚ‫ّىٕه اعيزخذاَ اٌزيبثع أ‬٠
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-
‫ت‬١ٍّ‫اٌؼ‬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 ُ‫ اٌمغُ سل‬ٟ‫ اٌعّبي ـ‬ٚ‫ٓ أ‬١‫ظف‬ٌّٛ‫ع ا‬١ّ‫ع اٌعًّ ٌغ‬١‫عذد أعبث‬ٚ ‫ش ٘زا اٌّضبي أعّبء‬ٙ ٠
. ‫ع‬١‫عبث‬٤‫غخ ثب‬١‫ْ إٌز‬ٛ‫ رى‬7 ٍٝ‫ثبٌمغّخ ع‬ٚ َ‫ب‬٠٤‫خ ثب‬١ِٕ‫ اٌّذح اٌض‬ٟ‫عط‬٠ Hiredate ًِ‫عزخذاَ ٌٍعب‬٨‫خ ا‬٠‫ربس‬ٚ Sysdate ‫اٌزبثع‬
DATE FUNCTIONS
FUNCTION DESCRIPTION
MONTHS_BETWEEN(D1,D2) D2 ٚ D1 ٓ١‫خ‬٠‫ٓ ربس‬١‫ش ث‬ٙ‫ش‬٤‫عذد ا‬
ADD_MONTHS(D1,n) D1 ‫خ‬٠‫ اٌزبس‬ٌٝ‫ش ا‬ٙ‫ ش‬n ‫اػبـخ‬
NEXT_DAY(DATE ,'CH') Date ‫خ‬٠‫ ثعذ اٌزبس‬CH ّٗ‫َ اع‬ٛ٠ ‫ي‬ٚ‫خ أ‬٠‫ٕب ربس‬١‫عط‬٠
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-
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-
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 -
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 -
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 -
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 -
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

: Non-Equijoins ٞٚ‫س ِخعب‬١‫اٌساؾ اٌغ‬


- 14 -
‫ي‬ٚ‫ أوضش ِٓ اٌغذ‬ٚ‫ ؽمً أ‬ٚ ‫ي‬ٚ٤‫ي ا‬ٚ‫ أوضش ِٓ اٌغذ‬ٚ‫ٓ ؽمً أ‬١‫لخ ِب ث‬٩‫عذ ع‬ٛ٠ ٓ‫ٌى‬ٚ ٓ١ٌٚ‫ ِٓ اٌغذ‬ٞٚ‫ أوضش ِزغب‬ٚ‫د ؽمً أ‬ٛ‫ع‬ٚ ‫شزشؽ‬٠ ٨
. ‫اح‬ٚ‫غذ ِغب‬١ٌ ‫لخ‬٩‫ ٘زٖ اٌع‬ٚ ٟٔ‫اٌضب‬
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.
ٓ‫ٌى‬ٚ ‫عخ‬ّٛ‫اؽذح ٌىً ِغ‬ٚ ‫غخ‬١‫ ٔز‬ٟ‫ؾ ٌزعط‬ٛ‫عبد ِٓ اٌظف‬ّٛ‫ ِغ‬ٍٝ‫ رئصش ع‬ٟ٘ٚ ‫ذح اٌظؿ‬١‫ؽ‬ٚ ‫اثع‬ٛ‫ رشجٗ اٌز‬٨ : ‫ػت‬ّٛ‫ّت اٌّد‬١‫ااغ ل‬ٛ‫ح‬
. ‫عبد‬ّٛ‫ ِغ‬ٌٝ‫ي ِمغُ ا‬ٚ‫ اٌغذ‬ٚ‫ً أ‬٩ِ‫ي وب‬ٚ‫ْ اٌغذ‬ٛ‫عبد ِّىٓ رى‬ّٛ‫٘زٖ اٌّغ‬
Types of Group Functions ‫ػت‬ّٛ‫ّت اٌّد‬١‫ااغ ل‬ٛ‫أّٔبؽ ِٓ ح‬
- 15 -
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 ;
SQL> select COUNT( * ) : ‫ِثبي‬
From emp
WHERE deptno = 30 ;
SQL> select COUNT( comm ) : ‫ِثبي‬
- 16 -
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.
ً‫عيخ ٌزؾظي‬ّٛ‫اثيع اٌّغ‬ٛ‫ّىٕيه عٕيذ٘ب اعيزخذاَ ر‬٠ . ‫عبد‬ّٛ‫ ِغ‬ٌٝ‫ي ا‬ٚ‫ؾ ػّٓ اٌغذ‬ٛ‫ُ اٌظف‬١‫ ٌزمغ‬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
10 2916.66667

Using the GROUP BY Clause on Multiple Columns


: ‫ ِغ أػّدة ِخؼد ة‬GROUP BY ‫اظخخداَ ػببزة‬
- 17 -
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

- 18 -
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.
‫ِييبد‬ٍٛ‫عييبد ػييّٓ ِع‬ّٛ‫ٌييزٌه ِييٓ اٌّغزؾغييٓ ؽظييش اٌّغ‬ٚ ‫بس٘ييب‬ٙ‫ييذ اظ‬٠‫ ٔش‬ٟ‫عييبد اٌزيي‬ّٛ‫ض اٌّغ‬١‫ ٌزخظيي‬HAVING ‫رغييزخذَ عجييبسح‬
. ‫ع‬١ّ‫اٌزغ‬
SQL> select deptno, MAX ( sal ) DEPTNO MAX(SAL) : ‫ِثبي‬
From emp ---------- -------
GROUP BY deptno 10 5000
20 3000
HAVING MAX (sal) > 2000 ;
30 2850
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
---------- ---------
- 19 - SALESMAN 5600
ANALYST 6000
MANAGER 8275
WHERE job not like 'sales%'
GROUP BY job
HAVING SUM (sal) > 5000
ORDER BY SUM(sal) ;

Nesting Group Functions ‫ػت‬ّٛ‫ّت اٌّد‬١‫ااغ ل‬ٛ‫حداخً ح‬


SQL> select MAX(AVG ( sal ) ) MAX(AVG(SAL(( : ‫ِثبي‬
From emp -------------------
GROUP BY deptno ; 2916.66667

- 20 -
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.
َ‫طخ ثبعيزخذا‬١‫ّىٕيه ثٕيبء عجيبساد ـعبٌيخ خيبسط عجيبساد ثغي‬٠ .ٜ‫ أخيش‬SELECT ‫ ِؽٍفخ ثعجيبسح‬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 Use single-row comparison operators
ٞٚ‫غب‬٠ Equal to =
ِٓ ‫ أوجش‬Greater than >
ٞٚ‫غب‬٠ ٚ‫ أوجش أ‬Greater than or equal to >=
ِٓ ً‫ أل‬Less than <
ٞٚ‫غب‬٠ ٚ‫ ألً أ‬Less than or equal to <=
ٞٚ‫غب‬٠ ٨ Not equal to <>

- 21 -
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 );

- 22 -
‫عزفغبس‬٨‫ أْ ا‬ٟٕ‫ع‬٠ ‫ؾ ٘زا‬ٛ‫ ِزعذد اٌظف‬ٟ‫ذ اٌظؿ ِع اعزفغبس عضئ‬١‫ؽ‬ٚ ًِ‫ إٔٔب اعزخذِٕب ِعب‬ٌٟ‫ اٌّضبي اٌزب‬ٟ‫ اٌخطؤ ـ‬: ‫ِثبي خبؽئ‬
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.
ٝ‫ػيبـخ اٌي‬٦‫ؾ ثب‬ٛ‫د ِزعيذدح اٌظيف‬٩ِ‫ رغزخذَ اٌّعب‬.‫ؾ‬ٛ‫عزفغبساد ِزعذدح اٌظف‬٨‫ذ أوضش ِٓ طؿ ثب‬١‫ رع‬ٟ‫خ اٌز‬١‫عزفغبساد اٌغضئ‬٨‫ ا‬ّٝ‫رغ‬
.‫ أوضش‬ٚ‫ّخ أ‬١‫لع ل‬ٛ‫ؾ رز‬ٛ‫د ِزعذدح اٌظف‬٩ِ‫ اٌّعب‬.‫ؾ‬ٛ‫عزفغبساد ِزعذدح اٌظ‬٨‫ذح اٌظؿ ِع ا‬١‫ؽ‬ٚ ‫د‬٩ِ‫اٌّعب‬
. ‫ ؽذح‬ٍٝ‫غخ ع‬١‫ذ وً ٔز‬١‫ع‬٠ٚ ٟ‫عزفغبس اٌغضئ‬٨‫ُ اٌّعبدح ِٓ ا‬١‫ّخ ِٓ اٌم‬١‫ ثبٌّمبسٔخ ِع وً ل‬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

Using ANY operator in Multiple-Row Subqueries ‫ف‬ٛ‫ت ِخؼد ة اٌظف‬١‫ ِغ االظخفعبزاث اٌدصئ‬ANY ًِ‫اظخخداَ اٌّؼب‬
‫ ؽذح‬ٍٝ‫غخ ع‬١‫ذ وً ٔز‬١‫ع‬٠ٚ ٟ‫عزفغبس اٌغضئ‬٨‫ُ اٌّعبدح ِٓ ا‬١‫ّخ ِٓ اٌم‬١‫ ثبٌّمبسٔخ ِع وً ل‬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
Using ALL operator in Multiple-Row Subqueries ‫ف‬ٛ‫ت ِخؼد ة اٌظف‬١‫ ِغ االظخفعبزاث اٌدصئ‬ALL ًِ‫اظخخداَ اٌّؼب‬
. ٟ‫عزفغبس اٌغضئ‬٨‫ُ اٌّعبدح ِٓ ا‬١‫ ثبٌّمبسٔخ ِع وً اٌم‬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
7902 FORD ANALYST
- 23 -
‫ّخ‬١‫ذ إٌزبئظ اٌّطبثمخ ٌىً ل‬١‫ع‬٠ٚ ‫ُ اٌّعبدح‬١‫ّخ ِٓ اٌم‬١‫ ثبٌّمبسٔخ ِع وً ل‬ٟ‫غ‬١‫عزفغبس اٌشئ‬٨‫َ ا‬ٛ‫م‬٠ 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.
ّٓ‫ميبسْ ػي‬٠ ‫اؽيذ‬ٚ ‫د‬ٛ‫يب عّي‬ٙ١‫ْ ـ‬ٛ‫ىي‬٠ ٟ‫اٌزي‬ٚ ‫ؾ‬ٛ‫يخ ِزعيذدح اٌظيف‬١‫اعزفغبساد عضئ‬ٚ ‫ذح اٌظؿ‬١‫ؽ‬ٚ ‫خ‬١‫ٌمذ لّذ عبثمب ً ثىزبثخ اعزفغبساد عضئ‬
‫يه وزبثيخ عجيبسح‬١ٍ‫ أوضيش ع‬ٚ‫ٓ أ‬٠‫د‬ٛ‫يذ ِمبسٔيخ عّي‬٠‫ ارا وٕيذ رش‬. SELECT ‫ اٌزبثعخ ٌعجيبسح‬HAVING ‫ ػّٓ عجبسح‬ٚ‫ أ‬WHERE ‫عجبسح‬
ّٓ‫ؽ ِزعيذدح ػي‬ٚ‫عّذح ِٓ ػُ شش‬٤‫خ ِزعذدح ا‬١‫عزفغبساد اٌغضئ‬٨‫ رّىٕه ا‬.‫خ‬١‫د إٌّطم‬٩ِ‫ ثبعزخذاَ اٌّعب‬WHERE ‫اٌّمبسٔخ اٌخبطخ ثـ‬
.‫اؽذح‬ٚ 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.
‫ّ٘يب) ٌيشلُ إٌّيزظ‬٩‫ٓ (و‬١ٍ‫يخ ِّيبص‬١ّ‫اٌى‬ٚ ‫يٗ سليُ إٌّيزظ‬١‫ْ ـ‬ٛ‫ىي‬٠ ‫يخ ٌىيً عٕظيش‬١ّ‫اٌى‬ٚ ‫سليُ إٌّيزظ‬ٚ ‫يت‬١‫ ثعشع سلُ اٌزشر‬ٌٟ‫َ اٌّضبي اٌزب‬ٛ‫م‬٠
. 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

- 24 -
: ٌٟ‫اٌّضبي اٌزب‬ٚ ‫ اٌشىً اٌغبثك‬ٟ‫ )وّب ـ‬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.
‫يخ‬١ّ‫ و‬ٞ‫ سليُ ِٕيزظ أ‬ٞ٤ ٓ١ٍ‫يخ ِّيبص‬١ّ‫اٌى‬ٚ ‫يٗ سليُ إٌّيزظ‬١‫ْ ـ‬ٛ‫ىي‬٠ ‫خ ٌىً عٕظش‬١ّ‫اٌى‬ٚ ‫سلُ إٌّزظ‬ٚ ‫ت‬١‫ ثعشع سلُ اٌزشر‬ٌٟ‫َ اٌّضبي اٌزب‬ٛ‫م‬٠
. 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
‫ييخ‬١ّ‫ و‬ٞ‫ أ‬ٚ‫ سلييُ ِٕييزظ أ‬ٞ٤ ٓ١ٍ‫ييت آخييش ِّييبص‬١‫ عٕظييش ثزشر‬16 ‫عييذ‬ٛ٠ ٗ‫ أٔيي‬ٟ‫عٕيي‬٠ ‫٘ييزا‬ 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
BLAKE 2850 30 1566.66667
- 25 -
‫ت‬١ٍ‫س اٌخفبػ‬٠‫ اٌخمبز‬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 ‫ّخ‬١ٍ‫اٌزع‬

- 26 -
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

- 27 -
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)

- 28 -
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)
ٗ‫ي‬١ٍ‫ؤخز اٌشيىً اٌّطجيك ع‬٠ ‫خ‬٠‫اٌزبس‬ٚ ,‫ذ‬٠‫ ثب‬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

- 29 -
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]
‫ؾ ثغطش ـبسغ‬ٛ‫ِمبؽع ِٓ اٌظف‬ٚ ‫ُ اٌّؼبعفخ‬١‫اخفبء اٌم‬ٚ ‫ؽّظ‬

- 30 -
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 A15‫ اٌّضبي اٌغبثك‬ٟ‫ وّب ـ‬n
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

- 31 -
: ‫أِثٍت‬
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
ً
‫ِش‬٤‫@ ٘زا ا‬filename ‫ اخزظبسا‬ٚ‫ ِع اعُ اٌٍّؿ أ‬START ‫ِش‬٤‫ ثبعزخذاَ ا‬ٟ‫ً اٌٍّؿ إٌظ‬١‫ لُ ثزشؽ‬SQL*Plus ّٓ‫ ػ‬.H
.ٟ‫ز اٌٍّؿ إٌظ‬١‫رٕف‬ٚ ‫ة ٌمشاءح‬ٍٛ‫ِط‬
- 32 -
ٓ٠‫ْ ِٓ عطش‬ٛ‫ش ِى‬٠‫اْ ٌٍزمش‬ٕٛ‫ػع ع‬ٛ‫ لُ ث‬$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

Data Manipulation Language


- 33 -
‫بٔبث‬١‫ٌغت ِؼبٌدت اٌب‬
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 .
‫ ؽزؾ‬ٚ‫ً أ‬٠‫ رعذ‬ٚ‫ذ اػبـخ أ‬٠‫ عٕذِب رش‬SQL ‫ ِٓ ٌؽخ اـ‬ٞ‫ ِشوض‬ٚ‫ أ‬ٟ‫غ‬١‫ رعزجش عضء سئ‬DML ً‫ب اخزظبسا‬ٌٙ ‫شِض‬٠ٚ ‫بٔبد‬١‫ٌؽخ ِعبٌغخ اٌج‬
. DML ‫ه أغبص عجبسح‬١ٍ‫بٔبد ع‬١‫بٔبد ِٓ لبعذح اٌج‬١‫ث‬
.)‫خ‬٠‫ طفمخ (ِعبٍِخ رغبس‬ٚ‫ اعشاء أ‬ّٝ‫خ ِٓ اٌعًّ رغ‬١‫ؽذح ِٕطم‬ٚ ِٓ DML ‫عخ عجبساد ٌؽخ‬ّٛ‫ِغ‬
ً‫ْ ِئٌفيب‬ٛ‫ىي‬٠ ‫عيشاء سثّيب‬٦‫ ) ٘يزا ا‬ٞ‫ىبد (اٌغيبس‬١‫ ؽغبة اٌش‬ٌٝ‫دع ا‬ٌّٛ‫ً ِجٍػ ِٓ اٌؾغبة ا‬٠ٛ‫ء ثٕه ثزؾ‬٩ّ‫ً اٌّضبي ارا لبَ أؽذ ع‬١‫ عج‬ٍٝ‫ع‬
ْ‫غيت أ‬٠ . ً‫ي‬٠ٛ‫يً ػيّٓ عيغً اٌزؾ‬٠ٛ‫يخ اٌزؾ‬١ٍّ‫ً ع‬١‫رغيغ‬ٚ ٞ‫يبدح اٌؾغيبة اٌغيبس‬٠‫ص‬ٚ ‫دع‬ٛ‫ أميبص اٌؾغيبة اٌّي‬. ‫بد ِٕفظٍخ‬١ٍّ‫س ع‬٩‫ِٓ ص‬
‫ء ِيب أؽيذ ٘يزٖ اٌعجيبساد‬ٟ‫ارا أعيبق شي‬ٚ . ‫ؼ‬١‫اصْ طيؾ‬ٛ‫ ري‬ٟ‫ اٌؾغيبثبد ـي‬ٝ‫ؾيبـع عٍي‬١ٌ SQL ‫يع عجيبساد‬١ّ‫ساويً أغيبص ع‬ٚ‫ؼّٓ ِخذَ أ‬٠
. ‫بد‬١ٍّ‫ اٌع‬ٟ‫ رٕغض ثبل‬٨ ْ‫غت أ‬٠ ً٠ٛ‫خ اٌزؾ‬١ٍّ‫اٌخبطخ ثع‬
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.
hiredate ً‫ ػّٓ اٌؾم‬ٌٟ‫خ اٌؾب‬٠‫ّخ اٌزبس‬١‫ اٌّضبي اٌغبثك ثبدساط ل‬ٟ‫ ـ‬SYSDATE ‫َ اٌزبثع‬ٛ‫م‬٠
SQL> SELECT * FROM emp : ‫ٌٍخسمك ٔؼغ‬
WHERE empno = 7196 ;

EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO


------ ---------- --------- ---------- -------- ---------- ---------- ----------
7196 GREEN SALESMAN 7782 13/06/04 2000 10

- 34 -
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.

- 35 -
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.

- 36 -
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. ‫اؽذح‬ٚ ‫ّخ‬١ٍ‫رع‬
ً٠‫ذ عٕذ اوزشبؾ أخطبء أصٕبء اٌزعذ‬١‫٘زا ِف‬ٚ ‫ عذَ اٌؾفع‬ٚ‫ً أ‬٠‫ّىٕه ؽفع ٘زا اٌزعذ‬٠ ‫ش‬٠‫ اٌزؾذ‬ٚ‫ػبـخ أ‬٦‫بد ثب‬١‫ً لبعذح اٌّعط‬٠‫عٕذ رعذ‬
.‫ ٌٍزشاعع‬Rollback ٚ ‫ ٌٍؾفع‬Commit ‫اِش‬ٚ٤‫ اٌزشاعع رىزجبْ ثب‬ٚ‫ً أ‬٠‫ذ اٌزعذ‬١‫خ رضج‬١ٍّ‫ ع‬ٚ

. ‫ز‬١‫ لبثٍخ ٌٍزٕف‬SQL ‫ي عجبسح‬ٚ‫بٔبد عٕذِب رٕفز أ‬١‫ رجذأ اعشاءاد لبعذح اٌج‬
: ٍٟ٠ ‫ ِّب‬ٞ‫س أ‬ٚ‫ ِع ؽذ‬ٟٙ‫رٕز‬ٚ 
. COMMIT or ROLLBACK ‫اِش‬ٚ٤‫ ِٓ ا‬ٞ‫ز أ‬١‫ ارا رُ رٕف‬.1
. Auto Commit ٟ‫ى‬١‫ِبر‬ٛ‫ر‬ٚ٤‫ رعذ ثّضبثخ اٌؾفع ا‬ٟ‫اٌز‬ٚ DDL or DCL ‫ّبد‬١ٍ‫ ِٓ رع‬ٞ‫ز أ‬١‫ ارا رُ رٕف‬.2
. ً ‫ب‬١‫َ ثبٌؾفع رٍمبئ‬ٛ‫م‬٠ ٞ‫اٌز‬ٚ User Exits َ‫ط اٌّغزخذ‬ٚ‫ خش‬.3
. َ‫ ـشً إٌ ب‬ٚ‫بس إٌ بَ أ‬١ٙٔ‫ ا‬.4
. ٌٟ‫عشاء اٌزب‬٦‫ ثجذء ا‬ٟ‫ى‬١‫ِبر‬ٛ‫ر‬ٚ‫خ ثشىً أ‬١ٌ‫ اٌزب‬SQL ‫َ عجبسح‬ٛ‫عشاءاد رم‬٦‫ ا‬ٚ‫بد أ‬١ٍّ‫ أؽذ اٌع‬ٟٙ‫عٕذِب رٕز‬
.‫عشاء‬٦‫بء ا‬ٙٔ‫ب ً ثب‬١ّٕ‫َ ػ‬ٛ‫ب رم‬ٙٔ‫ٌزٌه ـب‬ٚ ٟ‫ ثبٌؾفع اٌزٍمبئ‬DDL or DCL ‫ّبد‬١ٍ‫َ رع‬ٛ‫رم‬ٚ ‫وّب‬

- 37 -
Advantages of COMMIT and ROLLBACK Statements
ROLLBACK ٚ COMMIT ٟ‫صاث ػببزح‬١ِ
 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 ٟ‫ى‬١‫ِبر‬ٛ‫ر‬ٚ٤‫ؾذس اٌؾفع ا‬٠ 


. DDL ‫ّخ‬١ٍ‫ز رع‬١‫ رٕف‬.1
. DCL ‫ّخ‬١ٍ‫ز رع‬١‫ رٕف‬.2
ROLLBACK ٚ‫ أ‬COMMIT ‫ز‬١‫ْ رٕف‬ٚ‫ ثذ‬SQL*Plus ‫ئخ‬١‫ ِٓ ث‬ٞ‫ط ثشىً عبد‬ٚ‫ اٌخش‬.3
ٖ‫ ٘ز‬ٟ‫ـ‬ٚ َ‫بس إٌ ب‬١ٙٔ‫ ثب‬ٚ‫ أ‬SQL*Plus ‫ ٌٍـ‬ٟ‫ع‬١‫ش ؽج‬١‫بء اٌؽ‬ٙٔ٦‫ ثب‬Automatic rollback ٟ‫ى‬١‫ِبر‬ٛ‫ر‬ٚ٤‫ؾذس اٌزشاعع ا‬٠ ‫ وّب‬
.‫ي‬ٚ‫ِخ اٌغذا‬٩‫ ع‬ٍٝ‫ ِع اٌّؾبـ خ ع‬COMMIT ‫ آخش ٔمطخ ؽفع‬ٌٝ‫ساوً ثبٌزشاعع ا‬ٚ‫د أ‬ٚ‫َ ِض‬ٛ‫م‬٠ ‫اٌؾبٌخ‬

ON or OFF ٍٗ١‫ عذَ رفع‬ٚ‫ٍٗ أ‬١‫رفع‬ٚ SET ‫ّىٓ اعزخذاِٗ ِع‬٠ٚ DML ‫ّبد‬١ٍ‫ ِٓ رع‬ٛ٘ AUTOCOMMIT ‫ِش‬٤‫ اْ ا‬: ‫ِالزظت‬
. OFF ‫ػع‬ٌٛ‫ ا‬ٍٝ‫ب ع‬١‫ْ اـزشاػ‬ٛ‫ى‬٠ٚ ٍٗ١‫ ؽبٌخ رفع‬ٟ‫ ـ‬ROLLBACK ‫خ اٌزشاعع‬١ٍّ‫ز ع‬١‫ّىٕه عٕذ٘ب رٕف‬٠ ٨ ٓ‫ٌى‬ٚ
SQL> SET AUTOCOMMIT ON
DML ‫ ِغزخذَ آخش ِشب٘ذح ٔزبئظ عجبسح‬ٞ‫ع أ‬١‫غزط‬٠ ٨ COMMIT or ROLLBACK ‫ اٌزشاعع‬ٚ‫ذ أ‬١‫ اٌزضج‬ٟ‫ز‬١ٍّ‫ك أؽذ ع‬١‫لجً رطج‬
.‫ش٘ب‬١١‫ع ِغزخذَ آخش رؽ‬١‫غزط‬٠ ٨ ‫ش‬١‫بٔبد ِمفٍخ ثؾ‬١‫ْ اٌج‬ٛ‫رى‬ٚ ٌٟ‫اٌّغزخذِخ ِٓ لجً اٌّغزخذَ اٌؾب‬
ْ‫شاد وّب أ‬١١‫ اٌزؽ‬ٚ‫ٓ ِشب٘ذح إٌزبئظ أ‬٠‫خش‬٢‫ٓ ا‬١ِ‫ع اٌّغزخذ‬١‫غزط‬٠ COMMIT or ROLLBACK ‫ اٌزشاعع‬ٚ‫ذ أ‬١‫خ اٌزضج‬١ٍّ‫أِب ثعذ ع‬
. ٝ‫ رّؾ‬Savepoints ‫ع ٔمبؽ اٌؾفع‬١ّ‫ع‬

- 38 -
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 .
: Writer ‫ وزبثخ‬ٚ‫ أ‬Reader ‫بٔبد اِب لشاءح‬١‫ اٌج‬ٌٝ‫ي ا‬ٛ‫ط‬ٚ ٟ‫ز‬١ٍّ‫َ اٌّغزخذَ ثع‬ٛ‫م‬٠
(SELECT statement) or ( INSERT, UPDATE, DELETE statement )
: ٍٟ٠ ‫س ِب‬ٚ‫رٌه ٌؾذ‬ٚ ‫بٔبد‬١‫صبثزخ ٌٍج‬ٚ ) Read Consistency )‫اـمخ‬ٛ‫ ٘زٖ اٌؾبٌخ ٌمشاءح ِز‬ٟ‫رؾزبط ـ‬
‫بٔبد‬١‫ لبعذح اٌج‬ٟ‫لذ ـ‬ٌٛ‫ىزت ثٕفظ ا‬٠ ٞ‫اٌز‬ٚ ‫مشأ‬٠ ٞ‫بٔبد ِٓ لجً اٌّغزخذَ اٌز‬١‫رؼّٓ لشاءح صبثزخ ٌٍج‬
. ‫ش‬١١‫س اٌزؽ‬ٛ‫ ؽ‬ٟ‫ْ ـ‬ٛ‫ رى‬ٟ‫بٔبد اٌز‬١‫ء اٌج‬ٜ‫ اٌّغزخذَ اٌمبس‬ٜ‫ش‬٠ ٨
.‫مخ ِزّبعىخ‬٠‫ذ ثطش‬ٙ‫بٔبد أز‬١‫ لبعذح اٌج‬ٍٝ‫ رؾذس ع‬ٟ‫شاد اٌز‬١١‫ أْ اٌزؽ‬Writer َ‫ؼّٓ اٌّغزخذ‬٠
.Writer ‫ رؾذس ِٓ لجً ِغزخذَ آخش‬ٟ‫شاد اٌز‬١‫ رزعبسع ِع اٌزؽ‬ٚ‫ رزمبؽع أ‬٨ ‫اؽذ‬ٚ Writer ً‫ رؾذس ِٓ لج‬ٟ‫شاد اٌز‬١١‫اٌزؽ‬

- 39 -
 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 ‫بد ٌؽخ اٌــ‬١ٍّ‫خ ِٓ ع‬١ٍّ‫ ع‬ٞ‫أ‬

- 40 -
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.
.ٝ‫ ِؾشؾ وؾذ ألظ‬30 ٌٝ‫ ا‬1 ِٓ ‫ي‬ٛ‫ثط‬ٚ ً‫عّذح ثّؾبسؾ ؽظشا‬٤‫ا‬ٚ ‫ي‬ٚ‫غت أْ رجذأ أعّبء اٌغذا‬٠
 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
INSERT ‫ّخ لذ ؽزـذ ِٓ عجبسح‬١‫خ ارا وبٔذ ٘زٖ اٌم‬١‫ّخ اـزشاػ‬١‫ض ل‬١‫ رخظ‬DEFAULT expr
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 ً‫زاو‬ٚ‫ أ‬ٚ‫ ِص‬ٟ‫ي ف‬ٚ‫اٌددا‬


‫ِبد‬ٍٛ‫ ِع‬ٞٛ‫رؾ‬ٚ َ‫ظخ ِٓ لجً اٌّغزخذ‬ٛ‫اٌّؾف‬ٚ ‫ي إٌّشؤح‬ٚ‫عخ ِٓ اٌغذا‬ّٛ‫ ِغ‬ٟ٘ٚ : ) User Tables ( َ‫ي اٌّعخخد‬ٚ‫ خدا‬.1
.) User Information ( َ‫اٌّغزخذ‬
ٟ‫اٌز‬ٚ ً‫ساو‬ٚ‫ظخ ِٓ لجً ِخذَ أ‬ٛ‫اٌّؾف‬ٚ ‫ي إٌّشؤح‬ٚ‫عخ ِٓ اٌغذا‬ّٛ‫ ِغ‬ٟ٘ٚ : ) Data Dictionary ( ‫بث‬١‫ض اٌّؼط‬ِٛ‫ لب‬.2
.) Database Information ( ‫بٔبد‬١‫ِبد عٓ اٌج‬ٍٛ‫ ِع‬ٞٛ‫رؾز‬
- 41 -
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
ً
ٓ‫ ِييييييي‬٨‫ ثييييييذ‬CAT ‫عييييييُ اٌّييييييشادؾ‬٨‫ّىييييييٓ اعييييييزخذاَ ا‬٠ MICROSOFTDTPROPERTIES TABLE
. USER_CATALOG MICROSOFTSEQDTPROPERTIES SEQUENCE
SALGRADE TABLE

- 42 -
DATATYPES ً‫زاو‬ٚ‫ أ‬ٟ‫بٔبث اٌّخبزت ف‬١‫اع اٌب‬ٛٔ‫أ‬
Datatype ‫ع‬ٌٕٛ‫ا‬ ‫طف‬ٌٛ‫ ا‬Description
ً‫ل‬٤‫ ا‬ٍٝ‫ع‬1 ‫اؽذ‬ٚ ‫ٓ ؽشؾ‬١‫ي اٌغٍغٍخ ث‬ٛ‫ ؽ‬size ْٛ‫ى‬٠ ْ‫غت أ‬٠ ‫ي‬ٛ‫ش اٌط‬١‫ ِزؽ‬ٟ‫ي ؽشـ‬ٛ‫بٔبد ِزؾ‬١‫ع اٌج‬ٛٔ
VARCHAR2(size)
‫وضش‬٤‫ ا‬ٍٝ‫ ِؾشؾ ع‬4000ٚ
2000ٚ ً‫ل‬٤‫ ا‬ٍٝ‫ع‬1 ‫اؽذ‬ٚ ‫ٓ ؽشؾ‬١‫ي اٌغٍغٍخ ث‬ٛ‫ ؽ‬size ْٛ‫ى‬٠ ْ‫غت أ‬٠ ‫ي‬ٛ‫ صبثذ اٌط‬ٟ‫ي ؽشـ‬ٛ‫بٔبد ِزؾ‬١‫ع اٌج‬ٛٔ
CHAR(size)
‫وضش‬٤‫ ا‬ٍٝ‫ِؾشؾ ع‬
ُ‫ي ٌشل‬ٛ‫ أوجش ؽ‬Sٚ ‫خ‬٠‫ي ٌشلُ لجً اٌفبطٍخ اٌعشش‬ٛ‫أوجش ؽ‬P ‫ش‬١‫ ؽ‬S ‫بط‬١‫اٌّم‬ٚ P ‫ي ٌٗ اٌذلخ‬ٛ‫ش اٌط‬١‫ ِزؽ‬ٟ‫ي ؽشـ‬ٛ‫ِزؾ‬
NUMBER(p , s)
127 ٓ١‫ث‬ٚ -84ٓ١‫ُ ث‬١‫ؤخز ِغبي اٌم‬١‫ ـ‬S ‫ أِب‬38 ٌٝ‫ ا‬1 ٓ١‫ُ ث‬١‫ ِغبي اٌم‬p ‫ؤخز‬٠ ٓ١ّ١ٌ‫خ ا‬ٙ‫خ ِٓ ع‬٠‫ثعذ اٌفبطٍخ اٌعشش‬
DATE December 31.9999A.D. ٓ١‫ث‬ٚ January 1. 4712B.C. ٓ١‫لذ ث‬ٚٚ ‫خ‬٠‫بٔبد ربس‬١‫ع اٌج‬ٛٔ
LONG ‫ذ‬٠‫غب ثب‬١‫ ع‬2 ٝ‫ ؽز‬ٌٝ‫ظً ؽغّٗ ا‬٠ ‫ؤخز‬٠ ‫بٔبد‬١‫ي ِٓ اٌج‬ٛ‫ش اٌط‬١‫ ِزؽ‬ٟ‫ّٔؾ ؽشـ‬
CLOB ‫ذ‬٠‫غب ثب‬١‫ ع‬4 ٝ‫ ؽز‬ٌٝ‫ظً ؽغّٗ ا‬٠ ٟ‫ي ؽشـ‬ٛ‫ِزؾ‬
ROW ٝ‫ وؾذ ألظ‬2000 ٝ‫ّىٓ ععٍٗ ؽز‬٠size ‫ي ِؾذد‬ٛ‫ؤخز ؽ‬٠ ٟ‫ي صٕبئ‬ٛ‫ِزؾ‬
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

- 43 -
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.
‫خ‬١‫ـزشاػ‬٨‫ّخ ا‬١‫اٌم‬ٚ ُ‫ اٌؾغ‬ٚ ‫د‬ّٛ‫بٔبد اٌع‬١‫ع ث‬ٛٔ ‫ش‬١١‫ثبِىبٔه رؽ‬
ALTER TABLE ‫ّخ‬١ٍ‫ ِع رع‬MODIFY ‫د رغزخذَ عجبسح‬ّٛ‫ً ع‬٠‫ٌزعذ‬
SQL> ALTER TABLE dept30 :‫ِثبي‬
2 MODIFY ( ename VARCHAR2(15)) ; Table altered.

.‫خ‬٠‫بٔبد عذد‬١‫ ث‬ٍٝ‫خ ع‬٠ٚ‫عّذح اٌؾب‬٤‫ دلخ ا‬ٚ‫ش عشع أ‬١١‫ّىٕه رؽ‬٠ 
.)‫ؾ (ـبسغ‬ٛ‫ طف‬ٞ‫ي أ‬ٚ‫ اٌغذ‬ٞٛ‫ؾ‬٠ ٌُ ‫ ارا‬ٚ‫ أ‬NULL ‫ُ ـبسؼخ ـمؾ‬١‫ ل‬ٍٝ‫د ع‬ّٛ‫ اٌع‬ٜٛ‫د ارا اؽز‬ّٛ‫ّىٓ أمبص عشع اٌع‬٠ 
.NULL ‫ُ ـبسؼخ‬١‫د ل‬ّٛ‫ اٌع‬ٜٛ‫بٔبد ارا اؽز‬١‫ع اٌج‬ٛٔ ‫ش‬١١‫ّىٓ رؽ‬٠ 
ٌُ ‫ ارا‬ٚ‫ أ‬NULL ‫ُ ـبسؼخ‬١‫ ل‬ٍٝ‫د ع‬ّٛ‫ اٌع‬ٜٛ‫ ثبٌعىظ ارا اؽز‬ٚ‫ أ‬VARCHAR2 ‫ع‬ٌٕٛ‫ ا‬ٌٝ‫ ا‬CHAR ‫بٔبد‬١‫ع اٌج‬ٛٔ ً٠ٛ‫ّىٓ رؾ‬٠ 
. 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 ‫ّخ‬١ٍ‫َ رع‬ٛ‫رم‬
‫ّىٕيه ؽييزؾ‬٠ ‫ وّيب‬TRUNCATE ‫ّيخ‬١ٍ‫ـيخ ثبعيزخذاَ اٌزع‬ٚ‫ؾ اٌّؾز‬ٛ‫ اٌزشاعيع عيٓ اٌظيف‬ٚ‫ؾ أ‬ٛ‫ّىٕيه اعيزعبدح اٌظيف‬٠ ٨ ٗ‫ي وّيب أٔي‬ٚ‫اٌغيذ‬
: DELETE ‫ّخ‬١ٍ‫ب ً ثبعزخذاَ رع‬٠‫بس‬١‫ؾ اخز‬ٛ‫طف‬
TRUNCATE TABLE table ; :‫غت اٌؼبِت‬١‫اٌظ‬
- 44 -
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

- 45 -
ٛ١‫اٌم‬-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 , …..) ,

- 46 -
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) ) ;
ٟ‫عبع‬٤‫د اٌّفزبػ ا‬ّٛ‫ ِٓ أعً ع‬ٟ‫ذ ثشىً رٍمبئ‬١‫ؽ‬ٚ ‫شط‬ٙ‫ٕشؤ ـ‬٠

- 47 -
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) ) ;
‫ اٌّضيبي اٌغيبثك‬ٟ‫ وّيب ـي‬REFERENCES ‫ّيخ اٌّشاعيع‬١ٍ‫ي آخش ثبعزخذاَ رع‬ٚ‫ عذ‬ٟ‫ ـ‬ٚ‫ي أ‬ٚ‫ ٔفظ اٌغذ‬ٟ‫ ـ‬ٟ‫عبع‬٤‫ع ٌٍّفزبػ ا‬ٛ‫ّىٓ اٌشع‬٠
‫ عجيبسح عيٓ ِفزيبػ‬ٛ‫ ٘ي‬ٞ‫اٌيز‬ٚ deptno ‫د‬ٛ‫ اٌعّي‬ٌٝ‫شعع ا‬٠ emp ‫ي‬ٚ‫ اٌغذ‬ٟ‫ ـ‬ٟ‫ عجبسح عٓ ِفزبػ خبسع‬ٛ٘ ٞ‫اٌز‬ٚ deptno ً‫ش أْ اٌؾم‬١‫ؽ‬
‫ي‬ٚ‫عطش اٌّشرجطخ ثيٗ ِيٓ اٌغيذ‬٤‫ ؽزؾ ا‬ٞ‫س‬ٚ‫ة ـبٔٗ ِٓ اٌؼش‬٤‫ي ا‬ٚ‫ذ ؽزؾ أعطش ِٓ اٌغذ‬٠‫ عٕذِب رش‬ٌٟ‫ثبٌزب‬ٚ dept ‫ي‬ٚ‫ اٌغذ‬ٟ‫ ـ‬ٟ‫أعبع‬
ٝ‫ساويً عٍي‬ٚ‫ رغجيش أ‬ٟ‫اٌزي‬ٚ REFERENCES‫ّيخ‬١ٍ‫ رع‬ٝ‫ رؼيبؾ اٌي‬ٟ‫اٌز‬ٚ ON DELETE CASCADE ‫ّخ‬١ٍ‫رٌه ثبعزخذاَ اٌزع‬ٚ ‫ة‬٤‫ا‬
.) ٟ‫عبع‬٤‫ة ( ا‬٤‫ي ا‬ٚ‫ثٓ عٕذِب رؾزؾ أعطش ِٓ اٌغذ‬٨‫ي ا‬ٚ‫عطش اٌّشرجطخ ِٓ اٌغذ‬٤‫ؽزؾ ا‬
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) )
;

- 48 -
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 ‫ي‬ٚ‫ ِٓ عذ‬ٟ‫عبع‬٤‫ذ اٌّفزبػ ا‬١‫ ؽزؾ ل‬-
‫ اٌّضيبي‬ٟ‫ة وّيب ـي‬٤‫ي ا‬ٚ‫ؾ ِيٓ اٌغيذ‬ٚ‫يذ اٌّؾيز‬١‫اٌّشرجطيخ ِيع اٌم‬ٚ ‫ثٕيبء‬٤‫ي ا‬ٚ‫د ِيٓ اٌغيذا‬ٛ‫ي‬١‫َ ثبعيمبؽ اٌم‬ٛ‫ رم‬ٟ‫ اٌز‬ٚ 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.

- 49 -
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

- 50 -
(‫س)اٌّشب٘د‬١‫ إٌّبظ‬-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 .
CHECK OPTION ‫بس‬١‫خز‬٦‫ذ ا‬١‫عُ اٌّخظض ٌم‬٨‫ا‬
- 51 -
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)
JOB VARCHAR2(9)
 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
………….

- 52 -
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

- 53 -
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.

- 54 -
ً‫ اٌّعٍع‬-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 ‫ذ ثّمذاس‬٠‫اٌعجبسح ـبْ اٌغٍغٍخ رزضا‬
1 ُ‫ ؽبٌخ اّ٘بي ٘زٖ اٌعجبسح ـبْ اٌغٍغٍخ رجذأ ثبٌشل‬ٟ‫ـ‬ٚ )‫خ اٌغٍغٍخ‬٠‫ اٌغٍغٍخ (ثذا‬ٟ‫ذٖ ـ‬١ٌٛ‫زُ ر‬٠ ُ‫ي سل‬ٚ‫ؾذد أ‬٠ START WITH n
. ‫ٌذٖ اٌغٍغٍخ‬ٛ‫ ر‬ٚ‫ّىٓ أ‬٠ ُ‫ رؾذد أوجش سل‬MAXVALUE n
.ٌٟ‫ت اٌزٕبص‬١‫ ٌٍزشر‬-1 ٞٚ‫رغب‬ٚ ٞ‫ت اٌزظبعذ‬١‫ ٌٍزشر‬10^27 ٞٚ‫ رغب‬ٟ٘ٚ ‫ب‬ٙ١ٌ‫ي ا‬ٛ‫ط‬ٌٛ‫ّخ ِّىٓ ا‬١‫ رؾذد أوجش ل‬NOMAXVALUE
. ‫ اٌغٍغٍخ‬ٟ‫ رؾذد أطؽش سلُ ـ‬MINVALUE n
‫ت‬١‫(– ٌٍزشر‬10^27) ٞٚ‫رغب‬ٚ ٞ‫ت اٌزظبعذ‬١‫ ٌٍزشر‬1 ٞٚ‫ رغب‬ٟ٘ٚ ‫ب‬ٙ١ٌ‫ي ا‬ٛ‫ط‬ٌٛ‫ّخ ِّىٓ ا‬١‫ رؾذد أطؽش ل‬NOMAXVALUE
.ٌٟ‫اٌزٕبص‬
‫ اٌّخظض‬ٝٔ‫د‬٤‫ ا‬ٚ‫ أ‬ٍٝ‫ع‬٤‫اْ ثٍؽذ اٌؾذ ا‬ٚ ٝ‫ُ اٌّزغٍغٍخ ؽز‬١‫ذ اٌم‬١ٌٛ‫ّب ارا اٌغٍغٍخ عزغزّش ثز‬١‫ رؾذد ـ‬CYCLE | NOCYCLE
. ٟ‫ـزشاػ‬٨‫بس ا‬١‫ اٌخ‬ٛ٘ٚ NOCYCLE ‫لؿ عٕذ رٌه اٌؾذ‬ٛ‫ أْ رز‬ٚ‫ب أ‬ٌٙ
ً‫او‬ٚ‫د أ‬ٚ‫َ ِض‬ٛ‫م‬٠ٚ ‫ اٌزاوشح‬ٟ‫ب ـ‬ٙ‫ػع‬ٚٚ ً‫ب ِغجمب‬ٙ‫ظ‬١‫ساوً ثزخظ‬ٚ‫د أ‬ٚ‫َ ِض‬ٛ‫م‬٠ ٟ‫ُ اٌز‬١‫ رؾذد عذد اٌم‬CACHE n | NOCACHE
. ‫ّخ‬١‫ ل‬20 ‫ض ِغجك ٌـ‬١‫ب ثزخظ‬١‫اـزشاػ‬

CYCLE ‫بس‬١‫ً اٌخ‬١‫ رمُ ثزفع‬٨ٚ DEPT ‫ي‬ٚ‫ اٌغذ‬ٟ‫ ـ‬ٟ‫عبع‬٤‫ ٌزغزخذَ ِٓ أعً اٌّفزبػ ا‬DEPT_DEPTNO ُ‫ أشبء عٍغٍخ ثبع‬: ‫ِثبي‬
SQL> CREATE SEQUENCE dept_deptno
INCREMENT BY 1
START WITH 91
MAXVALUE 100
NOCACHE Sequence created.
NOCYCLE ;

Confirming Sequences ً‫اٌخثبج ِٓ اٌّعٍع‬


- 55 -
: ٍٟ٠ ‫ وّب‬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 CURRVAL ٚ NEXTVAL َ‫ٓ اظخخدا‬١ٔ‫ا‬ٛ‫ل‬

: ٍٟ٠ ‫ ػّٓ ِب‬CURRVAL ٚ NEXTVAL َ‫ّىٕه اظخخدا‬٠


. ٟ‫عزفغبس اٌغضئ‬٨‫غذ عضء ِٓ ا‬١ٌ ٟ‫اٌز‬ٚ SELECT ‫ ػّٓ لبئّخ عجبسح‬-
. INSERT ‫ّخ‬١ٍ‫ رع‬ٟ‫ ـ‬SELECT ‫ ػّٓ لبئّخ عجبسح‬-
. INSERT ‫ّخ‬١ٍ‫ اٌزبثعخ ٌزع‬VALUES ‫ ػّٓ عجبسح‬-
. UPDATE ‫ّخ‬١ٍ‫ اٌزبثعخ ٌزع‬SET ‫ ػّٓ عجبسح‬-
: ٍٟ٠ ‫ ػّٓ ِب‬CURRVAL ٚ NEXTVAL َ‫ّىٕه اظخخدا‬٠ ‫ال‬
. VIEW ‫س‬ٛ ٌّٕ‫ اٌخبطخ ثب‬SELECT ‫ ػّٓ لبئّخ عجبسح‬-
. DISTINCT ‫خ‬١‫ ِع اٌىٍّخ اٌّفزبؽ‬SELECT ‫ ػّٓ عجبسح‬-
.ORDER BY , HAVING , GROUP BY ‫ّبد‬١ٍ‫ ِع اٌزع‬SELECT ‫ ػّٓ عجبسح‬-
. UPDATE ٚ‫ أ‬DELETE ٚ‫ أ‬SELECT ‫ّبد‬١ٍ‫ داخً رع‬ٟ‫ ػّٓ اعزفغبس عضئ‬-
. ALTER TABLE ٚ‫ أ‬CREATE TABLE ٟ‫ّز‬١ٍ‫ ػّٓ رع‬DEFAULT exp ‫خ‬١‫ـزشاػ‬٨‫ّخ ا‬١‫ ػّٓ اٌم‬-

Using a Sequence ً‫اظخخداَ اٌّعٍع‬

: ٍٟ٠ ‫لغبَ وّب‬٤‫ي ا‬ٚ‫" ػّٓ عذ‬MARKETING" ٛ٘ ‫ذ‬٠‫َ ثبدخبي اعُ لغُ عذ‬ٛ‫عٕم‬
SQL> INSERT INTO dept ( deptno , dname , loc ) : ‫ِثبي‬
VALUES ( dept_deptno.NEXTVAL ,
' MARKETING ' , ' SAN DIEGO ' ) ; 1 row created.

‫ي اٌفبسغ‬ٚ‫رٌه ػّٓ اٌغذ‬ٚ CURRVAL َ‫رٌه ثبعزخذا‬ٚ NEXTVAL ‫اعطخ‬ٛ‫ ث‬deptno ً‫ّخ اٌّؼبـخ ػّٓ اٌؾم‬١‫بس اٌم‬ٙ‫اظ‬
: DUAL
CURRVAL
SQL> SELECT dept_deptno. CURRVAL --------------
FROM dual ; 91
START WITH 91 ‫ّخ‬١ٍ‫ ثبعزخذاَ اٌزع‬48 ‫ اٌّضبي طفؾخ‬ٟ‫ّخ ثذء ـ‬١‫ وم‬91 ‫ّخ‬١‫ػعٕب اٌم‬ٚ ‫ إٔٔب لذ‬ٛ٘ ‫ اٌغجت‬ٚ
: ٍٟ٠ ‫ وّب‬dept ‫ي‬ٚ‫ ثبعزعشاع اٌغذ‬ٚ‫أ‬
SQL> SELECT *
DEPTNO DNAME LOC
FROM dept
------------ ----------- -------
WHERE dname = ' MARKETING ' ;
91 MARKETING SAN DIEGO

. ُ١‫ رٍه اٌم‬ٌٝ‫ي ا‬ٛ‫ط‬ٌٛ‫ع ا‬٠‫غّؼ ثزغش‬٠ ‫ اٌزاوشح‬ٟ‫ُ اٌّغٍغً ـ‬١‫ػع ل‬ٚ ْ‫ ا‬o
: ٍٟ٠ ‫ ِّب‬ٞ‫ُ اٌّغٍغً ارا ؽذس أ‬١‫اد) ػّٓ ل‬ٛ‫ رؾذس اٌضؽشاد (اٌفغ‬o

- 56 -
. Rollback ‫خ رشاعع‬١ٍّ‫س ع‬ٚ‫ ؽذ‬
. َ‫بس إٌ ب‬١ٙٔ‫ ا‬
.‫ي آخش‬ٚ‫ ؽبٌخ اعزخذاَ اٌّغٍغً ػّٓ عذ‬ٟ‫ ـ‬
. UER_SEQUENCES ‫ي‬ٚ‫َ عٓ عذ‬٩‫عزع‬٨‫ ثب‬NOCACH ‫ اٌّزبػ ارا رُ أشبإٖ ِع‬ٌٟ‫ّىٓ عشع اٌّغٍغً اٌزب‬٠ o

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 ‫ّخ اٌجذء‬١‫ش ل‬١١‫ رؽ‬ٞ‫ذح أ‬٠‫ّخ عذ‬١‫ً وّب أٔٗ ِٓ أعً ثذء اٌّغٍغً ثم‬٠‫ رزؤصش ثبٌزعذ‬ٟ‫ اٌز‬ٟ٘ ‫خ‬١ٍ‫ اٌّغزمج‬ٚ‫أ‬
. ‫دح‬ٛ‫ع‬ٌّٛ‫ ا‬ٞ‫خ أ‬١ٌ‫ّخ اٌؾب‬١‫ْ أطؽش ِٓ اٌم‬ٛ‫ رى‬ّٝ ‫ّخ ع‬١‫ػع ل‬ٚ ً٠‫ّىٕه أصٕبء اٌزعذ‬٠ ٨ ٗٔ‫ؽزؾ اٌّغٍغً صُ اعبدح أشبإٖ وّب أ‬
: ‫ي‬ٚ‫دح ثبٌغذ‬ٛ‫ع‬ِٛ 91 ‫ّخ‬١‫ّخ أطؽش ِٓ آخش ل‬١‫ ثم‬ّٝ ‫ّخ اٌع‬١‫ً اٌم‬٠‫رٌه ثزعذ‬ٚ DEPT_DEPTNO ّٝ‫ً اٌّغٍغً اٌّغ‬٠‫ رعذ‬: ‫ِثبي‬
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 ً‫زرف ( ئشاٌت ) اٌّعٍع‬

: DROP ‫ّخ‬١ٍ‫ ثبعزخذاَ رع‬data dictionary ‫بٔبد‬١‫ط اٌج‬ِٛ‫ّىٓ اصاٌخ اٌّغٍغً ِٓ لب‬٠

DROP SEQUENCE sequence ‫غت اٌؼبِت‬١‫اٌظ‬


: DEPT_DEPTNO ّٝ‫ ؽزؾ اٌّغٍغً اٌّغ‬: ‫ِثبي‬
SQL> DROP SEQUENCE dept_deptno ;
Sequence dropped.

‫سض‬ٙ‫ اٌف‬-Index

What Is a Index ? ‫سض‬ٙ‫ اٌف‬ٛ٘ ‫ِب‬


- 57 -
‫‪‬‬ ‫‪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‬‬

‫‪Confirming Indexes‬‬ ‫اٌخأود ِٓ اٌف‪ٙ‬بزض (اٌخثبج)‬

‫اْ ِٕ ‪ٛ‬س لبِ‪ٛ‬ط اٌج‪١‬بٔبد اٌّغّ‪٠ USER_INDEXES ٝ‬ؾز‪ ٞٛ‬اعُ اٌف‪ٙ‬شط وّب ‪٠‬ؾ‪ ٞٛ‬طفخ و‪ٚ ٗٔٛ‬ؽ‪١‬ذاً أ‪UNIQUE or ٨ ٚ‬‬
‫‪ NONUNIQUE‬وّب أْ إٌّ ‪ٛ‬س ‪٠ USER_IND_COLUMNS‬ؾز‪ ٞٛ‬اعُ اٌف‪ٙ‬شط ‪ٚ‬اعُ اٌغذ‪ٚ‬ي ‪ٚ‬اعُ اٌعّ‪ٛ‬د وّب ‪: ٍٟ٠‬‬
‫‪- 58 -‬‬
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 ‫بص‬١‫ِز‬٨‫ه ا‬٠‫ْ ٌذ‬ٛ‫ى‬٠ ْ‫ أ‬ٚ‫شط أ‬ٙ‫ْ اٌّبٌه ٌٍف‬ٛ‫غت أْ رى‬٠ ‫شط‬ٙ‫َ ثبعمبؽ اٌف‬ٛ‫ رم‬ٝ‫ؽز‬

‫ اٌّسا ف‬- Synonym


What Is a Synonym ? ‫ اٌّسا ف‬ٛ٘ ‫ِب‬

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


- 59 -
 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.

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.

- 60 -
 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.
َ‫بٔبد خبد‬١‫ِٓ اٌخبص ثمبعذح ث‬٤‫ ِع ا‬.‫ب‬ِٙ‫اعزخذا‬ٚ ‫بٔبد‬١‫ اٌج‬ٌٝ‫ي ا‬ٛ‫خ اٌذخ‬٠‫عش‬ٚ ِٓ‫ أ‬ٍٝ‫ ثذ ِٓ اٌؾفبظ ع‬٨ ٓ١ِ‫ئخ ِزعذدح اٌّغزخذ‬١‫ ث‬ٟ‫ـ‬
: ٍٟ٠ ‫بَ ثّب‬١‫ّىٕه اٌم‬٠ ً‫ساو‬ٚ‫أ‬
. ‫بٔبد‬١‫ لبعذح اٌج‬ٌٝ‫ي ا‬ٛ‫ط‬ٌٛ‫ اٌزؾىُ ثب‬
.‫بٔبد‬١‫ٓ ِٓ أؼشاع لبعذح اٌج‬١‫ ؼشع ِع‬ٌٝ‫ي ا‬ٛ‫ط‬ٌٛ‫ضح ا‬١ِ ‫ اعطبء‬
. ً‫ساو‬ٚ‫بٔبد أ‬١‫ط ث‬ِٛ‫ك لب‬٠‫بصاد عٓ ؽش‬١‫ِز‬٨‫ ا‬ٟ‫ رٍم‬ٚ‫رغٍُ أ‬ٚ ‫ اٌزؤوذ ِٓ اعطبء‬
.‫بٔبد‬١‫ؼشاع لبعذح اٌج‬٤ ‫ ِشادؾ‬ٚ‫ؿ أ‬٠‫ أشبء سد‬
. data security ‫بٔبد‬١‫أِٓ اٌج‬ٚ system 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 ‫ز عجبساد‬١‫ رّضً اٌؾك ثزٕف‬: ‫بصاد‬١‫ِز‬٨‫ا‬
‫بٔبد‬١‫ لبعذح اٌج‬ٌٝ‫ي ا‬ٛ‫ط‬ٌٍٛ ٓ١ِ‫بد ٌٍّغزخذ‬١‫اٌغّبؽ‬
. ٓ٠‫ٓ آخش‬١ِ‫خ ٌّغزخذ‬١‫بد اػبـ‬١‫بص ِٕؼ عّبؽ‬١‫ْ اِز‬ِٛ‫ اٌّغزخذ‬ٝ‫عط‬٠ ْ‫ّىٓ أ‬٠ ‫وّب‬

- 61 -
System Privileges َ‫بشاث إٌظب‬١‫اِخ‬
More than 80 privileges are available for users and roles ‫ظبئؿ‬ٌٛ‫ا‬ٚ ٓ١ِ‫بص ِزبػ ٌٍّغزخذ‬١‫ اِز‬80 ِٓ ‫ أوضش‬.
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 ٓ١ِ‫ئٔشبء ِعخخد‬

‫ اٌّشؽٍخ‬ٟ‫بصاد ـ‬١‫ اِز‬ٞ‫ٍّه اٌّغزخذَ أ‬٠ ٨ CREATE USER ‫ٓ ثبعزخذاَ عجبسح‬١ِ‫ ثبٔشبء اٌّغزخذ‬DBA ‫بٔبد‬١‫ش لبعذح اٌج‬٠‫َ ِذ‬ٛ‫م‬٠
‫ لبعذح‬ٜٛ‫ ِغز‬ٍٝ‫بَ ثٗ ع‬١‫ّىٓ ٌٍّغزخذَ اٌم‬٠ ٞ‫بصاد ِب اٌز‬١‫ِز‬٨‫ رؾذد ٘زٖ ا‬, َ‫بصاد ٌٍّغزخذ‬١‫ِز‬٨‫ش ثّٕؼ عذد ِٓ ا‬٠‫َ عٕذ٘ب اٌّذ‬ٛ‫م‬٠ ‫خ‬١ٌ‫اٌؾب‬
: ‫بٔبد‬١‫اٌج‬
CREATE USER user ‫غت اٌؼبِت‬١‫اٌظ‬
IDENTIFIED BY passwords ;

: tiger ٌٗ ‫س‬ٚ‫ وٍّخ اٌّش‬ٚ scott َ‫ أشبء اٌّغزخذ‬: ‫ِثبي‬


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( ً‫زاو‬ٚ‫فت أ‬١‫ظ‬ٚ
‫بصاد‬١‫ِز‬٨‫ب اعطبء ا‬ٙ١‫بصاد إٌ بَ ثّب ـ‬١‫ اِز‬ٚ ‫بد‬١‫بد وً عّبؽ‬١‫ش لبعذح اٌّعط‬٠‫فخ ِذ‬١‫ظ‬ٚ ٞٛ‫رؾ‬.ٌٗ ‫ظبئؿ اٌّزبؽخ‬ٌٛ‫ا‬ٚ ‫بد‬١ٌٚ‫رزعٍك ثبٌّغئ‬
. ٓ٠‫خش‬٣ٌ
ٚ‫بد أ‬١‫ّىٕٗ ِجبششح اعطبء عّبؽ‬٠ ‫ ِغزضّش‬ٞ‫ أ‬ٌٟ‫ثبٌزب‬ٚ ‫ أوضش‬ٚ‫فخ ٌّغزخذَ أ‬١‫ظ‬ٌٛ‫فخ صُ ِٕؼ ٘زٖ ا‬١‫ظ‬ٌٛ ‫بصاد‬١‫عخ اِز‬ّٛ‫ّىٕه اعطبء ِغ‬٠ ‫وّب‬
.‫بصاد ٌّغزضّش آخش‬١‫اِز‬

- 62 -
: 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

- 63 -
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 ;

‫خ‬١‫ ثبعزخذاَ اٌىٍّخ اٌّفزبؽ‬Alice َ‫ اٌخبص ثبٌّغزخذ‬DEPT ‫ي‬ٚ‫عزفغبس عٓ اٌغذ‬٨‫ٓ ػّٓ إٌ بَ ثب‬١ِ‫ اٌغّبػ ٌىبـخ اٌّغزخذ‬: 4‫ِثبي‬
: ٓ١ِ‫ي ٌىبـخ اٌّغزخذ‬ٚ‫ي ٌٍغذ‬ٛ‫ط‬ٌٛ‫ي ِٓ ِٕؼ ؽك ا‬ٚ‫ رغعً ِبٌه اٌغذ‬ٟ‫اٌز‬ٚ PUBLIC
- 64 -
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 .
. ‫بص اٌّشاعع‬١‫اعطخ اِز‬ٛ‫خ ِٕشؤح ٌٍؽشع ث‬١‫د ِشعع‬ٛ١‫ ل‬ٞ‫ة ٌؾزؾ أ‬ٍٛ‫بس ِط‬١‫٘زا اٌخ‬

: SCOTT َ‫ٓ ٌٍّغزخذ‬١‫ؽ‬ٌّّٕٛ‫ا‬ٚ DEPT ‫ي‬ٚ‫ اٌغذ‬ٍٝ‫ ع‬Insert ٚ Select ٓ٠‫بص‬١‫ِز‬٨‫ عؾت ا‬: ‫ِثبي‬
SQL> REVOKE select , insert
ON dept Revoke succeeded
FROM scott ;

ٓ‫ّى‬٠ ‫عٕذ٘ب‬ٚ, ً‫ؼب‬٠‫بص أ‬١‫ِز‬٨‫ّٕؼ ٘زا ا‬٠ ْ‫ع عٕذ٘ب أ‬١‫غزط‬٠ WITH GRANT OPTION ‫بس‬١‫بص ِب ِع اٌخ‬١‫ارا ِٕؼ اٌّغزخذَ اِز‬ 
ٗ‫ ِٕؾ‬ٞ‫بص اٌز‬١‫ِز‬٨‫ عٕذ عؾت اٌّبٌه ا‬. ٞ‫خ إٌّؼ ثشىً دائش‬١ٍّ‫غّؼ ثع‬٠ ٨ ٓ‫بصاد ٌى‬١‫ِز‬٨‫خ ِٕؼ ا‬١ٍّ‫ٍخ ِٓ ع‬٠ٛ‫س عٍغٍخ ؽ‬ٚ‫ؽذ‬
.‫بص‬١‫ِز‬٨‫ ٘زا ا‬ٍٝ‫ؽخ ثٕبء ع‬ٌّّٕٛ‫بصاد ا‬١‫ِز‬٨‫ ثغؾت وبـخ ا‬REVOKE ‫بص‬١‫ِز‬٨‫ّخ عؾت ا‬١ٍ‫َ رع‬ٛ‫ٌّغزخذَ رم‬

WITH GRANT OPTION ‫بس إٌّؼ‬١‫ ِع خ‬B ٟٔ‫ ِغزخذَ صب‬ٌٝ‫ ا‬SELECT ‫عزفغبس‬٨‫بص ا‬١‫ ثّٕؼ اِز‬A ‫ ارا لبَ ِغزخذَ ِب‬: ‫ِثبي‬
ٌٝ‫٘ىزا ا‬ٚ C ‫ ِغزخذَ صبٌش‬ٌٝ‫ ا‬WITH GRANT OPTION ‫بس إٌّؼ‬١‫بص ِع خ‬١‫ِز‬٨‫ّٕؼ ٘زا ا‬٠ ْ‫ عٕذ٘ب أ‬B َ‫ع اٌّغزخذ‬١‫غزط‬٠
ِٓ ً‫ و‬ٌٝ‫ػ ا‬ٌّّٕٛ‫بص ا‬١‫ِز‬٨‫زُ عؾت ا‬٠ ‫ عٕذ٘ب‬B َ‫بص ِٓ اٌّغزخذ‬١‫ِز‬٨‫ عؾت ٘زا ا‬A َ‫ ؽبٌخ لشس اٌّغزخذ‬ٟ‫ـ‬ٚ C ‫ِغزخذَ ساثع‬
. Cٚ B ٓ١ِ‫اٌّغزخذ‬

- 65 -
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.
.‫ُ اٌخبطخ ثٍؽبد اٌجشِغخ‬١ّ‫ضاد اٌزظ‬١ِ ٌٝ‫ػبـخ ا‬٦‫ ثب‬SQL ‫ اِزذاد ٌٍؽخ اٌـ‬PL/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
. ‫د‬ٛ‫ؽذح اٌىبٍِخ ٌٍى‬ٌٛ‫ْ عضء ِٓ ا‬ٛ‫ّىٓ رجبعب ً أْ رى‬٠ ٟ‫اٌز‬ٚ , ٜ‫شِٓ وزٍخ أخش‬١‫طؽ‬
. Portable ًّ‫اٌس‬ٚ ً‫ب لباٍت ٌٍٕم‬ٙٔ‫ أ‬PL/SQL ‫صاث ٌغت‬١ِ ّٓ‫ ِٓ ػ‬
‫ آخش ثشٔبِظ اٌـ‬ٕٝ‫ ثشٔبِظ ) ثّع‬ٚ‫ً أ‬١‫ ( ٔ بَ رشؽ‬Oracle Server ٚ‫ أ‬PL/SQL‫ئخ رذعُ ٌؽخ اٌـ‬١‫ ث‬ٞ‫ أ‬ٌٝ‫ ثشٔبِظ ا‬ٞ‫ّىٕه ٔمً أ‬٠ ٗٔ‫ أ‬ٞ‫أ‬
‫ّىٕه‬٠ ‫مبره‬١‫رطج‬ٚ ً‫ساو‬ٚ‫ٓ خبدَ أ‬١‫د ث‬ٛ‫ؼبً ٔمً اٌى‬٠‫ّىٕه أ‬٠ ‫ وّب‬. ً‫ساو‬ٚ‫د أ‬ٚ‫ٗ ِض‬١‫عًّ ـ‬٠ ْ‫ّىٓ أ‬٠ ْ‫ ِىب‬ٞ‫ أ‬ٟ‫عًّ ـ‬٠ ْ‫ّىٓ أ‬٠ PL/SQL
. ‫ئبد ِخزٍفخ‬١‫ ث‬ٟ‫ب ـ‬ِٙ‫ّىٓ اعبدح اعزخذا‬٠ ‫ أشبء ِىزجبد‬ٚ Portable Program Packages ‫ٌخ‬ّٛ‫وزبثخ سصَ ثشاِظ ِؾ‬
.‫ر ػٓ اٌّؼسفبث‬٠‫ّىٓ اٌخظس‬٠ ٗٔ‫ أ‬PL/SQL ‫صاث‬١ِ ّٓ‫ ِٓ ػ‬
‫ب‬ِٙ‫ صُ اعزخذا‬exceptions ‫عزضٕبءاد‬٨‫ا‬ٚ constants ‫اثذ‬ٛ‫ اٌض‬ٚ cursors ‫اٌّئششاد‬ٚ variables )‫شاد‬١‫د (اٌّزؽ‬٨ٛ‫ظشػ عٓ اٌّزؾ‬٠
‫ لبعذح‬ٟ‫عّذح ـ‬٤‫ا‬ٚ ‫ي‬ٚ‫بد ِٓ اٌغذا‬١‫ اٌّعط‬ٕٝ‫ ث‬ٍٝ‫عزّبد ع‬٨‫ب ً ثب‬١‫ى‬١ِ‫ٕب‬٠‫شاد د‬١‫ؼ عٓ اٌّزؽ‬٠‫ اٌزظش‬. ‫خ‬١‫ عجبساد اعشائ‬ٚ SQL ‫ػّٓ عجبسح‬
.‫بد‬١‫اٌّعط‬
. ‫ت‬١‫ حسىُ ٌغت ئخسائ‬ٕٝ‫ّىٓ أْ حبسِح ا‬٠ 
. ‫ب ِؼبٌدت األخطبء‬ٕٙ‫ّى‬٠ 

- 66 -
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 Packaged
- 67 - Procedure or
trigger END ;‫خ‬٠‫ب‬ٌٕٙ‫ا‬
function
Program Constructs – ‫ببث اٌبسٔبِح‬١‫حسو‬
‫‪ : 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‬ا‪٨‬ـزشاػ‪٠ IN OUT ٚ 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.02 o‬ضً ثّٕؾ اٌّعط‪١‬بد ‪ِ NUMBER‬ع اٌذلخ ‪ ٚ‬اٌم‪١‬بط ‪.‬‬
‫‪ o‬اٌف‪ ٍُ١‬أ‪ ٚ‬اٌف‪١‬ذ‪ّ٠ ٛ٠‬ضً ثّٕؾ اٌّعط‪١‬بد ‪ٍِ ٛ٘ٚ BFILE‬ؿ ‪٠‬ؾ‪ِ ٞٛ‬عٍ‪ِٛ‬بد ِّضٍخ صٕبئ‪١‬ب ً ٌٍمشاءح ـمؾ ‪٠‬خضْ خبسط لبعذح اٌّعط‪١‬بد ‪.‬‬
‫‪ o‬اعُ اٌّذ‪ٕ٠‬خ ‪ّ٠‬ضً ثّٕؾ اٌّعط‪١‬بد ‪. VARCHAR2‬‬

‫‪- 68 -‬‬
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 constrains the variable so that it must contain a value. ‫ّخ‬١‫ْ ٌٗ ل‬ٛ‫ى‬٠ ْ‫ي أ‬ٛ‫ رغجش اٌّزؾ‬NOT NULL
expr is any PL/SQL expression that can be literal, another variable….
. operators ‫د‬٩‫ ِشؽ‬ٚ‫اثع أ‬ٛ‫ش ِزؼّٓ ر‬١‫ رعج‬ٞ‫ أ‬ٚ‫ي آخش أ‬ٛ‫ ِزؾ‬ٚ‫ أ‬ٟ‫ْ ؽشـ‬ٛ‫ى‬٠ ْ‫ّىٓ أ‬٠ PL/SQL ‫ش‬١‫ش ِٓ رعبث‬١‫ رعج‬ٞ‫ أ‬expr

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 ‫خ‬١‫غت أْ رغجك اٌىٍّخ اٌّفزبؽ‬٠ ‫ّخ صبثزخ‬١‫ؼ عٓ ل‬٠‫ اٌزظش‬ٟ‫ـ‬ 
. v_sal ّٝ‫ي اٌّغ‬ٛ‫ اٌّزؾ‬ٌٝ‫ ا‬50000 ‫ّخ‬١‫ صُ اعٕبد اٌم‬REAL ‫ع‬ٌٕٛ‫ ِٓ ا‬NUMBER ٞ‫ي عذد‬ٛ‫ؼ عٓ ِزؾ‬٠‫اٌزظش‬
v_sal CONSTANT REAL := 50000.00 ;

: Naming Rules ‫ت‬١ّ‫ٓ اٌخع‬١ٔ‫ا‬ٛ‫ل‬


. ‫ ِخزٍفخ‬Blocks ً‫ وز‬ٟ‫ّب ـ‬ِٕٙ ً‫ْ و‬ٛ‫ى‬٠ ْ‫عُ رارٗ ثششؽ أ‬٨‫ٓ ا‬١ٌٛ‫ْ ٌّزؾ‬ٛ‫ى‬٠ ْ‫ّىٓ أ‬٠ o
. ‫ اٌىزٍخ‬ٟ‫ي اٌّغزخذَ ـ‬ٚ‫ي ِطبثك ٌٕفظ اعُ أعّذح اٌغذ‬ٛ‫ْ اعُ اٌّزؾ‬ٛ‫ى‬٠ ْ‫غت ا‬٠ ٨ o
‫ي‬ٛ‫ً اٌّزؾ‬١‫ ) ٌزّض‬g_ ( ‫اٌجبدئخ‬ٚ variable ‫ي‬ٛ‫ً اٌّزؾ‬١‫ ) وجبدئخ ٌزّض‬v_ ( َ‫ لُ ثبعزخذا‬: ٍٟ٠ ‫خ وّب‬١ّ‫ اٌزغ‬ٟ‫ لبعذح ـ‬ٟٕ‫ لُ ثزج‬o
: ٌٟ‫ اٌّضبي اٌزب‬ٟ‫بٔبد وّب ـ‬١‫خ ثؤعّبء رزعبسع ِع أؼشاع لبعذح اٌج‬١ّ‫رغٕت اٌزغ‬ٚ 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‫ِثبي‬

- 69 -
‫‪ٕ٘ ‬بن ؽش‪٠‬مخ أخش‪٦ ٜ‬عٕبد اٌم‪ ُ١‬اٌ‪ ٝ‬اٌّزؾ‪٨ٛ‬د ‪ٚ‬رٌه ثبخز‪١‬بس ‪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‬‬ ‫‪٠‬ؾزبط ٘زا إٌّؾ اٌ‪ِ ٝ‬غبؽخ رخض‪ ٓ٠‬ألً ‪ٚ‬أعشع ِٓ ‪BINARY_INTEGER ٚ NUMBER‬‬
‫أِثٍت ‪:‬‬
‫‪v_job‬‬ ‫; )‪VARCHAR2(9‬‬ ‫ٌزخض‪ ٓ٠‬عًّ اٌّ‪ٛ‬ظؿ‬
‫‪v_count‬‬ ‫; ‪BINARY_INTEGER := 0‬‬ ‫ٌزخض‪ ٓ٠‬عذاد ِشاد رىشاس اٌؾٍمخ ‪٠ٚ‬ع‪١‬ذ اٌّزؾ‪ٛ‬ي اٌ‪0 ٝ‬‬
‫‪v_total_sal‬‬ ‫; ‪NUMBER( 9,2 ) := 0‬‬ ‫ٌزغّ‪١‬ع اعّبٌ‪ ٟ‬اٌشارت ٌ‪٥‬لغبَ ‪ ٚ‬اعبدح اٌّزؾ‪ٛ‬ي اٌ‪0 ٝ‬‬
‫‪v_orderdate‬‬ ‫; ‪DATE := SYSDATE + 7‬‬ ‫‪٠‬خضْ ربس‪٠‬خ شؾٓ اٌطٍج‪١‬خ ‪٠ٚ‬ع‪١‬ذ اٌّزؾ‪ٛ‬ي اٌ‪ ٝ‬ربس‪٠‬خ أعج‪ٛ‬ع ثعذ اٌ‪َٛ١‬‬
‫‪v_text_rate‬‬ ‫; ‪CONSTANT NUMBER ( 3,2 ) := 8.25‬‬ ‫صبثذ ‪٠‬خضْ ِعذي اٌؼش‪٠‬جخ ‪ٚ‬اٌز‪٠ ٨ ٞ‬زؽ‪١‬ش‬
‫‪v_valid‬‬ ‫ـ‪ّ١‬بارا وبٔذ اٌج‪١‬بٔبد طؾ‪١‬ؾخ أ‪ ٚ‬خطؤ ‪٠ٚ‬ع‪١‬ذ اٌّزؾ‪ٛ‬ي اٌ‪ ٝ‬طؼ ; ‪BOOLEAN NOT NULL := TRUE‬‬

‫‪- 70 -‬‬
‫‪ ( 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‬‬

‫‪- 71 -‬‬
: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 – ‫عٕبد‬٦‫ِعبًِ ا‬

- 72 -
‫‪ :‬اٌّؼسفبث ‪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‬‬

‫‪- 73 -‬‬
: PL/SL ‫ااغ‬ٛ‫ ح‬- PL/SQL Functions
: ‫خ‬١ٌ‫اثع ػّٓ اٌفئبد اٌزب‬ٛ‫ رٕذسط ٘زٖ اٌز‬. ‫بٔبد‬١‫ ِعبٌغخ اٌج‬ٟ‫ رغبعذن ـ‬ٟ‫اٌز‬ٚ ‫اثع اٌفعبٌخ‬ٛ‫ذ ِٓ اٌز‬٠‫ ثبٌعذ‬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.
.‫ِزذاد اٌغطش‬٨ ‫ سِض‬ٛ٘ 10 ,‫اـك‬ٌّٛ‫ ا‬ٚ‫ سِضٖ اٌّطبثك أ‬ٌٝ‫ ا‬ASCII‫ً سِض اٌـ‬٠ٛ‫َ ثزؾ‬ٛ‫م‬٠ SQL ‫ ربثع‬ٛ٘ CHR 
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 ) 
. ً٠ٛ‫رط اٌزؾ‬ّٛٔ ً‫ شى‬fmt ٚ ‫خ‬٠‫ اٌزبس‬ٚ‫ اٌشلُ أ‬ٚ‫خ أ‬١‫ رعجش عٓ اٌغٍغٍخ اٌؾشـ‬value ‫ش‬١‫ؽ‬
DECLARE : ‫ِثبي‬
v_date VARCHAR2(15) ;
BEGIN
SELECT TO_CHAR (hiredate
‗MON. DD, YYYY‘)
INTO v_date
FROM emp
WHERE empno = 7839 ;
END ;

: ٌٟ‫ّخ ٌٗ ثبٌشىً اٌزب‬١‫لّٕب ثبعٕبد ل‬ٚ date ‫بد‬١‫ أٔٗ ِٓ ّٔؾ اٌّعط‬ٍٝ‫ ع‬v_date ‫ي‬ٛ‫ؼ عٓ اٌّزؾ‬٠‫ ؽبٌخ رُ اٌزظش‬ٟ‫ ـ‬
v_date := ‗January 13, 1998‘ ; ً٠ٛ‫ؾٗ ٔغزخذَ ربثع ٌزؾ‬١‫ؿ ٌزظؾ‬١ٕ‫ٕزظ خطؤ رظ‬٠ ٗٔ‫ـب‬
v_date := TO_DATE (‗January 13, 1998‘ , ‗Month DD, YYYY‘ ) ; : ٍٟ٠ ‫وّب‬

- 74 -
‫‪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‬ـبْ اٌغٍغٍخ اٌّزشاثطخ ٌعجبسر‪ٙ‬ب ٌٓ رٕغض ‪.‬‬
‫‪VARIABLE g_salary NUMBER‬‬ ‫ِثبي ‪٠ :‬م‪ َٛ‬اٌّضبي اٌزبٌ‪ ٟ‬ثبعزخذاَ ِزؾ‪ٛ‬ي اٌشثؾ ‪: g_salary‬‬
‫‪- 75 -‬‬
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 ;

- 76 -
: ٌٟ‫ اٌّضبي اٌزب‬ٟ‫د وّب ـ‬ٛ‫ وزبثخ و‬ٟ‫مز‬٠‫ٓ ؽش‬١‫طخ ث‬١‫ٌٕمُ ثّمبسٔخ ثغ‬
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

SQL Statements in PL/SQL PL/SQL ّٓ‫ ػ‬SQL ‫ّبث‬١ٍ‫حؼ‬

- 77 -
SELECT Statement in PL/SQL PL/SQL ٟ‫ ف‬SELECT ‫بز‬١‫ػببزة االخخ‬
: SELECT ‫بٔبد ثبعزخذاَ عجبسح‬١‫بٔبد ِٓ لبعذح اٌج‬١‫ اعزشعبع اٌج‬
SELECT select_list ‫غت اٌؼبِت‬١‫اٌظ‬
INTO {variable_name[ , variable_name] …
| record_name }
FROM table
WHERE condition ;

‫ّخ‬١‫اثع ل‬ٛ‫ ر‬, Row functions ‫ؾ‬ٛ‫اثع اٌظف‬ٛ‫ ر‬, SQL ‫ش‬١‫ رعبث‬ٞٛ‫ّىٓ أْ رؾ‬٠ ً‫ل‬٤‫ ا‬ٍٝ‫اؽذ ع‬ٚ ‫د‬ّٛ‫لبئّخ ِٓ ع‬ Select_list
. Group functions ‫عخ‬ّٛ‫اٌّغ‬
. ‫ُ اٌّعبدح‬١‫َ ثؾفع (اؽزغبص) اٌم‬ٛ‫م‬١ٌ ‫ذ اٌجعذ‬١‫ؽ‬ٚ ‫ي‬ٛ‫ ِزؾ‬Variable_name
. ‫ُ اٌّعبدح‬١‫َ ثؾًّ (اؽزغبص) اٌم‬ٛ‫م‬١ٌ PL/SQL ً‫ ِغغ‬Record_name
. ‫بٔبد‬١‫ي ِٓ لبعذح اٌج‬ٚ‫ض اعُ عذ‬١‫رخظ‬ Table
. PL/SQL ‫اثذ‬ٛ‫ص‬ٚ ‫د‬٨ٛ‫د ِمبسٔخ رزؼّٓ ِزؾ‬٩ِ‫ ِعب‬ٚ ‫اثذ‬ٛ‫ ص‬ٚ ‫ش‬١‫رعبث‬ٚ ‫ِشوت ِٓ أعّبء أعّذح‬ condition

WHERE ‫عجبسح‬ٚ SELECT ‫ٓ عجبسح‬١‫ػع ث‬ٛ‫ر‬ٚ SELECT ‫ّخ‬١ٍ‫ عٕذ اعزخذاَ رع‬PL/SQL ٟ‫خ ـ‬٠‫اعجبس‬ٚ ‫ثخ‬ٍٛ‫ ِط‬INTO ‫عجبسح‬
ً‫اؽذ ٌى‬ٚ ‫ي‬ٛ‫غت اعطبء ِزؾ‬٠ . SELECT ‫ّخ‬١ٍ‫اٌّزّضٍخ ثزع‬ٚ SQL ‫ذ٘ب‬١‫ رع‬ٟ‫ُ اٌز‬١‫َ ثؾًّ اٌم‬ٛ‫ رم‬ٟ‫د اٌز‬٨ٛ‫ذ أعّبء اٌّزؾ‬٠‫رٌه ٌزؾذ‬ٚ
. ‫ب ِع اٌعٕبطش اٌّخزبسح‬ٙ‫ج‬١‫ٕغغُ رشر‬٠ ْ‫غت أ‬٠ٚ ٖ‫بس‬١‫زُ اخز‬٠ ‫عٕظش‬
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 TOO_MANY_ROWS ٚ‫أ‬ NO_DATA_FOUND
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 ; ‫ٕٔب اعزخذِٕب‬٤ ord ‫ي‬ٚ‫ ِٓ اٌغذ‬orderdate
v_shipdate ord.shipdate%TYPE ; %TYPE
BEGIN
SELECT orderdate, shipdate ‫د‬ّٛ‫بٔبد اٌع‬١‫ع ث‬ٛٔ v_shipdate ‫ي‬ٛ‫شس اٌّزؾ‬٠ ‫وّب‬
INTO v_orderdate, v_shipdate %TYPE ‫ٕٔب اعزخذِٕب‬٤ ord ‫ي‬ٚ‫ ِٓ اٌغذ‬shipdate
FROM ord
WHERE id = 620 ;
….
END ;

. ) ; ( ‫ؽخ‬ٛ‫ ثبعزخذاَ اٌفبطٍخ إٌّم‬SQL ‫ّخ‬١ٍ‫ رع‬ٞ‫بء أ‬ٙٔ‫ لُ ثب‬n


. PL/SQL ٟ‫ اْ وبٔذ ِؼّٕخ ـ‬SELECT ‫ّخ‬١ٍ‫ ِع رع‬INTO ‫غت اعزخذاَ عجبسح‬٠ n
. PL/SQL ‫ش‬١‫رعبث‬ٚ ‫ؾ‬ٚ‫اٌؾش‬ٚ ‫اثذ‬ٛ‫اٌض‬ٚ ‫د اٌّذخٍخ‬٨ٛ‫ض اٌّزؾ‬١‫ّىٓ أْ رغزخذَ ٌزخظ‬٠ٚ ‫خ‬٠‫بس‬١‫ اخز‬WHERE ‫ عجبسح‬n
‫اـمخ‬ٛ‫ب ِز‬ٙٔ‫وٓ ِزؤوذاً أ‬ٚ . SELECT ‫ عجبسح‬ٟ‫ وؤعّذح ـ‬INTO ‫ عجبسح‬ٟ‫د اٌّخشعخ ـ‬٨ٛ‫ض ٔفظ عذد اٌّزؾ‬١‫ لُ ثزخظ‬n
.‫اـمخ‬ٛ‫ب ِز‬ٙ‫بٔبر‬١‫ع ث‬ٛٔ ْ‫أ‬ٚ ‫ت‬١‫ثبٌزشر‬
. ‫ لغُ ِؾذد‬ٟ‫ٓ ـ‬١‫ظف‬ٌّٛ‫ع ا‬١ّ‫ارت ٌغ‬ٚ‫ع اٌش‬ّٛ‫ اعزشعبع ِغ‬

- 78 -
DECLARE ‫عخ‬ّٛ‫ّخ اٌّغ‬١‫اثع ل‬ٛ‫ّىٓ اعزخذاَ ر‬٠ ٨
v_sum_sal emp.sal%TYPE ; ‫ت عجبسح‬١‫ ػّٓ رشو‬Group Functions
v_deptno NUMBER NOT NULL := 10 ; ‫ّبد‬١ٍ‫ رغزخذَ ػّٓ رع‬ٟٙ‫ ـ‬PL/SQL
BEGIN . PL/SQL ‫ي وزٍخ‬٩‫ خ‬ٚ‫ داخً أ‬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 
ٚ‫ أ‬COMMIT ٟ‫ّز‬١ٍ‫ٓ رع‬١ّ‫ اْ رؼ‬. PL/SQL ّٓ‫ ػ‬DML ‫اِش‬ٚ‫بٔبد ثبعزخذاَ أ‬١‫ لبعذح اٌج‬ٍٝ‫د ع‬٩٠‫ّىٕه اعشاء رعذ‬٠
. ‫ي‬ٚ‫ألفبي اٌغذ‬ٚ ‫ؾشس ألفبي اٌظؿ‬٠ PL/SQL ‫د‬ٛ‫ ػّٓ و‬ROLLBACK

: Inserting Data ‫بٔبث‬١‫ ئ خبي اٌب‬


BEGIN : emp ‫ي‬ٚ‫ اٌغذ‬ٌٝ‫ذ ا‬٠‫ظؿ عذ‬ِٛ ‫بٔبد‬١‫اػبـخ ث‬
INSERT INTO emp(empno, ename, job, deptno ) ً‫ْ ٕ٘بن ِغٍغ‬ٛ‫ى‬٠ ْ‫غت أ‬٠ ‫ ٘زا اٌّضبي‬ٟ‫ـ‬
VALUES ( empno_sequence.NEXTVAL , ‗HARDING‘ , ُ‫ ثبع‬empno ‫د‬ّٛ‫ اٌع‬ٍٝ‫ ِٕشؤ ع‬sequence
‗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 ;

- 79 -
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 ‫ أوضش‬ٚ‫اؽذ أ‬ٚ ‫ طؿ‬ٍٝ‫ ع‬SQL ‫ّخ‬١ٍ‫ ارا أصشد آخش رع‬TRUE‫خ رمذس ثـ‬١‫طفخ ِٕطم‬
SQL%NOTFOUND ‫ طؿ‬ٞ‫ أ‬ٍٝ‫ ع‬SQL ‫ّخ‬١ٍ‫ ارا ٌُ رئصش آخش رع‬TRUE‫خ رمذس ثـ‬١‫طفخ ِٕطم‬
SQL%ISOPEN ٖ‫ز‬١‫ ِجبششح ثعذ رٕف‬ّٟٕ‫ رؽٍك اٌّئشش اٌؼ‬PL/SQL ْ٤ FALSE‫دائّب ً رمذس ثـ‬

. ‫ـخ‬ٚ‫ؾ اٌّؾز‬ٛ‫ صُ لُ ثطجبعخ عذد اٌظف‬, ITEM ‫ي‬ٚ‫خ ِؾذد ِٓ اٌغذ‬١‫ سلُ ؽٍج‬ٞٛ‫ رؾز‬ٟ‫ؾ اٌز‬ٛ‫ لُ ثؾزؾ اٌظف‬
- 80 -
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 ;

‫ رٕفز‬ٟ‫ّبد اٌز‬١ٍ‫ ثشىً ِزغٍغً ِع اٌزع‬ٟ‫ؤر‬٠ٚ NULL ٚ‫ أ‬FALSE ٚ‫ أ‬TRUE ٗ‫غز‬١‫ْ ٔز‬ٛ‫ش ِب رى‬١‫ رعج‬ٚ‫ أ‬ٟ‫ي ِٕطم‬ٛ‫ ِزؾ‬condition
. TRUE ‫ّخ‬١‫ـمؾ ارا ٔزظ عٕٗ اٌم‬
.‫ ؽبٌخ رؾمك اٌششؽ‬ٟ‫ رٕفز ـ‬ٟ‫ّبد اٌز‬١ٍ‫ ثعذ٘ب اٌزع‬ٟ‫رؤر‬ٚ ٟ‫ش إٌّطم‬١‫عجبسح رشاـك اٌزعج‬ THEN
. ‫ ِزذاخٍخ‬IF ‫ عجبساد‬ٞٛ‫ّىٓ أْ رؾ‬٠ٚ ‫ أوضش‬ٚ‫اؽذح أ‬ٚ PL/SQL ٚ‫ أ‬SQL ‫ّخ‬١ٍ‫ْ رع‬ٛ‫ّىٓ أْ رى‬٠ statements
.NULL ٚ‫ أ‬FALSE ‫ي‬ٚ٤‫ش ا‬١‫غخ اٌزعج‬١‫ٗ اْ وبٔذ ٔز‬١ٌ‫ي ا‬ٛ‫ط‬ٌٛ‫زُ ا‬٠ ٟ‫ش ِٕطم‬١‫ ثعذ٘ب رعج‬ٟ‫ؤر‬٠ ‫خ‬١‫وٍّخ ِفزبؽ‬ ELSIF
.‫ب‬ٙ١ٌ‫طً اٌزؾىُ ا‬ٚ ‫ ؽبٌخ‬ٟ‫ّبد رٕفز ـ‬١ٍ‫عخ رع‬ّٛ‫ ثعذ٘ب ِغ‬ٟ‫ؤر‬٠ ‫خ‬١‫وٍّخ ِفزبؽ‬ ELSE

- 81 -
: Simple IF Statements ‫طت‬١‫ اٌبع‬IF ‫ ػببزة‬
IF v_ename = ‘OSBORN‘ THEN manager ‫ش‬٠‫ ػّٓ سلُ اٌّذ‬22 ‫ّخ‬١‫ػع اٌم‬ٛ‫ لُ ث‬:1‫ِثبي‬
v_mgr := 22 ; . Osborne ‫ظؿ‬ٌّٛ‫ ارا وبْ اعُ ا‬ID
END IF ;

IF v_ename = ‘MILLER‘ THEN


v_job := ‗SALESMAN‘ ; ٚ Job title ّٓ‫ ػ‬Salesman ‫ّخ‬١‫ػع اٌم‬ٛ‫ لُ ث‬: 2‫ِثبي‬
v_deptno := 35; ‫ح‬ٚ٩‫ع‬ٚ Department number ُ‫ سلُ اٌمغ‬ٟ‫ ـ‬35 ‫ّخ‬١‫اٌم‬
v_new_comm := sal * 0.20 ; ‫ش‬١‫خ‬٤‫عُ ا‬٨‫ ارا وبْ ا‬20% ٌٝ‫ رظً ا‬commission
END IF ; . Miller ‫ظؿ‬ٌٍّٛ
....
. ٓ١‫ وٍّز‬END IF ْ‫أ‬ٚ ‫اؽذح‬ٚ ‫ وٍّخ‬ELSIF ْ‫د رزوش ثؤ‬ٛ‫عٕذ وزبثخ و‬ .i
ُ‫ز‬٠ NULL ٚ‫ أ‬FALSE ٗ‫غز‬١‫ أِب اْ وبٔذ ٔز‬ٌٝٚ٤‫ّبد ا‬١ٍ‫عخ اٌزع‬ّٛ‫ رٕفَّز ِغ‬TRUE ‫ي‬ٚ٤‫ ا‬ٟ‫غخ اٌششؽب إٌّطم‬١‫اْ وبٔذ ٔز‬ .ii
. ELSIF ‫ عذد ِٓ عجبساد‬ٞ‫غّؼ ثؤ‬٠ ‫خ وّب‬١ٌ‫ح اٌزب‬ٛ‫ اٌخط‬ٌٝ‫ٔزمبي ا‬٦‫ا‬ٚ ‫ّبد‬١ٍ‫عخ اٌزع‬ّٛ‫ ِغ‬ٟ‫رخط‬
. ‫اؽذح‬ٚ ELSE ‫وضش عجبسح‬٤‫ ا‬ٍٝ‫ْ ٕ٘بٌه ع‬ٛ‫ى‬٠ ْ‫ّىٓ أ‬٠ .iii
. ‫ػ‬ٛ‫ػ‬ٌٍٛ ‫ّبد إٌّفزح‬١ٍ‫لُ ثزشن ـشاؼبد لجً اٌزع‬ .iv

IF-THEN-ELSE Statement IF-THEN-ELSE ً‫ت ِٓ اٌشى‬١‫ اٌشسؽ‬IF ‫ػببزة‬


: IF ‫ر ػببزة‬١‫ ِخطؾ حدفك حٕف‬ٍٟ٠ ‫ّب‬١‫ف‬
َ‫اٌشىً اٌؼب‬
IF condition1 THEN
statement1 ; TRUE IF FALSE
ELSE condition
statement2 ;
END IF ;

THEN actions ELSE actions

: ‫ اٌّخداخٍت‬IF ‫ّبث‬١ٍ‫حؼ‬
ِٓ ً‫ّىٓ أْ رؼُ و‬٠. ‫ؽذاس‬٤‫خ لجً أْ رٕغض ا‬١‫ اػبـ‬IF ‫ّبد‬١ٍ‫ رع‬ٌٝٚ٤‫ ا‬IF ‫ّخ‬١ٍ‫ؽذاس إٌبرغخ عٓ رع‬٤‫عخ ا‬ّٛ‫ؼب ً أْ رؼُ ِغ‬٠‫ّىٓ أ‬٠
. END IF َ‫بإ٘ب ثبعزخذا‬ٙٔ‫زُ ا‬٠ ْ‫غت أ‬٠ ‫ اٌّزذاخٍخ‬IF ‫ّبد‬١ٍ‫ّخ ِٓ رع‬١ٍ‫وً رع‬. IF ‫ّبد‬١ٍ‫ رع‬ELSE ٚ THEN ٟ‫عجبسر‬

IF v_shipdate – v_orderdate < 5 THEN


v_ship_flag := ‗Acceptable‘ ; ْٛ‫ى‬٠ ‫ عٕذِب‬Orders ‫بد‬١‫ ٌٍطٍج‬flag ‫ ػع اشبسح‬:1 ‫ِثبي‬
ELSE order date ‫خ اٌطٍت‬٠‫ٓ ربس‬١‫بَ ث‬٠‫ٕ٘بن ألً ِٓ خّغخ أ‬
v_ship_flag := ‗Unacceptable‘ ; . ship date ٓ‫خ اٌشؾ‬٠‫ٓ ربس‬١‫ث‬ٚ
END IF ;
....

IF v_name = ‗KING‘ THEN ‫ ارا‬Manager ٌٝ‫ظؿ ا‬ٌّٛ‫ع عًّ ا‬ٛٔ ‫ش‬١١‫ لُ ثزؽ‬: 2‫ِثبي‬
v_job := ‗MANAGER‘ ; ‫ش‬١‫ظؿ ؼ‬ٌّٛ‫ارا وبْ اعُ ا‬ٚ . King ‫ظؿ‬ٌّٛ‫وبْ اعُ ا‬
ELSE . Clerk ًّ‫ع اٌع‬ٛٔ ‫ ػع‬King
v_job := ‗CLERK‘ ;
END IF ;

- 82 -
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
condition
TRUE FALSE

THEN actions
ELSIF
condition
TRUE 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 ;
....

- 83 -
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 ‫ ؽٍمخ‬

- 84 -
: Basic Loop – ‫ت‬١‫اٌسٍمت األظبظ‬
LOOP -- delimiter ‫غت اٌؼبِت‬١‫اٌظ‬
Statement1; -- statements
…..
EXIT [ WHEN CONDITION ] ; -- EXIT statement
END LOOP ; -- delimiter

‫ اٌخخبَ اٌسخبء اٌدػبء‬ٟ‫ف‬ٚ


ً٠‫ٌىُ خص‬ٚ ‫اٌعدا‬ٚ ‫ك‬١‫ف‬ٛ‫ابٌخ‬
‫اٌشىس‬
‫ هللا‬ٟ‫وُ ف‬ٛ‫أخ‬
‫ خببزة‬ٚ ٌٛ‫ ػبد ا‬ٞ ‫فب‬

- 85 -

You might also like