Professional Documents
Culture Documents
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' ;
Example :
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
ْ اٌعجبسح خبؽئخٛؾخ عٕذِب رى١ّخ طؾ١ذ ل١ع٠
-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 ّٛ زعب أوثس ِٓ ػٞي ِخؼد ة أٛفك زمٚ ب١اٌخسح
-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
-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' ;
-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 ؽبٌخٟ أِب ـٌٟخ اٌؾب٠ش لجً اٌزبسٙي شٚألشة أ
ٌٟخ اٌعبَ اٌؾب٠خ ثذا٠ ربسٌٝخ ا٠اٌزبس
-8-
CONVERSION FUNCTIONS ً٠ٛااغ اٌخسٛح
Implicit Datatype Conversion بٔبث١اع اٌبٛٔ ألًّٟٕ اٌؼ٠ٛاٌخس
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 خ٠ ٌٍزبسٟـزشاػ٨ْ ٌغٍغٍخ اٌّؾبسؾ اٌشىً اٛى٠ خ عٕذِب٠ اٌزبسٌٝا
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 خ ثبعزخذاَ اٌزبثع١ّئخ سل١٘ ٌٝخ ا١ً اٌغٍغٍخ اٌؾشـ٠ٛرؾ
- 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 ;
- 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 .
. يٚ أوضش ِٓ عذٟد ـٛعِٛ ٚش أٙ ٠ ً ػّٕٗ ارا وبْ اٌؾمٜٛي اٌّؾزٚغجك اعُ اٌؾمً اعُ اٌغذ٠ ْغت أ٠
Foreign Key
- 13 -
Retrieving records with Equijoins ٞٚاظخسخبع اٌعدالث ِغ اٌساؾ اٌّخعب
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
- 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 ش ػّٓ لبئّخ عجبسح١ رعجٚد أّٛ عٞأ
: ٌٟظجؼ ِضً اٌّضبي اٌزب١ٌ ٗؾ١ه رظؾ١ٍْ عٛى٠ٚ
- 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
- 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 ) ;
- 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 ُت سل١دح ػّٓ اٌزشرٛعٌّٛخ ا١ّاٌىٚ ٔفظ سلُ إٌّزظٍٝ عٞٛت آخش رؾز١س عٕبطش ثزشر٩عذ صٛ أٔٗ رٟٕع٠ ٘زا
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
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. )ت١ٍاِش اٌعفٌٛٙي (اٛ٠اٌرٚ )ضٚٓ(اٌسؤ٠ٚ ٌٍؼٕبٟى١ِٕب٠س اٌد١١اٌخغ
. 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
- 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
ز١ي رٕفّٚخ اٌّذخٍخ ػّٕٗ ِٓ أ١ً ثؾفع اٌم٠ي اٌجذَٛ اٌّزؾٛم٠ ٘زٖ اٌؾبٌخٟـ
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
- 29 -
Customizing the SQL*Plus Environment اي اٍطٛ١ئت االض و١ض ا١حخظ
- 30 -
SQL>TTI "Students Table" : ٍٟ٠ ْ عبثك وّبٚب ِجبششح ثذٙر٩ِاِش ِع ِعبٚ٤رىزت ٘زٖ ا
SQL>BTI "END Report"
: أِثٍت
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
Confidential
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 ;
- 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.
. يٚب ػّٓ اٌغذٌَٙ ثبدخبٛم٠ ُخش ص٢ اٍٛاؽذ رٚ د٨ُٛ اٌّزؾ١طٍت ِٕب ادخبي ل٠ ً ٘زا اٌٍّؿ١عٕذ رشؽ
Please enter the department number : 90
Please enter the department name : PAYROL
Please enter the location : HOUSTON
1 row created.
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 ٟٔي ثبٚ خدٍٝف إبء ػٛث طف٠حسد
Updating Rows Integrity Constraint Error ًِد اٌخىب١خطأ لٚ فٛث اٌظف٠حسد
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 ٟٔي ثبٚ خدٍٝف إبء ػٛزرف طف
Deleting Rows Integrity Constraint Error ًِد اٌخىب١خطأ لٚ فٛزرف طف
. ز١ لبثٍخ ٌٍزٕف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 خ١بد إٌّطم١ٍّع اٌع١َّ ثزغٛ رم
Transaction
INSERT UPDATE INSERT DELETE
Savepoint A Savepoint B
ROLLBACK to Savepoint A
A ٔمطخ اٌؾفع اٌّغّبحٌٝاٌزشاعع ا
ROLLBACK
اٌؾزؾٚ ش٠اٌزؾذٚ دخبي٦ّبد ا١ٍاٌزشاعع عٓ وً اٌزع
ON or OFF ٍٗ١ عذَ رفعٍٚٗ أ١رفعٚ SET ّىٓ اعزخذاِٗ ِع٠ٚ DML ّبد١ٍ ِٓ رعٛ٘ AUTOCOMMIT ِش٤ اْ ا: ِالزظت
. OFF ػعٌٛ اٍٝب ع١ْ اـزشاػٛى٠ٚ ٍٗ١ ؽبٌخ رفعٟ ـROLLBACK خ اٌزشاعع١ٍّز ع١ّىٕه عٕذ٘ب رٕف٠ ٨ ٌٓىٚ
SQL> SET AUTOCOMMIT ON
DML ِغزخذَ آخش ِشب٘ذح ٔزبئظ عجبسحٞع أ١غزط٠ ٨ COMMIT or ROLLBACK اٌزشاععٚذ أ١ اٌزضجٟز١ٍّك أؽذ ع١لجً رطج
.ش٘ب١١ع ِغزخذَ آخش رؽ١غزط٠ ٨ ش١بٔبد ِمفٍخ ثؾ١ْ اٌجٛرىٚ ٌٟاٌّغزخذِخ ِٓ لجً اٌّغزخذَ اٌؾب
ْشاد وّب أ١١ اٌزؽٚٓ ِشب٘ذح إٌزبئظ أ٠خش٢ٓ ا١ِع اٌّغزخذ١غزط٠ COMMIT or ROLLBACK اٌزشاععٚذ أ١خ اٌزضج١ٍّأِب ثعذ ع
. ٝ رّؾSavepoints ع ٔمبؽ اٌؾفع١ّع
- 38 -
Committing Data بٔبث١ اٌبٍٝساث ػ١١ج اٌخغ١حثب
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 .
- 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
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) ) ;
- 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 ٝب ؽزّٙظً ؽغ٠ ٟخ رخضْ ػّٓ ٍِؿ خبسع١بٔبد صٕبئ١ث
- 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
.خ٠بٔبد عذد١ ثٍٝخ ع٠ٚعّذح اٌؾب٤ دلخ اٚش عشع أ١١ّىٕه رؽ٠
.)ؾ (ـبسغٛ طفٞي أٚ اٌغذٞٛؾ٠ ٌُ اراٚ أ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 ; :غت اٌؼبِت١اٌظ
- 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
د اإلخخببز١ل ً ؾب١ٔٗ طؾٛة وٛعٛطؿ اٌششؽ ثٛ٠
. ٗي ثعذ أشبئٚ اٌغذٌٝد اٛ١ّىٕٕب اػبـخ اٌم٠ ٗٔ أ٨ي اٚلذ أشبء اٌغذٚ ٔفظٟد ـٛ١َ ثبٔشبء اٌمٛ عبدح ٔم
: يٚ اٌغذِٜٛغزٚ دّٛ اٌعٜٛٓ ِغز١٠ٛ ِغزٍٝد عٛ١ رٕشؤ اٌم
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 ة٤ي اٚـخ ِٓ اٌغذٚؾ اٌّؾزٛاٌّشرجطخ ِع اٌظفٚ ٓث٨ي اٚؾ ِٓ اٌغذَٛ ثؾزؾ اٌظفٛرم
- 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) ;
- Remove the manager constraint from the EMP table EMP يٚد اٌّذساء ِٓ عذّٛذ ع١ ؽزؾ ل-
َ ثبعزخذاDeptno دّٛ اٌعٛ٘ٚ EMP يٚ اٌّشرجؾ ثٗ ِٓ عذٟذ اٌّفزبػ اٌخبسع١اعمبؽ لٚ Dept يٚ ِٓ عذٟعبع٤ذ اٌّفزبػ ا١ ؽزؾ ل-
اٌّضيبيٟة وّيب ـي٤ي اٚؾ ِيٓ اٌغيذٚيذ اٌّؾيز١اٌّشرجطيخ ِيع اٌمٚ ثٕيبء٤ي اٚد ِيٓ اٌغيذاٛي١َ ثبعيمبؽ اٌمٛ رمٟ اٌزٚ CASCADE ّخ١ٍاٌزع
: ٌٟاٌزب
- 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 .
.ٓ٠ذ١ٓ اٌم٠ ِٓ ٘زًٞ أ١ب ً عٕذ رفع١ذ رٍمبئ٠اٌّفزبػ اٌفشٚ ٟغ١شط اٌّفزبػ اٌشئٙزُ أشبء ـ٠
SYS_C00674 ًب أعّبء ِضٙساوً ثبعطبئَٚ أٛم٠ يٚ اعُ ِٓ لجً ِبٌه اٌغذٝ ٌُ رعطٟد اٌزٛ١ اٌم: ؽ خ٩ِ
اٌؾشؾٚ عجش عٓ اٌّشعع٠ R اٌؾشؾٚ PRIMARY KEY ذ١عجش عٓ اٌم٠ P اٌؾشؾٚ CHECK ذ١عجش عٓ اٌم٠ C ؽشؾ٥ٌ ثبٌٕغجخ
. UNIQUE key ذ١عجش عٓ اٌم٠ U
Viewing the Columns Associated with Constraints ٛ١ػسع األػّدة ِسافمت ٌٍم
- 50 -
(س)اٌّشب٘د١ إٌّبظ-Views
ٌٟ اٌّضبي اٌزبٟ وّب ـ:) ٍٟ ( اٌداخٟ ػّٓ االظخفعبز اٌدصئ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 عجبسحٟعّبء اٌّغزعشح ـ٤ رشرت ا
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
.سٛ ٌّٕؿ ا٠ رعشٌٝ اWITH READ ONLY بس١ عٕذ اػبـخ اٌخDML خ١ٍّ عٞس أّٚىٕه ِٕع ؽذ٠
:غخ سعبٌخ خطؤ١ْ إٌزٛس عزىٛ ًٌّٕ ٌؾزؾ عطش ِٓ ا٩ٌخ ِضٚ ِؾبٞ إٔٔب لّٕب ثؤٌٛ
ERROR at line 1 :
ORA-01752: Cannot delete from view without exactly one key-preserved table
Remove a view without losing data because a view is based on underling tables on the database.
.بٔبد١ لبعذح اٌجٟي ربثعخ ـٚ أعبط عذاٍٝ عٟٕس ِجٛ ٌّْٕ ا٤ رٌهٚ بٔبد١ْ ـمذاْ اٌجٚس ثذٛ ٌّٕ ؽزؾ ا
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.
. ذح٠ أعذاداً ـشٌٌٟذ ثشىً آٛ٠
. ؼشع لبثً ٌٍّشبسوخٛ٘
. ٟعبع٤ُ اٌّفزبػ ا١ذ ل١ٌٛ ٌزٟرعّٛٔ ًغزخذَ ثشى٠
.ك١غزجذي سِض اٌزطج٠
. اٌزاوشحٟخجؤ٘ب ـ٠ ُ اٌغٍغٍخ عٕذِب١ي لٛخ دخ١ٌع ـعب٠َ ثزغشٛرم
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 ;
Rules for using NEXTVAL and CURRVAL CURRVAL ٚ NEXTVAL َٓ اظخخدا١ٔاٛل
: ٍٟ٠ لغبَ وّب٤ي اٚ" ػّٓ عذ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
Change the increment value , maximum value , minimum value , cycle option , or cache option .
. Cache بس اٌزاوشح١ خٚ ّٜخ اٌظؽش١اٌمٚ ّٝ ّخ اٌع١ اٌمٚ ًُ اٌّغٍغ١ٓ ل١بدح ث٠ّخ ـبسق اٌض١ً ل٠ رعذ
: ّٝ ّخ اٌع١ً اٌم٠رٌه ثزعذٚ 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
: DROP ّخ١ٍ ثبعزخذاَ رعdata dictionary بٔبد١ط اٌجِّٛىٓ اصاٌخ اٌّغٍغً ِٓ لب٠
سضٙ اٌف-Index
ٔم َٛثبخز١بس اٌفٙشط عٍ ٝأٔٗ اِب عّٛد ٠ؾ ٞٛل ُ١ؼ١ش ِىشسح ٠ٚغّ ٝثبٌفش٠ذ ِٓٚاٌّّىٓ أْ ٠ ٨ى ْٛاٌّفزبػ ا٤عبعٌٍ ٟغذٚي أ ٚعّٛد
٠ؾ ٞٛلِ ُ١ىشسح ٠ٚغّ ٝاٌفٙشط اٌؽ١ش ـش٠ذ ٛ٘ ٚعّٛد ٠غزخذَ ثشىً وج١ش ػّٓ رعٍّ١خ WHEREأ٠ ٞزُ اٌؾظٛي عٍ ٝاٌظفٛؾ
عٓ ؽش٠مٗ ٚاٌفٙشط ـ ٟثٕ١خ ِضً اٌجٕ١خ اٌشغش٠خ .
ِثبي :لُ ثزؾغ ٓ١عشعخ اعزع َ٩اٌٛطٛي اٌ ٝعّٛد ِٓ ENAMEاٌغذٚي : EMP
SQL> CREATE INDEX emp_ename_idx
ON ; )emp(ename Index created .
ٔغزخذَ اٌفٙشط عٍ ٝاٌعّٛد اٌز٠ ٞغزخذَ ثشىً وج١ش ػّٓ عجبسح WHEREأ ٚـ ٟششؽ اٌشثؾ . Join condition .1
عٍ ٝاٌعّٛد اٌز٠ ٞؾِ ٞٛغبي ٚاعع ِٓ اٌم.ُ١ .2
عٍ ٝاٌعّٛد اٌز٠ ٞؾ ٞٛعذد وج١ش ِٓ اٌم ُ١اٌفبسؼخ. .3
عٍ ٝعّٛد ٓ٠أ ٚأوضش ٠غزخذِبْ ثشىً وج١ش ػّٓ عجبسح WHEREأ ٚـ ٟششؽ اٌشثؾ . Join condition .4
عٍ ٝاٌغذٚي اٌىج١ش ( اٌؼخُ ) ٚاٌّطجك عٍ ٗ١اعزفغبساد ٠زٛلع أْ رع١ذ ألً ِٓ 2اٌ ِٓ % 4 ٝاعّبٌ ٟاٌظفٛؾ . .5
اْ ِٕ ٛس لبِٛط اٌج١بٔبد اٌّغّ٠ 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 ' ;
: DROP ّخ١ٍ ثبعزخذاَ اٌزعData dictionary بٔبد١ط اٌجِٛشط ِٓ لبٙزُ ؽزؾ اٌف٠
DROP INDEX index غت اٌؼبِت١اٌظ
: DEPT_DEPTNO ّٝ ؽزؾ اٌّغٍغً اٌّغ: ِثبي
SQL> DROP INDEX emp_ename_idx ;
Index dropped.
. DROP ANY INDEX بص١ِز٨ه ا٠ْ ٌذٛى٠ ْ أٚشط أْٙ اٌّبٌه ٌٍفٛغت أْ رى٠ شطَٙ ثبعمبؽ اٌفٛ رمٝؽز
: DROP ّخ١ٍ ثبعزخذاَ اٌزعData dictionary بٔبد١ط اٌجِٛزُ ؽزؾ اٌّشادؾ ِٓ لب٠
DROP SYNONYM synonym غت اٌؼبِت١اٌظ
: d_sum ّٝ ؽزؾ اٌّشادؾ اٌّغ: ِثبي
SQL> DROP SYNONYM d_sum ;
Synonym dropped.
: Alice َ اٌزبثع ٌٍّغزخذDEPT يٚ ٌٍغذDEPT ُ ثبٔشبء ِشادؾ عبَ ثبعٌٟ اٌّضبي اٌزبَٟ ـٛ ٔم: ِثبي
SQL> CREATE PUBLIC SYNONYM d_sum
FOR alice.dept ; Synonym created.
- 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 َ أِٓ إٌ ب: ٓ١ظٕؿ ػّٓ ـئز٠ ّْىٓ أ٠ بٔبد١أِٓ لبعذح اٌج
ععخ اٌمشص, سٚ وٍّخ اٌّشٚ َ إٌ بَ ِضً اعُ اٌّغزخذٜٛ ِغزٍٝبٔبد ع١اعزخذاَ لبعذح اٌجٚ يٛطٌٛخ ا١ٍّشًّ ع٠ : َأِٓ إٌظب
. َب ِٓ لجً اٌّغزخذٙػ ثّٛبد إٌ بَ اٌّغ١ٍّ ع, ٓ١ِاٌّخظظخ ٌٍّغزخذ
. ٘زا اٌؽشعٍٝب عٙا ثٚئصش٠ ْٓ أ١ِّىٓ ٌّغزخذ٠ ٟؽذاس اٌز٤اٚ بٔبد١اعزخذاَ أؼشاع اٌجٚ يٛطٌٛخ ا١ٍّشًّ ع٠ : بٔبث١أِٓ اٌب
- 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 ش٠ خطخ ثبعزخذاَ اٌزظذٞ أٟي ـٚ عذٞ٤ خ١بؽ١أشبء ٔغخخ اؽز
اٌّشؽٍخٟبصاد ـ١ اِزٍّٞه اٌّغزخذَ أ٠ ٨ CREATE USER ٓ ثبعزخذاَ عجبسح١ِ ثبٔشبء اٌّغزخذDBA بٔبد١ش لبعذح اٌج٠َ ِذٛم٠
لبعذحٜٛ ِغزٍٝبَ ثٗ ع١ّىٓ ٌٍّغزخذَ اٌم٠ ٞبصاد ِب اٌز١ِز٨ رؾذد ٘زٖ ا, َبصاد ٌٍّغزخذ١ِز٨ش ثّٕؼ عذد ِٓ ا٠َ عٕذ٘ب اٌّذٛم٠ خ١ٌاٌؾب
: بٔبد١اٌج
CREATE USER user غت اٌؼبِت١اٌظ
IDENTIFIED BY passwords ;
: ٍٟ٠ زُ أشبإٖ وّب٠ بصاد ٔ بَ ِؾذدح عٕذِب١ ِٕؼ اٌّغزخذَ اِزDBA بٔبد١ش لبعذح اٌج٠ّىٓ ٌّذ٠
CRANT privilege [ , privilege ….] غت اٌؼبِت١اٌظ
TO user [ , user …] ;
ٟاٌزٚ َب اٌّغزخذٙؾزبع٠ ِٟبد اٌزٍٛ اٌّعٌٝط اٌٌٛٛاع اٛٔع ِٓ أٛٔ ٚبصاد أ١ِز٨عخ ِٓ اّٛ ِغٛ٘ : )Oracle Role( ًزاوٚفت أ١ظٚ
بصاد١ِز٨ب اعطبء اٙ١بصاد إٌ بَ ثّب ـ١ اِزٚ بد١بد وً عّبؽ١ش لبعذح اٌّعط٠فخ ِذ١ظٚ ٞٛرؾ.ٌٗ ظبئؿ اٌّزبؽخٌٛاٚ بد١ٌٚرزعٍك ثبٌّغئ
. ٓ٠خش٣ٌ
ٚبد أ١ّىٕٗ ِجبششح اعطبء عّبؽ٠ ِغزضّشٞ أٌٟثبٌزبٚ أوضشٚفخ ٌّغزخذَ أ١ظٌٛفخ صُ ِٕؼ ٘زٖ ا١ظٌٛ بصاد١عخ اِزّّٛىٕه اعطبء ِغ٠ وّب
.بصاد ٌّغزضّش آخش١اِز
- 62 -
: manager فخ١ظٌٛ أشبء ا: ِثبي
SQL> CREATE ROLE manager ;
Role created.
- 63 -
Object Privileges - بشاث األغساع١اِخ
Object privilege Table View Sequence Procedure
ALTER
DELETE
EXECUTE
INDEX
INSERT
REFERENCES
SELECT
UPDATE
: rich ٚ sue ٓ١ِ ٌٍّغزخذEMP يٚ اٌغذٍٝعزفغبس ع٨بصاد ا١ ِٕؼ اِز: 1ِثبي
SQL> GRANT select
ON emp Grant succeeded
TO sue , rich ;
: 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 ;
بس١ؽخ ثبعزخذاَ اٌخٌّّٕٛبصاد ا١ِز٨وّب اْ ا. ٓ٠ٓ آخش١ِؽخ ٌّغزخذٌّّٕٛبصاد ا١ِز٨ ٌغؾت اREVOKE ّخ١ٍٔغزخذَ اٌزع
. ّخ١ٍؼب ً ثٕفظ اٌزع٠ب أٙزُ عؾج٠ WITH GRANT OPTION
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)
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 ٞ ئخببز- بءٙٔئ
Anonymous Stored
block DECLAREؼ٠اٌزظش Procedure or
function
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أـعبي أٚرظشـبد ٠م َٛثٙب اٌزطج١ك عٕذ ؽذٚس أ ٚرؾمك
ؽبدس أ ٚؽٛادس ـ ٟ٘ٚ ٗ١رىِ ْٛزشاـمخ ِع ؽذس ٠ؾذس ٌٍزطج١ك ٚرعًّ أٚرِٛبر١ى١بً.
ٕ٘بن ص٩س أٔٛاع ِٓ اٌجبساِزشاد ٛ٘ٚ INا٨ـزشاػ٠ IN OUT ٚ OUT ٚ ٟغزخذَ اٌجبسأزش ٌ INزّش٠ش اٌم ُ١اٌ ٝاٌجشٔبِظ اٌغضئٟ
اٌز٠ ٞم َٛثبعزذعبئٙب ٠ٚ .غزخذَ اٌجبساِزش ٦ OUTعبدح اٌم ُ١اٌ ٝاٌجشٔبِظ اٌغضئ ٟاٌّغزذع٠ٚ . ٟغزخذَ اٌجبساِزش ٌ IN OUTزّش٠ش
اٌم ُ١ا٨ثزذائ١خ اٌ ٝاٌجشٔبِظ اٌغضئٚ ٟاعبدح اٌم ُ١اٌّؾذصخ اٌ ٝاٌّغزذع. ٟ
ٚ Scalarز١د اٌبؼد ٠ :ؾًّ لّ١خ ٚؽ١ذح ,أّٔبؽ اٌج١بٔبد اٌشئ١غخ ٘ ٟرٍه اٌز ٟرزٛاـك ِع أّٔبؽ أعّذح عذاٚي خبدَ اٚساوً
ٚرذعُ PL/SQLأ٠ؼب ً اٌّزؾ٨ٛد إٌّطم١خ . Boolean
ِ Compositeسوب ِ :ضً اٌغغ٩د ٚاٌز ٟرغّؼ ثّغّٛعبد ِٓ اٌؾمٛي ٌزىِ ْٛعشـخ ِٚعبٌغخ ػّٓ وزً . PL/SQL
ِ Referenceسخؼ٠ : ٟخجئ اٌج١بٔبد ٠غزذع ٝثبٌّئششاد.
) LOB(large objectsاألغساع اٌىب١سة :رغزخذَ ٌزخض ٓ٠اٌعٕبطش اٌىج١شح ٚاٌّعٍِٛبد اٌىج١شح ٚاٌز ٟرؾفع ثشىً صٕبئٟ
ِضً اٌظٛس ٚثعغ ا٤ؼشاع اٌىج١شح ٚاٌز ٟلذ ٠ظً ؽغّٙب اٌ 4GB ٝرخضْ ـ ٟلبعذح اٌّعط١بد أ ٚخبسعٙب .
- 68 -
Declaring PL/SQL Variables PL/SQL ّٓالث ػٛر ػٓ ِخس٠اٌخظس
identifier [ CONSTANT ] datatype [ NOT NULL ] غت اٌؼبِت١اٌظ
[ := | DEFAULT expr ] ;
Declare : ِثبي
v_hiredate DATE ;
v_deptno NUMBER(2) NOT NULL := 10 ;
v_location VARCHAR2(13) := ‗Atlanta‘ ;
c_comm CONSTANT NUMBER := 1400 ;
- 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 ِثبي :
- 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 are simple or compound symbols that have special meaning to PL/SQL .
. PL/SQL خبص ثبٌٕغجخ ٌـٕٝ ِشوجخ رٍّه ِعٚص ثغطخ إِِّٔٛبد عجبسح عٓ س١اٌّع
- 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‖ ٍٟ٠
٠ غت أْ رىزت اٌىٍّبد اٌّؾغٛصح ثؾشٚؾ وج١شح ٌزغ ً١ٙاِىبٔ١خ اٌمشاءح.
رؼُ اٌؾشٚؾ اٌشِض٠خ وبـخ اٌشِٛص اٌمبثٍخ ٌٍطجبعخ ػّٓ ِغّٛعخ سِٛص : PL/SQLأؽشؾ – Lettersأعذاد
ِ – Numeralsغبـبد ٚ – Spacesسِٛص خبطخ . Special symbols
ّ٠ ىٓ أْ رى ْٛاٌؾشٚؾ اٌشِض٠خ لّ١خ ثغ١طخ ِضً -32.5أ ٚرشل ُ١عٍِّ ٟضً ٚ 2E5اٌز ٟرعِٕ 2*10 ٟشـٛعخ ٌ٥ط 5
ٚرغب. 200000 = ٞٚ
٠ غت أْ رؾبؽ اٌؾشٚؾ اٌشِض٠خ ثعِ٩بد الزجبط ـش٠ذح وّب v_ename := ‗Henderson‘: ٍٟ٠
- 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
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
- 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 ;
\ 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 .
ٓ ِغزمٍخ عRollbacks , Savepoints , Commits اٌزشاععٚ ذ١اِش اٌزضجٚ أ. خ١ؽذح اعشائٚ PL/SQL رعزجش وزٍخ٨ 3
. ّىٕه اطذاس٘ب ػّٓ وزٍخ٠ ٌٓىٚ . ًاٌىز
DROP ٚ ALTER TABLE ٚ CREATE TABLE ً ِضDDL بٔبد١ؿ اٌج٠اِش ٌؽخ رعشٚ أPL/SQL ُ رذع٨ 3
. TABLE
. REVOKE ٚ أGRANT ً ِض. DCL بٔبد١ ٌؽخ اٌزؾىُ ثبٌجPL/SQL ُ رذع٨ 3
- 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 ;
- 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 ;
- 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 ْ٤ خ٠ّٛىٓ أْ رؾذس أخطبء ٔؾ٠
. ـخٚؾ اٌّؾزٛ صُ لُ ثطجبعخ عذد اٌظف, 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
رٕفزّٟبد اٌز١ٍ ثشىً ِزغٍغً ِع اٌزعٟؤر٠ٚ 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 ّبث١ٍحؼ
ِٓ ًّىٓ أْ رؼُ و٠. ؽذاس٤خ لجً أْ رٕغض ا١ اػبـIF ّبد١ٍ رعٌٝٚ٤ اIF ّخ١ٍؽذاس إٌبرغخ عٓ رع٤عخ اّٛؼب ً أْ رؼُ ِغ٠ّىٓ أ٠
. END IF َبإ٘ب ثبعزخذاٙٔزُ ا٠ ْغت أ٠ اٌّزذاخٍخIF ّبد١ٍّخ ِٓ رع١ٍوً رع. IF ّبد١ٍ رعELSE ٚ THEN ٟعجبسر
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 ;
THEN actions
ELSIF
condition
TRUE FALSE
ELSE
THEN actions actions
- 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 ;
- 84 -
: Basic Loop – ت١اٌسٍمت األظبظ
LOOP -- delimiter غت اٌؼبِت١اٌظ
Statement1; -- statements
…..
EXIT [ WHEN CONDITION ] ; -- EXIT statement
END LOOP ; -- delimiter
- 85 -