0% found this document useful (0 votes)
338 views159 pages

Oracl2e PDF

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
338 views159 pages

Oracl2e PDF

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 159

‫‪1‬‬ ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪http://www.boosla.

com‬‬

‫أوراآﻞ‬

‫ﻧﻨﻌﺮض ﻓﻲ هﺬا اﻟﻔﺼﻞ اﻟﻰ ﻣﻘﺪﻣﺔ ﻓﻲ ادارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت ‪ Database‬وﺧﺎﺻﺔ ﻗﻮاﻋﺪ ﺑﻴﺎﻧﺎت‬
‫اﻷوراآﻞ واﻟﺬي ﻳﻌﺘﺒﺮ أﺣﺪ اﻟﻨﻈﻢ اﻟﻘﻮﻳﺔ ﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت ‪Data Base Management‬‬
‫)‪ System (DBMS‬ﻟﻤﺎ ﻟﻪ ﻣﻤﻴﺰات ﻣﻘﺎرﻧﺔ ﺑﻘﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت اﻻﺧﺮى ‪.‬‬

‫ﻣﻔﺎهﻴﻢ ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت‬

‫ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ‪Database‬‬


‫هﻲ ﻣﺠﻤﻮﻋﻪ ﻣﻦ اﻟﻤﻠﻔﺎت اﻟﻤﻨﻈﻤﺔ ﺑﺤﻴﺚ ﻳﺴﻬﻞ اﻟﻮﺻﻮل إﻟﻴﻬﺎ ﻋﻨﺪﻣﺖ ﻧﺮﻳﺪاﺳﺘﺮدادهﺎ‬

‫ﻗﺎﻣﻮس اﻟﺒﻴﺎﻧﺎت ‪Data Dictionary‬‬


‫هﻮ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت ﻋﻦ ﺟﺪاول وﻓﻬﺎرس اﻟﺒﻴﺎﻧﺎت ﺗﺤﻘﻆ داﺧﻞ هﺬا اﻟﻘﺎﻣﻮس ‪ ،‬ﻳﺴﺘﺨﺪﻣﻬﺎ‬
‫ﻧﻈﺎم إدارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت‬

‫اﻻﺳﺘﻌﻼم ‪Query‬‬
‫هﻮ ﻧﻈﺎم اﺳﺘﻔﺴﺎري ﻟﻼﺳﺘﻌﻼم ﻋﻦ ﺑﻴﺎﻧﺎت ﻣﻌﻴﻨﺔ وﻏﺎﻟﻴﺎ ﻻ ﻳﻐﻴﺮ اﻻﺳﺘﻌﻼم ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ﺣﻴﺚ‬
‫إن ﻏﺎﻟﺒﻴﺔ ﻧﻈﻢ اﻻﺳﺘﻌﻼم ﻋﺒﺎرة ﻋﻦ ﻗﺮاءة ﻓﻘﻂ ﻟﻠﺒﻴﺎﻧﺎت‬

‫دوال ‪Function‬‬
‫ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺗﻌﻠﻴﻤﺎ ت أو أواﻣﺮ ﺗﺴﺘﺨﺪم ﺿﻤﻦ ﻣﺴﻤﻰ وﻇﻴﻔﻲ ﻻداء ﻋﻤﻠﻴﺔ ﻣﺤﺪدة‬
‫وﻏﺎﻟﺒﺎ ﺗﻌﻴﺪ اﻟﺪاﻟﺔ ﻗﻴﻤﺔ ﻣﻌﻴﻨﻪ ﺑﻌﺪ ﺗﻨﻔﻴﺬهﺎ‬

‫اﻻﺟﺮاء ‪Procedure‬‬
‫ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺘﻌﻠﻴﻤﺎت ﻣﺜﻞ ﺗﻌﻠﻴﻤﺎت اﻟﺪاﻟﺔ ﺑﻬﺪف ﺗﻨﻔﻴﺬ ﻣﻬﻤﺔ ﻣﺤﺪدة ﻟﻜﻦ اﻻﺟﺮاء ﻻ ﻳﻌﻴﺪ ﻗﻴﻤﺔ‬
‫ﻣﺜﻞ اﻟﺪاﻟﺔ‬

‫ﻣﺨﻄﻂ ‪Schema‬‬
‫ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻜﺎﺋﻨﺎت ‪ Objects‬ﻣﺮﺗﺒﻄﺔ ﺑﻘﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت وﻳﺘﺄﻟﻒ ﻣﺨﻄﻂ اﻟﻜﺎﺋﻦ ﻣﻦ‬
‫آﺎﺋﻨﺎت ﻣﺜﻞ اﻟﺠﺪاول ‪ Tables‬واﻻﺟﺮاءات ‪ Procedure‬واﻟﻌﺮوض ‪ Views‬واﻟﻔﻬﺎرس‬
‫‪... Directories‬اﻟﺦ‬

‫ﻣﺪﻳﺮ ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت )‪Database Administrator (DBA‬‬


‫هﻮ اﻟﺸﺨﺺ اﻟﻤﺴﺆؤل ﻋﻦ ﻋﻤﻠﻴﺎت إدارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت وﻧﻈﻢ أداء هﺬﻩ اﻟﻘﻮاﻋﺪ وآﻴﻒ ﻳﺘﻢ ﺗﻜﻮﻳﻨﻬﺎ‬
‫وهﻮ ﻣﺴﻮؤل أﻳﻀﺎ ﻋﻦ ﻣﺮاﻗﺒﺔ أداء هﺬﻩ اﻟﻘﻮاﻋﺪ ‪ ،‬وآﺬﻟﻚ إﺟﺮاء ﻋﻤﻠﻴﺎت اﻟﻨﺴﺦ اﻻﺣﺘﻴﺎﻃﻲ وﺗﺜﺒﻴﺖ‬
‫اﻟﺒﺮاﻣﺞ ‪ ،‬واﻟﻤﺤﺎﻓﻈﺔ ﻋﻠﻰ أﻣﻦ اﻟﻤﻌﻠﻮﻣﺎت ‪ ,‬وإذاﻓﺔ ﻣﺴﺘﺨﺪﻣﻴﻦ ﺟﺪد أو إﻟﻔﺎء ﺻﻼﺣﻴﺎت ﻣﺴﺘﺨﺪﻣﻴﻦ‬

‫وﻳﻤﻜﻦ ان ﻳﻘﻮم ﻣﺪﻳﺮ ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت ﺑﺎﻟﺘﺨﻄﻴﻂ ﻟﺘﻄﻴﺮ وﺗﻨﻤﻴﺔ اﻟﻨﻈﺎم اﻟﻤﻄﺒﻖ ‪ ،‬وﺗﺤﺪﻳﺪ اﻟﺤﺎﺟﻮ ﻟﻬﺬﻩ‬
‫اﻟﺘﻄﻮرات اﻟﻤﺴﺘﻘﺒﻠﻴﺔ ‪.‬‬
‫وﻳﺴﻌﻰ ﻓﺮﻳﻖ اﻟﻌﻤﻞ اﻟﺬي ﻳﺘﻜﻮن ﻣﻦ ﻣﺪﻳﺮي ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت ‪ DBA‬ﻟﻠﺤﻔﺎظ ﻋﻠﻰ ﺳﻴﺮ اﻟﻌﻤﻞ داﺧﻞ‬
‫اﻟﺸﺮآﺔ ﺑﺸﻜﻞ ﻣﺘﺠﺎﻧﺲ ‪ .‬وﺗﺘﻢ ﺗﺠﺰﺋﺔ اﻟﻤﻬﺎم ﺑﻴﻦ هﺆﻻء اﻟﻤﺪﻳﺮﻳﻦ ‪.‬‬
‫‪2‬‬ ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪http://www.boosla.com‬‬

‫ﻣﻬﺎم ﻣﺪﻳﺮ ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت )‪(DBA‬‬


‫ﺗﺘﺒﺎﻳﻦ ﻣﻬﺎم ﻣﺪﻳﺮ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ﺗﺒﻌﺎ ﻟﺤﺠﻢ اﻟﺸﺮآﺔ أو اﻟﻤﺆﺳﺴﺔ وﺗﺒﻌﺎ ﻟﻔﺮﻳﻖ اﻟﻌﻤﻞ‬
‫اﻟﻤﺴﺎﻋﺪ وﺗﺸﻤﻞ هﺬﻩ اﻟﻤﻬﺎم اﻟﻨﻘﺎط اﻟﺘﺎﻟﻴﺔ ‪:‬‬
‫‪ -1‬ﺗﺜﺒﻴﺖ اﻟﺒﺮﻣﺠﻴﺎ اﻟﺠﺪﻳﺪة‬
‫‪ -2‬إدارة اﻟﺤﻤﺎﻳﺔ ﻟﻨﻈﺎم ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت‬
‫‪ -3‬اﻟﻨﺴﺦ اﻻﺣﺘﻴﺎﻃﻲ واﻟﺪوري ﻟﻠﺒﻴﺎﻧﺎت وﻧﻈﺎم ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت‬
‫اﺳﺘﻜﺸﺎف اﻷﺧﻄﺎء وﻣﻌﺎﻟﺠﺘﻬﺎ‬ ‫‪-4‬‬
‫‪ -5‬ﺗﺴﻮﻳﺔ وإﺻﻼح إﺧﻔﺎﻗﺎت اﻟﻤﺴﺎﺧﺪﻣﻴﻦ ﻟﻠﻮﺻﻮل إﻟﻰ ﺑﻴﺎﻧﺎﺗﻬﻢ‬
‫‪ -6‬ﻣﺘﺎﺑﻌﺔ ﺿﺒﻂ أداء اﻟﻌﻤﻞ‬
‫‪ -7‬ﺗﻘﺴﺴﻢ اﻷﺟﻬﺰة واﻟﻨﻄﻢ اﻟﺠﺪﻳﺪة‬
‫‪ -8‬اﻟﻌﻤﻞ ﻋﻠﻰ ﺗﻄﻮﻳﺮ اﻟﻨﻈﺎم ﺑﺎﻟﺸﺮآﺔ‬

‫ﻧﻈﺎم إدارة ﻗﺎﻋﺪ اﻟﺒﻴﺎﻧﺎت )‪Data Base Management System (DBMS‬‬

‫هﻮ ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ اﻷدوات اﻟﺒﺮﻣﺠﻴﻪ ) اﻟﺒﺮاﻣﺞ ( اﻟﺘﻲ ﺗﺪﻳﺮ وﺗﻨﻈﻢ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وﺗﻮﺟﺪ‬
‫ﻋﻼﻗﺔ ارﺗﺒﺎط ﺑﻴﻦ هﺬﻩ اﻟﺒﻴﺎﻧﺎت ﺗﺴﻤﻰ ﻋﻼﻗﺔ )‪ (Relation‬ﻟﺬا اﺣﺒﺎﻧﺎ ﻳﻄﻠﻖ ﻋﻠﻴﻬﺎ ‪ RDBMS‬أي‬
‫ﻧﻈﺎم إدارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت اﻟﻌﻼﺋﻘﻴﺔ ) اﻻرﺗﺒﺎﻃﻴﺔ (‬

‫ﻣﻤﻴﺰات ﻧﻈﺎم إدارة ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت أوراآﻞ‬

‫ﻳﺘﻤﻴﺰ ﻧﻈﺎم ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت أوراآﻞ ﻋﻦ ﻏﻴﺮﻩ ﻣﻦ ﻧﻈﻢ إدارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت اﻷﺧﺮى ﺑﺎﻵﺗﻲ‪:‬‬
‫‪ -1‬اﻟﻘﺪرة اﻟﻔﺎﺋﻘﺔ ﻋﻠﻰ اﺳﺘﻴﻌﺎب آﻤﻴﺎت آﺒﻴﺮة ﻣﻦ اﻟﺒﻴﺎﻧﺎت ﻗﺪ ﻳﺼﻞ ﻋﺪد اﻟﺴﺠﻼت إﻟﻰ‬
‫اﻟﻤﻼﻳﻴﻦ ﻣﻊ اﻟﺤﻔﺎظ ﻋﻠﻰ اﻟﻤﺴﺘﻮى اﻟﻌﺎﻟﻲ ﻓﻲ اﻷداء واﻟﺴﺮﻋﺔ ﻋﻨﺪ اﺳﺘﺮﺟﺎع واﻟﺘﺨﺰﻳﻦ‬
‫واﻟﺤﺬف‬
‫‪ -2‬ﻻﺳﺮﻳﺔ اﻟﺘﺎﻣﺔ واﻷﻣﻦ ﻻ ﺣﺘﻮاﺋﻪ ﻋﻠﻰ ﻧﻈﺎم اﻟﺼﻼﺣﻴﺎت واﻟﺤﻘﻮق اﻟﺬي ﻳﻀﻤﻦ ﺗﻄﺒﻴﻖ‬
‫اﻟﺸﺮوط اﻟﻘﻴﺎﺳﻴﺔ واﻷﻣﻨﻴﺔ ﻟﻠﺤﻔﺎظ ﻋﻠﻰ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت‬
‫‪ -3‬ﻓﻌﺎﻟﻴﺔ اﻟﺘﺤﻜﻢ اﻟﻤﺮآﺰي ﺑﺎﻟﺒﻴﺎﻧﺎت ﻻذي ﻳﻀﻤﻦ ‪:‬‬
‫• ﺗﻘﻠﻴﻞ اﻟﺘﻜﺮرات ﻋﻴﺮ اﻟﻼزﻣﺔ ﻓﻲ اﻟﺒﻴﺎﻧﺎت اﻟﺪﺧﻠﺔ )‪(No Repetition‬‬
‫• ﺗﺠﻨﺐ اﻟﺘﻨﺎﻗﺾ ﺑﻴﻦ اﻟﺒﻴﺎﻧﺎت )‪(No Contradiction‬‬
‫• إﻣﻜﺎﻧﻴﺔ اﻟﺘﺸﺎرك ﻓﻲ اﻟﺒﻴﺎﻧﺎت )‪(Data Sharing‬‬
‫• اﻟﺤﻔﺎظ ﻋﻠﻰ ﺗﻜﺎﻣﻞ اﻟﺒﻴﺎﻧﺎت ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ )‪(Data Integrity‬‬
‫‪ -4‬اﻟﺴﻴﻄﺮة اﻟﺘﺎﻣﺔ ﻋﻠﻰ ﻋﻤﻠﻴﺔ اﻟﻨﺴﺦ اﻻﺣﺘﻴﺎﻃﻲ ﻟﻘﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وﺣﻤﺎﻳﺘﻬﺎ ﻣﻦ اﻟﻔﻘﺪان أو‬
‫اﻟﺘﻠﻒ ﻣﻊ اﻣﻜﺎﻧﻴﺔ اﺳﺘﺮﺟﺎﻋﻬﺎ ﻓﻲ أي ﻟﺤﻈﺔ‬
‫‪3‬‬ ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪http://www.boosla.com‬‬

‫ﻋﻤﻠﻴﺎت ﻧﻈﺎم إدارة ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت‬


‫ﻳﺸﺘﻤﻞ ﻧﻈﺎم إدارة ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اوراآﻞ ﻋﻠﻰ اﻟﻌﻤﻠﻴﺎت اﻟﺘﺎﻟﻴﺔ‬

‫‪ -1‬أواﻣﺮ ﻟﻐﺔ ﺗﻌﺮﻳﻒ اﻟﺒﻴﺎﻧﺎت )‪Data Definition Language (DDL‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﻠﻐﺔ ﻓﻲ ﺗﻌﺮﻳﻒ وإﻧﺸﺎء اﻟﻜﺎﺋﻦ ‪ ، Object‬وﻳﻤﻜﻦ أن ﻳﻜﻮن اﻟﻜﺎﺋﻦ ﻣﻠﻔﺎت‬
‫وﺟﺪاول ﺑﻴﺎﻧﺎت ‪ ،‬ﻓﻴﻤﻜﻨﻨﺎ إﻧﺸﺎء وﺗﻌﺪﻳﻞ وﺣﺬف اﻟﻜﺎﺋﻦ وﻳﻤﻜﻨﻨﺎ إﻧﺸﺎء اﻣﺘﻴﺎز ﻟﻤﺴﺘﺨﺪم‬
‫ﻣﻌﻴﻦ ‪ ،‬أو اﻧﺸﺎء آﺎﺋﻦ ﺧﻴﺎرات ﻟﻔﺤﺺ وإﺿﺎﻓﺔ ﺗﻌﻠﻴﻘﺎت إﻟﻰ ﻗﺎﻣﻮس اﻟﺒﻴﺎﻧﺎت وﻣﻦ هﺬﻩ‬
‫اﻷواﻣﺮ ‪CREAT , DROP and ALTER :‬‬

‫‪ -2‬أواﻣﺮ ﻟﻐﺔ ﻣﻌﺎﻣﻠﺔ اﻟﺒﻴﺎﻧﺎت )‪Data Manipulation Language (DML‬‬

‫ﺗﺘﻴﺢ هﺬﻩ اﻷواﻣﺮ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﻴﺎﻧﺎت وﺗﻌﺪﻳﻠﻬﺎ ﺿﻤﻦ اﻟﻜﺎﺋﻦ اﻟﻤﻮﺟﻮد ‪ Object‬وﻣﻦ هﺬﻩ‬
‫اﻷواﻣﺮ ‪SELECT, DELETE,UPDATE and INSERT :‬‬

‫‪ -3‬أواﻣﺮ ﻟﻐﺔ اﻟﺘﺤﻜﻢ ﻓﻲ اﻟﺒﻴﺎﻧﺎت )‪Data Control Language (DCL‬‬

‫ﺗﺘﻴﺢ هﺬﻩ اﻷواﻣﺮ اﻟﺘﺤﻜﻢ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وأداﺋﻬﺎ آﺎﻟﺼﻼﺣﻴﺎت واﻟﻤﺴﺘﺨﺪﻣﻴﻦ واﻟﺤﻘﻮق‬
‫وﻏﺎﻟﺒﺎ ﻣﺎﺗﻜﻮن هﺬﻩ اﻷواﻣﺮ ﻣﺨﺼﺼﺔ ﻟﻼﺳﺘﺨﺪام ﻣﻦ ﻗﺒﻞ ﻣﺪﻳﺮ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت )‪(DBA‬‬
‫وﻣﻦ هﺬﻩ اﻻواﻣﺮ ‪GRANT and REVOKE :‬‬
‫‪4‬‬ ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪http://www.boosla.com‬‬

‫اﻟﺘﺮآﻴﺐ اﻟﺪاﺧﻠﻲ ﻟﻨﻈﺎم أوراآﻞ‬


‫أهﺪاف اﻟﻔﺼﻞ‬
‫ﻳﺘﻨﺎول هﺬا اﻟﻔﺼﻞ اﻟﺘﺮآﻴﺐ اﻟﺪاﺧﻠﻲ ﻟﻨﻈﺎم ﻗﺘﻌﺪة اﻟﺒﻴﺎﻧﺎت أوراآﻞ وﻓﻲ ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ‬
‫ﺳﺘﻜﻮن ﻗﺎدرا ﺑﻤﺸﻴﺌﺔ اﷲ ﻋﻠﻰ ‪:‬‬
‫‪ -1‬ﻓﻬﻢ اﻟﻌﻼﻗﺎت ﺑﻴﻦ اﻟﺠﺪاول‬
‫‪ -2‬ﺗﻌﺮﻳﻒ ﻧﻤﺬﺟﺔ اﻟﻌﻼﻗﺔ‬
‫‪ -3‬ﻓﻬﻢ ﻣﻜﻮﻧﺎت ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اﻟﻌﻼﺋﻘﻴﺔ‬
‫‪ -4‬ﻓﻬﻢ اﻟﻌﻼﻗﺔ ﺑﻴﻦ اﻟﺨﺎدم واﻟﻤﺴﺘﻔﺒﺪ‬
‫‪ -5‬ﻗﻬﻢ اﻟﺨﺎدم ‪SERVER‬‬
‫‪ -6‬ﻓﻬﻢ اﻟﻤﺴﺘﻔﻴﺪ ‪Client‬‬
‫‪5‬‬ ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪http://www.boosla.com‬‬

‫ﻣﻘﺪﻣﺔ ﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت اﻟﻌﻼﺋﻘﻴﺔ‬


‫ﻳﻘﺪم هﺬا اﻟﻔﺼﻞ اﻟﺘﺮآﻴﺐ واﻟﺒﻨﺎء اﻟﺪاﺧﻠﻲ ﻟﻨﻈﺎم إدارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت أوراآﻞ ‪ ،‬ﻓﻴﺤﺘﻮي ﻋﻠﻰ‬
‫وﺻﻒ ﺳﺮﻳﻊ ﻟﻤﻜﻮﻧﺎت أوراآﻞ وﺗﻌﺘﻤﺪ ﻏﺎﻟﺒﻴﺔ ﺗﻄﺒﻴﻘﺎت ﻧﻈﻢ ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت ﻓﻲ ﺑﻨﺎﺋﻬﺎ ﻋﻠﻰ أﺣﺪ‬
‫ﻧﻤﺎذج ﻗﺎﻋﺪ اﻟﺒﻴﺎﻧﺎت اﻟﺘﺎﻟﻴﺔ‪:‬‬

‫ﻧﻤﻮذج هﻴﻜﻠﻲ )هﺮﻣﻲ ( ‪Hierarchical Model‬‬ ‫‪-1‬‬


‫ﻧﻤﻮذج ﺷﺒﻜﻲ ‪Network Model‬‬ ‫‪-2‬‬
‫ﻧﻤﻮذج ﻋﻼﺋﻘﻲ ‪Relational Model‬‬ ‫‪-3‬‬
‫ﻧﻤﻮذج ﺷﻴﺌﻲ ‪Object Model‬‬ ‫‪-4‬‬

‫ﻓﻲ اﻟﻤﺎﺿﻲ آﺎن اﻟﻨﻤﻮذج اﻷول ) اﻟﻬﺮﻣﻲ ( اﻷآﺜﺮ اﻧﺘﺸﺎرا ﻣﻊ أﺟﻬﺰة اﻟﻜﻤﺒﻴﻮﺗﺮ اﻟﻜﺒﻴﺮة ‪Main‬‬
‫‪ Frame‬ﺛﻢ ﺑﺪا اﻟﻨﻈﺎم اﻟﺜﺎﻧﻲ ) اﻟﺸﺒﻜﻲ ( ﻓﻲ اﻻﻧﺘﺸﺎر وﺧﺎﺻﺔ ﻣﻊ اﻟﺘﻮﺳﻊ ﻓﻲ ﺑﻨﺎء وﺗﺮآﻴﺐ‬
‫ﺷﺒﻜﺎت اﻟﺤﺎﺳﺐ وآﺎﻧﺖ هﻨﺎك ﺻﻌﻮﺑﺎت ﻓﻲ اﺳﺘﺨﺪام اﻟﻨﻈﺎﻣﻴﻦ اﻟﻮل واﻟﺜﺎﻧﻲ ) اﻟﻬﺮﻣﻲ واﻟﺸﺒﻜﻲ (‬
‫ﻧﺘﻴﺠﺔ ﻻﺳﺘﺨﺪام ﻣﺆﺷﺮات اﻟﺒﺮﻣﺠﺔ ) ‪ ( Pointers‬ﻟﺮﺑﻂ ﺳﺠﻼت اﻟﺒﻴﺎﻧﺎت ﺑﻌﻀﻬﺎ ﻣﻊ ﺑﻌﺾ ‪ ،‬ﻟﺬا‬
‫ﻧﺠﺪ أن إﺿﺎﻓﺔ أو ﺗﻌﺪﻳﻞ أو ﺣﺬف اﻟﺴﺠﻼت ﻳﺤﺘﺎج إﻟﻰ اﻟﻤﺰﻳﺪ ﻣﻦ ﻗﻬﻢ ﻃﺒﻴﻌﺔ وﻋﻤﻞ اﻟﻤﺆﺷﺮات‬
‫وﻓﻲ هﺬﻩ اﻟﻔﺘﺮة اﻟﻤﺎﺿﻴﺔ ﻃﺮق ﺑﺮﻣﺠﺔ اﻟﻤﺆﺷﺮات ﺗﻜﺘﺐ ﺑﻠﻐﺔ اﻟﻜﻮﺑﻮل )‪.(COBOL‬‬
‫أﻣﺎ اﻟﻨﻤﻮذج اﻟﻌﻼﺋﻘﻲ )‪ (Relational‬ﻓﻬﻮ اﻷآﺜﺮ ﺳﻬﻮﻟﺔ ﻓﻲ اﻻﺳﺘﺨﺪام وﻓﻲ ﺑﺮﻣﺠﺔ ﺗﻄﺒﻴﻘﺎت ﻧﻈﻢ‬
‫ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت وﻣﻦ اﻟﻨﺎﺣﻴﺔ اﻟﻨﻈﺮﻳﺔ اﻷآﺎدﻳﻤﻴﺔ ﻓﻴﻠﺰﻣﻚ دراﺳﺔ اﻟﻤﻔﺎهﻴﻢ اﻷﺳﺎﺳﻴﺔ واﻟﻀﺮورﺑﺔ ﻟﻬﺬا‬
‫اﻟﻨﻤﻮذج اﻟﻌﻼﺋﻘﻲ ﻟﻬﺬا ﺳﻨﺮآﺰ هﻨﺎ ﻋﻠﻰ‬

‫‪ -1‬هﻴﻜﻞ اﻟﺒﻴﺎﻧﺎت اﻟﻌﻼﺋﻘﻴﺔ ‪Relational Data Structure‬‬


‫‪ -2‬اﻟﻀﻮاﺑﻂ اﻟﺤﺎآﻤﺔ ﻟﻠﺒﻴﺎﻧﺎت اﻟﻌﻼﺋﻘﻴﺔ ‪Constraint that govern organization of‬‬
‫‪data structure‬‬
‫‪ -3‬اﻟﻌﻤﻠﻴﺎت اﻟﺘﻲ ﺗﺠﺮى ﻋﻠﻰ هﺬﻩ اﻟﺒﻴﺎﻧﺎت ‪Operations that are performance data‬‬
‫‪structure‬‬

‫وﻳﻌﺘﻤﺪ ﻧﺎم هﻴﺎآﻞ اﻟﺒﻴﺎﻧﺎت اﻟﻌﻼﺋﻘﺒﺔ )‪ (Relational Database‬ﻋﻠﻰ هﻴﻜﻞ ﻣﻨﻄﻘﻲ‬


‫وﻳﻄﻠﻖ ﻋﻠﻴﻪ ﻋﻼﻗﺔ )‪(Relational‬وﻋﻠﻰ ﺷﻜﻞ ﺛﻨﺎﺋﻲ اﻷﺑﻌﺎد ‪(Tow dimensional‬‬
‫) ‪ data structure‬ﻳﺘﻜﻮن ﻣﻦ ﺻﻔﻮف وأﻋﻤﺪة وﻳﺴﻤﻰ ﺟﺪول )‪ (Table‬هﺬا ﺑﺎﻹﺿﺎﻓﺔ‬
‫إﻟﻰ ﻋﻨﺎﺻﺮ اﻟﺒﻴﺎﻧﺎت )‪ (Data elements‬ﺗﺴﻤﻰ ﻓﻲ هﺬﻩ اﻟﺤﺎﻟﺔ ‪ attributes‬ﻋﻼوة‬
‫ﻋﻠﻰ هﺬا ﻳﺘﻢ ﺗﻨﻈﻴﻢ هﺬﻩ اﻟﺒﻴﺎﻧﺎت اﻟﻔﻌﻠﻴﺔ ﻓﻲ وﺣﺪة أو وﺣﺪات ﺗﺴﻤﻰ ‪ Tuples‬ﺗﻘﺴﻢ إﻟﻰ‬
‫ﺻﻔﻮف ‪ Rows‬أو )ﺳﺠﻼت ‪ ( Records‬وأﻋﻤﺪة ‪) Columns‬ﺣﻘﻮل ‪( Fields‬‬
‫واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﺒﻴﻦ اﻟﻌﻨﺎﺻﺮ اﻷﺳﺎﺳﻴﺔ ﻟﺠﺪول اﻟﻤﻮﻇﻘﻴﻦ ‪Employees‬‬
‫‪6‬‬ ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪http://www.boosla.com‬‬

‫اﻟﻌﻼﻗﺔ ﺑﻴﻦ اﻟﺠﺪاول‬

‫ﻟﺮﺑﻂ ﻋﻼﻗﺔ ﺑﺄﺧﺮى ﺗﺘﺤﺘﺎج إﻟﻰ ﻃﺮﻳﻘﺔ ﻟﻼرﺗﺒﺎط ‪ .‬وهﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺗﺴﺘﺨﺪم ﺣﻘﻼ ‪ Field‬ﻳﻜﻮن‬
‫ﻣﻮﺟﻮدا ﻓﺐ اﻟﺠﺪوﻟﻴﻦ وﺣﻘﻞ اﻻرﺗﺒﺎط ﻳﺴﻤﻰ ﻓﻲ اﻟﺠﺪول اﻷول ﺑﺎﻟﻤﻔﺘﺎح اﻟﺮﺋﻴﺴﻲ ‪(Primary‬‬
‫)‪ Key‬ﻟﻠﺠﺪول اﻷل وﻳﺴﻤﻰ ﻳﺎﻟﻤﻔﺘﺎح ال )‪ (Foreign Key‬ﻓﻲ اﻟﺠﺪول اﻟﺜﺎﻧﻲ‬
‫‪7‬‬ ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪http://www.boosla.com‬‬

‫ﻧﻤﺬﺟﺔ اﻟﻌﻼﻓﺔ ‪Relational Model Algebra‬‬


‫ﺗﻌﺮف ﺑﺎﻧﻬﺎ اﻟﻌﻤﻠﻴﺎت اﻟﺘﻲ ﻳﺘﻢ اﺟﺮاؤهﺎ ﻋﻠﻰ ﺟﺪول أو ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺠﺪاول ﺗﺒﻌﺎ ﻟﻌﻼﻗﺔ ﻣﺤﺪدة‬
‫وﻳﻮﺟﺪ ﻣﻌﺎﻣﻼن ‪ Operators‬هﻤﺎ ‪ Unary‬واﻟﺜﺎﻧﻲ‪ Binary‬واﻟﺠﺪول اﻟﺘﺎﻟﻲ ﻳﻌﺪد ﺳﺒﻌﺔ اﻧﻮاع‬
‫ﻟﻬﺬﻩ اﻟﻌﻤﻠﻴﺎت‬

‫اﻟﻌﻤﻠﻴﺔ‪Operation‬‬ ‫ﻧﻮع اﻟﻌﻤﻠﻴﺔ ‪Type‬‬ ‫وﺻﻒ اﻟﻌﻤﻠﻴﺔ‬


‫‪Union‬‬ ‫‪Binary‬‬ ‫ﺗﺠﻤﻴﻊ اﻟﺼﻔﻮف اﻟﺴﺠﻼت ﻣﻦ ﺟﺪوﻟﻴﻦ ﻣﻊ ﻋﺪم‬
‫اﻟﺴﻤﺎح ﺑﻨﻜﺮار ﺳﺠﻼت‬
‫‪Intersection‬‬ ‫‪Binary‬‬ ‫ﺗﺤﺪﻳﺪ اﻟﺴﺠﻼت )اﻟﺼﻔﻮف( اﻟﻤﺸﺘﺮآﺔ ﺑﻴﻦ‬
‫ﺟﺪوﻟﻴﻦ‬
‫‪Difference‬‬ ‫‪Binary‬‬ ‫اﻇﻬﺎر اﻟﺴﺠﻼت اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﺠﺪول اﻻول‬
‫وﻻ ﺗﻮﺟﺪ ﻓﻲ اﻟﺠﺪول اﻟﺜﺎﻧﻲ‬
‫‪Projection‬‬ ‫‪Unary‬‬ ‫إﻇﻬﺎر اﻟﺴﺠﻼت ﻣﻊ ﺑﻌﺾ اﻷﻋﻤﺪة )ﻣﺼﺪر‬
‫اﻟﺒﻴﺎﻧﺎت(‬
‫‪Selection‬‬ ‫‪Unary‬‬ ‫إﻇﻬﺎر اﻟﺴﺠﻼت ﻣﻦ ﺟﺪول ﻣﺼﺪر اﻟﺒﻴﺎﻧﺎت ﺗﺒﻌﺎ‬
‫ﻟﻤﻌﻴﺎر اﻟﺒﺤﺚ ‪Criteria‬‬
‫‪Product‬‬ ‫‪Unary‬‬ ‫وﺻﻞ آﻞ ﺳﺠﻞ ﻣﻦ ﺟﺪول اﻟﺒﻴﺎﻧﺎت اﻟﻮل ﻣﻊ آﻞ‬
‫ﺳﺠﻞ ﻓﻲ اﻟﺠﺪول اﻟﺜﺎﻧﻲ‬
‫‪Join‬‬ ‫‪Unary‬‬ ‫وﺻﻞ وﺗﻤﺪﻳﺪ اﻟﺴﺠﻼت ﻣﻦ اﻟﺠﺪول اﻷل ﻣﻊ‬
‫ﻣﺎﻳﻘﺎﺑﻠﻪ ﻣﻦ ﺳﺠﻼت ﻓﻲ اﻟﺠﺪول اﻟﺜﺎﻧﻲ‬
‫‪8‬‬ ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪http://www.boosla.com‬‬

‫ﻣﻜﻮﻧﺎت ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اﻟﻌﻼﺋﻘﻴﺔ ‪RDBMS Components‬‬

‫ﺗﺘﻜﻮن ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اﻟﻌﻼﺋﻘﻴﺔ ﻣﻦ ‪:‬‬

‫‪ -1‬ﻧﻈﺎم ﺗﺸﻐﻴﻞ ﺛﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وﻳﻄﻠﻖ ﻋﻠﻴﻪ ‪Kernel‬‬


‫‪ -2‬ﻗﺎﻣﻮس اﻟﺒﻴﺎﻧﺎت ‪Data Dictionary‬‬

‫وﻳﺘﻜﻮن ﻧﻈﺎم ﺗﺸﻐﻴﻞ وﺗﻨﻈﻴﻢ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت )‪ (Kernel‬ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻮﺣﺪان اﻟﺒﺮﻣﺠﻴﺔ‬
‫‪ Software‬واﻟﺬي ﺻﻤﻢ ﺑﻴﺤﻜﻢ وﻳﻨﻈﻢ وﻳﻨﻌﺎﻣﻞ ﻣﻊ اﻟﺒﻴﺎﻧﺎت ﻣﺎﺑﻴﻦ ﺣﻔﻆ واﺳﺘﺮﺟﺎع وﻃﺒﺎﻋﺔ‬
‫وآﺬﻟﻚ ﺗﺤﺪﻳﺪ اﻟﻤﺴﺆﻟﻴﺎت وﻋﻤﻞ ﻧﻈﻢ اﻷﻣﺎن وﺣﻤﺎﻳﺔ اﻟﺒﻴﺎﻧﺎت‬
‫وﻋﺎدة ﻳﺤﺘﻔﻆ ﻧﻈﺎم ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ﺑﻘﺎﺋﻤﺔ ﻣﻦ اﻟﻤﺴﺘﺨﺪﻣﻴﻦ اﻟﺬﻳﻦ ﻟﻬﻢ ﺻﻼﺣﻴﺔ ﻟﻠﺘﻌﻤﻞ ﻣﻊ ﺗﻄﺒﻴﻖ‬
‫ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﺑﻌﻀﺎ ﻣﻦ ﻣﻜﻮﻧﺎت اﻟـ ‪ Kernel‬ﻓﻲ ﻧﻈﺎم أوراآﻞ‬

‫ﻣﻜﻮﻧﺎت اﻟـ ‪ Kernel‬ﻓﻲ ﻧﻈﻢ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت‬

‫وﻳﺤﻮي ﻗﺎﻣﻮس اﻟﺒﻴﺎﻧﺎت ‪ Data Dictionary‬وﺻﻔﺎ ﻟﺸﻜﻞ اﻟﺒﻴﺎﻧﺎت وﻳﻄﻠﻖ ﻋﻠﻰ هﺬا اﻟﻮﺻﻒ‬
‫‪ Meta Description‬أو ‪ Meta Data‬وهﺬا اﻟﻮﺻﻒ ﻳﺮﺗﺒﻂ ﺑﻜﺎﻓﺔ اﻟﻜﺎﺋﻨﺎ ت ‪ Objects‬ﺿﻤﻦ‬
‫ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت‬
‫وﻗﺎﻣﻮس ﺑﻴﺎﻧﺎت أوراآﻞ ﻳﺤﺘﻮي ﻋﻠﻰ ﻣﺠﻮﻋﺔ ﺟﺪاول ﺻﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻋﻦ ﻃﺮﻳﻖ‬
‫اﻟـ ‪ Kernel‬وأﻳﻀﺎ ﻋﻠﻰ آﺎﺋﻨﺎت اﻟﻔﻬﺎرس ‪Indexes‬آﺎﺋﻨﺎت اﻟﻌﺮض ‪ Views‬آﺎﺋﻨﺎت اﻻﺳﺘﻌﻼم‬
‫واﻻﺳﺘﻘﺴﺎر ‪ SQL and Query‬آﺎﺋﻨﺎت اﻹﺟﺮاء ‪ Procedure‬واﻟﺪوال ‪... Function‬إﻟﺦ‬
‫‪9‬‬ ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪http://www.boosla.com‬‬

‫اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ آﻴﻔﻴﺔ ﻗﺮاءة أو ﺗﻌﺪﻳﻞ ﻗﺎﻋﺪة ﺑﻴﺎﻧﺎت ﺑﺎﺳﺘﺨﺪام أوراآﻞ‬

‫ﺷﻜﻞ اﻟﻌﻼﻗﺔ ﺑﻴﻦ ‪ Kernel‬و ‪ SQL‬و ﻗﺎﻣﻮس اﻟﺒﻴﺎﻧﺎت‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪10 http://www.boosla.com‬‬

‫اﻟﻌﻼﻗﺔ ﺑﻴﻦ اﻟﺨﺎدم واﻟﻤﺴﺘﻔﻴﺪ)اﻟﻌﻤﻴﻞ( ‪Client/Server‬‬

‫ﻳﺘﻜﻮن ﻧﻈﺎم أوراآﻞ ﻣﻦ ﻣﻜﻮﻧﻴﻦ‬


‫‪ -1‬اﻟﺨﺎدم ‪Server‬‬
‫‪ -2‬اﻟﻤﺴﺘﻔﻴﺪ )اﻟﻌﻤﻴﻞ – اﻟﻤﺰود( ‪Client‬‬

‫اﻟﺨﺎدم ‪Server‬‬

‫ﻳﺤﻮي اﻟﺨﺎدم ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اﻟﻤﺮآﺰﻳﺔ ووﻇﺎﺋﻔﻬﺎ ‪ ،‬وآﺬﻟﻚ آﺎﻓﺔ اﻟﻌﻤﻠﻴﺎت اﻟﺨﻠﻔﻴﺔ ﻟﺤﻔﻆ هﺬﻩ اﻟﻔﺎﻋﺪة‬
‫وﺑﺤﻮي اﻳﻀﺎ أدوات ﺗﺸﻐﻴﻞ وإﻳﻘﺎف ﻓﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت‬
‫واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ اﻟﺒﻨﺎء اﻟﺪاﺧﻠﻲ ﻟﻨﻈﺎم اﻟﺨﺎدم‬

‫اﻟﻤﺴﺘﻔﻴﺪ ‪Client‬‬

‫أﻣﺎ اﻟﻤﺴﺘﻔﻴﺪ ‪ Client‬ﻓﻴﺤﺘﻮي ﻋﻠﻰ ﺑﺮاﻣﺞ اﻟﺨﺪﻣﺎت واﻟﺒﺮاﻣﺞ اﻟﻤﺴﺎﻋﺪﻩ واﻟﺘﻲ ﺑﻤﻜﻨﻨﺎ ﺗﺸﻐﻴﻠﻬﺎ ﻋﻦ‬
‫ﺑﻌﺪ ﺑﺎﺳﺘﺨﺪام اﻟﺸﺒﻜﺔ آﻤﺎ ﻳﺘﻀﻤﻦ ﻧﻈﺎم اﻟﻤﺴﺘﻔﻴﺪ اﻟﻮﺳﻴﻂ اﻟﺮﺳﻮﻣﻲ ‪ Graphical Interface‬اﻟﺬي‬
‫ﻳﺴﻬﻞ ﻋﻠﻴﻨﺎ اﺳﺘﺨﺪاﻣﻪ وﺗﻮﺟﺪ أداة اﻻﺗﺼﺎل ﺑﻴﻦ اﻟﺨﺎدم واﻟﻤﺴﺘﻘﻴﺪ وهﻲ‪ Net 8‬ﻟﺘﻘﻮم ﺑﻌﻤﻠﻴﺎت اﻟﺮﺑﻂ‬
‫واﻻﺗﺼﺎل ﻋﺒﺮ اﻟﺸﺒﻜﺔ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪11 http://www.boosla.com‬‬

‫و ﺗﺸﻤﻞ ﺣﺰﻣﺔ اﻟﺒﺮاﻣﺞ ﻟﻨﻈﺎم اﻟﻤﺴﺘﻔﻴﺪ ﻋﻠﻰ‬


‫‪ -1‬ﻣﺪﻳﺮ اﻟﻤﺸﺮوع ‪Enterprise Manager‬‬
‫وﻳﺤﻮي داﺧﻠﻪ اﻟﻤﻜﻮﻧﺎت اﻟﺘﺎﻟﻴﺔ‬
‫• ﻣﺘﺤﻜﻢ ﻣﺪﻳﺮ اﻟﻤﺸﺮوع ‪Enterprise Manager‬‬
‫• ﻣﺪﻳﺮ ﻣﺨﻄﻂ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ‪Schema Manager‬‬
‫• ﻣﺪﻳﺮ اﻟﺴﺮﻳﺔ ‪Security Manager‬‬
‫• ﻣﺪﻳﺮ اﻟﻄﺒﻌﺔ ‪Instance Manager‬‬
‫• ﻣﺪﻳﺮ اﻟﺘﺨﺰﻳﻦ ‪Storage Manager‬‬
‫• ﻣﺪﻳﺮ اﻟﺒﻴﺎﻧﺎت ‪Data Manager‬‬
‫• ﻣﺪﻳﺮ اﻟﻨﺴﺦ اﻻﺣﺘﻴﺎﻃﻲ ﻟﻠﺒﻴﺎﻧﺎت ‪Backup and Recovery Manager‬‬
‫• ورﻗﺔ ﻋﻤﻞ اﻻﺳﺘﻌﻼم ‪SQL Worksheet‬‬
‫• ﺷﺮﻳﻂ أدوات اﻟﻤﺴﺆول ‪Administrator Toolbar‬‬

‫‪ -2‬اﻟﻤﺴﺎﻋﺪون ‪Assistants‬‬
‫‪ -3‬ﻧﻈﺎم اﻻﺳﺘﻌﻼم ‪SQL*PLUS‬‬

‫واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺞ ﻣﻜﻮﻧﺎت ﺣﺰﻣﺔ اﻟﺒﺮاﻣﺞ ﻟﻠﻤﺴﺘﻔﻴﺪ ‪Client‬‬

‫ﻧﻈﺎم اﻻﺳﺘﻌﻼم ‪SQL*PLUS‬‬


‫اﻟﻤﺴﺎﻋﺪون ‪Assistants‬‬
‫ﻣﺪﻳﺮ اﻟﻤﺸﺮوع ‪Enterprise Manager‬‬
‫ﻣﺘﺤﻜﻢ ﻣﺪﻳﺮ اﻟﻤﺸﺮوع‬ ‫ورﻗﺔ ﻋﻤﻞ اﻻﺳﺘﻌﻼم ‪ SQL‬ﻣﺪﻳﺮ ﻣﺨﻄﻂ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت‬
‫‪Enterprise Manager‬‬ ‫‪Schema Manager‬‬ ‫‪Worksheet‬‬

‫ﻣﺪﻳﺮ اﻟﺴﺮﻳﺔ ‪Security‬‬ ‫ﻣﺪﻳﺮ اﻟﻨﺴﺦ اﻻﺣﺘﻴﺎﻃﻲ ﻟﻠﺒﻴﺎﻧﺎت‬ ‫ﻣﺪﻳﺮ اﻟﻄﺒﻌﺔ ‪Instance‬‬
‫‪Manager‬‬ ‫‪Backup and Recovery‬‬ ‫‪Manager‬‬
‫‪Manager‬‬

‫ﻣﺪﻳﺮ اﻟﺒﻴﺎﻧﺎت ‪Data‬‬ ‫ﻣﺪﻳﺮ اﻟﺘﺨﺰﻳﻦ ‪Storage‬‬ ‫ﺷﺮﻳﻂ أدوات اﻟﻤﺴﺆول‬


‫‪Manager‬‬ ‫‪Manager‬‬ ‫‪Administrator‬‬
‫‪Toolbar‬‬

‫ﻣﻠﺨﺺ اﻟﻮﺣﺪة‬

‫ﺗﻨﺎوﺑﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ ﻧﻌﺮﻳﻒ اﻟﺘﺮآﻴﺐ اﻟﺪاﺧﻠﻲ ﻟﻨﻈﺎم أوراآﻞ وأهﻢ ﻣﻜﻮﻧﺎﺗﻪ واﻟﻌﻼﻗﺔ ﺑﻴﻦ اﻟﺠﺪاول‬
‫‪ ,‬وآﺬﻟﻚ ﻋﻜﻠﻴﺔ ﻧﻤﺬﺟﺔ اﻟﻌﻼﻗﺔ ﻋﻠﻰ اﻟﺠﺪاول وﺗﻢ ﺗﻌﺮﻳﻒ اﻟﺨﺎدم واﻟﻤﺴﺘﻔﻴﺪ واﻟﻌﻼﻗﺔ ﺑﻴﻨﻬﻤﺎ ‪.‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪12 http://www.boosla.com‬‬

‫ﺟﻤﻞ ‪ SQL‬اﻟﺒﺴﻴﻄﺔ‬

‫أهﺪاف اﻟﻔﺼﻞ‬

‫ﻧﺘﺎاول ﻋﻤﻠﻴﺔ اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻓﻲ ﺣﺎﻻت ﻣﺨﺘﻠﻔﺔ ﻣﺸﺘﺨﺪﻣﻴﻦ ﻓﻲ ذﻟﻚ ﺟﻤﻠﺔ ‪ SELECT‬وﻓﻲ‬
‫ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ ﺳﺘﻜﻮن إن ﺷﺎء اﷲ ﻗﺎدر ﻋﻠﻰ ‪:‬‬
‫• اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ ‪ SELECT‬اﻟﺒﺴﻴﻄﺔ‬
‫• ﻓﻬﻢ ﻣﺘﻄﻠﺒﺎت وإرﺷﺎدات آﺘﺎﺑﺔ ﺟﻤﻞ ‪SQL‬‬
‫• اﺳﺘﺨﺪام اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ وأوﻟﻮﻳﺎت ﺗﻨﻔﻴﺬهﺎ ﻣﻊ ﺟﻤﻞ ‪SQL‬‬
‫• اﺳﺘﺨﺪام اﻟﺠﻤﻞ اﻹﻟﺤﺎﻗﻴﺔ ﻋﻠﻰ اﻟﺒﻴﺎﻧﺎت‬
‫• اﺳﺘﺨﺪام ﻋﺒﺎرة ‪ DISTINCT‬ﻟﻤﻨﻊ ﺗﻜﺮار ﻋﺮض اﻟﺒﻴﺎﻧﺎت‬
‫• ﻋﺮض ﻣﻮاﺻﻔﺎت اﻟﺠﺪول‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪13 http://www.boosla.com‬‬

‫أﺳﺎﺳﻴﺎت ﺟﻤﻠﺔ ‪SELECT‬‬

‫ﺟﻤﻠﺔ ‪SELECT‬‬
‫ﺗﺴﺘﺨﺪم ﺟﻤﻠﺔ ‪ SELECT‬ﻻﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ﺟﺪول أو ﻋﺪة ﺟﺪاول ﺣﻴﺚ أن ﻋﻤﻠﻴﺔ‬
‫اﻻﺳﺘﺮﺟﺎع ﻻ ﺗﻌﺪل ﻓﻲ هﺬﻩ اﻟﺒﻴﺎﻧﺎت وﻳﻤﻜﻨﻨﺎ ﻣﻦ ﺧﻼل ﺟﻤﻠﺔ ‪ SELECT‬أن ﻧﻘﻮم ﺑﺎﻟﺘﺎﻟﻲ‪:‬‬

‫‪ -1‬اﺧﺘﻴﺎر وﻋﺮض ﻣﺠﻤﻮﻋﺔ ﻣﻌﻴﻨﺔ ﻣﻦ اﻟﺴﺠﻼت اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﺠﺪول‬


‫‪ -2‬اﺳﺘﺮﺟﺎع ﺑﻴﺎﻧﺎت ﺑﻌﺾ ﺣﻘﻮل اﻟﺠﺪول‬
‫‪ -3‬اﺳﺘﺮﺟﺎع ﺑﻴﺎﻧﺎت ﻣﺨﺰﻧﺔ ﻓﻲ ﺟﺪاول ﻣﺨﺘﻠﻔﺔ‬

‫ﻣﻼﺣﻈﺔ‬
‫ﻳﻤﻜﻦ أن ﻧﺴﺘﺨﺪم آﻞ أو ﺑﻌﺾ هﺬﻩ اﻟﻤﺰاﻳﺎ ﻓﻲ ﺟﻤﻠﺔ اﺳﺘﻔﺴﺎر واﺣﺪة‬

‫ﻣﻼﺣﻈﺔ‬
‫أواﻣﺮ ﻣﺤﺮر‪SQL*PLUs‬‬
‫هﻨﺎﻟﻚ ﺑﻌﺾ اﻟﻮاﻣﺮ اﻟﺒﺴﻴﻄﺔ اﻟﺘﻲ ﺳﺘﺴﺎﻋﺪك ﻓﻲ آﺘﺎﺑﺔ وﺗﺤﺮﻳﺮ وﺗﻨﻔﻴﺬ اﻷواﻣﺮ ﻋﻠﻰ ﻣﺤﺮر ‪SQL‬‬
‫وﻣﻨﻬﺎ‬
‫‪ -1‬اﻻﻣﺮ ‪ EDIT‬وﻳﻤﻜﻦ آﺘﺎﺑﺘﻪ ‪ : ED‬ﻳﺴﺘﺨﺪم هﺬا اﻷﻣﺮ ﻟﺘﺤﺮﻳﺮ ﺁﺧﺮ اﻣﺮ ﺗﻢ آﺘﺎﺑﺘﻪ ﻋﻠﻰ‬
‫ﻣﺮر ‪ SQL‬وﻋﻨﺪ ﺗﻨﻔﻴﺬ هﺬا اﻷﻣﺮ ﺳﺘﻔﺘﺢ ﻟﻚ ﺷﺎﺷﺔ اﻟﻤﺤﺮر )اﻟﻤﻔﻜﺮة( اﻟﺘﻲ ﻳﻤﻜﻨﻚ ﺧﻼﻟﻬﺎ‬
‫اﻋﺎدة ﺗﺤﺮﻳﺮ اﻷﻣﺮ وﻋﻨﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ذﻟﻚ اﺣﻔﻆ اﻟﻤﺮ ﺛﻢ اﻏﻠﻖ ﺷﺎﺷﺔ اﻟﻤﻔﻜﺮة وﻟﻜﻦ ﻻﺣﻆ‬
‫ﻻ ﺗﻜﺘﺐ اﻟﻔﺎﺻﻠﺔ اﻟﻤﻨﻘﻮﻃﺔ );( ﺑﻌﺪ ﻧﻬﺎﻳﺔ اﻷﻣﺮ ﻓﻲ هﺬﻩ اﻟﺤﺎﻟﺔ ﻓﻘﻂ‬
‫‪ -2‬اﻷﻣﺮ ‪ R‬وﻃﺮﻳﻘﺔ آﺘﺎﺑﺘﻪ )‪ (/‬وﻳﺴﺘﺨﺪم ﻻﻋﺎدة ﺗﻨﻔﻴﺬ اﺧﺮ اﻣﺮ ‪SQL‬ﻣﺤﻔﻮظ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم ﻟﺠﻤﻠﺔ ‪SELECT‬‬

‫}… ‪SELECT { * , COLUMN [alies],‬‬


‫; ‪FROM table_name‬‬

‫ﺣﻴﺚ أن‬
‫‪ COLUMN‬اﺳﻢ اﻟﺤﻘﻞ‬
‫‪ table_name‬اﺳﻢ اﻟﺠﺪول‬
‫ﺗﺴﻤﻴﺔ اﻟﻌﻤﻮد‬ ‫‪alies‬‬

‫ﻳﻤﻜﻦ أن ﻧﻀﻊ اﻟﺮﻣﺰ * ﻟﻠﺪﻻﻟﺔ ﻋﻠﻰ اﺳﺘﺮﺟﺎع ﺟﻤﻴﻊ ﺣﻘﻮل اﻟﺠﺪول‬

‫آﺘﺎﺑﺔ ﺟﻤﻞ ‪SQL‬‬


‫ﻧﻮﺿﺢ ﻓﻴﻤﺎ ﻳﻠﻲ ﺑﻌﺾ اﻟﻘﻮاﻋﺪ اﻹرﺷﺎدﻳﺔ اﻟﺘﻲ ﻳﺠﺐ أن ﺗﻮﺿﻊ ﺑﻌﻴﻦ اﻻﻋﺘﺒﺎر ﻏﻨﺪ آﺘﺎﺑﺔ ﺟﻤﻞ‬
‫‪SQL‬‬

‫‪ -1‬ﻳﻤﻜﻦ آﺘﺎﺑﺔ ﺟﻤﻞ ‪ SQL‬ﺑﺎﻟﺤﺮوف اﻟﻜﺒﻴﺮة أو اﻟﺼﻐﻴﺮة‬


‫‪ -2‬ﻳﻤﻜﻦ آﺘﺎﺑﺔ ﺟﻤﻞ ‪ SQL‬ﻓﻲ ﻋﺬة أﺳﻄﺮ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪14 http://www.boosla.com‬‬

‫‪ -3‬ﻻ ﻳﻤﻜﻦ ﻓﺼﻞ اﻟﻜﻠﻤﺎت اﻟﻤﺤﺠﻮزة ﻋﺒﺮ اﻟﺴﻄﻮر ﻣﺜﻞ ‪FROM‬‬


‫‪ -4‬اﺗﺮك ﻣﺴﺎﻗﺎت ﺑﻴﻦ ﻣﻜﻮﻧﺎت اﻟﺠﻤﻠﺔ ﻟﺘﺴﻬﻴﻞ ﻋﻤﻠﻴﺔ اﻟﻘﺮاءة‬
‫‪ -5‬ﻓﻲ ﺑﺮﻧﺎﻣﺞ ‪ SQL *PLUS‬ﺗﻜﺘﺐ اﻷواﻣﺮ ﻣﻊ ﻣﺆﺷﺮ ‪ SQL‬وﻳﺘﻢ ﺗﺨﺰﻳﻦ هﺬا اﻟﻤﺮ‬
‫ﻣﺒﺎﺷﺮة ﻓﻲ اﻟﺬاآﺮة‬

‫ﻣﺜﺎل‬
‫; ‪S E L E C T * F R OM s _ d e p t‬‬

‫‪ID‬‬ ‫‪NAME‬‬ ‫‪REGION_ID‬‬


‫‪--------‬‬ ‫‪-------------‬‬ ‫‪----------‬‬

‫‪10 Finance‬‬ ‫‪1‬‬


‫‪31 Sales‬‬ ‫‪1‬‬
‫‪32 Sales‬‬ ‫‪2‬‬
‫‪33 Sales‬‬ ‫‪3‬‬
‫‪34 Sales‬‬ ‫‪4‬‬
‫‪35 Sales‬‬ ‫‪5‬‬
‫‪41 Operations‬‬ ‫‪1‬‬
‫‪42 Operations‬‬ ‫‪2‬‬
‫‪43 Operations‬‬ ‫‪3‬‬
‫‪44 Operations‬‬ ‫‪4‬‬
‫‪45 Operations‬‬ ‫‪5‬‬
‫‪50 Administration‬‬ ‫‪1‬‬
‫‪12 rows selected.‬‬

‫ﻟﺘﻨﻔﻴﺬ ﺟﻤﻞ ‪SQL‬‬


‫ﻧﻀﻊ ﻓﺎﺻﻠﺔ ﻣﻨﻘﻮﻃﺔ ﻓﻲ ﻧﻬﺎﻳﺔ اﻟﺠﻤﻠﺔ ﻓﻲ ﻣﺆﺷﺮ ‪SQL‬‬ ‫‪-1‬‬
‫ﻧﻀﻊ ﻋﻼﻣﺔ ‪ /‬ﻓﻲ ﻧﻬﺎﻳﺔ اﻟﺠﻤﻠﺔ ﻓﻲ ﻣﺆﺷﺮ ‪SQL‬‬ ‫‪-2‬‬
‫ﻧﻀﻊ ﻋﻼﻣﺔ ‪ /‬ﻓﻲ ﻧﻬﺎﻳﺔ اﻟﺠﻤﻠﺔ ﻓﻲ اﻷﻣﺮ ﻓﻲ اﻟﺬاآﺮة )‪(BUFFER‬‬ ‫‪-3‬‬
‫آﺘﺎﺑﺔ ﻋﺒﺎرة ‪ RUN‬ﻓﻲ ﻧﻬﺎﻳﺔ اﻟﺠﻤﻠﺔ ﻓﻲ ﻣﺆﺷﺮ ‪SQL‬‬ ‫‪-4‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪15 http://www.boosla.com‬‬

‫اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ‬

‫ﻳﻤﻜﻦ أن ﻧﺴﺘﺨﺪم اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ ﻋﻨﺪ ﻋﺮض اﻟﺒﻴﺎﻧﺎت دون أن ﺗﺆﺛﺮ هﺬﻩ اﻟﻤﻌﺎﻟﺠﺔ ﻋﻠﻰ‬
‫اﻟﺒﻴﺎاﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﺠﺪول ‪ ،‬وﻳﻤﻜﻦ أن ﻳﺤﺘﻮي اﻟﺘﻌﺒﻴﺮ اﻟﺤﺴﺎﺑﻲ ﻋﻠﻰ اﺳﻢ اﻟﺤﻘﻞ ﻗﻴﻤﺔ ﺛﺎﺑﺘﺔ و‬
‫اﻟﻌﻤﻠﻴﺔ اﻟﺤﺴﺎﺑﻴﺔ‬

‫اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ‬

‫اﻟﻌﻤﻠﻴﺎت اﻟﺘﻲ ﻳﻤﻜﻦ أن ﺗﺴﺘﺨﺪم هﻲ‪:‬‬


‫‪+‬‬ ‫‪ -1‬اﻟﺠﻤﻊ‬
‫‪-‬‬ ‫‪ -2‬اﻟﻄﺮح‬
‫÷‬ ‫‪ -3‬اﻟﻘﺴﻤﺔ‬
‫*‬ ‫‪ -4‬اﻟﻀﺮب‬

‫وﻳﻤﻜﻦ اﺳﺘﺨﺪام هﺬﻩ اﻟﻌﻤﻠﻴﺎت ﻓﻲ ﺣﻤﻴﻊ أﺟﺰاء ﺟﻤﻠﺔ‪ SELECT‬ﻋﺪا اﻟﺠﺰء اﻟﺨﺎص ﺑـ‪FROM‬‬

‫أوﻟﻮﻳﺎت اﻟﻌﻤﻠﻴﺎت‬
‫‪ -1‬اﻻﻓﻮاس اﻟﺪاﺧﻠﻴﺔ ﺛﻢ اﻟﺨﺎرﺟﻴﺔ ﺛﻢ اﻻﺳﺲ‬
‫‪ -2‬اﻟﻀﺮب واﻟﻘﺴﻤﺔ‬
‫‪ -3‬اﻟﺠﻤﻊ واﻟﻄﺮح‬

‫ﻣﻼﺣﻈﺔ‬
‫اﻟﻌﻤﻠﻴﺎت اﻟﺘﻲ ﻟﻬﺎ ﻧﻔﺲ اﻻوﻟﻴﺔ آﺎﻟﺠﻤﻊ واﻟﻄﺮح ﺗﻨﻔﺬ ﻣﻦ اﻟﻴﺴﺎر اﻟﻰ اﻟﻴﻤﻴﻦ‬

‫اﻟﻌﻤﻠﻴﺔ اﻹﻟﺤﺎﻗﻴﺔ‬

‫ﻳﻤﻜﻦ أن ﻧﺠﺮي ﻋﻤﻠﻴﺔ إﻟﺤﺎق ﻋﺪد ﻣﻦ اﻷﻋﻤﺪة ﻟﻠﺠﺪول أو ﻣﺠﻤﻮﻋﺔ ﺣﺮﻓﻴﺔ ﻧﺼﻴﺔ إﻟﻰ ﺣﻘﻮل‬
‫أﺧﺮى ﻋﻨﺪ اﻟﻌﺮض ﺑﺎﺳﺘﺨﺪام اﻟﻌﻤﻠﻴﺔ اﻹﻟﺤﺎﻗﻴﺔ ||‬

‫ﻣﺜﺎل‬
‫‪SELECT‬‬ ‫‪f i r s t _ n a m e | | l a s t _ n am e‬‬
‫‪FROM‬‬ ‫;‪s_emp‬‬

‫‪Employees‬‬
‫‪-------------------------------------------------‬‬
‫‪CarmenVelasquez‬‬
‫‪LaDorisNgao‬‬
‫‪MidoriNagayama‬‬
‫‪MarkQuick-To-See‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪16 http://www.boosla.com‬‬

‫‪AudryRopeburn‬‬
‫‪MollyUrguhart‬‬
‫‪...‬‬

‫ﻧﻼﺣﻆ ان اﻻﺳﻢ اﻻول اﺗﺼﻞ ﺑﺎﻻﺳﻢ اﻻﺧﻴﺮ ﺑﺪون وﺟﻮد ﻣﺴﺎﻓﺎت ﻓﻈﻬﺮ آﺎﻧﻪ اﺳﻢ واﺣﺪ وﻟﻜﻲ‬
‫ﺗﻮﺟﺪ ﻣﺴﺎﻓﺎت ﻧﻜﺘﺐ‬

‫;‪SELECT first_name ||' '|| last_name FROM s_emp‬‬

‫اﺳﺘﺨﺪام ﻋﺒﺎرة ‪DISTINCT‬‬

‫ﺗﺴﺘﺨﺪم ﻋﺒﺎرة ‪ DISTINCT‬ﻟﻤﻨﻊ ﺗﻜﺮار ﻇﻬﻮر ﺑﻴﺎﻧﺎت اﻟﺴﺠﻞ اﻟﻤﺴﺘﺮﺟﻊ ﻓﻤﺜﻼ إذا أردﻧﺎ أن‬
‫ﻧﻌﺮف ﻋﻠﻰ اﻟﻮاﺋﻒ اﻟﺘﻲ ﻳﻨﺘﺴﺐ إﻟﻴﻬﺎ اﻟﻤﻮﻇﻔﻮن واﻟﻤﺨﺰﻧﺔ ﻓﻲ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ ﻧﺠﺪ أن هﻨﺎﻟﻚ‬
‫وﻇﺎﺋﻒ ﺗﺘﻜﺮر ﺣﺴﺐ ﻋﺪد اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻳﻨﺘﻤﻮن إﻟﻴﻬﺎ ﻟﻤﻨﻊ ﺗﻜﺮار ﻧﺴﺘﺨﺪم ﻋﺒﺎرة‬
‫‪DISTINCT‬‬

‫وﻳﺄﺧﺬ اﻷﻣﺮ ‪ SELECT‬اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‪:‬‬


‫}… ‪SELECT [DITINCT] { * , COLUMN [alies],‬‬
‫; ‪FROM table_name‬‬

‫ﺣﻴﺚ أن‬
‫‪ COLUMN‬اﺳﻢ اﻟﺤﻘﻞ‬
‫‪ table_name‬اﺳﻢ اﻟﺠﺪول‬
‫ﺗﺴﻤﻴﺔ اﻟﻌﻤﻮد‬ ‫‪alies‬‬
‫‪ DITINCT‬ﻟﻤﻨﻊ اﻟﺘﻜﺮار‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬

‫ﺗﻨﺎوﻟﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ آﺘﺎﺑﺔ ﺟﻤﻞ ‪ SQL‬اﻟﺒﺴﻴﻄﻮ )ﺟﻤﻠﺔ ‪ (SELECT‬اﻟﺘﻲ ﺗﺴﺘﺨﺪم ﻓﻲ اﺳﺘﺮﺟﺎع‬
‫اﻟﺒﻴﺎﻧﺎت وآﺬﻟﻚ ﺑﻌﺾ اﻟﻘﻮاﻋﺪ اﻹرﺷﺎدﻳﺔ اﻟﺘﻲ ﻳﺠﺐ اﺗﺒﺎﻋﻬﺎ ﻋﻨﺪ آﺘﺎﺑﺔ وﺗﻨﻔﻴﺬ ﺟﻤﻞ اﻟـ‪SQL‬‬
‫آﻤﺎ ﺗﻨﺎوﻟﻨﺎ اﺳﺘﺨﺪام اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ ﻣﻊ ﺟﻤﻠﺔ ‪ SELECT‬واﻟﻌﻤﻠﻴﺔ اﻹﻟﺤﺎﻗﻴﺔ وآﺬﻟﻚ ﻋﺒﺎرة‬
‫‪ DISTINCT‬اﻟﺘﻲ ﺗﺴﺘﺨﺪم ﻟﻤﻨﻊ ﺗﻜﺮار ﻇﻬﻮر اﻟﺴﺠﻼت‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪17 http://www.boosla.com‬‬

‫اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﺑﺸﺮوط ﺗﺮﺗﻴﺒﻬﺎ‬

‫اهﺪاف اﻟﻔﺼﻞ‬
‫‪ -1‬اﻟﻤﻌﺮﻓﺔ اﻟﺘﺎﻣﺔ ﻷﺳﻤﺎء اﻟﺠﺪاول وأﺳﻤﺎء اﻟﺤﻘﻮل وﺧﺼﺎﺋﺼﻬﺎ واﻧﻮاع اﻟﺒﻴﺎﻧﺎت‬
‫‪ -2‬اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺟﻤﻠﺔ ‪ SQL‬اﻟﺒﺴﻴﻄﺔ )‪(SELECT Statement‬‬
‫‪ -3‬اﺳﺘﺨﺪام أواﻣﺮ ﻣﺤﺮر ‪SQL‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪18 http://www.boosla.com‬‬

‫اﺳﺘﺨﺪام ﺟﻤﻠﺔ اﻟﺸﺮط ‪WHERE CLAUSE‬‬


‫ﻣﻘﺪﻣﺔ‬

‫ﻟﻘﺪ ﻗﻤﻨﺎ ﻓﻲ اﻟﻮﺣﺪة اﻟﺴﺎﺑﻘﺔ ﺑﺎﻟﺘﻌﺮف اﻟﻰ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم اﻟﺒﺴﻴﻂ )‪(SELECT Statement‬‬
‫اﻟﺘﻲ ﻣﻦ ﺧﻼﻟﻬﺎ ﺗﻢ اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﻦ اﻟﺠﺪاول ‪ .‬وﻓﻲ هﺬا اﻟﻔﺼﻞ ﺳﻨﺘﺎﺑﻊ اﻟﺤﺪﻳﺚ ﻋﻦ هﺬﻩ‬
‫اﻟﺠﻤﻠﺔ ﻳﺸﻜﻞ أوﺳﻊ ‪ ،‬ﺣﻴﺚ ﺳﻨﺴﺘﺮﺟﻊ اﻟﺒﻴﺎﻧﺎت ﻣﻦ اﻟﺠﺪاول ﺑﻨﺎء ﻋﻠﻰ ﺷﺮوط ﻣﻌﻴﻨﺔ ‪ ،‬أو ﻣﺮﺗﺒﺔ‬
‫ﺣﺴﺐ ﺑﻴﺎﻧﺎت ﺣﻘﻮل ﻣﻌﻴﻨﺔ ‪ ،‬أي ﺳﻨﺪرس اﻟﻤﻮر اﻟﻤﺘﻌﻠﻘﺔ ﺑﺠﻤﻠﺔ اﻟﺸﺮط ﻓﻲ ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ‪ ،‬ﻣﻦ‬
‫ﺣﻴﺚ اﻟﻤﻌﺎﻣﻼت اﻟﺸﺮﻃﻴﺔ وﻃﺮﻳﻘﺔ اﻟﺘﻌﺒﻴﺮ ﻋﻦ اﻟﺸﺮط واﻟﺘﺮﺗﻴﺐ اﻟﺘﺼﺎﻋﺪي واﻟﺘﺮﺗﻴﺐ اﻟﺘﺼﺎﻋﺪي‬
‫واﻟﺘﺮﺗﻴﺐ اﻟﺘﻨﺎزﻟﻲ ﻟﻠﺒﻴﺎﻧﺎت‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ ﻟﺠﻤﻠﺔ اﻟﺸﺮط‬

‫}*|‪SELECT {Field1, Field2, ...,...‬‬


‫‪FROM Table1‬‬
‫;‪WHERE Condition‬‬

‫ﺣﻴﺚ أن‬

‫أﺳﻤﺎء اﻟﺤﻘﻮل اﻟﺘﻲ ﺳﻴﺎم اﺳﺘﺮﺟﺎع ﺑﻴﺎﻧﺎﺗﻬﺎ‬ ‫‪Field1.Field2‬‬


‫أﺳﻢ اﻟﺠﺪول اﻟﺬي ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﻨﻪ‬ ‫‪Table1‬‬
‫ﺟﻤﻠﺔ ﺷﺮﻃﻴﺔ أو أآﺜﺮ ﺗﻜﻮن ﻧﺘﻴﺠﺘﻬﺎ إﻣﺎ ‪ True‬او ‪ False‬وﺗﺘﻜﻮن ﻣﻦ‬ ‫‪Condition‬‬
‫أﺳﻤﺎء ﺣﻘﻮل وﺗﻌﺒﻴﺮات وﻣﻌﺎﻣﻼت‬

‫اﻟﺸﺮح‬

‫ﺗﺴﺘﺨﺪم ﺟﻤﻠﺔ ‪ WHERE‬ﻟﺤﺼﺮ اﻟﺒﻴﺎﻧﺎت ﻻﺗﻲ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎﻋﻬﺎ ﻣﻦ اﻟﺠﺪاول وهﻲ ﺗﺘﻮي ﻋﻠﻰ‬
‫ﺷﺮط وﺗﻘﻊ ﻣﺒﺎﺷﺮة ﺑﻌﺪ اﻟﻤﻘﻄﻊ ‪ FROM‬وﻋﻨﺪ ﺗﻨﻔﻴﺬ اﻟﺠﻤﻠﺔ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎﻋﻬﺎ ﺑﻴﺎﻧﺎت اﻟﺤﻘﻮل‬
‫اﻟﻤﺬآﻮرة اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط اﻟﻤﺬآﻮر ﻓﻲ ﺟﻤﻠﺔ ‪ WHERE‬وﻳﻤﻜﻦ أن ﺗﻘﺎرن اﻟﺠﻤﻠﺔ اﻟﺸﺮﻃﻴﺔ ﺑﻴﻦ‬
‫ﻗﻴﻢ أو ﺣﻘﻮل ﻓﻲ اﻟﺠﺪول أو ﺗﻌﺒﻴﺮات ﺣﺴﺎﺑﻴﺔ أي أن ﺟﻤﻠﺔ ‪ WHERE‬ﺗﺤﺘﻮي ﻋﻠﻰ ﻣﺎﻳﻠﻲ‪:‬‬

‫أﺳﻤﺎء اﻟﺤﻘﻮل‬ ‫•‬


‫ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ‬ ‫•‬
‫ﻗﻴﻢ ﺛﺎﺑﺘﺔ‬ ‫•‬
‫ﻣﺘﻐﻴﺮات وﺗﻐﺒﻴﺮات ﺣﺴﺎﺑﻴﺔ‬ ‫•‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪19 http://www.boosla.com‬‬

‫اﻷﻣﻮر اﻟﺘﻲ ﻳﺠﺐ أﺧﺬهﺎ ﺑﻌﻴﻦ اﻻﻋﺘﺒﺎر‬

‫‪ -1‬ﻋﻨﺪ اﺳﺘﺨﺪام ﺣﻘﻮل اﻟﻨﺺ وﺣﻘﻮل اﻟﺘﺎرﻳﺦ ﻓﻲ ﺟﻤﻠﺔ اﻟﺸﺮط ﻳﺠﺐ وﺿﻊ اﻟﻘﻴﻢ ﺑﻴﻦ ﻋﻼﻣﺘﻲ‬
‫ﺗﻨﺼﻴﺺ ﻣﻔﺮدﺗﻴﻦ )‘ ‘(‬
‫‪ -2‬ﻓﻲ ﺣﺎﻟﺔ اﻟﺤﻘﻮل اﻟﻨﺼﻴﺔ ﻳﺠﺐ ﻣﺮاﻋﺎة ﺣﺎﻟﺔ اﻷﺣﺮف آﺒﻴﺮة أو ﺻﻐﻴﺮة‬
‫‪ -3‬ﻓﻲ اﻟﺔ ﺣﻘﻮل اﻟﺘﺎرﻳﺦ ﻳﺠﺐ ﻣﺮاﻋﺎة ﺻﻴﻐﺔ اﻟﺘﺎرﻳﺦ )‪ (FORMAT‬واﻟﺼﻴﻐﺔ اﻷﺳﻠﺴﻴﺔ ﻟﻠﺘﺎرﻳﺦ‬
‫هﻲ آﻤﺎ ﻳﻠﻲ ‪DD-MON-YY‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪20 http://www.boosla.com‬‬

‫ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ ‪COMPARISON OPERATORS‬‬


‫ﺗﺸﻤﻞ ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ اﻟﺮﻣﻮز اﻟﺘﺎﻟﻴﺔ‪:‬‬

‫اﻟﻤﻌﻨﻰ‬ ‫اﻟﻤﻌﺎﻣﻞ‬
‫ﻳﺴﺎوي‬ ‫=‬
‫أآﺒﺮ ﻣﻦ‬ ‫>‬
‫أﻗﻞ ﻣﻦ‬ ‫<‬
‫أآﺒﺮ ﻣﻦ أو ﻳﺴﺎوي‬ ‫=>‬
‫اﻗﻞ ﻣﻦ أو ﻳﺴﺎوي‬ ‫=<‬
‫ﻻ ﻳﺴﺎوي‬ ‫><‬

‫ﺗﺴﺘﺨﺪم ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ ﻓﻲ ﺟﻤﻠﺔ اﻟﺸﺮط ﻟﻤﻘﺎرﻧﺔ ﺗﻌﺒﻴﺮ ﺑﺂﺧﺮ ﻓﻲ ﺟﻤﻠﺔ ‪ WHERE‬آﻤﺎ ﻓﻲ‬
‫اﻟﺼﻴﻐﺔ اﻟﺘﺎﻟﻴﺔ ‪:‬‬

‫ﺗﻌﺒﲑ ‪ OPERATOR‬ﺗﻌﺒﲑ ‪WHERE‬‬

‫ﻣﺜﺎل‬

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

‫ﻣﻌﺎﻣﻼت ﻣﻘﺎرﻧﺔ أﺧﺮى‬

‫اﻟﻤﻌﻨﻰ‬ ‫ﻧﻔﻰ اﻟﻤﻌﺎﻣﻞ‬ ‫اﻟﻤﻌﺎﻣﻞ‬


‫ﺑﻴﻦ ﻗﻴﻤﺘﻴﻦ‬ ‫‪NOT BETWEEN‬‬ ‫‪BETWEEN‬‬
‫ﺿﻤﻦ ﻗﺎﺋﻤﺔ ﻣﻦ اﻟﻘﻴﻢ‬ ‫‪NOT IN‬‬ ‫‪IN‬‬
‫ﻣﻄﺎﺑﻘﺔ ﻧﻤﻂ اﻟﻨﺺ‬ ‫‪NOT LIKE‬‬ ‫‪LIKE‬‬
‫هﻞ هﻲ ﻗﺴﻤﺔ ﻓﺎرﻏﺔ‬ ‫‪IS NOT NULL‬‬ ‫‪IS NULL‬‬

‫‪ -1‬اﻟﻤﻌﺎﻣﻞ ‪BETWEEN‬‬
‫ﻳﺴﺘﺨﺪم هﺬا اﻟﻤﻌﺎﻣﻞ ﻻﺳﺘﺮﺟﺎع ﺑﻴﺎﻧﺎت اﻟﺼﻔﻮف اﻟﺘﻲ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻣﺪى ﻣﻦ اﻟﻘﻴﻢ أي اﻟﺒﻴﺎﻧﺎت اﻟﺘﻲ‬
‫ﺗﻘﻊ ﺑﻴﻦ ﻗﻴﻤﺘﻴﻦ‬

‫ﻣﺜﺎل‬

‫‪SELECT * FROM S_EMP‬‬


‫;‪WHERE sal BETWEEN 1500 AND 2500‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪21 http://www.boosla.com‬‬

‫أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع ﺟﻤﻴﻊ ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ اﻗﻊ رواﺗﺒﻬﻢ ﺑﻴﻦ ‪1500‬و ‪2500‬‬

‫ﻣﻼﺣﻈﺔ‬
‫ﺳﺘﻢ اﺳﺘﺮﺟﺎع ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻒ اﻟﺬي ﻳﺒﺒﻠﻎ راﺗﺒﻪ ﺗﻤﺎﻣﺎ ‪ 1500‬أو ‪ 2500‬أي أن ﺟﻤﻠﺔ‬
‫‪ BETWEEN‬ﺗﺘﻀﻤﻦ اﻟﺤﺪ اﻷﻋﻠﻰ واﻟﺤﺪ اﻷدﻧﻰ ﻟﻠﻘﻴﻢ اﻟﺘﻲ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎﻋﻬﺎ‬

‫‪ -2‬اﻟﻤﻌﺎﻣﻞ ‪IN‬‬

‫ﻳﺴﺘﺨﺪم هﺬا اﻟﻤﻌﺎﻣﻞ ﻟﻠﺒﺤﺚ ﻋﻦ ﻗﻴﻤﺔ داﺧﻞ ﻗﺎﺋﻤﺔ ﻣﻦ اﻟﻘﻴﻢ ﻓﺘﺤﺘﻮي هﺬﻩ اﻟﻘﺎﺋﻤﺔ ﻗﻴﻤﺎ ﺛﺎﺑﺘﺔ أو ﻗﺪ‬
‫ﺗﻜﻮن هﺬﻩ اﻟﻘﺎﺋﻤﺔ ﻋﺒﺎرة ﻋﻦ ﺟﻤﻠﺔ اﺳﺘﻌﻼم ﻓﺮﻋﻲ‬

‫ﻣﺜﺎل‬

‫‪SELECT name, sal , deptno FROM S_EMP‬‬


‫;)‪WHERE detno IN (10,30‬‬

‫أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع اﺳﻢ اﻟﻤﻮﻇﻒ وراﺗﺒﻪ ورﻗﻢ اﻟﻘﺴﻢ اﻟﺬي ﻳﻌﻤﻞ ﺑﻪ ﻟﻠﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻳﻌﻤﻠﻮن ﻓﻲ‬
‫ﻗﺴﻢ رﻗﻢ ‪ 10‬أو ﻗﺴﻢ رﻗﻢ ‪30‬‬

‫‪ -3‬اﻟﻤﻌﺎﻣﻞ ‪.LIKE‬‬

‫ﻳﺴﺘﺨﺪم هﺬا اﻟﻤﻌﺎﻣﻞ ﻟﻠﺒﺤﺚ ﻋﻦ ﻧﺺ ﻣﻌﻴﻦ داﺧﻞ ﺣﻘﻞ ﻧﺼﻲ ‪ ،‬ﺣﻴﺚ ﺳﻴﺘﻢ ﻣﻄﺎﺑﻘﺔ ﺣﺮوف اﻟﻨﺺ‬
‫اﻟﻤﺬآﺮة ﻓﻲ ﺟﻤﻠﺔ اﻟﺸﺮط‬

‫ﻣﺜﺎل‬
‫‪SELECT * FROM S_EMP‬‬
‫;’‪WHERE name LIKE ‘S%‬‬

‫أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع ﺟﻤﻴﻊ ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﺗﺒﺪأ أﺳﻤﺎؤهﻢ ﺑﺤﺮف ‪S‬‬

‫ﻣﻼﺣﻈﺔ‬
‫ﺗﺴﺘﺨﺪم اﻻﺷﺎرة ‪ %‬ﻋﻮﺿﺎ ﻋﻦ أي ﻗﻴﻤﺔ ﻧﺼﻴﺔ ‪ ،‬ﻗﺪ ﺗﻜﻮن ﻻ ﺷﻲء أو أي ﻋﺪد ﻣﻦ اﻟﺤﺮوف ﻟﻠﺒﺤﺚ‬
‫ﻣﺜﻼ ﻋﻦ اﺳﻢ ﻣﻌﻴﻦ ﻳﻨﺘﻬﻲ ﺑﺤﺮف ‪ A‬ﻧﻜﺘﺐ ‘‪ ’%A‬وﻟﻠﺒﺤﺚ ﻋﻦ ﻧﺺ ﻳﺤﺘﻮي ﺣﺮف ‪ A‬ﻧﻜﺘﺐ‬
‫‘‪ ’%A%‬وهﻜﺬا ﺑﺈﻣﻜﺎﻧﻨﺎ أن ﻧﺒﺤﺚ ﻋﻦ أي ﻣﻘﻄﻊ داﺧﻞ ﺣﻘﻞ ﻧﺼﻲ ﻣﻌﻴﻦ‬

‫ﻣﺜﺎل‬

‫‪SELECT * FROM S_EMP‬‬


‫;’‪WHERE name LIKE ‘_A%‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪22 http://www.boosla.com‬‬

‫أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع ﺟﻤﺒﻊ ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻳﻜﻮن اﻟﺤﺮف اﻟﺜﺎﻧﻲ ﻓﻲ أﺳﻤﺎﺋﻬﻢ هﻮ ‪A‬‬

‫ﻣﻼﺣﻈﺔ‬
‫ﺗﺴﺘﺨﺪم اﻹﺷﺎرة _ ﻋﻮﺿﺎ ﻋﻦ ﺣﺮف واﺣﺪ ﻓﻘﻂ‬

‫‪ -4‬اﻟﻤﻌﺎﻣﻞ ‪IS NULL‬‬

‫ﻳﺴﺘﺨﺪم هﺬا اﻟﻤﻌﺎﻣﻞ ﻟﻔﺤﺺ اﻟﻘﻴﻤﺔ )ﻻ ﺷﻲء( أي ﻗﻴﻢ اﻟﻘﻮل اﻟﺘﻲ ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ ﺑﻴﺎﻧﺎت‬

‫ﻣﺜﺎل‬
‫‪SELECT name, sal FROM S_EMP‬‬
‫;‪WHERE comm. IS NULL‬‬

‫أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع اﺳﻢ اﻟﻤﻮﻇﻒ وراﺗﺒﻪ ﻟﻠﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻟﻴﺲ ﻟﻬﻢ ﻋﻤﻮﻟﺔ أو ﻟﻢ ﻳﺘﻢ ادﺧﺎل‬
‫ﻋﻤﻮﻟﺘﻬﻢ‬

‫اﻟﻤﻌﺎﻣﻼت اﻟﻤﻨﻄﻘﻴﺔ ‪LOGICAL OPERATORS‬‬


‫اﻟﻤﻌﻨﻰ‬ ‫اﻟﻤﻌﺎﻣﻞ‬
‫ﻳﺮﺟﻊ ‪ TRUE‬اذا آﺎﻧﺖ آﻠﺘﺎ اﻟﻘﻴﻤﺘﻴﻦ ‪TRUE‬‬ ‫‪AND‬‬
‫ﻳﺮﺟﻊ ‪ TRUE‬اذا آﺎﻧﺖ اﺣﺪى اﻟﻘﻴﻤﺘﻴﻦ ‪TRUE‬‬ ‫‪OR‬‬
‫ﻳﺮﺟﻊ ‪ TRUE‬إذا آﺎﻧﺖ اﻟﻔﻴﻤﺔ ‪FALSE‬‬ ‫‪NOT‬‬

‫ﺗﺴﺘﺨﺪم اﻟﻤﻌﺎﻣﻼت اﻟﻤﻨﻄﻘﻴﺔ ﻟﺘﺮﺟﻊ ﻗﻴﻤﺔ واﺣﺪة ‪ TRUE‬أو ‪ FALSE‬آﻨﺘﻴﺠﺔ ﺑﻴﻦ ﻗﻴﻤﺘﻴﻦ‬
‫ﻣﻨﻄﻘﻴﺘﻴﻦ او ﻟﻌﻜﺲ ﻗﻴﻤﺔ ﻣﻨﻄﻘﻴﺔ ﻣﻦ ‪ TRUE‬اﻟﻰ ‪ FALSE‬واﻟﻌﻜﺲ‬
‫ﻣﻦ ﺧﻼل اﻟﻤﻌﺎﻣﻼت اﻟﻤﻨﻄﻘﻴﺔ ﻳﻤﻜﻨﻨﺎ ﺗﻜﻮﻳﻦ أآﺜﺮ ﻣﻦ ﺷﺮط داﺧﻞ ﺟﻤﻠﺔ ‪ WHERE‬ﺑﺎﺳﺘﺨﺪام‬
‫اﻟﻤﻌﺎﻣﻞ‪ AND‬او اﻟﻤﻌﺎﻣﻞ ‪OR‬‬

‫‪ -1‬اﻟﻤﻌﺎﻣﻞ ‪AND‬‬

‫ﻳﺘﻄﻠﺐ هﺬا اﻟﻤﻌﺎﻣﻞ أن ﺗﻜﻮن آﻼ اﻟﻘﻴﻤﺘﻴﻦ ‪TRUE‬‬

‫ﻣﺜﺎل‬
‫‪SELECT name, sal FROM S_EMP‬‬
‫;‪WHERE sal>=2600 AND comm<200‬‬

‫أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع اﺳﻢ اﻟﻤﻮﻇﻒ وراﺗﺒﻪ ﻟﻠﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻳﺰﻳﺪ راﺗﺒﻬﻢ ﻋﻦ ‪ 2600‬وﺗﻘﻞ‬
‫ﻋﻤﻮﻟﺘﻬﻢ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ ﻋﻦ ‪ 200‬أي اﻧﻪ ﻳﺠﺐ ﻳﺘﺤﻘﻖ اﻟﺸﺮﻃﻴﻦ ﻻﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪23 http://www.boosla.com‬‬

‫‪ -2‬اﻟﻤﻌﺎﻣﻞ ‪OR‬‬

‫ﻳﺘﻄﻠﺐ هﺬا اﻟﻤﻌﺎﻣﻞ أن ﺗﻜﻮن أي ﻣﻦ اﻟﻘﻴﻤﺘﻴﻦ ‪TRUE‬‬

‫ﻣﺜﺎل‬
‫‪SELECT name, sal FROM S_EMP‬‬
‫;‪WHERE sal <2000 OR deptno=30‬‬

‫أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع اﺳﻢ اﻟﻤﻮﻇﻒ وراﺗﺒﻪ ﻟﻠﻤﻮﻓﻴﻦ اﻟﺬﻳﻦ ﻳﺰﻳﺪ راﺗﺒﻬﻢ ﻋﻦ ‪ 2000‬أو ﻳﻌﻤﻠﻮن ﻓﻲ‬
‫ﻗﺴﻢ رﻗﻢ ‪ 30‬أي أﻧﻪ ﻳﺠﺐ ﻳﺘﺤﻘﻖ أي ﻣﻦ اﻟﺸﺮﻃﻴﻦ ﻻﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت‬

‫اﻟﻤﻌﺎﻣﻞ ‪NOT‬‬ ‫‪-3‬‬

‫ﻳﻘﻮم هﺬا اﻟﻤﻌﺎﻣﻞ ﺑﻌﻜﺲ ﻗﻴﻤﺔ ﻣﻨﻄﻘﻴﺔ ﻣﻦ ‪ TRUE‬إﻟﻰ ‪ FALSE‬واﻟﻌﻜﺲ‬

‫ﻣﺜﺎل‬
‫‪SELECT name, sal FROM S_EMP‬‬
‫;)‪WHERE deptno NOT IN (20,40‬‬

‫أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع اﺳﻢ اﻟﻤﻮﻇﻒ وراﺗﺒﻪ ﻟﻠﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻻ ﻳﻌﻤﻠﻮن ﻓﻲ اﻟﻘﺴﻤﻴﻦ رﻗﻢ ‪ 20‬و رﻗﻢ‬
‫‪ 40‬وﻓﻲ هﺬﻩ اﻟﺤﺎﻟﺔ ﺗﻢ ﻋﻜﺲ ﻧﺘﻴﺠﺔ اﻟﻤﻌﺎﻣﻞ ‪IN‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪24 http://www.boosla.com‬‬

‫أوﻟﻮﻳﺎت اﻟﻤﻌﺎﻣﻼت اﻟﻤﻨﻄﻘﻴﺔ وﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ‬


‫إذا ورد أآﺜﺮ ﻣﻦ ﻣﻌﺎﻣﻞ ﻣﻨﻄﻘﻲ ﻓﻲ ﻧﻔﺲ ﻣﻠﺔ اﻟﺸﺮط ﻓﺈن أوﻟﻮﻳﺔ ﺗﻨﻔﻴﺬ هﺬﻩ اﻟﻤﻌﺎﻣﻼت ﻣﻦ اﻷﻋﻠﻰ‬
‫إﻟﻰ اﻷدﺗﻰ ﻏﻲ آﺎﻟﺘﺎﻟﻲ ‪:‬‬

‫اﻷﻗﻮاس‬ ‫‪-1‬‬
‫ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ )> ‪(<> ، = ، < ،‬‬ ‫‪-2‬‬
‫‪NOT‬‬ ‫‪-3‬‬
‫‪AND‬‬ ‫‪-4‬‬
‫‪OR‬‬ ‫‪-5‬‬

‫اﺳﺘﺨﺪام ﺟﻤﻠﺔ اﻟﺘﺮﺗﻴﺐ ‪ORDER BY‬‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬
‫}*|…‪SELECT {Field1, Field2,…,‬‬
‫‪FROM Table1‬‬
‫‪WHERE Condition‬‬
‫;]‪ORDER BY Field3 [ASC|DESC‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻟﺠﺪول اﻟﺬي ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﻨﻪ‬ ‫‪Table1‬‬


‫اﺳﻤﺎء اﻟﺤﻘﻮل اﻟﺘﻲ ﺳﺒﺘﻢ اﺳﺘﺮﺟﺎع ﺑﻴﺎﻧﺎﺗﻬﺎ‬ ‫‪Field1, Field2‬‬
‫ﺟﻤﻠﺔ ﺷﺮﻃﻴﺔ أو اآﺜﺮ ﺗﻜﻮن ﻧﺘﻴﺠﺘﻬﺎ إﻣﺎ ‪ True‬أو ‪ False‬وﺗﺘﻜﻮن ﻣﻦ‬ ‫‪Condition‬‬
‫اﺳﻤﺎء ﺣﻘﻮل وﺗﻌﺒﻴﺮات وﻣﻌﺎﻣﻼت ﻣﻨﻄﻘﻴﺔ‬
‫اﺳﻢ اﻟﺤﻘﻞ اﻟﺬي ﺳﻴﺘﻢ اﻟﺘﺮﺗﻴﺐ ﺑﻨﺎء ﻋﻠﻴﻪ‬ ‫‪Field3‬‬
‫اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﺮﺗﺒﺔ ﺗﺼﺎﻋﺪﻳﺎ وﻳﺠﻮز ﻋﺪم ذآﺮهﺎ‬ ‫‪ASC‬‬
‫اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﺮﺗﺒﺔ ﺗﻨﺎزﻟﻴﺎ‬ ‫‪DESC‬‬

‫اﻟﺸﺮح‬

‫ﻋﻨﺪ اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﺗﺴﺘﺨﺪم ﺟﻤﻠﺔ ‪ ORDER BY‬ﻟﺘﺮﺗﻴﺐ اﻟﺒﻴﺎﻧﺎت ﺣﺴﺐ ﺣﻘﻞ ﻣﻌﻴﻦ أو ﻋﺪة‬
‫ﺣﻘﻮل وﺗﺄﺗﻲ هﺬﻩ اﻟﺠﻤﻠﺔ ﻓﻲ ﻧﻬﺎﻳﺔ ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ‪ SELECT‬وﻗﺪ ﻳﻜﻮن هﺬا اﻟﺘﺮﺗﻴﺐ ﺗﺼﺎﻋﺪﻳﺎ‬
‫)ﻣﻦ اﻟﻘﻴﻤﺔ اﻟﺼﻐﻴﺮة إﻟﻰ اﻟﻘﻴﻤﺔ اﻟﻜﺒﻴﺮة ( ﻋﻨﺪ اﺳﺘﺨﺪام اﻟﻤﻘﻄﻊ ‪ ASC‬وﻗﺪ ﻳﻜﻮن ﺗﻨﺎزﻟﻴﺎ )ﻣﻦ‬
‫اﻟﻔﻴﻤﺔ اﻟﻜﺒﻴﺮة إﻟﻰ اﻟﻘﻴﻤﺔ اﻟﺼﻐﻴﺮة( ﻋﻨﺪ اﺳﺘﺨﺪﺗﻢ اﻟﻤﻘﻄﻊ ‪DESC‬‬

‫ﻣﺜﺎل‬
‫‪SELECT * FROM S_EMP‬‬
‫)‪WHERE deptno NOT IN (20,40‬‬
‫;‪ORDER BY empno ASC‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪25 http://www.boosla.com‬‬

‫أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع ﺟﻤﻴﻊ ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻻ ﻳﻌﻤﻠﻮن ﻓﻲ اﻟﻘﺴﻤﻴﻦ رﻗﻢ ‪ 20‬ورﻗﻢ‬
‫‪40‬وﺳﺘﻜﻮن اﻟﺒﻴﺎﻧﺎت ﻣﺮﺗﺒﺔ ﺗﺼﺎﻋﺪﻳﺎ ﺣﺴﺐ رﻗﻢ اﻟﻤﻮﻇﻒ‬

‫وﻳﺠﻮز آﺘﺎﺑﺔ اﻟﺠﻤﻠﺔ اﻟﺴﺎﺑﻘﺔ دون اﻟﻤﻘﻄﻊ ‪ ASC‬آﻤﺎﻳﻠﻲ‪:‬‬

‫‪SELECT * FROM S_EMP‬‬


‫)‪WHERE deptno NOT IN (20,40‬‬
‫;‪ORDER BY empno‬‬

‫ﻣﺜﺎل‬
‫‪SELECT * FROM S_EMP‬‬
‫)‪WHERE deptno NOT IN (20,40‬‬
‫;‪ORDER BY empno DESC‬‬

‫أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع ﺟﻤﻴﻊ ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻻ ﻳﻌﻤﻠﻮن ﻓﻲ اﻟﻘﺴﻤﻴﻦ رﻗﻢ ‪ 20‬ورﻗﻢ‬
‫‪40‬وﺳﺘﻜﻮن اﻟﺒﻴﺎﻧﺎت ﻣﺮﺗﺒﺔ ﺗﻨﺎزﻟﻴﺎ ﺣﺴﺐ رﻗﻢ اﻟﻤﻮﻇﻒ‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬

‫ﺗﻨﺎوﻟﻨﺎ ﻣﻦ ﺧﻼل هﺬا اﻟﻔﺼﻞ ﻣﻮﺿﻮع اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﺑﺸﺮوط ﻣﻨﺎﻟﺪاول وﻣﻮﺿﻮع ﺗﺮﺗﻴﺐ‬
‫اﻟﺒﻴﺎﻧﺎت ﺗﺼﺎﻋﺪﻳﺎ وﺗﻨﺎزﻟﻴﺎ آﻤﺎ وﺗﻄﺮﻗﻨﺎ ﻣﻦ ﺧﻼل دراﺳﺔ ﺟﻤﻠﺔ اﻟﺸﺮط إﻟﻰ ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ‬
‫واﻟﻤﻌﺎﻣﻼت اﻟﻤﻨﻄﻘﻴﺔ وﻣﻌﺎﻣﻼت أﺧﺮى ﻣﺜﻞ ‪BETWEEN‬و ‪IN‬و ‪ IS NULL‬وﻣﺎﻳﺘﻌﻠﻖ ﺑﻬﺎ‬
‫ﻣﻦ ﺣﻴﺚ ﻃﺮﻳﻘﺔ اﻻﺳﺘﺨﺪام وﺗﺮآﻴﺐ ﺟﻤﻠﺔ اﻟﺸﺮط وأوﻟﻮﻳﺎت ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ واﻟﻤﻌﺎﻣﻼت‬
‫اﻟﻤﻨﻄﻘﻴﺔ‪.‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪26 http://www.boosla.com‬‬

‫اﻟﺪوال اﻟﺤﺮﻓﻴﺔ‬
‫اهﺪاف اﻟﻔﺼﻞ‬

‫ﻓﻲ ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ إن ﺷﺎء اﷲ ﺳﺘﻜﻮن ﻗﺎدر ﻋﻠﻰ ‪:‬‬


‫ﺗﺤﻮﻳﻞ اﻟﺤﺮوف ﻣﻦ ﺻﻐﻴﺮة إﻟﻰ آﺒﻴﺮة وﺑﺎﻟﻌﻜﺲ ﻣﻦ ﺧﻼل ‪SQL‬‬ ‫‪-1‬‬
‫ﺿﺒﻂ وﻣﺤﺎذاة اﻟﺤﺮوف داﺧﻞ اﻟﻨﺺ اﻟﻤﻮﺟﻮد ﻓﻲ‪SQL‬‬ ‫‪-2‬‬
‫اﻟﻘﻴﺎم ﺑﺤﺬف اﻟﺒﻴﺎﻧﺎت ﻣﻦ اﻟﺠﺪاول‬ ‫‪-3‬‬
‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻠﻔﻆ اﻟﺼﻮﺗﻲ ﻟﻠﺒﻴﺎﻧﺎت‬ ‫‪-4‬‬
‫اﻟﻘﻴﺎم ﺑﺘﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت اﻟﺠﺪول‬ ‫‪-5‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪27 http://www.boosla.com‬‬

‫اﻟﺪال اﻟﺤﺮﻓﻴﺔ واﻟﻀﺒﻂ واﻟﻤﺤﺎذاة‬


‫داﻟﺔ ﺗﺤﻮﻳﻞ اﻟﺒﻴﺎﻧﺎت إﻟﻰ ﺣﺮوف ﺻﻐﻴﺮة ‪LOWER Function‬‬

‫ﺗﺴﻨﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﺤﻮﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺣﺮوف آﺒﻴﺮة إﻟﻰ ﺣﺮوف ﺻﻐﻴﺮة وﻳﺘﻢ اﺳﺘﺨﺪام هﺬﻩ اﻟﺪاﻟﺔ‬
‫ﻏﺎﻟﻴﺎ ﻣﻊ ﺟﻤﻞ أﺧﺮى‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم اﻧﻈﺮ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ‬

‫ﻣﺜﺎل ‪.‬‬
‫)‪SELECT LOWER (name), LOWER (job‬‬
‫;‪FROM S_EMP‬‬

‫ﺳﻴﺘﻢ ﻋﺮض اﺳﻢ اﻟﻤﻮﻇﻒ ووﻇﺒﻘﺘﻪ وﻟﻜﻦ ﺑﺤﺮوف ﺻﻐﻴﺮة‬

‫‪LOWER name‬‬ ‫‪LOWER job‬‬


‫‪--------------------‬‬ ‫‪--------------------‬‬
‫‪ali‬‬ ‫‪salesman‬‬
‫‪ahmed‬‬ ‫‪analyst‬‬
‫‪sami‬‬ ‫‪manager‬‬
‫‪khaled‬‬ ‫‪manager‬‬

‫داﻟﺔ ﺗﺤﻮﻳﻞ اﻟﺒﻴﺎﻧﺎت إﻟﻰ ﺣﺮوف آﺒﻴﺮة ‪UPPER Function‬‬

‫ﺗﺴﻨﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﺤﻮﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺣﺮوف ﺻﻐﻴﺮة إﻟﻰ ﺣﺮوف آﺒﻴﺮة وﻳﺘﻢ اﺳﺘﺨﺪام هﺬﻩ اﻟﺪاﻟﺔ‬
‫ﻏﺎﻟﻴﺎ ﻣﻊ ﺟﻤﻞ أﺧﺮى‬

‫ﻣﺜﺎل‬
‫)‪SELECT UPPER (name), UPPER (job‬‬
‫;‪FROM S_EMP‬‬

‫داﻟﺔ ﺗﺤﻮﻳﻞ اﻟﺤﺮف اﻷول ﻣﻦ اﻟﺒﻴﺎﻧﺎت إﻟﻰ ﺣﺮف آﺒﻴﺮ ‪INITCAP‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﻮﻳﻞ أول ﺣﺮف ﻣﻦ ﺑﻴﺎﻧﺎت اﻟﻘﻞ اﻟﻤﺤﺪد إﻟﻰ ﺣﺮف آﺒﻴﺮ وﻳﺘﻢ اﺳﺘﺨﺪام هﺬﻩ‬
‫اﻟﺪاﻟﺔ ﻏﺎﻟﺒﺎ ﻣﻊ اﻟﺠﻤﻞ أﺧﺮى‬

‫ﻣﺜﺎل‬
‫)‪SELECT INITCAP (name), INITCAP (job‬‬
‫;‪FROM S_EMP‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪28 http://www.boosla.com‬‬

‫ﺳﻴﺘﻢ ﻋﺮض اﺳﻢ اﻟﻤﻮﻇﻒ ووﻇﺒﻘﺘﻪ وﻟﻜﻦ اول ﺣﺮف ﻓﻲ آﻼهﻤﺎ ﺳﻴﻜﻮن آﺒﻴﺮ‬

‫‪INITCAP name‬‬ ‫‪INITCAP job‬‬


‫‪--------------------‬‬ ‫‪--------------------‬‬
‫‪Ali‬‬ ‫‪Salesman‬‬
‫‪Ahmed‬‬ ‫‪Analyst‬‬
‫‪Sami‬‬ ‫‪Manager‬‬
‫‪Khaled‬‬ ‫‪Manager‬‬

‫داﻟﺔ اﻗﺘﻄﺎع )ﻗﺺ( ﺟﺰء ﻣﻦ ﺑﻴﺎﻧﺎت اﻟﺤﻘﻞ ‪SUBSTR‬‬

‫ﺗﺴﺘﺨﺪم ﻟﻌﺮض أو ﻗﺺ ﺟﺰء ﻣﻌﻴﻦ ﻣﻦ ﺑﻴﺎﻧﺎت اﻟﻌﻤﻮد او اﻟﺤﻘﻞ‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫)‪SUBSTR(Field1,N,M‬‬
‫ﺣﻴﺚ أن‬
‫اﻟﺤﻘﻞ اﻟﻤﺮاد اﻻﻗﺘﻄﺎع ﻣﻨﻪ‬ ‫‪String‬‬
‫اول ﺣﺮف ﻳﺒﺪأ ﻋﻨﺪﻩ اﻻﻗﺘﻄﺎع‬ ‫‪N‬‬
‫ﻋﺪد اﻟﺤﺮوف اﻟﻤﺮاد اﻗﺘﻄﺎﻋﻬﺎ‬ ‫‪M‬‬

‫ﻣﺜﺎل‬

‫)‪SUBSTR('Ahmed',1,3‬‬

‫ﻗﻴﻜﻮن اﻟﻨﺎﺗﺞ‬
‫‪Ahm‬‬

‫ﻣﺜﺎل‬
‫)‪SELECT SUBSTR (name, 1,2‬‬
‫;‪FROM S_EMP‬‬

‫ﺳﻴﺘﻢ اﻗﺘﻄﺎع اﻟﺤﺮف اﻷول واﻟﺜﺎﻧﻲ ﻣﻦ اﺳﻢ اﻟﻤﻮﻇﻒ وﻋﺮﺿﻬﺎ‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪29 http://www.boosla.com‬‬

‫داﻟﺔ ﻧﺤﺪﻳﺪ ﻣﻮﻗﻊ ﺣﺮف ﻓﻲ ﺑﻴﺎﻧﺎت ﺣﻘﻞ ‪INSTR Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﺤﺪﻳﺪ ﻣﻜﺎن أو ﻣﻮﻗﻊ ﺣﺮف ﻓﻲ ﺑﻴﺎﻧﺎت اﻟﻌﻤﻮد أو اﻟﺤﻘﻞ‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬
‫)’‪INSTR (Field, ‘C‬‬

‫ﺣﻴﺚ أن‬

‫اﻟﺤﻘﻞ اﻟﺬي ﺳﻴﺘﻢ اﻟﺘﺤﺪﻳﺪ ﻣﻨﻪ‬ ‫‪Field‬‬


‫اﻟﺤﺮف اﻟﻤﺮاد اﺳﺘﺨﺮاج ﻣﻮﻗﻌﻪ‬ ‫‪C‬‬

‫ﻣﺜﺎل‬
‫)’‪SELECT INSTR (name, ‘l‬‬
‫;‪FROM S_EMP‬‬

‫ﺳﻴﺘﻢ اﺳﺘﺨﺮاج ﻣﻮﻗﻊ اﻟﺤﺮف ‪ l‬ﻣﻦ ﺣﻘﻞ اﺳﻢ اﻟﻤﻮﻇﻒ‬

‫‪INSTR name‬‬
‫‪--------------------‬‬
‫‪2‬‬
‫‪0‬‬
‫‪0‬‬
‫‪4‬‬

‫داﻟﺔ ﺿﺒﻂ وﻣﺤﺎذاة ﻧﺎﺣﻴﺔ اﻟﻴﻤﻴﻦ ﻟﻠﺒﻴﺎﻧﺎت ‪RPAD Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻤﺤﺎذاة اﻟﺒﻴﺎﻧﺎت ﻧﺎﺣﻴﺔ اﻟﻴﻤﻴﻦ ﺣﻴﺚ ﻳﺘﻢ ﻣﻞء ﺣﺮف ﻣﻌﻴﻦ )أو ﺣﺮوف ( ﻳﻤﻴﻦ‬
‫اﻟﺒﻴﺎﻧﺎت‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫)’‪RPAD (COL | VALUE, N, ‘ String‬‬

‫ﺣﻴﺚ أن‬

‫‪ COL‬اﺳﻢ اﻟﺤﻘﻞ اﻟﻤﻄﻠﻮب ﻣﺤﺎذاة ﺑﻴﺎﻧﺎﺗﻪ ‪ ،‬ووﺿﻊ ﺣﺮف )ﺣﺮوف( ﻳﻤﻴﻨﻪ‬


‫ﻳﻤﻜﻦ وﺿﻊ ﻗﻴﻤﺔ أو ﻣﺘﻐﻴﺮ ﺣﺮﻓﻲ ﺑﻴﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﻴﺺ )" "(‬ ‫‪VALUE‬‬
‫ﻋﺪد ﻣﺮات ﻇﻬﻮر اﻟﻒ اﻟﺠﺪﻳﺪ‬ ‫‪N‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪30 http://www.boosla.com‬‬

‫اﻟﺤﺮف أو اﻟﻤﺘﻐﻴﺮ اﻟﺬي ﺳﻴﺘﻢ ﻣﻞء اﻟﻔﺮاﻏﺎت ﺑﻪ‬ ‫‪String‬‬

‫ﻣﺜﺎل‬
‫)’‪SELECT name, RPAD (sal, 7,’$‬‬
‫;‪FROM S_EMP‬‬

‫‪NAME‬‬ ‫‪RPAD SAL‬‬


‫‪-------------------- --------------------‬‬
‫‪Ali‬‬ ‫‪968$$$$‬‬
‫‪Ahmed‬‬ ‫‪1936$$$‬‬
‫‪SAMI‬‬ ‫‪1512.5$‬‬
‫‪KHALED‬‬ ‫‪3599.75‬‬

‫داﻟﺔ ﺿﺒﻂ وﻣﺤﺎذاة ﻧﺎﺣﻴﺔ اﻟﻴﺴﺎر ﻟﻠﺒﻴﺎﻧﺎت ‪LPAD Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻤﺤﺎذاة اﻟﺒﻴﺎﻧﺎت ﻧﺎﺣﻴﺔ اﻟﻴﻤﻴﻦ ﺣﻴﺚ ﻳﺘﻢ ﻣﻞء ﺣﺮف ﻣﻌﻴﻦ )أو ﺣﺮوف ( ﻳﺴﺎر‬
‫اﻟﺒﻴﺎﻧﺎت‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫)’‪LPAD (COL | VALUE, N, ‘ String‬‬

‫ﺣﻴﺚ أن‬

‫‪ COL‬اﺳﻢ اﻟﺤﻘﻞ اﻟﻤﻄﻠﻮب ﻣﺤﺎذاة ﺑﻴﺎﻧﺎﺗﻪ ‪ ،‬ووﺿﻊ ﺣﺮف )ﺣﺮوف( ﻳﻤﻴﻨﻪ‬


‫ﻳﻤﻜﻦ وﺿﻊ ﻗﻴﻤﺔ أو ﻣﺘﻐﻴﺮ ﺣﺮﻓﻲ ﺑﻴﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﻴﺺ )" "(‬ ‫‪VALUE‬‬
‫ﻋﺪد ﻣﺮات ﻇﻬﻮر اﻟﻒ اﻟﺠﺪﻳﺪ‬ ‫‪N‬‬
‫اﻟﺤﺮف أو اﻟﻤﺘﻐﻴﺮ اﻟﺬي ﺳﻴﺘﻢ ﻣﻞء اﻟﻔﺮاﻏﺎت ﺑﻪ‬ ‫‪String‬‬

‫ﻣﺜﺎل‬
‫)’‪SELECT name, LPAD (sal, 7,’#‬‬
‫;‪FROM S_EMP‬‬

‫‪NAME‬‬ ‫‪LPAD SAL‬‬


‫‪--------------------‬‬ ‫‪--------------------‬‬
‫‪Ali‬‬ ‫‪####968‬‬
‫‪Ahmed‬‬ ‫‪###1936‬‬
‫‪SAMI‬‬ ‫‪#1512.5‬‬
‫‪KHALED‬‬ ‫‪3599.75‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪31 http://www.boosla.com‬‬

‫ﺣﺬف و ﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت‬


‫داﻟﺔ ﺣﺬف ﺑﻴﺎﻧﺎت ﻧﺎﺣﻴﺔ ﻳﻤﻴﻦ اﻟﺤﻘﻞ ‪RTRIM Function‬‬

‫ﺗﺴﺘﻨﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺤﺬف ﺑﻴﺎﻧﺎت ﻣﻦ ﻧﺎﻳﺔ ﻳﻤﻴﻦ اﻟﻌﻤﻮد او اﻟﺤﻘﻞ اﻟﻤﺤﺪد‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬
‫)’‪RTRIM (COL | VALUE,‘ String‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻟﻘﻞ أو اﻟﻌﻤﻮد‬ ‫‪COL‬‬


‫اﻟﻘﻴﻤﺔ اﻟﺒﺪﻳﻠﺔ ﻟﻠﻌﻤﻮد‬ ‫‪VALUE‬‬
‫ﻗﻴﻤﺔ اﻟﺤﺮف أو اﻟﻤﺘﻐﻴﺮ اﻟﺬي ﺳﻴﺘﻢ اﻟﺒﺤﺚ ﻋﻨﻪ‬ ‫‪String‬‬

‫ﻣﺜﺎل‬

‫)’‪SELECT name, RTRIM (job,’man‬‬


‫;‪FROM S_EMP‬‬

‫ﺳﻴﺘﻢ ﺣﺬف ‪ man‬ﻣﻦ ﻳﻤﻴﻦ اﻟﻌﻤﻮد ‪job‬‬

‫‪name‬‬ ‫‪RTRIM job‬‬


‫‪--------------------‬‬ ‫‪--------------------‬‬
‫‪ALI‬‬ ‫‪Sales‬‬
‫‪AHMED‬‬ ‫‪Analyst‬‬
‫‪SAMI‬‬ ‫‪Manager‬‬
‫‪Khaled‬‬ ‫‪Manager‬‬

‫داﻟﺔ ﺣﺬف ﺑﻴﺎﻧﺎت ﻳﺴﺎر اﻟﺤﻘﻞ ‪LTRIM Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺤﺬف ﺑﻴﺎﻧﺎت ﻣﻦ ﻧﺎﺣﻴﺔ ﻳﺴﺎر اﻟﻌﻤﻮد أو اﻟﺤﻘﻞ اﻟﻤﺤﺪد‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫)’‪LTRIM (COL | VALUE,‘ String‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪32 http://www.boosla.com‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻟﻘﻞ أو اﻟﻌﻤﻮد‬ ‫‪COL‬‬


‫اﻟﻘﻴﻤﺔ اﻟﺒﺪﻳﻠﺔ ﻟﻠﻌﻤﻮد‬ ‫‪VALUE‬‬
‫ﻗﻴﻤﺔ اﻟﺤﺮف أو اﻟﻤﺘﻐﻴﺮ اﻟﺬي ﺳﻴﺘﻢ اﻟﺒﺤﺚ ﻋﻨﻪ‬ ‫‪String‬‬

‫ﻣﺜﺎل‬

‫)’‪SELECT name, LTRIM (job,’man‬‬


‫;‪FROM S_EMP‬‬

‫ﺳﻴﺘﻢ ﺣﺬف ‪ man‬ﻣﻦ ﻳﺴﺎر اﻟﻌﻤﻮد ‪job‬‬

‫‪name‬‬ ‫‪LTRIM job‬‬


‫‪--------------------‬‬ ‫‪--------------------‬‬
‫‪ALI‬‬ ‫‪Salesman‬‬
‫‪AHMED‬‬ ‫‪Analyst‬‬
‫‪SAMI‬‬ ‫‪ager‬‬
‫‪Khaled‬‬ ‫‪ager‬‬

‫داﻟﺔ ﻗﻴﺎس ﻃﻮل ﺑﻴﺎﻧﺎت اﻟﺤﻘﻞ ‪LENGTH Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻹﻳﺠﺎد ﻃﻮل ﺑﻴﺎﻧﺎت ﻣﺘﻐﻴﺮ أو اﻟﺤﻘﻞ اﻟﻤﺤﺪد‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫)‪LENGTH (COL | VALUE‬‬

‫ﻣﺜﺎل‬
‫)’‪SELECT LENGTH (name), LENGTH (‘WELCOME‬‬
‫;‪FROM S_EMP‬‬

‫ﺳﻴﺘﻢ ﺣﺴﺎب ﻃﻮل اﺳﻢ اﻟﻤﻮﻇﻒ وﻃﻮل آﻠﻤﺔ ‪.WELCOME‬‬

‫‪LENGTH name‬‬ ‫’‪LENGTH ‘WELCOME‬‬


‫‪--------------------‬‬ ‫‪--------------------‬‬
‫‪3‬‬ ‫‪7‬‬
‫‪5‬‬ ‫‪7‬‬
‫‪4‬‬ ‫‪7‬‬
‫‪6‬‬ ‫‪7‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪33 http://www.boosla.com‬‬

‫داﻟﺔ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﻓﻲ ﺟﺪول ‪TRANSLATE Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻨﻌﺪﻳﻞ أو ﻟﺘﺒﺪﻳﻞ ﺑﻴﺎﻧﺎت ﻣﻮﺟﻮدة ﻓﻲ ﺟﺪول ﻣﻌﻴﻦ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‪:‬‬
‫)‪TRANSLATE (COL|VALUE, FROM, TO‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻟﻘﻞ أو اﻟﻌﻤﻮد‬ ‫‪COL‬‬


‫اﻟﻘﻴﻤﺔ اﻟﺒﺪﻳﻠﺔ ﻟﻠﻌﻤﻮد )اﻟﺒﻴﺎﻧﺎت(‬ ‫‪VALUE‬‬
‫اﻟﺤﺮف )اﻟﺤﺮوف( اﻟﻤﻄﻠﻮب ﺗﻐﻴﻴﺮﻩ‬ ‫‪FROM‬‬
‫اﻟﺤﺮف )اﻟﺤﺮوف( اﻟﻤﻄﻠﻮب اﺣﻼﻟﻪ‬ ‫‪TO‬‬

‫ﻣﺜﺎل‬
‫)’‪SELECT name, TRANSLATE (name,’MI’,’WY‬‬
‫;‪FROM S_EMP WHERE sal=1512.5‬‬

‫ﺳﻴﺘﻢ اﺳﺘﺒﺪال اﻟﺮﻓﻴﻦ ‪ MI‬ﺑﺎﻟﺤﺮﻓﻴﻦ ‪WY‬‬

‫‪name‬‬ ‫)‪TRANSLATE(name‬‬
‫‪-------------------- --------------------‬‬
‫‪SAMI‬‬ ‫‪SAWY‬‬

‫داﻟﺔ ﻋﺮض اﻟﻠﻔﻆ اﻟﺼﻮﺗﻲ ‪SOUNDEX Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻹﻳﺠﺎد اﻟﻠﻔﻆ اﻟﺼﻮﺗﻲ ﻟﻠﺒﻴﺎﻧﺎت )اﻟﻤﺘﻐﻴﺮات( اﻟﻤﻮﺟﻮدة ﻓﻲ ﺟﺪول ﻣﻌﻴﻦ ﺣﺘﻰ وﻟﻮ‬
‫آﺎن هﻨﺎك اﺧﺘﻼف ﻓﻲ ﺑﻌﺾ اﻷﺣﺮف اﻟﻬﺠﺎﺋﻴﺔ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‪:‬‬
‫)‪SOUNDEX (COL|VALUE‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻟﻘﻞ أو اﻟﻌﻤﻮد‬ ‫‪COL‬‬


‫اﻟﻘﻴﻤﺔ اﻟﺒﺪﻳﻠﺔ ﻟﻠﻌﻤﻮد )اﻟﺒﻴﺎﻧﺎت(‬ ‫‪VALUE‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪34 http://www.boosla.com‬‬

‫ﻣﺜﺎل‬

‫)‪SELECT name, SOUNDEX (name‬‬


‫;‪FROM S_EMP WHERE sal=1512.5‬‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬

‫ﺗﻨﺎوﻟﻨﺎ اﻟﺪوال اﻟﺤﺮﻓﻴﺔ اﻟﺨﺎﺻﺔ ﺑﺘﺤﻮﻳﻞ ﺣﺎﻟﺔ اﻟﺤﺮوف ﻣﻦ ﺣﺮوف آﺒﻴﺮة إﻟﻰ ﺣﺮوف ﺻﻐﻴﺮة‬
‫واﻟﻌﻜﺲ وآﺬﻟﻚ ﺿﺒﻂ ﻣﺤﺎذاة اﻟﺤﺮوف داﺧﻞ اﻟﻨﺺ وﻣﻦ اﻟﺪوال اﻟﻬﺎﻣﺔ اﻟﻨﻲ ﺗﻨﺎوﻟﻨﺎهﺎ اﻳﻀﺎ دوال‬
‫ﺣﺬف اﻟﺒﻴﺎﻧﺎت ودوال ﻋﺮض اﻟﻠﻔﻆ اﻟﺼﻮﺗﻲ وﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت اﻟﺠﺪاول ‪.‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪35 http://www.boosla.com‬‬

‫دوال اﻟﺘﺎرﻳﺦ واﻟﺘﺤﻮﻳﻞ‬

‫أهﺪاف اﻟﻔﺼﻞ‬

‫ﻓﻲ ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ إن ﺷﺎء اﷲ ﺗﻜﻮن ﻗﺎدر ﻋﻠﻰ ‪:‬‬


‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ دوال اﻟﺘﺎرﻳﺦ ﻓﻲ ‪SQL‬‬ ‫‪-1‬‬
‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ أدوات اﻟﺘﺤﻮﻳﻞ ﻓﻲ ‪SQL‬‬ ‫‪-2‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪36 http://www.boosla.com‬‬

‫دوال اﻟﺘﺎرﻳﺦ‬
‫اﻟﻮﻓﺖ هﻮ اﻟﺤﻴﺎة واﻟﺘﺎرﻳﺦ هﻮ أﺻﻞ اﻻﻣﻢ ﻟﺬا ﻟﺘﺎ ﻟﻨﺘﻌﻤﻖ ﻓﻲ آﻴﻔﻴﺔ اﺳﺘﺨﺪام دوال اﻟﺘﺎرﻳﺦ‬

‫اﻟﺪاﻟﺔ ‪Sysdate‬‬

‫هﺬﻩ اﻟﺪاﻟﺔ ﺗﻘﻮم ﺑﺈﻋﻄﺎء ﺗﺎرﻳﺦ اﻟﻴﻮم اﻟﺤﺎﻟﻲ أي اﻟﺘﺎرﻳﺦ اﻟﻤﺨﺰن ﻓﻲ ﺟﻬﺎز اﻟﻜﻤﺒﻴﻮﺗﺮ اﻟﺬي ﻳﻨﻔﺬ ﻋﻠﻴﻪ‬
‫هﺬا اﻷﻣﺮ وﻳﺘﻢ ﺗﺨﺰﻳﻦ اﻟﺘﺎرﻳﺦ وهﻤﻲ ﻳﺴﻤﻰ ‪ Dual‬وهﻮ ﻣﻮﺟﻮد أﺻﻼ داﺧﻞ ﻟﻐﺔ أوراآﻞ ﻟﺬﻟﻚ‬
‫ﻳﺠﺐ أن ﺗﺘﻢ ﻋﻤﻠﻴﺔ اﺳﺘﺪﻋﺎء اﻟﺘﺎرﻳﺦ ﻣﻦ هﺬا اﻟﺠﺪول‬

‫ﻣﺜﺎل‬

‫ﻻﺳﺘﺪﻋﺎء ﺗﺎرﻳﺦ اﻟﻴﻮم اﻟﺤﺎﻟﻲ ﻧﻘﻮم ﺑﺎﻵﺗﻲ ‪:‬‬

‫;‪SELECT SYSDATE FROM DUAL‬‬

‫اﻟﺪاﻟﺔ ‪NEXT_DAY‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻌﺮض اﻟﺘﺎرﻳﺦ اﻟﺬي ﻳﻮاﻓﻖ اﻟﺘﺎرﻳﺦ اﻟﺘﺎﻟﻲ ﻟﻠﺘﺎرﻳﺦ اﻟﻤﻌﻄﻰ‬
‫ﻓﻌﻠﻰ ﺳﺒﻴﻞ اﻟﻤﺜﺎل إذا آﺎن اﻟﺘﺎرﻳﺦ اﻟﻤﻮﺟﻮد هﻮ ‪ 2003/7/7‬وﻃﻠﺐ ﻣﻦ اﻟﺠﻬﺎز ﺗﺤﺪﻳﺪ اﻟﻴﻮم اﻟﺬي‬
‫ﻳﺼﺎدف ﻳﻮم اﻟﺠﻤﻌﺔ ﻣﻦ ﻧﻔﺲ اﻟﺸﻬﺮ ﻓﺈﻧﻪ ﻳﻌﻄﻲ ‪2003/7/11‬‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫)‪NEXT_DAY (DATE,CHAR‬‬

‫ﺣﻴﺚ إن ‪ DATE‬هﻮ اﻟﺘﺎرﻳﺦ اﻟﻤﻌﻄﻰ واﻟﻤﺮاد إﻳﺠﺎد اﻟﺘﺎرﻳﺦ ﻟﻠﻴﻮم اﻟﺬي ﻳﻠﻴﻪ ﻣﻦ ﺧﻼل وﺿﻊ اﺳﻢ‬
‫اﻟﻴﻮم داﺧﻞ اﻟﻤﺘﻐﻴﺮ ‪CHAR‬‬

‫ﻣﺜﺎل‬

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

‫ﻧﺘﻴﺠﺔ اﻟﺘﻨﻔﻴﺬ‬

‫‪NEXT_DAY‬‬
‫‪-------------------‬‬
‫‪11/7/2003‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪37 http://www.boosla.com‬‬

‫داﻟﺔ ﺗﺤﺪﻳﺪ اﻟﻴﻮم اﻷﺧﻴﺮ ﻣﻦ آﻞ ﺷﻬﺮ ‪LAST_DAY‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﺘﺤﺪﻳﺪ ﺁﺧﺮ ﻳﻢ ﻣﻦ آﻞ ﺷﻬﺮ ﻣﻌﻄﻰ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫)‪LAST_DAY (DATE‬‬

‫ﺣﻴﺚ أن ‪ DATE‬هﻮ ﺗﺎرﻳﺦ اﻟﺠﻬﺎز أو ﺗﺎرﻳﺦ ﺗﻘﻮم ﺑﺈدﺧﺎﻟﻪ‬

‫ﻣﺜﺎل‬

‫;‪SELECT LAST_DAY (SYSDATE) FROM DUAL‬‬

‫ﺑﻔﺮض أن ﺗﺎرﻳﺦ اﻟﻬﺎز ‪ SYSDATE‬هﻮ‪ 2003/2/2‬ﻓﺈن ﻧﺘﻴﺠﺔ ﻟﻠﺠﻤﻠﺔ اﻟﺴﺎﺑﻘﺔ هﻲ آﻤﺎ ﻳﻠﻲ ‪:‬‬

‫)‪LAST_DAY(SYSDATE‬‬
‫‪--------------------------------‬‬
‫‪28/2/2003‬‬

‫ﻣﻼﺣﻈﺔ‬
‫ﻳﻤﻜﻨﻚ أن ﺗﻘﻮم ﺑﻄﺮح ﺗﺎرﻳﺦ ﻣﻦ ﺗﺎرﻳﺦ ﺁﺧﺮ آﺎﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ‬

‫‪SELECT SYSDATE – HIRDATE FROM S_EMP‬‬

‫ﺣﻴﺚ ‪ HIRDATE‬ﺣﻔﻞ ﺗﺎرﻳﺦ ‪.‬‬

‫اﻟﺪاﻟﺔ ‪MONTHES_BETWEEN‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻌﺮض ﻣﺪة اﻟﻔﺮق ﺑﻴﻦ ﺷﻬﺮﻳﻦ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫‪MONTHES_BETWEEN‬‬ ‫)‪(DATE1,DATE2‬‬

‫ﻣﺜﺎل‬

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

‫ﺳﻴﻜﻮن اﻟﻨﺎﺗﺞ‬
‫‪1.9774194‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪38 http://www.boosla.com‬‬

‫اﻟﺪاﻟﺔ ‪ADD_ MONTHES‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻹﺿﺎﻓﺔ ﻋﺪد ﻣﻦ اﻷﺷﻬﺮ إﻟﻰ اﻟﺘﺎرﻳﺦ ﻣﻌﻄﻰ‬

‫)‪ADD_MONTHES (DATE,M‬‬

‫ﺣﻴﺚ أن‬

‫اﻟﺘﺎرﻳﺦ اﻟﻤﻌﻄﻰ‬ ‫‪DATE‬‬


‫ﻋﺪد اﻻﺷﻬﺮ‬ ‫‪M‬‬

‫ﻣﺜﺎل‬

‫)‪ADD_MONTHES (‘7-JAN-99’,6‬‬

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﻜﻮن اﻟﻨﺎﺗﺞ‬

‫‪7-JUL-99‬‬

‫اﻟﺪاﻟﺔ ‪ROUND‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻌﺮض اﻗﺮب ﺑﺪاﻳﺔ ﺷﻬﺮ أو ﺳﻨﻪ ﻟﺘﺎرﻳﺦ ﻣﻌﻴﻦ ﺗﺤﺪدﻩ‬

‫ﻣﻼﺣﻈﺔ ‪:‬ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ أﻳﻀﺎ ﻟﻠﺒﻴﺎﻧﺎت اﻟﺮﻗﻤﻴﺔ ﻟﻠﺘﻘﺮﻳﺐ وﺳﻴﺘﻢ ﺷﺮﺣﻬﺎ ﻓﻲ ﺑﺎب اﻟﺪوال اﻟﺮﻗﻤﻴﺔ‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫)‪ROUND (DATE, M|Y‬‬

‫ﺣﻴﺚ أن‬

‫اﻟﺘﺎرﻳﺦ اﻟﻤﻌﻄﻰ‬ ‫‪DATE‬‬


‫ﻧﻜﺘﺐ ‪ MONTH‬اذا اردﻧﺎ ان ﻳﻌﻮد ﺑﺎﻗﺮب ﺷﻬﺮ‬ ‫‪M‬‬
‫ﻧﻜﺘﺐ ‪ YEAR‬اذا اردﻧﺎ ان ﻳﻌﻮد ﺑﺎﻗﺮب ﺳﻨﺔ‬ ‫‪Y‬‬

‫ﻣﺜﺎل‬
‫)’‪ROUND (’07-MAY-96’, ‘MONTH‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪39 http://www.boosla.com‬‬

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﻜﻮن اﻟﻨﺎﺗﺞ‬

‫‪01-JUN-96‬‬

‫ﻣﺜﺎل‬
‫)’‪ROUND (’07-MAY-96’, ‘YEAR‬‬

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﻜﻮن اﻟﻨﺎﺗﺞ‬


‫‪01-JAN-96‬‬

‫اﻟﺪاﻟﺔ ‪TRANCATE Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻌﺮض ﺗﺎرﻳﺦ اول ﻳﻮم ﻓﻲ ﺷﻬﺮ أو ﺳﻨﻪ ﻟﺘﺎرﻳﺦ ﻣﻌﻴﻦ ﺗﺤﺪدﻩ‬

‫ﻣﻼﺣﻈﺔ ‪:‬ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ أﻳﻀﺎ ﻟﻠﺒﻴﺎﻧﺎت اﻟﺮﻗﻤﻴﺔ ﻟﻠﺘﻘﺮﻳﺐ وﺳﻴﺘﻢ ﺷﺮﺣﻬﺎ ﻓﻲ ﺑﺎب اﻟﺪوال اﻟﺮﻗﻤﻴﺔ‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫)‪TRUNC (DATE, M|Y‬‬


‫ﺣﻴﺚ أن‬

‫اﻟﺘﺎرﻳﺦ اﻟﻤﻌﻄﻰ‬ ‫‪DATE‬‬


‫ﻧﻜﺘﺐ ‪ MONTH‬اذا اردﻧﺎ ان ﻳﻌﺮض ﺗﺎرﻳﺦ اول ﻳﻮم ﻓﻲ ﺷﻬﺮ‬ ‫‪M‬‬
‫اﻟﺘﺎرﻳﺦ اﻟﻤﺤﺪد‬
‫ﻧﻜﺘﺐ ‪ YEAR‬اذا اردﻧﺎ ان ﻳﻌﻮد ﻷول ﻳﻮم ﻟﻨﻔﺲ ﺳﻨﺔ اﻟﺘﺎرﻳﺦ‬ ‫‪Y‬‬

‫ﻣﺜﺎل‬

‫)’‪TRUNC (’07-MAY-96’, ‘MONTH‬‬

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﻜﻮن اﻟﻨﺎﺗﺞ‬


‫‪01-MAY-96‬‬

‫ﻣﺜﺎل‬

‫)’‪TRUNC (’07-MAY-96’, ‘YEAR‬‬

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﻜﻮن اﻟﻨﺎﺗﺞ‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪40 http://www.boosla.com‬‬

‫‪01-JAN-96‬‬

‫دوال اﻟﺘﺤﻮﻳﻞ‬
‫ﻳﺘﻢ ﺗﺤﻮﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺷﻜﻞ إﻟﻰ اﺧﺮ وﺗﻮﺟﺪ دوال ﺧﺎﺻﺔ ﺑﺎﻟﺘﻮﻳﻞ وﻣﻨﻬﺎ‬

‫اﻟﺘﺤﻮﻳﻞ اﻟﻰ ﺣﺮوف ‪TO_CHAR‬‬ ‫‪-1‬‬


‫اﻟﺘﺤﻮﻳﻞ إﻟﻰ أرﻗﺎم ‪TO_NUMBER‬‬ ‫‪-2‬‬
‫اﻟﺘﺤﻮﻳﻞ إﻟﻰ ﺗﺎرﻳﺦ ‪TO_DATE‬‬ ‫‪-3‬‬

‫اﻟﺪاﻟﺔ ‪TO_CHAR‬‬ ‫‪-1‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﺤﻮﻳﻞ اﻟﺘﺎرﻳﺦ او اﻷرﻗﺎم اﻟﻰ ﺟﻤﻠﺔ ﺣﺮﻓﻴﺔ ﺣﻴﺚ ﻳﺘﻢ ﺗﻐﻴﻴﺮ ﺷﻜﻞ اﻟﺘﺎرﻳﺦ او‬
‫اﻻرﻗﺎم ﻣﻦ ﺻﻮرة إﻟﻰ اﺧﺮى‬

‫اوﻻ ﻣﻦ ﺗﺎرﻳﺦ اﻟﻰ ﺟﻤﻠﺔ ﺣﺮﻓﻴﺔ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫)’‪TO_CHAR (DATE,’FMT‬‬

‫ﺣﻴﺚ أن‬

‫ﻗﻴﻤﺔ اﻟﺘﺎرﻳﺦ‬ ‫‪DATE‬‬


‫اﻟﺼﻮرة اﻟﺠﺪﻳﺪة‬ ‫‪FMT‬‬

‫ﻣﺜﺎل‬
‫)’‪SELECT TO_CHAR (SYSDATE,’DAY, DD MON YY‬‬
‫;‪FROM DUAL‬‬

‫ﻟﻨﻔﺮض أن ﺗﺎرﻳﺦ اﻟﺠﻬﺎز )‪ (SYSDATE‬هﻮ ‪ 2003/7/7‬ﻓﺈن ﻧﺘﻴﺠﺔ اﻟﺘﻨﻔﻴﺬ ﻟﻠﺠﻤﻠﺔ اﻟﺴﺎﻳﻘﺔ هﻲ‬
‫آﻤﺎﻳﻠﻲ‪:‬‬
‫)’‪TO_CHAR (SYSDATE,’DAY, DD MON YY‬‬
‫‪-----------------------------------‬‬
‫‪MONDAY‬‬ ‫‪7 JUL‬‬ ‫‪03‬‬

‫ﻣﻼﺣﻈﺔ‬
‫اذا آﺘﺒﻨﺎ ‪ YYYY‬ﻓﺎﻧﻪ ﺳﻮف ﻳﺘﻢ ﻋﺮض اﻟﺴﻨﺔ آﺎﻣﻠﺔ ﻣﺘﻼ‪2003‬‬ ‫‪-1‬‬
‫اذا آﺘﺒﻨﺎ ‪ MM‬ﻓﺈﻧﻪ ﺳﻮف ﻳﺘﻢ ﻋﺮض رﻗﻢ اﻟﺸﻬﺮ ﻣﺜﻼ ‪06‬‬ ‫‪-2‬‬
‫اذا آﺘﺒﻨﺎ ‪ MONTH‬ﻓﺎﻧﻪ ﺳﻮف ﻳﺘﻢ ﻋﺮض اﺳﻢ اﻟﺸﻬﺮ آﺎﻣﻼ ﻣﺜﻞ ‪July‬‬ ‫‪-3‬‬
‫اذا آﺘﺒﻨﺎ ‪DY‬ﺳﻴﺘﻢ ﻋﺮض أول ﺛﻼﺛﺔ ﺣﺮوف ﻣﻦ اﻟﻴﻮم‬ ‫‪-4‬‬
‫اذا آﺘﺒﻨﺎ ‪ DAY‬ﺳﻴﺘﻢ ﻋﺮض اﺳﻢ اﻟﻴﻮم آﺎﻣﻼ‬ ‫‪-5‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪41 http://www.boosla.com‬‬

‫‪ -6‬اذا اردﻧﺎ ﻋﺮض اﻟﺴﺎﻋﺔ ﻧﻜﺘﺐ ‪ HH24:MI:SS AM‬ﻣﺜﻞ ‪15:45:32 PM‬‬

‫ﺛﺎﻧﻴﺎ اﻟﺘﺤﻮﻳﻞ ﻣﻦ أرﻗﺎم اﻟﻰ ﺟﻤﻠﺔ ﺣﺮﻓﻴﺔ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫)’‪TO_CHAR (NUMBER,’FMT‬‬

‫ﺣﻴﺚ أن‬

‫‪ NUMBER‬اﻟﺮﻗﻢ‬
‫اﻟﺼﻮرة اﻟﺠﺪﻳﺪة‬ ‫‪FMT‬‬

‫ﻣﺜﺎل‬

‫)‪SELECT TO_CHAR (6500500,’$9,999,999‬‬


‫;‪FROM S_EMP‬‬

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﻜﻮن اﻟﻨﺎﺗﺞ‬

‫)‪TO_CHAR (6500500,’$9,999,999‬‬
‫‪-----------------------------------‬‬
‫‪6,500,500‬‬

‫ﻣﻼﺣﻈﺔ‬
‫ﻋﻨﺪﻣﺎ ﻧﻜﺘﺐ ‪ 9‬ﻓﺈﻧﻨﺎ ﻧﻌﻨﻲ ﻳﻬﺎ ﺧﺎﺗﺔ رﻗﻢ‬ ‫‪-1‬‬
‫ﻋﻨﺪﻣﺎ ﻧﻜﺘﺐ ) ‪ ( ,‬ﻳﺘﻢ ﻃﺒﺎﻋﺔ اﻟﻔﺎﺻﻠﺔ‬ ‫‪-2‬‬
‫ﻋﻨﺪﻣﺎ ﻧﻜﺘﺐ) ‪ ( .‬ﻳﺘﻢ ﻃﺒﺎﻋﺔ اﻟﻔﺎﺻﻠﺔ اﻟﻌﺸﺮﻳﺔ‬ ‫‪-3‬‬

‫اﻟﺪاﻟﺔ ‪TO_NUMBER‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﺘﺤﻮﻳﻞ اﻟﻘﻴﻤﺔ اﻟﺮﻗﻤﻴﺔ اﻟﻤﺨﺰﻧﺔ ﻋﻰ ﺷﻜﻞ ﺣﺮف ‪ CHAR‬إﻟﻰ ﻗﻴﻤﺔ رﻗﻤﻴﺔ ﻓﻌﻠﻴﻪ‬
‫‪NUMBER‬‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫)‪TO_NUMBER (VALUE‬‬

‫ﺣﻴﺚ‬
‫ﻗﻴﻤﺔ ﻣﺨﺰﻧﺔ ﻋﻠﻰ ﺷﻜﻞ أرﻗﺎم ﺣﺮﻓﻴﺔ ﺳﻴﺘﻢ ﻋﺮﺿﻬﺎ ﻋﻠﻰ ﺷﻜﻞ ﻗﻴﻢ رﻗﻤﻴﺔ‬ ‫‪VALUE‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪42 http://www.boosla.com‬‬

‫ﻣﺜﺎل‬

‫ﻟﻨﻔﺮض أن ﻟﺪﻳﻨﺎ ﺣﻘﻞ اﺳﻤﻪ ‪ NUM‬ﻓﻲ ﺟﺪول ‪ DATA‬ﺑﻪ ارﻗﺎم وﻟﻜﻨﻬﺎ ارﻗﺎم رﻓﻴﻪ أي اﻧﻬﺎ ﺗﻌﺎﻣﻞ‬
‫ﻣﻌﺎﻣﻠﺔ اﻟﺤﺮوف ﻓﻼ ﺗﺪﺧﻞ ﻓﻲ اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ ﻓﻌﻨﺪ ﺗﻨﻔﻴﺬ هﺬﻩ اﻟﺪاﻟﺔ ﺳﺘﻢ ﺗﺤﻮﻳﻞ اﻟﻘﻴﻢ إﻟﻰ ﻓﻴﻢ‬
‫رﻗﻤﻴﺔ ﻳﻤﻜﻦ ان ﺗﺪﺧﻞ ﻓﻲ اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ‬

‫)‪SELECT NUM, TO_ NUMBER (NUM‬‬


‫;‪FROM DATA‬‬

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﻜﻮن اﻟﻨﺎﺗﺞ‬

‫‪NUM‬‬ ‫)‪TO_NUMBER(NUM‬‬
‫‪----------------------------------------------------------------------------------------‬‬
‫‪9236‬‬ ‫‪9236‬‬
‫‪7526‬‬ ‫‪7526‬‬

‫ﻣﻼﺣﻈﺔ‬
‫اﻟﻌﻤﻮدان ﺑﻬﻤﺎ ﻧﻔﺲ اﻟﻘﻴﻢ وﻟﻜﻦ ﻳﻮﺟﺪ اﺧﺘﻼف ﻓﻲ اﻟﻨﻮع‬

‫اﻟﺪاﻟﺔ ‪TO_DATE‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﺘﺤﻮﻳﻞ اﻟﻤﺘﻐﻴﺮ اﻟﺤﺮﻓﻲ داﺧﻞ اﺷﺎؤة اﻟﻨﺺ اﻟﻰ ﻣﺘﻌﻴﺮ ﺑﺸﻜﻞ ﺗﺎرﻳﺦ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ‬
‫ﻳﻮﺿﺢ ذﻟﻚ ‪:‬‬
‫)’‪SELECT TO_DATE (‘JULY 7,2003’,’MONTH DD, YY‬‬
‫;‪FROM DUAL‬‬

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﻜﻮن اﻟﻨﺎﺗﺞ‬

‫)’‪TO_DATE (‘JULY 7,2003’,’MONTH DD, YY‬‬


‫‪--------------------------------------------------------------‬‬
‫‪07-JUL-03‬‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬
‫ﺗﻨﺎوﻟﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ دوال اﻟﺘﺎرﻳﺦ اﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ آﺎﻣﻞ اﻟﺼﻴﻎ ﻟﻠﺘﺎرﻳﺦ واﻟﻮﻗﺖ‬
‫واﺳﺘﻌﺮاﺿﻬﺎ ﺑﻌﺪة أﺷﻜﺎﻟﻬﺎ ﺛﻢ ﺗﻄﺮﻗﻨﺎ دوال اﻟﺘﺤﻮﻳﻞ اﻟﺘﻲ ﺗﻌﻤﻞ ﺗﺤﻮﻳﻞ ﺣﺎﻻت اﻟﻜﺘﺎﺑﺔ ﻣﻦ ﻧﺺ إﻟﻰ‬
‫ﺗﺎرﻳﺦ و ﺑﺎﻟﻌﻜﺲ آﺬﻟﻚ ﻣﻦ أرﻗﺎم اﻟﻰ ﻧﺺ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪43 http://www.boosla.com‬‬

‫اﻟﺪوال اﻟﺮﻗﻤﻴﺔ‬
‫أهﺪاف اﻟﻔﺼﻞ‬

‫ﻓﻲ ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ ان ﺷﺎء اﷲ ﺳﺘﻜﻦ ﻗﺎدر ﻋﻠﻰ‬


‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ داﻟﺔ اﻟﻘﻴﻤﺔ اﻟﻤﻄﻠﻘﺔ‬ ‫‪-1‬‬
‫إﻳﺠﺎد اﻟﺠﺬر اﻟﺘﺮﺑﻴﻌﻲ ﻟﻸﻋﺪاد‬ ‫‪-2‬‬
‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺪاﻟﺔ اﻷﺳﻴﺔ ﻟﻸﻋﺪاد‬ ‫‪-3‬‬
‫ﺗﻘﺮﻳﺐ اﻷﻋﺪاد اﻟﻌﺸﺮﻳﺔ ﻣﻦ ﺧﻼل ‪SQL‬‬ ‫‪-4‬‬
‫ﺗﻘﺮﻳﺐ اﻷﻋﺪاد ﻣﻦ ﺧﻼل ﺣﺬف اﻟﻤﻨﺰﻟﺔ اﻟﻌﺸﺮﻳﺔ‬ ‫‪-5‬‬
‫إﻳﺠﺎد ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ ﻟﻸﻋﺪاد‬ ‫‪-6‬‬
‫اﻳﺠﺎد اﺷﺎرة اﻷﻋﺪاد اﻟﺴﺎﻟﺒﺔ‬ ‫‪-7‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪44 http://www.boosla.com‬‬

‫اﻟﺪوال اﻟﻤﻄﻠﻘﺔ واﻷﺳﻴﺔ واﻷﺳﻴﺔ واﻟﺠﺬر اﻟﺘﺮﺑﻴﻌﻲ‬

‫داﻟﺔ اﻟﻘﻴﻤﺔ اﻟﻤﻄﻠﻘﺔ ‪ABS Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻹﻳﺠﺎد اﻟﻘﻴﻤﺔ اﻟﻤﻄﻠﻘﺔ ﻟﺮﻗﻢ ﻣﻌﻴﻦ وﻏﺎﻟﺒﺎ ﻳﺘﻢ اﺳﺘﺨﺪان هﺬﻩ اﻟﺪاﻟﺔ ﻣﻊ ﺟﻤﻞ أﺧﺮى‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫)‪ABS (COL|VALUE‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻟﺤﻘﻞ أو اﻟﻌﻤﻮد‬ ‫‪COL‬‬


‫اﻟﻘﻴﻤﺔ اﻟﺒﺪﻳﻠﺔ ﻟﻠﻌﻤﻮد )اﻟﺒﻴﺎﻧﺎت(‬ ‫‪VALUE‬‬

‫ﻣﺜﺎل‬

‫;‪SELECT name,job,hiredate-sysdate FROM S_EMP‬‬

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﺘﻢ ﻃﺒﺎﻋﺔ‪:‬‬

‫‪name‬‬ ‫‪job‬‬ ‫‪hierdate-sysdate‬‬


‫‪-------------------- ----------------------------‬‬
‫‪ALI‬‬ ‫‪Salesman‬‬ ‫‪-6906.3252‬‬
‫‪AHMED‬‬ ‫‪Analyst‬‬ ‫‪-6841.3252‬‬
‫‪SAMI‬‬ ‫‪Manager‬‬ ‫‪-4592.3252‬‬
‫‪Khaled‬‬ ‫‪Manager‬‬ ‫‪-6555.3252‬‬

‫ﻧﻼﺣﻆ أن ﻗﻢ اﻟﻌﻤﻮد ‪ hierdate-sysdate‬ﻗﻲ ﺳﺎﻟﺒﺔ وﻟﻜﻲ ﻧﺠﻌﻠﻬﺎ داﺋﻤﺎ ﻣﻮﺟﺒﺔ ﻧﺄﺧﺬ اﻟﻘﻴﻤﺔ‬
‫اﻟﻤﻄﻠﻘﺔ ﻟﻬﺬا اﻟﻌﻤﻮد وﻧﻜﺘﺐ‬

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

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﺘﻢ ﻃﺒﺎﻋﺔ‪:‬‬


‫‪name‬‬ ‫‪job‬‬ ‫‪hierdate-sysdate‬‬
‫‪------------------------------------------------‬‬
‫‪ALI‬‬ ‫‪Salesman‬‬ ‫‪6906.3252‬‬
‫‪AHMED‬‬ ‫‪Analyst‬‬ ‫‪6841.3252‬‬
‫‪SAMI‬‬ ‫‪Manager‬‬ ‫‪4592.3252‬‬
‫‪Khaled‬‬ ‫‪Manager‬‬ ‫‪6555.3252‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪45 http://www.boosla.com‬‬

‫اﻟﺪاﻟﺔ اﻷﺳﻴﺔ ‪POWER Function‬‬ ‫‪-2‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻹﻳﺠﺎد ﻗﻴﻤﺔ رﻗﻢ ﻣﺮﻓﻮع ﻷس‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫)‪POWER (COL|VALUE,P‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻟﺤﻘﻞ أو اﻟﻌﻤﻮد‬ ‫‪COL‬‬


‫اﻟﻘﻴﻤﺔ اﻟﺒﺪﻳﻠﺔ ﻟﻠﻌﻤﻮد )اﻟﺒﻴﺎﻧﺎت(‬ ‫‪VALUE‬‬
‫ﻗﻴﻤﺔ اﻷس‬ ‫‪P‬‬

‫ﻣﺜﺎل‬

‫;‪SELECT DIGIT, POWER (DIGIT1, 2) FROM DIGIT‬‬

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﺘﻢ ﻃﺒﺎﻋﺔ‪:‬‬

‫‪DIGIT1‬‬ ‫)‪POWER (DIGIT1, 2‬‬


‫‪--------------------‬‬ ‫‪--------------------‬‬
‫‪20‬‬ ‫‪400‬‬
‫‪25‬‬ ‫‪625‬‬
‫‪25.5‬‬ ‫‪650.25‬‬
‫‪30.5‬‬ ‫‪930.25‬‬

‫داﻟﺔ اﻟﺠﺬر اﻟﺘﺮﺑﻴﻌﻲ ‪SQRT Function‬‬ ‫‪-3‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻹﻳﺎد اﻟﺠﺬر اﻟﺘﺮﺑﻴﻌﻲ ﻟﺮﻗﻢ ﻣﻌﻴﻦ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫)‪SQRT (COL|VALUE‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻟﺤﻘﻞ أو اﻟﻌﻤﻮد‬ ‫‪COL‬‬


‫اﻟﻘﻴﻤﺔ اﻟﺒﺪﻳﻠﺔ ﻟﻠﻌﻤﻮد )اﻟﺒﻴﺎﻧﺎت(‬ ‫‪VALUE‬‬
46 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

‫ﻣﺜﺎل‬

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

:‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﺘﻢ ﻃﺒﺎﻋﺔ‬

NAME SAL SQRT (SAL)


------------------------------------------------
Ali 968 31.113
Ahmed 1936 44
SAMI 1512.5 38.9805
KHALED 3599.75 59.988
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪47 http://www.boosla.com‬‬

‫دوال اﻟﺘﻘﺮﻳﺐ وﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ واﻹﺷﺎرة‬


‫داﻟﺔ اﻟﺘﻘﺮﻳﺐ اﻟﻌﺸﺮي ‪ROUND Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﻘﺮﻳﺐ اﻟﻌﺪد إﻟﻰ اﻗﺮب رﻗﻢ ﻋﺸﺮي أو ﺻﺤﻴﺢ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫)‪ROUND (COL|VALUE, N‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻟﺤﻘﻞ أو اﻟﻌﻤﻮد‬ ‫‪COL‬‬


‫ﻗﻴﻤﺔ ﻋﺪدﻳﺔ‬ ‫‪VALUE‬‬
‫ﻋﺪد اﻟﻤﻮاﻗﻊ اﻟﻌﺸﺮﻳﺔ‬ ‫‪N‬‬

‫ﻣﺜﺎل‬

‫;‪SELECT SQRT (sal), ROUND (SQRT (sal), 2) FROM S_EMP‬‬

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﺘﻢ ﻃﺒﺎﻋﺔ‪:‬‬

‫)‪SQRT (SAL‬‬ ‫)‪ROUND (SQRT (sal), 1‬‬


‫‪------------------------------------------------‬‬
‫‪31.113‬‬ ‫‪31.11‬‬
‫‪44‬‬ ‫‪44‬‬
‫‪38.9805‬‬ ‫‪38.98‬‬
‫‪59.988‬‬ ‫‪59.99‬‬

‫داﻟﺔ اﻟﺘﻘﺮﻳﺐ ﺑﺎﻟﺤﺬف ‪TRANCATE Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﻘﺮﻳﺐ اﻟﺮﻗﻢ ﺑﺤﺬف ﺑﻌﺾ اﻟﻤﻮاﻗﻊ اﻟﻌﺸﺮﻳﺔ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫)‪TRUNC (COL|VALUE,N‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻟﺤﻘﻞ أو اﻟﻌﻤﻮد‬ ‫‪COL‬‬


‫ﻗﻴﻤﺔ ﻋﺪدﻳﺔ‬ ‫‪VALUE‬‬
‫ﻋﺪد اﻟﻤﻮاﻗﻊ اﻟﻌﺸﺮﻳﺔ‬ ‫‪N‬‬
48 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

‫ﻣﺜﺎل‬

SELECT DIGIT1, TRUNC (DIGIT1,-1),


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

:‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﺘﻢ ﻃﺒﺎﻋﺔ‬

DIGIT1 TRUNC (DIGIT1, -1)


TRUNC (POWER
(DIGIT1, 2), 1)
------------------------------------------------
20 20 400
25 20 625
25.5 20 650.2
30.5 30 930.2

MOD Function ‫داﻟﺔ ﺑﺎﻗﻲ اﻟﻘﺴﻤﺔ‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻹﻳﺠﺎد ﺑﺎﻗﻲ ﻗﺴﻤﺔ ﻋﺪدﻳﻦ‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬
MOD (VALUE1, VALUE2)

‫ﺣﻴﺚ أن‬

‫ﻗﻴﻤﺔ ﻋﺪد ﺑﺔ‬ VALUE1


‫ﻗﻴﻤﺔ ﻋﺪدﻳﺔ‬ VALUE2

‫ﻣﺜﺎل‬
SELECT DIGIT1, MOD (DIGIT1, 7) FROM DIGITS

:‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﺘﻢ ﻃﺒﺎﻋﺔ‬

DIGIT1 MOD (DIGI1, 7)


------------------------------------------------
20 6
25 4
25.5 4.5
30.5 2.5
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪49 http://www.boosla.com‬‬

‫داﻟﺔ اﻹﺷﺎرة ‪SIGN Function‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪااة ﺑﻔﺤﺺ إﺷﺎرة اﻟﺮﻗﻢ ﻓﺈذا آﺎﻧﺖ اﻹﺷﺎؤة ﻣﻮﺟﺒﺔ ﺗﻌﻮد ﺑﺎﻟﻘﻴﻤﺔ )‪ (1‬أﻣﺎ اذا آﺎﻧﺖ‬
‫اﻹﺷﺎرة ﺳﺎﻟﺒﺔ ﻓﺘﻌﻮد ﺑﺎﻟﻘﻴﻤﺔ )‪(-1‬‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم اﻧﻈﺮ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ ‪:‬‬

‫ﻣﺜﺎل‬

‫‪SELECT DIGIT1, SIGN (DIGIT1) FROM DIGITS‬‬

‫‪DIGIT1‬‬ ‫)‪MOD (DIGI1, 7‬‬


‫‪------------------------------------------------‬‬
‫‪20‬‬ ‫‪1‬‬
‫‪25‬‬ ‫‪1‬‬
‫‪25.5‬‬ ‫‪1‬‬
‫‪30.5‬‬ ‫‪1‬‬

‫‪-50‬‬ ‫‪-1‬‬
‫‪-30.5‬‬ ‫‪-1‬‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬

‫ﺗﻨﺎوﻟﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ اﻟﺪوال اﻟﺮﻗﻤﻴﺔ ﻓﻲ ﻟﻐﺔ اﻻﺳﺘﻌﻼم واﻻﺳﺘﻔﻬﺎم ﻓﻲ ﻧﻈﺎم ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت‬
‫اوراآﻞ وﻗﺪ ﻗﺴﻤﻨﺎ هﺬﻩ اﻟﺪوال ﺣﺴﺐ وﻇﺎﺋﻔﻬﺎ ﻓﻤﻨﻬﺎ ﻣﺎﻳﺘﻌﺎﻣﻞ ﻣﻊ ﺳﺠﻞ أو ﺻﻒ ﻣﻦ اﻟﺒﻴﺎﻧﺎت‬
‫وﻣﻨﻬﺎ ﻣﺎﻳﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺴﺠﻼت ‪ RECORDS‬او اﻷﻋﻤﺪة ‪ )COLUMNS‬اﻟﺤﻘﻮل(‬
‫ﺣﻴﺚ ﺗﻄﺮﻗﻨﺎ اﻟﻰ داﻟﺔ اﻟﻘﻴﻤﺔ اﻟﻤﻄﻠﻘﺔ واﻟﺪاﻟﺔ اﻻﺳﻴﺔ واﻟﺠﺬر اﻟﺘﺮﺑﻴﻌﻲ وآﺬﻟﻚ دوال اﻟﺘﻘﺮﻳﺐ وداﻟﺔ‬
‫ﺑﺎﻗﺲ اﻟﻘﺴﻤﺔ واﻻﺷﺎرة‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪50 http://www.boosla.com‬‬

‫اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت‬
‫أهﺪاف ااﻓﺼﻞ‬

‫ان ﺷﺎء اﷲ ﺑﻌﺪ دراﺳﺔ هﺬا اﻟﻔﺼﻞ ﺳﺘﻜﻮن ﻗﺎدر ﻋﻠﻰ‬

‫‪ -1‬اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﻦ أآﺜﺮ‬


‫‪ -2‬اﺳﺘﺮاع اﻟﺒﻴﺎﻧﺎت ﺑﺄﺳﻤﺎء ﻣﺴﺘﻌﺎرة‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪51 http://www.boosla.com‬‬

‫اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﻦ أآﺜﺮ ﻣﻦ ﺟﺪول‬


‫ﻧﺴﺘﻄﻴﻊ اﺳﺘﺮﺟﺎع ﺑﻴﺎﻧﺎت ﻣﻦ أآﺜﺮ ﻣﻦ ﺟﺪول اذا آﺎن ﺑﻴﻨﻬﻢ ﻋﻼﻗﺔ ‪ Relation‬ﺣﻴﺚ آﻞ ﺻﻒ ﻣﻦ‬
‫اﺣﺪهﻤﺎ ﻳﺮﺗﺒﻂ ﻣﻊ ﺻﻒ ﻣﻦ اﻻﺧﺮ ﻋﻦ ﻃﺮﻳﻖ ﺣﻘﻞ ﻣﺸﺘﺮك‬

‫وﺗﻮﺟﺪ ﻋﺪة أﻧﻮاع ﻟﻠﺮﺑﻂ‬


‫‪:‬‬
‫‪EQUAI JOIN-1‬‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫‪SELECT table.column, table.column‬‬


‫‪FROM table1, table2‬‬
‫;‪WHERE table1.column1 = table2.column2‬‬

‫ﺣﻴﺚ ﻧﻜﺘﺐ ﺑﻌﺪ ‪ SELEST‬اﻻﻋﻤﺪة اﻟﺘﻲ ﻧﺮﻳﺪ ﻇﻬﺮوهﺎ وﻻﺣﻆ آﺬﻟﻚ أﻧﻪ ﻣﻦ اﻟﻀﺮوري آﺘﺎﺑﺔ‬
‫اﻻﻋﻤﺪة اﻟﺘﻲ ﻋﻦ ﻃﺮﻳﻘﻬﺎ ﺗﻢ اﻟﺮﺑﻂ)اﻟﺘﻲ ﻳﺘﺴﺎوى ﻓﻴﻬﺎ اﻟﺤﻘﻮل ﻓﻲ اﻟﺠﺪوﻟﻴﻦ( وﻧﻜﺘﺐ ﺑﻌﺪ آﻠﻤﺔ‬
‫‪ WHERE‬اﻟﻌﻤﻮدان اﻟﻠﺬان ﺗﻢ رﺑﻂ اﻟﺠﺪوﻟﻴﻦ ﻋﻦ ﻃﺮﻳﻘﻬﻤﺎ‬

‫ﻣﻼﺣﻈﺔ‬
‫ﻧﻜﺘﺐ اﺳﻢ اﻟﺠﺪول اوﻻ ﺛﻢ اﺳﻢ اﻟﻌﻤﻮد وﺑﻴﻨﻬﻤﺎ ﻧﻘﻄﻪ ‪table.column‬‬
52 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

‫ﻣﺜﺎل‬

SELECT S_EMP.DEPT_ID, S_EMP.LAST_NAME,S_DEPT.NAME


FROM S_EMP, S_DEPT
WHERE S_EMP.DEPT_ID = S_DEPT.ID;

: ‫ﻋﻨﺪ اﻟﺘﻔﻴﺬ ﻳﻨﺘﺞ‬

DEPT_ID L A S T_ N A M E NAME
------------------------------------------------
50 VELASQUEA ADMINISTRATION
41 NGAO OPERATOPNS
31 NAGAYAMA SALES
50 ROPEBURN ADMINISTRATION
41 URGIHART OPERATOPNS
42 MENCHU OPERATOPNS
43 BIRI OPERATOPNS
45 HAVEL OPERATOPNS

‫ ﻓﻨﻜﺘﺐ‬AND ‫ وذﻟﻚ ﺑﺎﺳﺘﺨﺪام‬WHERE ‫وﻳﻤﻜﻦ اﺿﺎﻓﺔ ﺷﺮط اﺧﺮ ﺑﻌﺪ‬

SELECT S_EMP.DEPT_ID, S_EMP.LAST_NAME,S_DEPT.NAME


FROM S_EMP, S_DEPT
WHERE S_EMP.DEPT_ID = S_DEPT.ID AND S_DEPT = 41;
53 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

: ‫ﻋﻨﺪ اﻟﺘﻔﻴﺬ ﻳﻨﺘﺞ‬

DEPT_ID L A S T_ N A M E NAME
------------------------------------------------
41 NGAO OPERATOPNS
41 URGIHART OPERATOPNS

NON- EQUAI JOIN-2

‫ﻳﺴﺘﺨﺪم هﺬﻩ اﻟﻨﻮع ﻋﻨﺪﻣﺎ ﻻ ﻳﻮﺟﺪ اﻋﻤﺪة ﻣﺸﺘﺮآﺔ ﺑﻴﻦ اﻟﺠﺪوﻟﻴﻦ‬

‫ﻣﺜﺎل‬
SELECT S_EMP.ename, S_EMP.job, S_EMP.sal,
salgrade.grade
FROM S_EMP, salgrade
WHERE S_EMP.sal BETWEEN salgrade.losal AND
salgrade.hisal;

OUTER JOIN-3

‫ﻳﺴﺘﺨﺪم هﺬا اﻟﻨﻮع ﻟﺮؤﻳﺔ اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول اﻟﺜﺎﻧﻲ اﻟﺘﻲ ﻻ ﻳﻘﺎﺑﻠﻬﺎ ﺳﺠﻼت ﻓﻲ اﻟﺠﺪول اﻷول‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

SELECT table.column, table.column


FROM table1, table2
WHERE table1.column(+) = table2.column;

‫ﻣﻼﺣﻈﺔ‬
‫( ﻓﻲ هﺬا اﻟﻨﻮع ﻣﻦ اﻟﺮﺑﻂ ﺣﻴﺚ ﻧﻜﺘﺒﻪ ﺑﺠﻮار اﻻﺳﻢ اﻟﺤﻘﻞ اﻟﺬي ﻻ ﻳﺤﺘﻮي هﻠﻰ‬+) ‫ﻧﺴﻨﺨﺪم اﻟﻤﻌﺎﻣﻞ‬
‫ﻗﻴﻤﺔ‬
54 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

‫ﻣﺜﺎل‬

‫اذا اردﻧﺎ اﻻﺳﺘﻌﻼم ﻋﻦ اﻟﺠﺰء اﻟﺬي ﻻ ﻳﺘﻮاﺟﺪ ﺑﻪ ﻣﻮﻇﻒ ﻧﻜﺘﺐ‬

SELECT s_emp.last_name, s_emp.id, ,


s_customer.name
FROM s_emp, s_customer
WHERE s_emp.id (+) = s_customer.sales_rep_id
ORDER BY s_emp.id;

SELF JOIN-4
‫ﺗﺴﺘﺨﺪم ﻟﺮﺑﻂ ﺻﻒ ﻣﻦ ﺟﺪول ﺑﺼﻒ اﺧﺮ ﻣﻦ ﻧﻔﺲ اﻟﺠﺪول‬
55 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

: ‫ﻣﺜﺎل‬
SELECT worker.last_name||' works for '||
manager.last_name
FROM s_emp worker, s_emp manager
WHERE worker.manager_id = manager.id;

‫ﻋﻨﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻴﺘﻢ ﻃﺒﺎﻋﺔ‬

worker.last_name||' works for '||


manager.last_name
------------------------------------------------
Nago works for Velasquez
Nagayama works for Velasquez
Ropeburn works for Velasquez
Urguhart works for Nago
Biri works for Nago
Magee works for Nagayama
Giljum Nagayama
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪56 http://www.boosla.com‬‬

‫اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﺑﺄﺳﻤﺎء ﻣﺴﺘﻌﺎرة‬

‫ﻓﻲ اﺧﺮ ﻣﺜﺎل ﻗﻤﻨﺎ ﺑﺎﺳﺘﺪﻋﺎء اﻟﺠﺪول ‪ s_emp‬ﺑﺎﺳﻢ ﻣﺴﺘﻌﺎر ‪ worker‬وﻣﺮة أﺧﺮى ﻳﺎﺳﻢ‬
‫‪ manager‬وهﺬا اﻻﺳﻢ ﻳﻘﻮم ﻣﺤﻞ اﺳﻢ اﻟﺠﺪول وﻗﺪ اﺳﺘﺨﺪﻣﻨﺎﻩ ﻟﻠﺘﺴﻬﻴﻞ‬

‫ﻣﺜﺎل‬

‫‪SELECT‬‬ ‫‪e.ename, e.job, e.sal, s.grade‬‬


‫‪FROM‬‬ ‫‪S_EMP e, salgrade s‬‬
‫‪WHERE‬‬ ‫;‪e.sal BETWEEN s.losal AND s.hisal‬‬
‫ﻣﺜﺎل‬

‫‪SELECT‬‬ ‫‪e.last_name, e.id, c.name‬‬


‫‪FROM s_S_EMP e, s_customer c‬‬
‫‪WHERE‬‬ ‫‪e.id (+) = c.sales_rep_id‬‬
‫;‪ORDER By e.id‬‬
‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‪.‬‬

‫ﺗﻨﺎوﻟﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ ﺟﻤﻞ ‪ SQL‬اﻟﺨﺎﺻﺔ ﺑﺎﺳﺘﺮﺟﺎع ﺑﻴﺎﻧﺎت ﻣﻦ اآﺜﺮ ﻣﻦ ﺟﺪول آﻐﺮض رﻗﻢ‬
‫اﻗﺴﻢ اﻟﻤﻮﻇﻔﻴﻦ ﻣﻦ ﺟﺪول اﻟﻤﻮﻃﻔﻴﻦ وﺗﻄﺮﻗﻨﺎ آﺬﻟﻚ إﻟﻰ ﻋﻤﻠﻴﺔ اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺧﻼل اﺳﻢ‬
‫ﻣﺴﺘﻌﺎر‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪57 http://www.boosla.com‬‬

‫اﻟﺪوال اﻟﺮﻳﺎﺿﻴﺔ واﻹﺣﺼﺎﺋﻴﺔ ودوال اﻟﻤﺠﻤﻮﻋﺎت‬

‫أهﺪاف اﻟﻔﺼﻞ‬

‫ﻓﻲ ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ ان ﺷﺎء اﷲ ﺳﺘﻜﻮن ﻗﺎدر ﻋﻠﻰ ‪:‬‬


‫‪ -1‬اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺪوال اﻟﺮﻳﺎﺿﻴﺔ واﻻﺣﺼﺎﺋﻴﺔ‬
‫‪ -2‬اﻟﺘﻌﺎﻣﻞ ﻣﻊ دوال اﻟﻤﺠﻤﻮﻋﺎت‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪58 http://www.boosla.com‬‬

‫اﻟﺪوال اﻟﺮﻳﺎﺿﻴﺔ واﻹﺣﺼﺎﺋﻴﺔ‬

‫هﻨﺎﻟﻠﻚ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻻﻗﺘﺮاﻧﺎت اﻟﺮﻳﺎﺿﻴﺔ واﻻﺣﺼﺎﺋﻴﺔ اﻟﺘﻲ ﺗﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺴﺠﻼت‬


‫ﻹﺧﺮاج ﻗﻴﻤﺔ واﺣﺪة ﻣﺤﺪودة وﻣﻦ هﺬﻩ اﻻﻗﺘﺮاﻧﺎت ﻣﺎﻳﻠﻲ‪:‬‬

‫داﻟﺔ اﻟﻌﺪ ‪COUNT‬‬ ‫‪-1‬‬


‫داﻟﺔ أآﺒﺮ ﻗﻴﻤﺔ‪MAX‬‬ ‫‪-2‬‬
‫داﻟﺔ أﺻﻐﺮ ﻗﻴﻤﺔ ‪MIN‬‬ ‫‪-3‬‬
‫داﻟﺔ اﻟﻤﺠﻤﻮع ‪SUM‬‬ ‫‪-4‬‬
‫داﻟﺔ اﻟﻤﺘﻮﺳﻂ اﻟﺤﺴﺎﺑﻲ ‪AVG‬‬ ‫‪-5‬‬
‫داﻟﺔ اﻻﻧﺤﺮاف اﻟﻤﻌﻴﺎري ‪STDDEV‬‬ ‫‪-6‬‬
‫داﻟﺔ اﻟﻤﻌﻴﺎر ‪VARIANCE‬‬ ‫‪-7‬‬
‫داﻟﺔ اﻟﻌﺪ ‪COUNT‬‬ ‫‪-1‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﻌﻤﻠﻴﺔ ﺣﺼﺮ اﻟﺤﻘﻮل ﻓﻲ ﻋﻤﻮد ﻣﻌﻴﻦ واﻟﺘﻲ ﻻ ﺗﺤﻤﻞ اﻟﻘﻴﻤﺔ ‪NULL‬‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫)‪COUNT (DISTINCT|ALL|EXP‬‬

‫ﺣﻴﺚ أن‬
‫ﺗﺴﺘﺨﺪم ﻟﻤﻨﻊ اﺣﺘﺴﺎب اﻟﺤﻘﻮل اﻟﺘﻲ ﺗﺤﻤﻞ اﻟﻘﻴﻤﺔ ‪NULL‬‬ ‫‪DISTINCT‬‬
‫ﻳﻜﻮن اﻟﻤﺪى هﻨﺎ ﺟﻤﻴﻊ اﻟﺤﻘﻮل ﺣﺘﻰ اﻟﻤﻜﺮرة‬ ‫‪ALL‬‬
‫ﻳﻤﻜﻦ اﺳﺘﺨﺪام اﺳﻢ اﻟﻌﻤﻮد‬ ‫‪EXP‬‬

‫ﻣﺜﺎل‬
‫;‪SELECT COUNT (DISTINCT NAME) FROM S_EMP‬‬

‫ﺗﻘﻮم اﻟﺠﻤﻠﺔ اﻟﺴﺎﻳﻘﺔ ﺑﺘﺤﺪﻳﺪ ﻋﺪد اﻟﺼﻔﻮف ﻟﻠﺤﻘﻞ ‪ NAME‬ﻣﻦ اﻟﺠﺪول ‪S_EMP‬‬

‫ﻣﺜﺎل‬
‫ﺣﺴﺎب ﻋﺪد اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول‬
‫;‪SELECT COUNT (*) ”TOTAL” FROM S_EMP‬‬

‫داﻟﺔ أآﺒﺮ ﻗﻴﻤﺔ ‪MAX‬‬ ‫‪-2‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﻌﺮض أآﺒﺮ ﻗﻴﻤﺔ ﻣﻮﺟﻮدة ﻓﻲ ﻋﻤﻮد ﻣﻌﻴﻦ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫)‪MAX (DISTINCT|ALL|EXP‬‬

‫ﻣﺜﺎل‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪59 http://www.boosla.com‬‬

‫;‪SELECT MAX (DISTINCT salary) FROM S_EMP‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺠﻤﻠﺔ ﺑﻌﺮض أآﺒﺮ راﺗﺐ ﻓﻲ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ ‪S_EMP‬‬

‫داﻟﺔ أآﺒﺮ ﻗﻴﻤﺔ ‪MIN‬‬ ‫‪-3‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﻌﺮض أآﺒﺮ ﻗﻴﻤﺔ ﻣﻮﺟﻮدة ﻓﻲ ﻋﻤﻮد ﻣﻌﻴﻦ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫)‪MIN (DISTINCT|ALL|EXP‬‬

‫ﻣﺜﺎل‬
‫;‪SELECT MIN (DISTINCT salary) FROM S_EMP‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺠﻤﻠﺔ ﺑﻌﺮض أﺻﻐﺮ راﺗﺐ ﻓﻲ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ ‪S_EMP‬‬

‫داﻟﺔ اﻟﻤﺠﻤﻮع ‪SUM‬‬ ‫‪-4‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﻌﺮض ﻣﺠﻤﻮع اﻟﻘﻴﻢ اﻟﻤﻮﺟﻮدة ﻓﻲ ﺣﻘﻞ او ﻋﻤﻮد ﻣﻌﻴﻦ‬

‫)‪SUM (DISTINCT|ALL|EXP‬‬

‫ﻣﺜﺎل‬
‫;‪SELECT SUM (salary) FROM S_EMP‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺠﻤﻠﺔ ﺑﻌﺮض ﻣﺠﻤﻮع رواﺗﺐ اﻟﻤﻮﻇﻔﻴﻦ ﻓﻲ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ ‪S_EMP‬‬

‫داﻟﺔ اﻟﻤﺘﻮﺳﻂ اﻟﺤﺴﺎﺑﻲ ‪AVG‬‬ ‫‪-5‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﻌﺮض اﻟﻤﻌﺪل ﻟﻤﺠﻤﻮﻋﺔ ﻗﺮاءات ﻗﺪ ﺗﻜﻮن ﻣﻮﺟﻮدة ﻓﻲ ﺟﺪول ﻣﻌﻴﻦ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫)‪AVG (COLUMN‬‬

‫‪ COLUMN‬هﻮ اﺳﻢ اﻟﻌﻤﻮد اﻟﻤﻮﺟﻮد ﻓﻲ ﺟﺪول ﻣﻌﻴﻦ‬

‫ﻣﺜﺎل‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪60 http://www.boosla.com‬‬

‫;‪SELECT AVG (SALARY) FROM S_EMP‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺠﻤﻠﺔ ﺑﺤﺴﺎب اﻟﻤﺘﻮﺳﻂ اﻟﺤﺴﺎﺑﻲ ﻟﻤﺮﺗﺒﺎت اﻟﻤﻮﻇﻔﻴﻦ‬

‫داﻟﺔ اﻻﻧﺮاف اﻟﻤﻌﻴﺎري ‪STDDEV‬‬ ‫‪-6‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﺈﻳﺠﺎد اﻻﻧﺤﺮاف اﻟﻤﻌﻴﺎري ﻟﻤﺠﻤﻮﻋﺔ ﻣﺸﺎهﺪات أو ﻗﺮاءات‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫)‪STDDEV (DISTINCT|ALL‬‬

‫ﻣﺜﺎل‬
‫ﻹﺑﺠﺎد اﻻﻧﺤﺮاف اﻟﻤﻌﻴﺎري ﻟﻸرﻗﺎم اﻟﻮاردة ﻓﻲ ﺣﻘﻞ اﻟﺮواﺗﺐ ﻓﻲ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ ‪S_EMP‬‬

‫;‪SELECT STDDEV (SALARY) FROM S_EMP‬‬

‫داﻟﺔ اﻟﻤﻌﻴﺎر ‪VARIANCE‬‬ ‫‪-7‬‬

‫ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﺈﻳﺠﺎد اﻟﻤﻌﻴﺎر ﻟﻤﺠﻤﻮﻋﺔ ﻣﺸﺎهﺪات أو ﻗﺮاءات‬

‫ﻣﺜﺎل‬
‫;‪SELECT VARIANCE (SALARY) FROM S_EMP‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪61 http://www.boosla.com‬‬

‫دوال اﻟﻤﺠﻤﻮﻋﺎت‬

‫هﻲ ﻋﺒﺎرة ﻋﻦ ﺟﻤﻴﻊ اﻟﺪوال اﻟﺴﺎﺑﻘﺔ او أي دوال اﺧﺮى وﻟﻜﻦ ﺑﺎﺳﺘﺨﺪاﻣﺎهﺎ ﻣﻊ اﻟﺪاﻟﺔ‬
‫‪ GROUP BY‬ﻣﻤﺎﻳﺆدي إﻟﺔ ﺗﺠﺰﺋﺔ اﻟﺠﺪول اﻟﺮﺋﻴﺴﻲ إﻟﻰ ﻣﺠﻤﻮﻋﺎت اﺻﻐﺮ ﻣﻨﻪ ﺣﺴﺐ ﺷﺮط‬
‫ﻣﻐﻴﻦ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫‪GROUP BY COL_NAME‬‬

‫هﻮ اﺳﻢ اﻟﻌﻤﻮد ﻓﻲ اﻟﺠﺪول واﻟﺬي ﺳﻴﺘﻢ ﺗﻘﺴﻴﻢ‬ ‫‪COL_NAME‬‬


‫اﻟﺠﺪول إﻟﻰ ﻣﺠﻤﻮﻋﺎت ﺻﻐﻴﺮة ﺑﻨﺎء ﻏﻠﻴﻪ‬

‫وﻟﻔﻬﻢ هﺬﻩ اﻟﺪاﻟﺔ ﻧﻨﻈﺮ اﻟﻰ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ‬

‫اذا آﺘﺒﻨﺎ اﻟﺠﻤﻠﺔ اﻟﺘﺎﻟﻴﺔ‬


‫‪SELECT‬‬ ‫‪id, last_name, dept_id DEPARTMENT‬‬
‫‪FROM s_emp‬‬
‫;‪WHERE dept_id = 41‬‬
‫ﻓﺎن اﻟﻤﺨﺮﺟﺎت هﻲ‬

‫‪ID‬‬ ‫‪LAST_NAME‬‬ ‫‪DEPARTMENT‬‬


‫‪--‬‬ ‫‪---------‬‬ ‫‪----------‬‬
‫‪2‬‬ ‫‪Ngao‬‬ ‫‪41‬‬
‫‪6‬‬ ‫‪Urguhart‬‬ ‫‪41‬‬
‫‪16‬‬ ‫‪Maduro‬‬ ‫‪41‬‬
‫‪17‬‬ ‫‪Smith‬‬ ‫‪41‬‬
‫ﻧﻼﺣﻆ وﺟﻮد ارﻳﻊ ﻣﻮﻇﻔﻴﻦ ﻓﻲ اﻟﻘﺴﻢ ‪ 41‬وﻟﻜﻦ ﻋﻨﺪ ﺗﻄﺒﻖ داﻟﺔ اﻟﻤﺠﻤﻮﻋﺎت‬

‫‪SELECT‬‬ ‫”‪dept_id, COUNT (*) ”Number‬‬


‫‪FROM s_emp‬‬
‫‪WHERE‬‬ ‫‪dept_id = 41‬‬
‫;‪GROUP BY dept_id‬‬
‫ﻓﺎن اﻟﻤﺨﺮﺟﺎت هﻲ‬
‫‪DEPT_ID Number‬‬
‫‪------- ------‬‬
‫‪41‬‬ ‫‪4‬‬
‫ﻧﻼﺣﻆ ﻇﻬﻮر ﺳﻄﺮ واﺣﺪ ﻣﻦ اﻟﺒﻴﺎﻧﺎت ﻟﻠﻘﺴﻢ ‪ 41‬ﻓﺎﻟﺪاﻟﺔ ‪ GROUP BY‬ﻗﺎﻣﺖ ﺑﺘﺠﻤﻴﻊ اﻟﻘﺴﻢ ‪41‬‬
‫ﻣﻊ ﺑﻌﻀﻪ )وآﺄﻧﻬﺎ ﻋﻤﻠﺖ ﺟﺪول ﺧﺎص ﺑﻬﺎ( وهﺬﻩ واﺿﺢ ﻋﻨﺪﻣﺎ اﺳﺘﺨﺪﻣﻨﺎ داﻟﺔ ‪COUNT‬‬
‫اﻇﻬﺮت ان ﻋﺪد اﻟﺴﺠﻼت ‪ 4‬رﻏﻢ أن ﻋﺪد اﻻﺳﻄﺮ هﻮ واﺣﺪ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪62 http://www.boosla.com‬‬

‫ﻻﺳﺘﺨﺪام ﺷﺮط ﻣﻊ داﻟﺔ اﻟﻤﺠﻤﻮﻋﺎت ﻧﻜﺘﺐ اﻻﻣﺮ ‪HAVING‬‬


‫ﻗﺒﻜﻮن ﺷﻜﻞ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم آﺎﻻﺗﻲ‬

‫‪SELECT‬‬ ‫‪column, group_functionFROM‬‬


‫]‪table[WHERE condition‬‬
‫‪[GROUP BY‬‬ ‫‪group_by_expression][HAVING‬‬
‫]‪group_condition‬‬
‫‪[ORDER BY‬‬ ‫;]‪column‬‬
‫ﻣﺜﺎل‬
‫اذا اردﻧﺎ اﻇﻬﺮ ﺑﻴﺎﻧﺎت ﻣﻦ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ ‪ EMP‬وﻋﻤﻞ ﻣﺠﻤﻮﻋﺎت ﺑﺸﺮط أن ﺗﻜﻮن اﻟﻮﻇﻴﻔﺔ‬
‫‪MANAGER‬‬
‫)‪SELECT DEPTNO, JOB, COUNT (*), SUM (SAL‬‬
‫‪FROM S_EMP‬‬
‫‪GROUP BY DEPARTNO, JOB‬‬
‫;’‪HAVING JOB=’MANAGER‬‬

‫ﻣﺜﺎل‬
‫اذا اردﻧﺎ اﻇﻬﺮ ﺑﻴﺎﻧﺎت ﻣﻦ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ ‪ EMP‬وﻋﻤﻞ ﻣﺠﻤﻮﻋﺎت ﺑﺸﺮط أن ﺗﻜﻮن اﻟﻮﻇﻴﻔﺔ‬
‫‪ MANAGER‬أو ‪ANALYST‬او ‪SALESMAN‬‬

‫)‪SELECT DEPTNO, JOB, COUNT (*), SUM (SAL‬‬


‫‪FROM S_EMP‬‬
‫‪GROUP BY DEPARTNO, JOB‬‬
‫;)’‪HAVING JOB IN (’MANAGER’,’ ANALYST’,’ SALESMAN‬‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬

‫رآﺰﻧﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ ﻋﻠﻰ ﺟﻤﻞ ‪ SQL‬اﻟﺨﺎﺻﺔ ﺑﺎﻟﺪوال اﻟﺮﻳﺎﺿﻴﺔ واﻻﺣﺼﺎﺋﻴﺔ اﻟﺘﻲ ﺗﻘﻮم ﺑﻐﺮض‬
‫ﻗﻴﻤﺔ واﺣﺪة ﻣﻦ اﻟﺒﻴﺎﻧﺎت ﻣﺜﻞ ‪ MAX,MIN,AVG‬وﻏﻴﺮهﺎ وﻣﻦ ﺛﻢ دوال اﻟﻤﺠﻤﻮﻋﺎت اﻟﺘﻲ‬
‫ﺗﻜﻮن ﻏﺎﻟﺒﺎ ﻣﻊ اﻻﻣﺮ ‪ GROUP BY‬واﻟﺘﻲ ﺗﻘﻮم ﺑﻔﺮز اﻟﺠﺪول اﻟﻰ ﺟﺪول اﺻﻐﺮ ﻣﻨﻪ أو ﻳﺴﺎوﻳﻪ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪63 http://www.boosla.com‬‬

‫اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ‬
‫أهﺪاف اﻟﻔﺼﻞ‬
‫ﻓﻲ ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ ان ﺷﺎء اﷲ ﺳﺘﻜﻮن ﻗﺎدرﻋﻠﻰ‬

‫ﺗﺤﺪﻳﺪ اﻟﺤﺎﻻت اﻟﺘﻲ ﻳﻤﻜﻦ ان ﻳﺴﺘﺨﺪم ﻓﻴﻬﺎ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ‬ ‫‪-1‬‬


‫ﺗﻌﺮﻳﻒ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ واﻟﻤﺘﺪاﺧﻠﺔ‬ ‫‪-2‬‬
‫ﻣﻌﺮﻓﺔ أﻧﻮاع اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ‬ ‫‪-3‬‬
‫آﺘﺎﺑﺔ اﺳﺘﻌﻼم ﻓﺮدي اﺣﺎدي اﻟﺼﻒ وﺁﺧﺮ ﻣﺘﻌﺪد اﻟﺼﻔﻮف‬ ‫‪-4‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪64 http://www.boosla.com‬‬

‫اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ‬
‫ﻣﻘﺪﻣﺔ‬

‫ﻟﻨﻔﺘﺮض أﻧﻚ ﺗﺮﻏﺐ ﻓﻲ آﺘﺎﺑﺔ اﺳﺘﻌﻼم ﻹﻳﺠﺎد ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﺗﺰﻳﺪ رواﺗﺒﻬﻢ ﻋﻦ راﺗﺐ أﺣﺪ‬
‫اﻟﻤﻮﻇﻔﻴﻦ‬
‫ﻓﻲ هﺬﻩ اﻟﺤﺎﻟﺔ ﺗﺤﺘﺎج اﻟﻰ اﺳﺘﻌﻼﻣﻴﻦ‬
‫اﺳﺘﻌﻼم ﻻﻳﺠﺎد راﺗﺐ اﻟﻤﻮﻇﻒ اﻟﻤﻌﻨﻲ‬ ‫‪-1‬‬
‫اﺳﺘﻌﻼم ﻻﻳﺠﺎد اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﺗﺰﻳﺪ رواﺗﺒﻬﻢ ﻋﻦ اﻟﻤﺒﻠﻎ اﻟﻤﺤﺴﻮب ﻓﻲ اﻻﺳﺘﻌﻼم اﻷول‬ ‫‪-2‬‬

‫وﻳﻤﻜﻨﻚ دﻣﺞ اﻻﺳﺘﻌﻼﻣﻴﻦ وذﻟﻚ ﺑﺮﺗﻜﻴﺐ اﺣﺪ اﻻﺳﺘﻌﻼﻣﻴﻦ ﻓﻲ اﻻﺧﺮ ‪ ،‬اﻻﺳﺘﻌﻼم اﻟﺪاﺧﻠﻲ ﺳﻮف‬
‫ﻳﻌﻮد ﺑﻘﻴﻤﺔ )ﻗﻴﻢ( واﻟﺘﻲ ﻳﺴﺘﺨﺪﻣﻬﺎ اﻻﺳﺘﻌﻼم اﻟﺨﺎرﺟﻲ )اﻟﺮﺋﻴﺴﻲ(‬
‫إن اﺳﺘﺨﺪام اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ ﻳﺸﺒﻪ ﺗﻤﺎﻣﺎ ﺗﻨﻔﻴﺬ اﻻﺳﺘﻌﻼﻣﻴﻦ ﺑﺸﻜﻞ ﻣﺘﺘﺎل واﺳﺘﻼﻋﻢ ﻧﺘﻴﺠﺔ‬
‫اﻻﺳﺘﻌﻼم اﻻول آﻨﺘﻴﺠﺔ ﺑﺤﺚ ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﺜﺎﻧﻲ‬

‫ﻧﻌﺮﻳﻒ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ‬

‫هﻮ ﺟﻤﻠﺔ اﺳﺘﻔﺴﺎر ‪ SELECT‬ﻣﻀﻤﻨﺔ داﺧﻞ ﺟﻤﻠﺔ اﺳﺘﻔﺴﺎر رﺋﻴﺴﻴﺔ ﻻﺳﺘﺮﺟﺎع ﻗﻴﻤﺔ أو ﻣﺠﻤﻮﻋﺔ‬
‫ﻣﻦ اﻟﻘﻴﻢ ﻟﻴﺘﻢ اﺳﺘﺨﺪاﻣﻬﺎ ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﺮﺋﻴﺴﻲ اﻧﻈﺮ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫‪SELECT select_listFROM tableWHERE expr operator‬‬


‫‪(SELECT‬‬ ‫‪select_list‬‬
‫‪FROM‬‬ ‫;)‪table‬‬
‫ﻣﻼﺣﻈﺔ‬
‫اﻻﺳﺘﻌﻼم اﻟﺪاﺧﻠﻲ)اﻟﻔﺮﻋﻲ( ﻳﻨﻔﺬ اوﻻ‬ ‫‪-1‬‬
‫ﻧﺎﺗﺞ اﻻﺳﺘﻌﻼم اﻟﺪاﺧﻠﻲ)اﻟﻔﺮﻋﻲ( ﻳﺴﺘﺨﺪم ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﺮﺋﻴﺴﻲ‬ ‫‪-2‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪65 http://www.boosla.com‬‬

‫ﻣﺘﻄﻠﺒﺎت اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ‬

‫وﺿﻊ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﺑﻴﻦ ﻗﻮﺳﻴﻦ )‪(.......‬‬ ‫‪-1‬‬


‫‪.‬وﺿﻊ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻳﻤﻴﻦ ﻋﻤﻠﻴﺔ اﻟﻤﻘﺎرﻧﺔ‬ ‫‪-2‬‬
‫ﻻ ﻳﻤﻜﻦ اﺳﺘﺨﺪام ‪ ORDER BY‬داﺧﻞ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ‬ ‫‪-3‬‬
‫اﺳﺘﺨﺪام اﻟﻤﻌﺎﻣﻼت أﺣﺎدﻳﺔ اﻟﺼﻒ ﻣﻊ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ اﻷﺣﺎدﻳﺔ اﻟﺼﻒ‬ ‫‪-4‬‬
‫اﺳﺘﺨﺪام اﻟﻤﻌﺎﻣﻼت ﻣﺘﻌﺪدة اﻟﺼﻒ ﻣﻊ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ اﻟﻤﺘﻌﺪدة اﻟﺼﻒ‬ ‫‪-5‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪66 http://www.boosla.com‬‬

‫أﻧﻮاع اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ‬


‫ﻳﻤﻜﻦ ﺗﺼﻨﻴﻒ اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﺣﺴﺐ‬

‫اﺳﺘﻌﻼم ﻓﺮﻋﻲ أﺣﺎدي اﻟﺼﻒ ﻳﺴﺘﺮﺟﻊ ﺻﻔﺎ واﺣﺪا‬ ‫‪-1‬‬


‫اﺳﺘﻌﻼم ﻓﺮﻋﻲ ﻣﺘﻌﺪد اﻟﺼﻔﻮف ﻳﺴﺘﺮﺟﻊ أآﺜﺮ ﻣﻦ ﺻﻒ واﺣﺪ‬ ‫‪-2‬‬
‫اﺳﺘﻌﻼم ﻓﺮﻋﻲ ﻣﺘﻌﺪد اﻷﻋﻤﺪة ﻳﺴﺘﺮﺟﻊ اآﺜﺮ ﻣﻦ ﻋﻤﻮد‬ ‫‪-3‬‬

‫اﺳﺘﻌﻼم ﻓﺮﻋﻲ أﺣﺎدي اﻟﺼﻒ ﻳﺴﺘﺮﺟﻊ ﺻﻔﺎ واﺣﺪا‬ ‫‪-1‬‬

‫ﻧﺴﺘﺨﺪم هﺬا اﻻﺳﺘﻌﻼم ﻓﻲ ﺣﺎﻟﺔ ان اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻻ ﻳﻌﻮد اﻻ ﺑﺴﻄﺮ واﺣﺪ اﻧﻈﺮ اﻟﻰ اﻟﻤﺜﺎل‬
‫اﻟﺘﺎﻟﻲ‬

‫‪SELECT‬‬ ‫‪last_name, title, salary‬‬


‫‪FROM s_emp‬‬
‫< ‪WHEREsalary‬‬
‫)‪(SELECT AVG(salary‬‬
‫‪FROM‬‬ ‫;)‪s_emp‬‬
‫ﻳﻘﻮم اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻓﻲ هﺬا اﻟﻤﺜﺎل ﺑﺎﺧﺮاج ﻗﻴﻤﺔ واﺣﺪة وهﻲ اﻟﻤﺘﻮﺳﻂ اﻟﺤﺴﺎﺑﻲ وﻳﺄﺧﺬ‬
‫اﻻﺳﺘﻌﻼم اﻟﺮﺋﻴﺴﻲ هﺬﻩ اﻟﻘﻴﻤﺔ وﻳﺴﺘﺨﺮج اﺳﻤﺎء وورواﺗﺐ اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻳﻌﺘﺒﺮ راﺗﺒﻬﻢ اﻋﻠﻰ ﻣﻦ‬
‫اﻟﻤﺘﻮﺳﻂ اﻟﺤﺴﺎﺑﻲ‬

‫ﻣﻼﺣﻈﺔ‬
‫‪ -1‬أﻧﻮاع ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﺗﺔ اﻟﺨﺎﺻﺔ ﺑﻬﺬا اﻟﻨﻮع هﻲ‬
‫>< ‪>, <, <=, >=.‬‬

‫اﺳﺘﻌﻼم ﻓﺮﻋﻲ ﻣﺘﻌﺪد اﻟﺼﻔﻮف ﻳﺴﺘﺮﺟﻊ أآﺜﺮ ﻣﻦ ﺻﻒ واﺣﺪ‬ ‫‪-2‬‬


‫ﻧﺴﺘﺨﺪم هﺬا اﻻﺳﺘﻌﻼم ﻓﻲ ﺣﺎﻟﺔ ان اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻳﻌﻮد ﺑﻌﺪة اﺳﻄﺮ اﻧﻈﺮ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ‬

‫‪SELECT‬‬ ‫‪last_name, first_name, title‬‬


‫‪FROM s_emp‬‬
‫‪WHERE dept_in IN‬‬
‫‪(SELECT ID‬‬
‫‪FROM‬‬ ‫‪s_dept‬‬
‫'‪WHERE name = 'Finance‬‬
‫;)‪OR region_id = 2‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪67 http://www.boosla.com‬‬

‫ﻳﻘﻮم اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻓﻲ هﺬا اﻟﻤﺜﺎل ﻳﺎﺳﺘﺨﺮاج أرﻗﺎم اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ اﺳﻤﻬﻢ '‪'Finance‬‬
‫او رﻗﻢ ﻣﻨﻄﻘﺘﻬﻢ ‪ 2‬ﻣﻦ ﺟﺪول اﻻﻗﺴﺎم ﻓﻬﺬا ﻻﺳﺘﻌﻼم ﺳﻴﻌﻮد ﺑﻌﺪة ﻓﻴﻢ ﻳﺄﺧﺬهﺎ اﻻﺳﺘﻌﻼم اﻟﺮﺋﻴﺴﻲ‬
‫وﻳﺴﺘﺨﺮج اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﻋﻠﻰ اﺳﺎﺳﻬﺎ‬

‫ﻣﻼﺣﻈﺔ‬
‫أﻧﻮاع ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﺗﺔ اﻟﺨﺎﺻﺔ ﺑﻬﺬا اﻟﻨﻮع هﻲ‬ ‫‪-1‬‬
‫‪IN, ALL, ANY‬‬
‫اذا اﺳﺘﺨﺪﻣﻨﺎ ﻣﻌﺎﻣﻼت اﻻﺳﺘﻌﻼم اﺣﺎدي اﻟﺼﻒ ﻣﻊ اﺳﺘﻌﻼم ﻣﺘﻌﺪد ﻓﺎن اﻻﺑﺮﻧﺎﻣﺞ ﻳﻌﻄﻴﻚ‬ ‫‪-2‬‬
‫رﺳﺎﻟﺔ ﺧﻄﺄ‬
‫‪ORA-01427:single-row sub query returns more‬‬
‫‪than one row‬‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬

‫ﻓﻲ هﺬا اﻟﻔﺼﻞ ﺗﻌﺮﻓﻨﺎ ﻋﻠﻰ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ واهﻤﻴﺘﻬﺎ وﺷﺮوﻃﻬﺎ واﻧﻮاﻋﻬﺎ اﻷﺣﺎدﻳﺔ‬
‫واﻟﻤﺘﻌﺪدة‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪68 http://www.boosla.com‬‬

‫إﻧﺸﺎء اﻟﺠﺪاول‬

‫أهﺪاف اﻟﻔﺼﻞ‬

‫ﻗﺲ ﻧﻬﺎﺑﺔ هﺬا اﻟﻔﺼﻞ ﺳﺘﻜﻮن ﻗﺎدر اﻧﺸﺎء اﷲ ﻋﻠﻰ ﻣﺎﻳﻠﻲ‪:‬‬


‫اﻟﺘﻌﺮف ﻋﻠﻰ اﻟﺠﺪاول وﺷﺮوط ﺗﺴﻤﻴﺘﻬﺎ‬ ‫‪-1‬‬
‫اﻟﺘﻌﺮف ﻋﻠﻰ أﻧﻮاع اﻟﺒﻴﺎﻧﺎت‬ ‫‪-2‬‬
‫إﻧﺸﺎء اﻟﺠﺪاول ﺑﻮاﺳﻄﺔ اﻷﻣﺮ ‪CREAT‬‬ ‫‪-3‬‬
‫إﻧﺸﺎء ﻣﻔﺘﺎح أﺳﺎﺳﻲ ﻓﻲ اﻟﺠﺪول‬ ‫‪-4‬‬
‫إﻧﺸﺎء ﺟﺪول ﺑﻮاﺳﻄﺔ ﺟﺪول اﺧﺮ‬ ‫‪-5‬‬
‫ﻋﺮض ﻣﻮاﺳﻔﺎت اﻟﺠﺪول‬ ‫‪-6‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪69 http://www.boosla.com‬‬

‫ﺗﻌﺮﻳﻒ اﻟﺠﺪول‬
‫ﻗﻠﻨﺎ ﺳﺎﻳﻘﺎ أن اﻟﺠﺪول أو اﻟﻤﻠﻒ ﻳﺘﻜﻮن ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺴﺠﻼت ‪ RECORDS‬وآﻞ ﺳﺠﻞ‬
‫ﻳﺘﻜﻮن ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺤﻘﻮل ‪ FIELDS‬آﻞ ﺣﻘﻞ ﺑﻪ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺤﺮوف او اﻻرﻗﺎم وهﺬﻩ‬
‫اﻟﺤﻘﻮل ﻟﻬﺎ ﻃﻮل أو ﻋﺮض‬

‫وﻳﻌﺮف اﻟﻤﻠﻒ أو اﻟﺠﺪول ﺑﺄﻧﻪ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷﻋﻤﺪة وﻳﻤﺜﻞ آﻞ ﻋﻤﻮد ﺑﺤﻘﻞ ﻣﻦ اﻟﺤﻘﻮل وﻟﻜﻞ ﺣﻘﻞ‬
‫ﻧﻮع ﻟﺒﻴﺎﻧﺎﺗﻪ ﻓﻴﻪ‬

‫ﺗﺴﻤﻴﺔ اﻟﺠﺪول‪/‬ﻣﻠﻒ ‪TABLE/FILE NAMES‬‬

‫ﻻ ﻳﺘﺠﺎوز ﻃﻮل اﺳﻢ اﻟﺠﺪول أو اﻟﻤﻠﻒ ﻋﻦ ‪ 30‬ﺣﺮف‬ ‫‪-1‬‬


‫ﻳﻤﻜﻦ ان ﻳﻜﻮن ﺣﺮوﻓﺎ آﺒﻴﺮة أو ﺻﻐﻴﺮة‬ ‫‪-2‬‬
‫اﻻﺳﻢ ﻳﺒﺪأ ﺑﺤﺮف وﻻ ﻳﻤﻜﻦ أن ﻳﺒﺪأ ﺑﺮﻗﻢ‬ ‫‪-3‬‬
‫ﻳﻤﻜﻦ أن ﻳﺤﺘﻮي اﻻﺳﻢ ﻋﻠﻰ رﻣﻮز ﺧﺎﺻﺔ ﻣﺜﻞ ‪ .... #,$,%‬اﻟﺦ‬ ‫‪-4‬‬

‫أﻧﻮاع اﻟﺤﻘﻮل ‪Fields Types‬‬

‫اﻟﻤﺘﻐﻴﺮ اﻟﺤﺮﻓﻲ ‪CHAR‬‬ ‫‪-1‬‬

‫ﻳﺘﻜﻮن هﺬا اﻟﺤﻘﻞ ﻣﻦ اﻟﺤﺮوف اﻷﺑﺠﺪﻳﺔ ‪ ,‬اﻷرﻗﺎم ‪ ,‬واﻟﺮﻣﻮز اﻟﺨﺎﺻﺔ ‪ .‬وﻃﻮل أو ﻋﺮض هﺬا‬
‫اﻟﺤﻘﻞ ﻳﺼﻞ اﻟﻰ ‪ 240‬ﺣﺮف وﻻ ﺑﺪ ﻣﻦ ﺗﺤﺪﻳﺪ ﻃﻮل أو ﻋﺮض اﻟﺤﻘﻞ وهﻮ اﺟﺒﺎري واذا ﻟﻢ ﻳﺘﻢ‬
‫اﻟﺘﺤﺪﻳﺪ ﺳﻴﻔﺘﺾ اﻟﺒﺮﻧﺎﻣﺞ اﻧﻪ ‪1‬‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫)‪var CHAR (size‬‬

‫ﻣﺜﺎل‬
‫)‪FirstName CHAR (20‬‬

‫اﻟﻤﺘﻐﻴﺮ اﻟﺤﺮﻓﻲ ‪VARCHAR2‬‬ ‫‪-2‬‬

‫ﻳﺘﻜﻮن هﺬا اﻟﺤﻘﻞ ﻣﻦ اﻟﺤﺮوف اﻷﺑﺠﺪﻳﺔ ‪ ,‬اﻷرﻗﺎم ‪ ,‬واﻟﺮﻣﻮز اﻟﺨﺎﺻﺔ ‪ .‬وﻃﻮل أو ﻋﺮض هﺬا‬
‫اﻟﺤﻘﻞ ﻳﺼﻞ اﻟﻰ ‪ 240‬ﺣﺮف ﻻ ﻳﻮﺟﺪ ﻃﻮل اﻓﺘﺮاﺿﻲ ﻟﻠﺤﻘﻞ‬

‫ﻣﺜﺎل‬
‫)‪FirstName VARCHAR2 (20‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪70 http://www.boosla.com‬‬

‫‪ -3‬ﻣﺘﻐﻴﺮ رﻗﻤﻲ ﺻﺤﻴﺢ ‪Integer Number‬‬

‫وﻳﺘﻜﻮن ﻣﻦ اﻷرﻗﺎم )‪ (0,1,2-9‬واﻻﺷﺎرة ‪ +‬أو _ وﻳﻤﻜﻦ أن ﻳﺤﺘﻮي ﻋﻠﻰ اﻟﻌﻼﻣﺔ اﻟﻌﺸﺮﻳﺔ أو‬
‫اﻟﻔﺎﺻﻠﺔ اﻟﻌﺸﺮﻳﺔ ) ‪ (.‬واﻟﺤﺪ اﻷﻗﺼﻰ ﻟﻌﺪد ﺧﺎﻧﺎت اﻟﺮﻗﻢ ﻳﺼﻞ إﻟﻰ ‪ 40‬ﺧﺎﻧﺔ وﺗﺤﺪﻳﺪ ﻃﻮل‬
‫أوﻋﺮض اﻟﺤﻘﻞ اﺧﺘﻴﺎري وآﺬﻟﻚ اﻻﺷﺎرة أو اﻟﻔﺎﺻﻠﺔ اﻟﻌﺸﺮﻳﺔ‬

‫ﻣﺜﺎل‬
‫)‪Serial_No NUMBER (10‬‬

‫‪ -4‬اﻟﻤﺘﻐﻴﺮ اﻟﺮﻓﻤﻲ ذو اﻟﻌﻼﻣﺔ اﻟﻌﺸﺮﻳﺔ‬

‫وﻳﺘﻜﻮن ﻣﻦ اﻷرﻗﺎم )‪(0,1,2-9‬‬

‫ﻣﺜﺎل‬
‫)‪Mark NUMBER (10,3‬‬

‫ﻣﺘﻐﻴﺮ ﻃﻮﻳﻞ ‪LONG‬‬ ‫‪-5‬‬


‫ﻳﺴﺘﺨﺪم ﻟﻠﺤﻘﻮل اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ ﺑﻴﺎﻧﺎت ﺗﺼﻞ ﻣﺴﺎﺣﺘﻬﺎ اﻟﻰ ‪ 2‬ﺟﻴﺠﺎ‬
‫ﻣﺜﺎل‬
‫‪Detail LONG‬‬

‫اﻟﻤﺘﻐﻴﺮ اﻟﺪال ﻋﻠﻰ اﻟﺘﺎرﻳﺦ )‪(Date‬‬ ‫‪-6‬‬

‫ﻳﺘﻜﻮن هﺬا اﻟﺤﻘﻞ ﻣﻦ ﻣﺠﻤﻮﻋﺔ اﻷرﻗﺎم ﻟﻠﺪﻻﻟﺔ ﻋﻠﻰ اﻟﻴﻮم واﻟﺸﻬﺮ واﻟﺴﻨﺔ وﻃﻮل هﺬا اﻟﺤﻘﻞ ‪8‬‬
‫ﺧﺎﻧﺎت ﻋﻠﻰ اﻷﻗﻞ وﻳﻤﻜﻦ أن ﻳﺘﻐﻴﺮ ﺷﻜﻞ آﺘﺎﺑﺔ اﻟﺘﺎرﻳﺦ ﺑﺬآﺮ اﺳﻢ اﻟﺸﻬﺮ‬

‫ﻣﺜﺎل‬
‫‪HireDate DATE‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪71 http://www.boosla.com‬‬

‫إﻧﺸﺎء ﺟﺪول‬
‫إﻧﺸﺎء ﺟﺪول ﺑﺎﺳﺘﺨﺪام أﻣﺮ ‪CREATE‬‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫‪CREATE TABLE table-name (field type [(size [,‬‬


‫;)]‪field2 type [(size‬‬

‫ﺣﻴﺚ ان‬

‫اﺳﻢ اﻟﻤﻠﻒ أو اﻟﺠﺪول اﻟﻤﻄﻠﻮب‬ ‫‪table-name‬‬


‫اﺳﻢ اﻟﺤﺜﻞ أو اﻟﺤﻘﻮل اﻟﻤﻄﻠﻮب ﺗﺼﻤﻴﻤﻬﺎ ﻣﻊ وﺟﻮد اﺳﻢ ﺣﻘﻞ ﻋﻠﻰ اﻷﻗﻞ‬ ‫‪field1,field2‬‬
‫ﻧﻮع ﺣﻘﻞ اﻟﺒﻴﺎﻧﺎت‬ ‫‪type‬‬
‫ﻃﻮل او ﻋﺮض اﻟﺤﻘﻞ‬ ‫‪Size‬‬

‫ﻣﺜﺎل‬
‫( ‪CREATE TABLE SCHOOL‬‬
‫‪S_no NUMBER (5) NOT NULL,‬‬
‫‪S_NAME CHAR (20).‬‬
‫‪S_LOC CHAR(15),‬‬
‫;)‪S_DATE DATE‬‬

‫اﻟﺘﻘﻴﻴﺪ ‪CONSTRAINT‬‬
‫ﻳﺘﻢ ﻋﻦ ﻃﺮﻳﻖ اﻟﺘﻘﻴﻴﺪ ﻓﺮض ﺑﻌﺾ اﻟﻘﻮاﻋﺪ ﻋﻠﻰ اﻟﺤﻘﻮل ﻣﺜﻼ ﺟﻌﻞ ﺣﻘﻞ ﻣﻔﺘﺎح أﺳﺎﺳﻲ‬
‫ﻣﻨﻊ ﺗﺮك ﺣﻘﻞ ﻓﺎرغ وﻣﻦ أﻧﻮاﻋﻪ‬
‫‪NOT NULL‬‬ ‫•‬
‫‪UNIQUE‬‬ ‫•‬
‫‪PRIMARY KEY‬‬ ‫•‬
‫‪FORIGN KEY‬‬ ‫•‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫]‪column [CONSTRAINT constraint_name‬‬


‫‪constraint_type,‬‬
‫ﺣﻴﺚ أن‬
‫اﺳﻢ اﻟﺘﻘﻴﻴﺪ‬ ‫‪constraint_name‬‬
‫ﻧﻮع اﻟﺘﻘﻴﻴﺪ‬ ‫‪constraint_type‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪72 http://www.boosla.com‬‬

‫‪ -1‬ﻏﻴﺮ ﻓﺎرغ ‪NOT NULL‬‬

‫هﺬا اﻷﻣﺮ ﻻ ﻳﺴﻤﺢ ﺑﺘﺮك ﺣﻘﻞ ﻓﺎرغ‬

‫ﻣﺜﺎل‬
‫‪CREATE TABLE friend...‬‬
‫‪phone VARCHAR2(15) NOT NULL,...‬‬
‫)‪last_name VARCHAR2(25‬‬
‫‪CONSTRAINT friend_last_name_nn NOT NULL,...‬‬

‫‪ -2‬ﻓﺮﻳﺪ ‪UNIQUE‬‬

‫هﺬا اﻷﻣﺮ ﺑﺠﻌﻞ اﻟﺤﻘﻞ )اﻟﻌﻤﻮد( ﻓﺮﻳﺪ ﻓﻼ ﻳﺴﻤﺢ ﺑﺘﻜﺮار ﺻﻒ ﻣﻦ اﻟﺼﻔﻮف ﻓﻜﻞ ﺻﻒ ﻻ ﻳﻮﺟﺪ‬
‫اﻻ ﻣﺮة واﺣﺪة‬

‫ﻣﻼﺣﻈﺔ‬
‫‪ -1‬ﻳﻤﻜﻦ أن ﻳﺤﺘﻮي اﻟﺤﻘﻞ اﻟﻔﺮﻳﺪ ‪ UNIQUE‬ﻋﻠﻰ ﻗﻴﻤﺔ ﻓﺎرﻏﺔ ﺑﺸﺮط أن ﻳﻜﻮن ﺣﻘﻞ واﺣﺪ ﻓﻘﻂ‬
‫ﻓﺮﻳﺪ ‪UNIQUE‬‬
‫‪ -2‬وﺑﻤﻜﻦ أن ﻳﻮﺟﺪ ﻓﻲ اﻟﺠﺪول أآﺜﺮ ﺣﻘﻞ ﻓﺮﻳﺪ‬

‫ﻣﺜﺎل‬

‫‪... phone‬‬ ‫)‪VARCHAR2(10‬‬


‫‪CONSTRAINT s_emp_phone_uk UNIQUE,...‬‬

‫‪ -3‬ﻣﻔﺘﺎح أﺳﺎﺳﻲ ‪Primary Key‬‬

‫ﻻ ﻳﻤﻜﻦ ﻷي ﺟﺪول أن ﻳﺤﺘﻮي اﻻ ﻋﻠﻰ ﻣﻔﺘﺎح أﺳﺎﺳﻲ واﺣﺪ وإذا ﻗﻤﻨﺎ ﺑﺘﺤﻮﻳﻞ ﺣﻘﻞ اﻟﻰ ﻣﻔﺘﺎح‬
‫أﺳﺎﺳﻲ ﻓﻬﺬا اﻟﺤﻘﻞ ﻳﻌﺘﺒﺮ ﺣﻘﻞ ﻓﺮﻳﺪ وﻟﻜﻦ ﻻ ﻳﻤﻜﻦ أن ﻳﺤﺘﻮي ﻋﻠﻰ ﻗﻴﻢ ﻓﺎرﻏﺔ‬

‫ﻣﺜﺎل‬

‫‪... id‬‬ ‫)‪NUMBER(7‬‬


‫‪CONSTRAINT s_emp_id_pk PRIMARY KEY,...‬‬
‫‪ -4Foreign Key‬ﻣﻔﺘﺎح ﺧﺎرﺟﻲ‬

‫ﻳﻤﻜﻦ ﺗﻌﻴﻴﻦ ﺣﻔﻞ )ﻋﻤﻮد( واﺣﺪ أو أآﺜﺮ ﻟﻴﻜﻮن ﻣﻔﺘﺎح ﺧﺎرﺟﻲ ﺣﻴﺚ ﻳﻜﻮن هﺬا اﻟﻌﻤﻮد ﻣﺮﺗﺒﻂ‬
‫ﺑﻌﻤﻮد اﺧﺮ ﺑﻪ ﻣﻔﺘﺎح اﺳﺎﺳﻲ او ﻓﺮﻳﺪ ﻣﻦ ﻧﻔﺲ اﻟﺠﺪول أو ﺟﺪول اﺧﺮ وﻣﻦ اﻟﻀﺮوري أن ﻳﻜﻮن‬
‫ﻣﺮﺗﺒﻂ ﺑﻘﻴﻤﺔ اﺧﺮى ﻣﻦ ﻋﻤﻮد اﺧﺮ او ﻳﻜﻮن ﻓﺎرغ‬
‫اﻧﻈﺮ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪73 http://www.boosla.com‬‬

‫)‪... dept_id NUMBER(7‬‬


‫‪CONSTRAINT s_emp_dept_id_fk‬‬
‫)‪FOREIGN KEY (department_id‬‬
‫)‪REFERENCES s_dept(id‬‬
‫;‪ON DELETE CASCADE‬‬

‫‪Foreign Key -1‬‬


‫ﺗﻜﺘﺐ ﺑﺠﻮارهﺎ اﺳﻢ اﻟﺤﻘﻞ اﻟﻤﺮاد أن ﻳﻜﻮن ﻣﻔﺘﺎح ﺧﺎرﺟﻲ ﻓﻲ اﻟﺠﺪول اﻻﺑﻦ‬
‫‪REFERENCES -2‬‬
‫ﻧﻜﺘﺐ ﺑﺠﻮارهﺎ اﻟﺤﻘﻞ اﻟﺬي ﺳﻴﺘﻢ اﻟﺮﺑﻂ ﺑﻪ ﻣﻦ اﻟﺠﺪول اﻻﺧﺮ‬

‫‪ON DELETE CASCADE -3‬‬


‫اذا ﺗﻢ ﻣﺴﺢ اﺣﺪ اﻟﺼﻔﻮف ﻓﻲ اﻟﺠﺪول اﻻب ﺳﻴﻤﺴﺢ اﻟﺼﻒ اﻟﻤﻘﺎﺑﻞ ﻟﻪ ﻓﻲ اﻟﺠﺪول اﻻﺑﻦ‬

‫اﻧﺸﺎء ﺟﺪول ﺑﻮاﺳﻄﺔ ﺟﺪول ﺁﺧﺮ‬

‫ﻹﻧﺸﺎء ﺟﺪول ﺑﻮاﺳﻄﺔ ﺟﺪول ﺁﺧﺮ ﻳﺠﺐ أن ﻳﻜﻮن اﻟﺠﺪول اﻵﺧﺮ ﻣﻨﺸﺄ ﻣﺴﺒﻘﺎ ﺛﻢ ﻧﻜﺘﺐ اﻷﻣﺮ‬
‫آﺎﻟﺘﺎﻟﻲ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫‪CREATE TABLE tablename‬‬


‫;‪[column(, column...)]AS Select statement‬‬

‫ﻣﺜﺎل‬

‫‪CREATE TABLE EMPLOYEE‬‬


‫‪AS‬‬
‫‪SELECT NAME, SAL, JOB FROM S_EMP‬‬

‫ﻗﻤﻨﺎ ﻓﻲ هﺬﻩ اﻟﺠﻤﻠﺔ ﺑﻌﻤﻞ ﺟﺪول ﺟﺪﻳﺪ ﺛﻢ ﻧﻘﻠﻨﺎ ﺑﻴﺎﻧﺎت اﻟﺠﺪول ‪ S_EMP‬اﻟﻴﻪ‬

‫اﻧﺸﺎء ﺟﺪول ﺑﻮاﺳﻄﺔ اﺳﺘﻌﻼم ﻓﺮﻋﻲ‬

‫ﻹﻧﺸﺎء ﺟﺪول ﺑﻮاﺳﻄﺔ اﺳﺘﻌﻼم ﻓﺮﻋﻲ ﻳﺠﺐ أن ﻳﻜﻮن اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻗﺎﺋﻢ ﻋﻠﻰ اﻻﺳﺘﻌﻼم ﻣﻦ‬
‫ﺟﺪول ﻣﻨﺸﺄ ﻣﺴﺒﻘﺎ ﺛﻢ ﻧﻜﺘﺐ اﻷﻣﺮ آﺎﻟﺘﺎﻟﻲ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪74 http://www.boosla.com‬‬

‫‪CREATE TABLE tablename‬‬


‫;‪[column(, column...)]AS subquery‬‬

‫ﻣﺜﺎل‬

‫‪CREATE TABLE‬‬ ‫‪emp_41‬‬


‫‪AS‬‬
‫‪SELECT‬‬ ‫‪id, last_name, userid, start_date‬‬
‫‪FROM‬‬ ‫‪s_emp‬‬
‫‪WHERE‬‬ ‫;‪dept_id = 41‬‬

‫ﺟﻤﻠﺔ ﻋﺮض ﻣﻮاﺻﻔﺎت ﺟﺪول ‪DESCIRBE‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺠﻤﻠﺔ ﻟﻐﺆض ﻣﻮاﺻﻔﺎت اﻟﺠﺪول وﻳﻤﻜﻦ آﺘﺎﺑﺘﻬﺎ آﻠﻤﺔ آﺎﻣﻠﺔ أو ﻣﺨﺘﺼﺮة ‪DESC‬‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬
‫;‪DESCRIBE tablename‬‬

‫ﻣﺜﺎل‬
‫;‪DESCRIBE S_EMP‬‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬

‫ﻓﻲ هﺬا اﻟﻔﺼﻞ ﻗﻤﻨﺎ ﺑﺎﻟﺘﻌﺮف ﻋﻠﻰ اﻟﺠﺪاول وأﻧﻮاع اﻟﺘﻘﻴﻴﺪ وآﻴﻔﻴﺔ إﻧﺸﺎﺋﻬﺎ وإدراج اﻟﻤﻔﺘﺎ اﻷﺳﺎﺳﻲ‬
‫واﻟﺨﺎرﺟﻲ ﻓﻲ اﻟﺠﺪول وآﻴﻔﻴﺔ اﻧﺸﺎء ﺟﺪول ﻣﻦ ﺟﺪول اﺧﺮ وآﺬﻟﻚ ﻣﻦ اﺳﺘﻌﻼم ﻓﺮﻋﻲ وﻣﻌﺮﻓﺔ‬
‫آﻴﻔﻴﺔ ﻋﺮض ﻣﻌﻠﻮﻣﺎت اﻟﺠﺪول‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪75 http://www.boosla.com‬‬

‫ﺗﻌﺪﻳﻞ ﺑﻨﻴﺔ اﻟﺠﺪول وﺣﺬﻓﻪ‬


‫أهﺪاف اﻟﻔﺼﻞ‬

‫ﻓﻲ ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ ﺳﺘﻜﻮن ﻗﺎدر ان ﺷﺎء اﷲ ﻋﻠﻰ‪:‬‬

‫اﻟﺘﻌﺮف ﻋﻠﻰ ﺟﻤﻴﻊ ﻋﻤﻠﻴﺎت اﻟﺘﻐﺪﻳﻞ ﻋﻠﻰ اﻟﺠﺪول‬ ‫‪-1‬‬


‫إﺿﺎﻓﺔ ﺣﻘﻮل ﺟﺪﻳﺪة إﻟﻰ اﻟﺠﺪول‬ ‫‪-2‬‬
‫ﺗﻌﺪﻳﻞ ﻣﻮاﺻﻔﺎت ﺣﻘﻮل اﻟﺠﺪول‬ ‫‪-3‬‬
‫ﺣﺬف اﻟﻤﻔﺘﺎح اﻷﺳﺎﺳﻲ ﻣﻦ اﻟﺠﺪول‬ ‫‪-4‬‬
‫ﺣﺬف اﻟﺠﺪول‬ ‫‪-5‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪76 http://www.boosla.com‬‬

‫ﺗﻌﺪﻳﻞ اﻟﺠﺪاول‬
‫ﺗﺘﻴﺢ ﻟﻚ اﻟـ‪ SQL‬ﻏﻤﻠﻴﺔ ﺗﻌﺪﻳﻞ اﻟﺠﺪول ﺑﻌﺪ إﻧﺸﺎﺋﻬﺎ ﻓﻲ اﻟﺤﺎﻟﺔ اﻟﺘﺎﻟﻴﺔ‬

‫اﺿﺎﻓﺔ ﺣﻔﻞ ﺟﺪﻳﺪ‬ ‫‪-1‬‬


‫ﺗﻌﺪﻳﻞ ﻣﻮاﺻﻐﺎت ﺣﻘﻞ‬ ‫‪-2‬‬
‫ﺣﺬف اﻟﻤﻔﺘﺎح اﻷﺳﺎﺳﻲ ﻣﻦ اﻟﺠﺪول‬ ‫‪-3‬‬
‫وﻳﺠﺐ اﻻﻧﺘﺒﺎﻩ اﻟﻰ ﻋﺪم إﻣﻜﺎﻧﻴﺔ ﺣﺬف ﺣﻔﻞ ﻣﻦ اﻟﺠﺪول‬

‫ﺟﻤﻠﺔ ﺗﻌﺪﻳﻞ اﻟﺤﻘﻮل ‪ALTER Command‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺠﻤﻠﺔ ﻹﺿﺎﻓﺔ ﻗﻮل أو ﻟﺘﻌﺪﻳﻞ اﻟﺤﻘﻮل ﻓﻲ اﻟﺠﺪول وﻳﺸﻤﻞ هﺬا اﻟﺘﻌﺪﻳﻞ اﺳﻢ اﻟﺤﻘﻞ‬
‫وﻧﻮﻋﻪ اﻟﺤﻘﻞ وﺣﺠﻢ ﺑﻴﺎﻧﺎﺗﻪ أو اﻟﺤﺎق ﻋﺒﺎرة ﻓﺎرغ أو ﻏﻴﺮ ﻓﺎرغ اﻟﻰ اﻟﺤﻘﻞ‬

‫اﺿﺎﻓﺔ ﺣﻘﻞ ﺟﺪﻳﺪ‪New Field‬‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫‪ALERT TABLE tablename ADD (field Type (size) [NOT‬‬


‫)]‪NULL] | [NULL‬‬

‫ﺣﻴﺚ أن‬
‫اﺳﻢ اﻟﺠﺪول اﻟﻤﺮاد ﺗﻌﺪﻳﻠﻪ‬ ‫‪tablename‬‬
‫اﺳﻢ اﻟﺤﻘﻞ‬ ‫‪field‬‬
‫ﻧﻮع اﻟﺒﻴﺎﻧﺎت‬ ‫‪Type‬‬
‫ﻃﻮل أو ﺣﺠﻢ اﻟﺤﻘﻞ‬ ‫‪size‬‬

‫ﺗﻌﺪﻳﻞ ﻣﻮاﺻﻔﺎت ﺣﻘﻞ‬

‫ﻳﻤﻜﻦ ﻋﻦ ﻃﺮﻳﻖ ﺟﻤﻠﺔ ‪ ALTER‬ﺗﻌﺪﻳﻞ ﻣﻮاﺻﻔﺎت ﺣﻘﻞ‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم‬

‫‪ALERT TABLE tablename MODIFY Type (size) [NOT‬‬


‫)]‪NULL] | [NULL‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪77 http://www.boosla.com‬‬

‫ﺣﺬف اﻟﺠﺪاول‬
‫ﻳﻤﻜﻦ أن ﻧﺤﺬف اﻟﺠﺪول ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ﺑﻮاﺳﻄﺔ اﻷﻣﺮ ‪ DROP TABLE‬ﺑﺸﺮط أن ﺗﻜﻮن‬
‫ﻣﺎﻟﻚ اﻟﺠﺪول أو ﻟﻚ ﺻﻼﺣﻴﺔ ﻟﻠﺤﺬف‬

‫اﻟﺸﻜﻞ اﻟﻌﺎم ‪:‬‬


‫;‪DROP TABLE tablename‬‬

‫ﺣﻴﺚ‬
‫اﺳﻢ اﻟﺠﺪول اﻟﻤﺮاد ﺣﺬﻓﻪ‬ ‫;‪tablename‬‬

‫ﺣﺬف اﻟﻤﻔﺘﺎح اﻷﺳﺎﺳﻲ‬

‫ﻧﻜﺘﺐ اﻷﻣﺮ اﻟﺘﺎﻟﻲ‬


‫‪ALTER TABLE tablename‬‬
‫;‪DROP PRIMARY KEY CASCADE‬‬

‫ﻋﺒﺎرة ‪ CASCADE‬هﻨﺎ ﻻﻟﻐﺎء أي ﻋﻼﻗﺔ ﺗﻌﺘﻤﺪ ﻋﻠﻰ اﻟﻤﻔﺘﺎح اﻷﺳﺎﺳﻲ‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬

‫ﻓﻲ هﺬا اﻟﻔﺼﻞ ﺗﻨﺎوﻟﻨﺎ ﻋﻤﻠﻴﺔ ﺗﻌﺪﺑﻞ اﻟﺠﺪاول ﻣﻦ إﺿﺎﻓﺔ وﺗﻌﺪﻳﻞ ﻗﻮل اﻟﺠﺪول ﻣﻊ ﻋﺪم اﻣﻜﺎﻧﻴﺔ‬
‫ﺣﺬف ﺣﻘﻞ ﻣﻮﺟﻮد ﻓﻲ اﻟﺠﺪول وآﺬﻟﻚ آﻴﻔﻴﺔ ﺣﺬف اﻟﻤﻔﺘﺎح اﻷﺳﺎﺳﻲ ﻣﻦ اﻟﺠﺪول وﺣﺬف اﻟﺠﺪول‬
‫ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ﺑﻮاﺳﻄﺔ اﻻﻣﺮ ‪DROP‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪78 http://www.boosla.com‬‬

‫إدﺧﺎل اﻟﺒﻴﺎﻧﺎت إﻟﻰ اﻟﺠﺪاول‬


‫أهﺪاف اﻟﻔﺼﻞ‬

‫إن ﺷﺎء اﷲ ﻓﻲ ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ ﺳﺘﻜﻮن ﻗﺎدر ﻋﻠﻰ‬

‫اﻹﻟﻤﺎم ﺑﺎﻟﻄﺮق اﻟﻤﺨﺘﻠﻔﺔ ﻹدﺧﺎل اﻟﺒﻴﺎﻧﺎت إﻟﻰ اﻟﺠﺪول‬ ‫‪-1‬‬


‫إدﺧﺎل ﺳﺠﻞ واﺣﺪ إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت‬ ‫‪-2‬‬
‫إﺿﺎﻓﺔ ﻋﺪة ﺳﺠﻼت اﻟﻰ اﻟﺴﺠﻞ‬ ‫‪-3‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪79 http://www.boosla.com‬‬

‫إﺿﺎﻓﺔ ﺑﻴﺎﻧﺎت‬

‫ﻣﻘﺪﻣﺔ‬

‫ﻟﻘﺪ ﻗﻤﻨﺎ ﻓﻲ اﻟﻘﺼﻮل اﻟﺴﺎﺑﻘﺔ ﺑﺈﻧﺸﺎء اﻟﺠﺪاول واﻟﺘﻌﺮف ﻋﻠﻰ أﻧﻮاع اﻟﺒﻴﺎﻧﺎت وﺗﻌﺪﻳﻞ ﻣﻮاﺻﻔﺎن‬
‫اﻟﺤﻘﻮل وﺑﻬﺬا ﻧﻜﻮن ﻗﺪ أﻧﺸﺄﻧﺎ ﺟﺪول اﻟﺒﻴﺎﻧﺎت وﺧﺪدﻧﺎ ﺧﺼﺎﺋﺺ اﻟﺤﻘﻮل ﻣﻦ ﺣﻴﺚ ﻧﻮع اﻟﺒﻴﺎﻧﺎت‬
‫واﻟﺤﺠﻢ أي أﻧﻨﺎ أﻋﺪدﻧﺎ اﻟﻮﻋﺎء اﻟﺬي ﺳﻴﺤﻮي اﻟﺒﻴﺎﻧﺎت وﻓﻲ هﺬا اﻟﻔﺼﻞ ﺳﻨﺘﻌﻠﻢ ﺑﻤﺸﻴﺌﺔ اﷲ آﻴﻔﻴﺔ‬
‫إﺿﺎﻓﺔ اﻟﺒﻴﺎﻧﺎت إﻟﻰ هﺬﻩ اﻟﺠﺪاول واﻷﻣﻮر اﻟﻤﺘﻌﻠﻘﺔ ﺑﻌﻤﻠﻴﺎت اﻹﺿﺎﻓﺔ وأﻧﻮاﻋﻬﺎ ‪ ،‬آﻤﺎ أن هﺬا‬
‫اﻟﻔﺼﻞ ﻳﺸﻜﻞ ﻣﺪﺧﻼ وﺟﺰأ أﺳﺎﺳﻴﺎ ﻟﻠﻐﺔ ﺗﻨﺎول اﻟﺒﻴﺎﻧﺎت )‪ (DML‬ﻓﻲ ﻧﻈﺎم ﻗﻮاﻋﺪ ﺑﻴﺎﻧﺎت أوراآﻞ‬
‫اﻟﺘﻲ ﺗﻌﺘﺒﺮ إﺣﺪى اﻟﻨﻈﻢ اﻟﻘﻮﻳﺔ ﻓﻲ ﻧﻈﻢ إدارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت )‪ (DBMS‬ﻟﻤﺎ ﻟﻬﺎ ﻣﻦ أﺛﺮ ﻓﻌﺎل ﻓﻲ‬
‫ﻣﻌﺎﻟﺠﺔ اﻟﺒﻴﺎﻧﺎت داﺧﻞ اﻟﺠﺪول ﺣﻴﺚ ﺗﺸﻤﻞ ﻟﻐﺔ ﺗﻨﺎول اﻟﺒﻴﺎﻧﺎت )‪ (DML‬ﻋﻠﻰ اﻷﺟﺰاء اﻟﺘﺎﻟﻴﺔ ‪:‬‬

‫إدﺧﺎل اﻟﺒﻴﺎﻧﺎت إﻟﻰ اﻟﺠﺪاول ‪INSERT‬‬ ‫‪-1‬‬


‫ﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻓﻲ اﻟﺠﺪاول ‪UPDATE‬‬ ‫‪-2‬‬
‫ﺣﺬف اﻟﺒﻴﺎﻧﺎت ﻣﻦ اﻟﺠﺪاول ‪DELETE‬‬ ‫‪-3‬‬
‫ﻓﻲ هﺬا اﻟﻔﺼﻞ ﺳﻨﺘﺎﻧﺎول ادﺧﺎل اﻟﺒﻴﺎﻧﺎت‬

‫إدﺧﺎل اﻟﺒﻴﺎﻧﺎت إﻟﻰ اﻟﺠﺪاول ‪INSERT‬‬

‫هﻲ اﻟﻌﻤﻠﻴﺔ اﻟﺘﻲ ﻳﺘﻢ ﺑﻬﺎ إدﺧﺎل ﺳﺠﻞ ‪ /‬ﺳﺠﻼت إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺧﻼل ﺟﻤﻠﺔ ‪INSERT‬‬
‫وﺗﺘﻨﻢ هﺬﻩ اﻏﻠﻤﻠﻴﺔ ﺑﻌﺪة ﻃﺮق‬

‫أوﻻ ‪ :‬إﺿﺎﻓﺔ ﺳﺠﻞ واﺣﺪ إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‪:‬‬

‫‪INSERT INTO‬‬ ‫])]‪table [(column1 [, column2...‬‬


‫‪VALUES‬‬ ‫;)]‪(value1 [, value2...‬‬

‫ﺣﻴﺚ أن‬
‫اﺳﻢ اﻟﺠﺪول اﻟﻤﺮاد إﻟﺤﺎق اﻟﺴﺠﻞ ﺑﻪ‬ ‫‪Table‬‬
‫‪ Column1,Column2‬اﺳﻤﺎء اﻷﻋﻤﺪة)اﻟﺤﻘﻮل( اﻟﻤﻄﻠﻮب إدﺧﺎل اﻟﺒﻴﺎﻧﺎت إﻟﻴﻬﺎ‬
‫اﻟﻘﻴﻢ اﻟﻤﻄﻠﻮب إﺿﺎﻓﺘﻬﺎ ﻓﻲ‬ ‫‪Value1, value2‬‬
‫ﺣﻘﻮل اﻟﺴﺠﻞ اﻟﺠﺪﻳﺪ وآﻞ‬
‫ﻗﻴﻤﺔ ﻳﺘﻢ إدراﺟﻬﺎ ﻓﻲ اﻟﺤﻘﻞ‬
‫اﻟﻤﻨﺎﺳﺐ ﻓﻲ اﻟﻘﺎﺋﻤﺔ وﺑﺎﻟﺘﺎﻟﻲ‬
‫ﺳﻴﺘﻢ إﺿﻠﻔﺔ اﻟﻘﻴﻤﺔ‪ 1‬ﻓﻲ اﻟﺤﻘﻞ‬
‫‪ 1‬وهﻜﺬا‬

‫اﻟﺸﺮح‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪80 http://www.boosla.com‬‬

‫ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻹدﺧﺎل ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﺘﻢ إﺿﺎﻓﺔ ﺑﻴﺎﻧﺎت ﺳﺠﻞ واﺣﺪ ﻓﻘﻂ ﻓﻲ اﻟﺠﺪول‬
‫اﻟﻤﺬآﻮر ﻳﺘﻮي ﻋﻠﻰ ﻗﻴﻢ ﺗﻢ إ دراﺟﻬﺎ ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل وﻟﻠﺤﻘﻮل اﻟﻤﺬآﻮرة ﻓﻘﻂ‬
‫اﻟﻘﻮاﻋﺪ اﻟﺘﻲ ﻳﺠﺐ اﻟﺘﻘﻴﺪ ﺑﻬﺎ ﻓﻲ هﺬﻩ اﻟﻄﺮﻳﻘﺔ‬

‫ﻳﺠﺐ أن ﻳﻜﻮن ﻋﺪد اﻟﻘﻴﻢ اﻟﺘﻲ ﺳﻴﺘﻢ إدﺧﺎﻟﻬﺎ هﻮ ﻧﻔﺲ ﻋﺪد اﻟﺤﻘﻮل اﻟﻤﺬآﻮر ﻓﻲ ﺟﻤﻠﺔ‬ ‫‪-1‬‬
‫‪INSERT‬‬
‫ﻳﺠﺐ أن ﻳﻜﻮن ﻧﻮع ﺑﻴﺎﻧﺎت اﻟﻘﻴﻢ اﻟﺘﻲ ﺳﻴﺘﻢ إدﺧﺎﻟﻬﺎ ﻣﻦ ﻧﻔﺲ ﻧﻮع ﺑﻴﺎﻧﺎت اﻟﺤﻘﻮل وأن‬ ‫‪-2‬‬
‫ﺗﻜﻮن هﺬﻩ اﻟﻘﻴﻢ ﻣﺮﺗﺒﺔ ﺣﺴﺐ ﺗﺮﺗﻴﺐ اﻟﺤﻘﻮل ﻓﻲ ﺟﻤﻠﺔ ‪INSERT‬‬
‫ﻣﺜﺎل‬

‫‪INSERT INTO s_dept‬‬


‫‪VALUES‬‬ ‫;)‪(11, 'Finance', 2‬‬
‫ﻋﻨﺪ إدﺧﺎل ﺣﻘﻮل اﻟﺘﺎرﻳﺦ واﻟﻨﺼﻮص ﻳﺠﺐ وﺿﻊ اﻟﻘﻴﻢ اﻟﻤﺨﻠﺔ ﺑﻴﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﻴﺺ‬ ‫‪-3‬‬
‫ﻣﻔﺮدﺗﻴﻦ‬
‫ﻳﺠﺐ ﻣﺮاﻋﺎة وﺟﻮب إدﺧﺎل ﻗﻴﻢ ﻓﻲ اﻟﺤﻘﻮل اﻹﺟﺒﺎرﻳﺔ اﻟﺘﻲ ﺗﻢ ﺗﻌﺮﻳﻔﻌﺎ ﻋﻠﻰ أﻧﻬﺎ ﻻ ﺗﺤﺘﻮي‬ ‫‪-4‬‬
‫ﻓﺮاغ ‪ NOT NULL‬وﻳﺘﻢ ادﺧﺎل ‪ NULL‬ﻓﻲ اﻟﺤﻘﻮل اﻟﺘﻲ ﺑﻬﺎ ﻓﺮاغ‬

‫ﻣﺜﺎل‬
‫‪INSERT INTO s_dept‬‬
‫‪VALUES‬‬ ‫;)‪(13, 'Administration', NULL‬‬

‫ﻳﺠﻮز ﻋﺪم ذآﺮ أﺳﻤﺎء اﻟﺤﻘﻮل ﻓﻲ ﺟﻤﻠﺔ ‪ INSERT‬ﻓﻲ ﺣﺎﻟﺔ إدﺧﺎل ﺑﻴﺎﻧﺎت ﺟﻤﻴﻊ‬ ‫‪-5‬‬
‫اﻟﺤﻘﻮل ﻟﻬﺬا اﻟﺴﺠﻞ ﻋﻠﻰ أن ﺗﻜﻮن اﻟﻘﻴﻢ اﻟﻤﺨﻠﺔ ﻣﺮﺗﺒﺔ ﺣﺴﺐ اﻟﺘﺮﺗﻴﺐ اﻻﻓﺘﺮاﺿﻲ ﻟﻠﺤﻔﻮل ﻓﻲ‬
‫اﻟﺠﺪول ﻋﻨﺪ ﺑﻨﺎﺋﻪ‬

‫ﻣﻼﺣﻈﺔ‬
‫ﻟﻤﻌﺮﻓﺔ اﻟﺘﺮﺗﻴﺐ اﻻﻓﺘﺮاﺿﻲ ﻟﻠﺤﻘﻮل ﻓﻲ اﻟﺠﺪول ﻧﺴﺘﺨﺪم اﻷﻣﺮ ‪DESC‬‬

‫ﻣﺜﺎل‬

‫ﺛﺎﻧﻴﺎ ‪ :‬اﺿﺎﻓﺔ ﻋﺪة ﺳﺠﻼت إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت‬

‫ﻣﻦ ﺧﻼل هﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻳﻤﻜﻦ ادﺧﺎل أآﺜﺮ ﻣﻦ ﺳﺠﻞ واﺣﺪ إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ اﺳﺘﺨﺪام‬
‫ﻣﺘﻐﻴﺮات اﻻدﺧﺎل وهﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺘﻐﻴﺮات ﺗﻮﺿﻊ ﻓﻲ ﺟﻤﻠﺔ اﻻدﺧﺎل ﺑﺪﻻ ﻣﻦ اﻟﻘﻴﻢ ﻧﻔﺴﻬﺎ ةﻳﻤﻜﻦ‬
‫أن ﻧﻄﻠﻖ ﻋﻠﻰ هﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺟﻤﻠﺔ اﻻدﺧﺎل ﻣﺘﻌﺪدة اﻟﺴﺠﻼت‬

‫‪INSERT INTO‬‬ ‫])]‪table [(column1 [, column2...‬‬


‫‪VALUES‬‬ ‫;)]‪(&variable1 [,&variable1 ...‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪81 http://www.boosla.com‬‬

‫ﺣﻴﺚ ان‬
‫اﺳﻢ اﻟﺠﺪول اﻟﻤﺮاد إﻟﺤﺎق اﻟﺴﺠﻞ ﺑﻪ‬ ‫‪Table‬‬
‫اﺳﻤﺎء اﻷﻋﻤﺪة)اﻟﺤﻘﻮل( اﻟﻤﻄﻠﻮب إدﺧﺎل اﻟﺒﻴﺎﻧﺎت إﻟﻴﻬﺎ‬ ‫‪Column1,Column2‬‬
‫ﻣﺘﻐﻴﺮات‬ ‫‪Variable1, Variable 2‬‬
‫اﻹدﺧﺎل اﻟﺘﻲ‬
‫ﺳﻮف ﻳﺘﻢ‬
‫اﺳﺘﺒﺪاﻟﻬﺎ ﺑﻘﻴﻢ‬
‫ﺣﻘﻴﻘﻴﺔ ﺑﻌﺪ‬
‫ﺗﻨﻘﻴﺬ ﺟﻤﻠﺔ‬
‫اﻻدﺧﺎل‬

‫اﻟﺸﺮح‬

‫ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ ﻳﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﻄﻠﺐ ﻣﻨﻚ إدﺧﺎل اﻟﻘﻴﻢ ﻟﻠﻤﺘﻐﻴﺮات اﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل‬
‫وﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ادﺧﺎل اﻟﻘﻴﻤﺔ ﺗﻀﻐﻂ ﻣﻔﺘﺎح ‪ ENTER‬ﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﻴﺢ وهﻜﺬا ﺣﺘﻰ ﺗﻨﺘﻬﻲ ﻣﻦ‬
‫إدﺧﺎل ﺣﻘﻮل ﻻﺳﺠﻞ اﻷول وﻹدﺣﺎل ﺳﺠﻞ ﺁﺧﺮ ﻳﻤﻜﻨﻚ اﻟﻀﻐﻂ ﻋﻠﻰ ﺣﺮف )‪ (R‬ﺛﻢ ﻣﻔﺘﺎح‬
‫‪ ENTER‬ﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﻴﺢ وهﻮ ﻳﻌﻨﻲ ﺗﻜﺮار اﻹدﺧﺎل ﻟﺴﺠﻼت اﺧﺮى‬

‫ﻣﺜﺎل‬

‫‪INSERT INTO‬‬ ‫‪s_dept (id, name,‬‬


‫)‪region_id‬‬
‫‪VALUES‬‬ ‫‪(&department_id,‬‬
‫‪‘&department_name’,‬‬
‫;)‪&region_id‬‬
‫‪Enter value for department_id: 61‬‬
‫‪Enter value for department_name: Accounting‬‬
‫‪Enter value for region_id: 2‬‬
‫اﻟﻘﻮاﻋﺪ اﻟﺘﻲ ﻳﺠﺐ اﻟﺘﻘﻴﺪ ﺑﻬﺎ ﻓﻲ هﺬﻩ اﻟﻄﺮﻳﻘﺔ‬

‫ﺗﻨﻄﺒﻖ ﻋﻠﻰ هﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺟﻤﻴﻊ اﻟﻘﻮاﻋﺪ اﻟﻤﺬآﻮرة ﻓﻲ اﻟﻄﺮﻳﻘﺔ اﻷوﻟﻰ وﻳﻀﺎف إﻟﻴﻬﺎ ﻣﺎﻳﻠﻲ ‪:‬‬
‫ﺗﺴﺘﺒﺪل اﻟﻘﻴﻢ ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل ﺑﻤﺘﻐﻴﺮات‬ ‫‪-1‬‬
‫ﻳﻌﻮد اﺧﺘﻴﺎر أﺳﻤﺎء اﻟﻤﺘﻐﻴﺮات إﻟﻰ اﻟﻤﺴﺘﺨﺪم ﻣﻊ ﻣﺮاﻋﺎة ﺷﺮوط ﺗﺴﻤﻴﺔ اﻟﻤﺘﻐﻴﺮات‬ ‫‪-2‬‬
‫ﻳﺠﺐ أن ﺗﻮﺿﻊ ﻋﻼﻣﺔ & ﻗﺒﻞ ﻣﺘﻐﻴﺮ اﻻدﺧﺎل‬ ‫‪-3‬‬
‫ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل ﻳﻤﻜﻦ وﺿﻊ ﻋﻼﻣﺘﻰ ﺗﻨﺼﻴﺺ ﻣﻔﺮدﺗﻴﻦ ﺣﻮل ﻣﺘﻐﻴﺮ اﻻدﺧﺎل اﻟﺨﺎص‬ ‫‪-4‬‬
‫ﺑﺎﻟﺤﻘﻮل اﻟﻨﺼﺒﺔ‬

‫إﺿﺎﻓﺔ ﺳﺠﻼت ﻋﻦ ﻃﺮﻳﻖ ﻧﺴﺨﻬﺎ ﻣﻦ ﺟﺪول ﺁﺧﺮ‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪82 http://www.boosla.com‬‬

‫ﻣﻦ ﺧﻼل هﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻳﻤﻜﻦ إدﺧﺎل أآﺜﺮﻣﻦ ﻳﺠﻞ واﺣﺪ إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ ﻧﺴﺦ هﺬا‬
‫اﻟﺴﺠﻞ ‪ /‬اﻟﺴﺠﻼت ﻣﻦ ﺟﺪول ﺁﺧﺮ ﺑﻮﺗﺴﻄﺔ ﺟﻤﻠﺔ اﻻﺳﺘﻔﺴﺎر ‪ SELECT‬ﻳﺚ ﻧﺴﺘﺨﺪم ﺟﻤﻠﺔ‬
‫‪ INSERT‬ﻣﻊ اﺳﺘﻌﻼم ﻓﺮﻋﻲ اﻧﻈﺮ اﻟﻰ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ‬

‫‪INSERT INTO history(id, last_name, salary, title,‬‬


‫)‪start_date‬‬
‫‪SELECT id, last_name, salary,title, start_date‬‬
‫‪FROM s_emp‬‬
‫;'‪WHERE start_date < '01-JAN-94‬‬

‫اﻟﺸﺮح‬

‫ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻹدﺧﺎل ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻳﻨﻢ ﻧﺴﺦ اﻟﺴﺠﻼت اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط ﻣﻦ اﻟﺠﺪوﻻ ﻟﻤﺼﺪر‬
‫إﻟﻰ اﻟﺠﺪول اﻟﻬﺪف وﻟﻠﺤﻘﻮل ااﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل‬

‫اﻟﻘﻮاﻋﺪ اﻟﺘﻲ ﻳﺠﺐ اﻟﺘﻘﻴﺪ ﺑﻬﺎ ﻓﻲ هﺬﻩ اﻟﻄﺮﻳﻘﺔ‬


‫آﺘﺎﺑﺔ ﺟﻤﻠﺔ اﻹدﺧﺎل ‪ INSERT‬ﻣﺤﺘﻮﻳﺔ ﻋﻠﻰ ﺟﻤﻠﺔ اﺳﺘﻔﺴﺎر ‪SELECT‬‬ ‫‪-1‬‬
‫ﺗﺴﺘﺒﺪل اﻟﻘﻴﻢ ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل ﺑﺄﺳﻤﺎء ﺣﻘﻮل اﻟﺠﺪول اﻟﻤﺼﺪر‬ ‫‪-2‬‬
‫ﻋﺪم اﺳﺘﺨﺪم اﻟﻌﺒﺎرة ‪VALUES‬‬ ‫‪-3‬‬
‫ﻳﺠﺐ ﻣﺮاﻋﺎة وﺟﻮب إدﺧﺎل ﻗﻴﻢ ﻓﻲ اﻟﻘﻮل اﻻﺟﺒﺎرﻳﺔ اﻟﺘﻲ ﺗﻢ ﻧﻌﺮﻳﻔﻬﺎ ﻋﻠﻰ أﻧﻬﺎ ﻻ ﺗﺤﺘﻮي‬ ‫‪-4‬‬
‫ﻓﺮاغ ‪NOT NULL‬‬
‫ﻣﻄﺎﺑﻘﺔ اﻟﺤﻘﻮل ﺑﻴﻦ اﻟﺠﺪوﻟﻴﻦ ﻣﻦ ﺣﻴﺚ ﺗﺮﺗﻴﺐ اﻟﺤﻘﻮل وﻧﻮع اﻟﺒﻴﺎﻧﺎت وﻋﺪد اﻟﺤﻘﻮل‬ ‫‪-5‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪83 http://www.boosla.com‬‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬

‫ﺗﻨﺎوﻟﻨﺎ ﻣﻦ ﺧﻼل هﺬا اﻟﻔﺼﻞ ﻣﻮﺿﻮع اﺿﺎﻓﺔ اﻟﺒﻴﺎﻧﺎت إﻟﻰ اﻟﺠﺪاول ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ ‪INSERT‬‬
‫وهﻨﺎﻟﻚ ﺛﻼﺛﺔ ﻃﺮق ﻹﺟﺮاء ﻋﻤﻠﻴﺔ اﻹﺿﺎﻓﺔ‬

‫أوﻻ‪ :‬إﺿﺎﻓﺔ ﺳﺠﻞ واﺣﺪ إﻟﻰ ﺟﺪو ل اﻟﺒﻴﺎﻧﺎت‬

‫ﺑﻬﺬﻩ اﻟﻀﺮﻳﻔﺔ ﺳﻮف ﻳﺘﻢ إﺿﺎﻓﺔ ﺑﻴﺎﻧﺎت ﺳﺠﻞ واﺣﺪ ﻓﻘﻂ إﻟﻰ ﺟﺪول ﻳﺤﺘﻮي ﻋﻠﻰ اﻟﻘﻴﻢ اﻟﺘﻲ ﺳﺘﺬآﺮ‬
‫ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل‬

‫ﺛﺎﻧﻴﺎ ‪ :‬إﺿﺘﻔﺔ ﻋﺪة ﺳﺠﻼت إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت‬

‫ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻳﻤﻜﻦ إدﺧﺎل أآﺜﺮ ﻣﻦ ﺳﺠﻞ واﺣﺪ إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ اﺳﺘﺨﺪام ﻣﺘﻐﻴﺮات‬
‫اﻻدﺧﺎل وهﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺘﻐﻴﺮات ﺗﻮﺿﻊ ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل ﺑﺪﻻ ﻣﻦ اﻟﻘﻴﻢ ﻧﻔﺴﻬﺎ وﻳﻤﻜﻦ أن ﻧﻄﻠﻖ‬
‫ﻋﻠﻰ هﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺟﻤﻠﺔ اﻻدﺧﺎل ﻣﺘﻌﺪدة اﻟﺴﺠﻼت‬

‫ﺛﺎﻟﺜﺎ‪ :‬إﺿﺎﻓﺔ ﺳﺠﻼت ﻓﻲ ﺟﺪول ﻋﻦ ﻃﺮﻳﻖ ﻧﺴﺨﻬﺎ ﻣﻦ ﺟﺪول ﺁﺧﺮ‬

‫ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻳﻤﻜﻦ إدﺧﺎل أآﺜﺮ ﻣﻦ ﺳﺠﻞ واﺣﺪ إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ ﻧﺴﺦ هﺬا اﻟﺴﺠﻞ ‪/‬‬
‫اﻟﺴﺠﻼت ﻣﻦ ﺟﺪول ﺁﺧﺮ ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ ‪ SELECT‬اﻟﻤﻮﺟﻮدة ﺑﺪاﺧﻞ ﺟﻤﻠﺔ ‪INSERT‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪84 http://www.boosla.com‬‬

‫ﺗﻌﺪﻳﻞ وﺣﺬف ﺑﻴﺎﻧﺎت اﻟﺠﺪاول‬


‫أهﺪاف اﻟﻔﺼﻞ‬

‫ﺑﻌﺪ ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ ﺳﺘﻜﻮن ان ﺷﺎء اﷲ ﻗﺎدر ﻋﻠﻰ‬

‫اﻹﻟﻤﺎم ﺑﺎﻟﻄﺮق اﻟﻤﺨﺘﻠﻔﺔ ﻟﺘﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻓﻲ اﻟﺠﺪول‬ ‫‪-1‬‬


‫إﺗﻘﺎن ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﺳﺠﻞ واﺣﺪ أو أآﺜﺮ ﻓﻲ ﺟﺪول اﻟﺒﻴﺎﻧﺎت‬ ‫‪-2‬‬
‫إﺗﻘﺎن ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﺟﻤﻴﻊ اﻟﺴﺠﻼت ﻓﻲ ﺟﺪول اﻟﺒﻴﺎﻧﺎت‬ ‫‪-3‬‬
‫إﺗﻘﺎن ﺣﺬف ﺳﺠﻞ أو أآﺜﺮ ﻣﻦ ﺟﺪول اﻟﺒﻴﺎﻧﺎت‬ ‫‪-4‬‬
‫إﺗﻘﺎن ﺣﺬف ﺟﻤﻴﻊ اﻟﺴﺠﻼت ﻣﻦ ﺟﺪول اﻟﺒﻴﺎﻧﺎت‬ ‫‪-5‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪85 http://www.boosla.com‬‬

‫ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت اﻟﺠﺪول‬

‫ﻓﻲ هﺬا اﻟﻔﺼﻞ ﺳﻨﺘﻌﻠﻢ آﻴﻔﻴﺔ ﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت وﺣﺬف اﻟﺴﺠﻼت آﻤﺎ أن هﺬا اﻟﻔﺼﻞ ﻳﺸﻜﻞ ﺟﺰأ‬
‫أﺳﺎﺳﻴﺎ ﻣﻜﻤﻼ ﻟﻠﻐﺔ ﺗﻨﺎول اﻟﺒﻴﺎﻧﺎت ‪ DML‬ﻓﺲ ﻧﻈﺎم أوراآﻞ اﻟﺘﻲ ﻳﻌﺘﺒﺮ اﺣﺪى اﻟﻨﻈﻢ اﻟﻘﻮﻳﺔ ﻓﻲ ﻧﻈﻢ‬
‫إدارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت ‪ DBMD‬ﻟﻤﺎ ﻟﻬﺎ ﻣﻦ أﺛﺮ ﻓﻌﺎل ﻓﻲ ﻣﻌﺎﻟﺠﺔ اﻟﺒﻴﺎﻧﺎت داﺧﻞ اﻟﺠﺪول ﺣﻴﺚ‬
‫ﺗﺸﺘﻤﻞ ﻟﻐﺔ ﺗﻨﺎول اﻟﺒﻴﺎﻧﺎت ‪ DML‬ﻋﻠﻰ اﻻﺟﺰاء اﻟﺘﺎﻟﻴﺔ‬

‫إدﺧﺎل اﻟﺒﻴﺎﻧﺎت إﻟﻰ اﻟﺠﺪاول ‪INSERT‬‬ ‫‪-1‬‬


‫ﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻓﻲ اﻟﺠﺪاول ‪UPDATE‬‬ ‫‪-2‬‬
‫ﺣﺬف اﻟﺒﻴﺎﻧﺎت ﻣﻦ اﻟﺠﺪاول ‪DELETE‬‬ ‫‪-3‬‬

‫وﻟﻘﺪ ﺗﻨﺎوﻟﻨﺎ ادﺧﺎل اﻟﺒﻴﺎﻧﺎت ﻓﻲ اﻟﻔﺼﻞ اﻟﺴﺎﺑﻖ وﺳﻨﺪرس ﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت وﺧﺬﻓﻬﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ‬

‫ﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻓﻲ اﻟﺠﺪول‬

‫هﻲ اﻟﻌﻤﻠﻴﺔ اﻟﺘﻲ ﻳﺘﻢ ﺑﻬﺎ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﻗﻞ ‪ /‬ﺣﻘﻮل ﻓﻲ ﺳﺠﻞ واد أو اآﺜﺮ ﻓﻲ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻣﻦ‬
‫ﺧﻼل ﺟﻤﻠﺔ ‪UPDATE‬وﺗﺘﻢ هﺬﻩ اﻟﻌﻤﻠﻴﺔ ﺑﻄﺮﻳﻘﺘﻴﻦ‪:‬‬

‫أوﻻ‪ :‬ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﺣﻘﻞ ‪ /‬ﺣﻘﻮل ﻟﺴﺠﻞ واﺣﺪ أو اآﺜﺮ‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫‪UPDATE‬‬ ‫‪tableSET‬‬ ‫= ‪column1 = value [, column2‬‬


‫]‪value‬‬
‫‪[WHERE‬‬ ‫;]‪condition‬‬
‫ﺣﻴﺚ أن‬
‫اﺳﻢ اﻟﺠﺪول اﻟﻤﺮاد ﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻓﻴﻪ‬ ‫‪Table‬‬
‫اﺳﻤﺎء اﻟﺤﻘﻮل)اﻻﻋﻤﺪﻩ( اﻟﻤﺮاد ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎﺗﻬﺎ‬ ‫‪Column1,column2‬‬
‫اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪة اﻟﺘﻲ ﺳﻴﺘﻢ‬ ‫‪Value1, value2‬‬
‫إﻋﻄﺎؤهﺎ ﻟﻠﺤﻘﻮل )اﻻﻋﻤﺪة(‬
‫ﺣﻘﻞ ‪ 1‬وﺣﻘﻞ ‪ 2‬وﺑﺎﻟﺘﺎﻟﻲ‬
‫ﻓﺈن ﻗﻴﻤﺔ ‪ 1‬ﺳﺘﺆول اﻟﻰ اﻟﺤﻘﻞ‬
‫‪ 1‬وهﻜﺬا‬
‫ﺟﻤﻠﺔ ﺷﺮط ﺗﺤﺪد اﻟﺴﺠﻼت‬ ‫‪Condition‬‬
‫اﻟﺘﻲ ﺳﻴﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎﺗﻬﺎ هﻲ‬
‫اﻟﺴﺠﻼت اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط‬

‫اﻟﺸﺮح‬
‫ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت اﻟﺤﻘﻞ ‪/‬اﻟﺤﻘﻮل اﻟﻤﺬآﻮرة ﺑﺤﻴﺚ ﻳﺘﻢ‬
‫إﻟﻐﺎء اﻟﻘﻴﻢ اﻟﻤﻮﺟﻮدة ﻗﻴﻬﺎ ﻟﺘﺘﻮي اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪة اﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﻋﻠﻤﺎ ﺑﺄن اﻟﺴﺠﻼت اﻟﺘﻲ‬
‫ﺳﻴﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎﺗﻬﺎ هﻲ ﻓﻘﻂ اﻟﺴﺠﻼت اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط ﻓﻲ اﻟﺠﻤﻠﺔ اﻟﺸﺮﻃﻴﺔ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪86 http://www.boosla.com‬‬

‫اﻟﻘﻮاﻋﺪ اﻟﺘﻲ ﻳﺠﺐ اﻟﺘﻘﻴﺪ ﺑﻬﺎ ﻓﻲ هﺬﻩ اﻟﻄﺮﻳﻘﺔ‬


‫ﻗﺪ ﺗﻜﻮن اﻟﻘﻴﻤﺔ اﻟﺠﺪﻳﺪة ﻋﺒﺎرة ﻋﻦ ﺗﻌﺒﻴﺮ ﺣﺴﺎﺑﻲ ﻳﻌﺘﻤﺪ ﻋﻠﻰ ﻗﻴﻢ اﻟﺤﻘﻮل ﻓﻲ اﻟﺠﺪول‬ ‫‪-1‬‬
‫ﻗﺪ ﺗﻜﻮن اﻟﻘﻴﻤﺔ اﻟﺠﺪﻳﺪة ﻧﺎﺗﺠﺔ ﻋﻦ ﺟﻤﻠﺔ اﺳﺘﻌﻼم ﻓﺮﻋﻲ ‪SELECT‬‬ ‫‪-2‬‬
‫ﻳﺠﺐ أن ﻳﻜﻮن ﻧﻮع ﺑﻴﺎﻧﺎت اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪة ﻣﻦ ﻧﻔﺲ ﻧﻮع ﺑﻴﺎﻧﺎت اﻟﺤﻘﻮل اﻟﺘﻲ ﺳﻴﺘﻢ ﺗﻌﺪﻳﻠﻬﺎ‬ ‫‪-3‬‬
‫ﻋﻨﺪ ﺗﻌﺪﻳﻞ ﺣﻘﻮل اﻟﺘﺎرﻳﺦ واﻟﻨﺼﻮص ﻳﺠﺐ وﺿﻊ اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪة ﺑﻴﻦ ﻋﻼﻣﺘﻲ ﺗﻨﺼﻴﺺ‬ ‫‪-4‬‬
‫ﻣﻔﺮدﺗﻴﻦ‬
‫ﻳﺠﺐ ﻣﺮاﻋﺎة وﺟﻮب إﻋﻄﺎء ﻗﻴﻢ ﻟﻠﺤﻘﻮل اﻟﺘﻲ ﺳﻴﺘﻢ ﺗﻌﺪﻳﻠﻬﺎ واﻟﺘﻲ ﺗﻢ ﺗﻌﺮﻳﻔﻬﺎ ﻋﻠﻰ أﻧﻬﺎ‬ ‫‪-5‬‬
‫ﺣﻘﻮل إﺟﺒﺎرﻳﺔ أي ﻻ ﺗﺤﺘﻮي ﻓﺮاغ ‪NOT NULL‬‬

‫ﻣﺜﺎل‬

‫‪UPDATE‬‬ ‫‪s_emp‬‬
‫‪SET‬‬ ‫‪dept_id = 10‬‬
‫‪WHERE‬‬ ‫;‪id = 2‬‬

‫ﺛﺎﻧﻴﺎ ‪ :‬ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﺣﻘﻞ ‪ /‬ﺣﻘﻮل ﻟﺠﻤﻴﻊ اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫‪UPDATE‬‬ ‫‪tableSET‬‬ ‫= ‪column1 = value [, column2‬‬


‫]‪value‬‬

‫اﻟﺸﺮح‬
‫ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﺑﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت اﻟﺤﻘﻞ ‪ /‬اﻟﺤﻘﻮل اﻟﻤﺬآﻮرة ﺑﺤﻴﺚ ﻳﺘﻢ‬
‫إﻟﻐﺎء اﻟﻘﻴﻢ اﻟﻤﻮﺟﻮدة ﻓﻴﻬﺎ ﻟﺘﺘﻮي اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪة اﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﻋﻠﻤﺎ ﺑﺄن اﻟﺴﺠﻼت اﻟﺘﻲ‬
‫ﺳﻴﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎﺗﻬﺎ هﻲ ﺣﻤﻴﻊ اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول‬

‫ﻣﺜﺎل‬
‫‪UPDATE‬‬ ‫‪s_emp‬‬
‫‪SET‬‬ ‫‪commission_pct = 10‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪87 http://www.boosla.com‬‬

‫ﺣﺬف اﻟﺒﻴﺎﻧﺎت ﻣﻦ اﻟﺠﺪاول‬


‫هﻲ اﻟﻌﻤﻠﻴﺔ اﻟﺘﻲ ﻳﺘﻢ ﺑﻬﺎ ﺣﺬف ﺑﻴﺎﻧﺎت ﺳﺠﻞ ‪ /‬ﺳﺠﻼت ﻣﻦ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺧﻼل ﺟﻤﻠﺔ‬
‫‪ DELETE‬وﺗﺘﻢ هﺬﻩ اﻟﻌﻤﻠﻴﺔ ﺑﻄﺮﻳﻘﺘﻴﻦ‬

‫أول‪:‬ا ﺣﺬف ﺳﺠﻞ أو أآﺜﺮ ﻣﻦ اﻟﺠﺪول‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬
‫;]‪DELETE [FROM] table[WHERE condition‬‬
‫اﻟﺸﺮح‬
‫ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻟﺤﺬف اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﺘﻢ ﺣﺬف اﻟﺴﺠﻞ ‪ /‬اﻟﺴﺠﻼت اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط ﻓﻲ اﻟﺠﻤﻠﺔ‬
‫اﻟﺸﺮﻃﻴﺔ‬
‫‪.‬‬
‫اﻟﻘﻮاﻋﺪ اﻟﺘﻲ ﻳﺠﺐ اﻟﺘﻘﻴﺪ ﺑﻬﺎ ﻓﻲ هﺬﻩ اﻟﻄﺮﻳﻘﺔ ‪:‬‬

‫ﻳﺠﺐ اﻟﺘﺄآﺪ ﻣﻦ ﺑﻴﺎﻧﺎت اﻟﺴﺠﻼت اﻟﺘﻲ ﺳﻴﺘﻢ ﺣﺬﻓﻬﺎ ﻗﺒﻞ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻟﺤﺬف وآﺬﻟﻚ اﻟﺘﺄآﺪ‬ ‫‪-1‬‬
‫ﻣﻦ اﻟﺸﺮط ﻓﻲ اﻟﺠﻤﻠﺔ اﻟﺸﺮﻃﻴﺔ ﻷن اﻟﺴﺠﻼت اﻟﺘﻲ ﺳﺘﺤﺬف ﺗﻌﺘﻤﺪ ﻋﻠﻰ اﻟﺸﺮط اﻟﻤﺬآﻮر‬

‫ﺛﺎﻧﻴﺎ‪ :‬ﺣﺬف ﺟﻤﻴﻊ ﺳﺠﻼت اﻟﺠﺪول‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬
‫;‪DELETE [FROM] table‬‬

‫اﻟﺸﺮح‬

‫ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻟﺤﺬف ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﺘﻢ ﺣﺬف ﺟﻤﻴﻊ اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪88 http://www.boosla.com‬‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬

‫ﺗﻨﺎوﻟﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ ﻣﻮﺿﻮع ﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻓﻲ اﻟﺠﺪول ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ ‪ UPDATE‬وهﻨﺎﻟﻚ‬
‫ﻃﺮﻳﻘﺘﺎن ﻻﺟﺮاء ﻋﻤﻠﻴﺔ اﻟﺘﻌﺪﻳﻞ وهﻤﺎ‬

‫أوﻻ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﺣﻘﻞ‪ /‬ﺣﻘﻮل ﻟﺴﺞ واﺣﺪ أو اآﺜﺮ‬

‫ﺣﻴﺚ ﻳﺘﻢ اﻟﻐﺎء اﻟﻘﻴﻢ اﻟﻤﻮﺟﻮدة ﺑﻬﺎ ﻟﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪة اﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﻋﻠﻤﺎ ﺑﺄن‬
‫اﻟﺴﺠﻼت اﻟﺘﻲ ﺳﻴﺘﺘﻢ اﻟﺘﻌﺪﻳﻞ ﺑﻬﺎ هﻲ اﻟﺴﺠﻼن اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط‪.‬‬

‫ﺛﺎﻧﻴﺎ‪ :‬ﻧﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﺣﻔﻞ ‪ /‬ﺣﻘﻮل ﻟﺠﻤﻴﻊ اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول‬

‫ﺣﻴﺚ ﻳﺘﻢ اﻟﻐﺎء اﻟﻘﻴﻢ اﻟﻤﻮﺟﻮدة ﺑﻬﺎ ﻟﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪة اﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﻋﻠﻤﺎ اﻧﻪ‬
‫ﺳﻴﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﺟﻤﻴﻊ اﻟﺤﻘﻮل ﻟﻌﺪم وﺟﻮد ﺷﺮط‬

‫ﺛﻢ ﺗﻨﺎوﻟﻨﺎ ﻣﻮﺿﻮع ﺣﺬف اﻟﺴﺠﻼت ﻋﻦ‪ DELETE‬وهﻨﺎﻟﻚ ﻃﺮﻳﻘﺘﺎن ﻹﺟﺮاء ﻋﻤﻠﻴﺔا اﻟﺤﺬف‬

‫أوﻻ‪ :‬ﺣﺬف ﺳﺠﻞ أو أآﺜﺮ ﻣﻦ اﻟﺠﺪول‬

‫ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﺘﻢ ﺣﺬف اﻟﺴﺠﻞ ‪ /‬اﻟﺴﺠﻼت اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط ﻓﻲ ﺟﻤﻠﺔ اﻟﺸﺮط‬

‫ﺛﺎﻧﻴﺎ ‪ :‬ﺣﺬف ﺟﻤﻴﻊ ﺳﺠﻼت اﻟﺠﺪول‬

‫ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﺘﻢ ﺣﺬف ﺟﻤﻴﻊ اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪89 http://www.boosla.com‬‬

‫اﻟﻤﺘﺴﻠﺴﻼت واﻟﻔﻬﺎرس واﻟﻌﺮوض‬

‫أهﺪاف اﻟﻔﺼﻞ‬

‫ﻓﻲ ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ ﺳﺘﻜﻮن ان ﺷﺎء اﷲ ﻗﺎدر ﻋﻠﻰ‬

‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺘﺴﻠﺴﻼت‬ ‫‪-1‬‬


‫ﺗﻜﻮﻳﻦ ﻣﺘﺴﻠﺴﻠﺔ‬ ‫‪-2‬‬
‫اﻟﺘﻌﺪﻳﻞ ﻓﻲ ﻣﺘﺴﻠﺴﻠﺔ‬ ‫‪-3‬‬
‫ﺣﺬف ﻣﺘﺴﻠﺴﻠﻪ‬ ‫‪-4‬‬
‫ﻣﻌﺮﻓﺔ اﻟﻔﺮق ﺑﻴﻦ اﻟﻔﻬﺮﺳﻪ اﻟﺘﻠﻘﺎﺋﻴﺔ واﻟﻔﻬﺮﺳﻪ اﻟﻌﺎدﻳﺔ‬ ‫‪-5‬‬
‫ﻋﻤﻞ ﻓﻬﺮﺳﻪ ﻟﻠﺒﻴﺎﻧﺎت‬ ‫‪-6‬‬
‫اﻟﻐﺎء اﻟﻔﻬﺮﺳﻪ‬ ‫‪-7‬‬
‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻌﺮوض ‪View‬‬ ‫‪-8‬‬
‫ﺗﻜﻮﻳﻦ ﻋﺮض‬ ‫‪-9‬‬
‫‪ -10‬ﺗﻌﺪﻳﻞ اﻟﻌﺮض‬
‫‪ -11‬اﻟﻐﺎء ﻋﺮض‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪90 http://www.boosla.com‬‬

‫اﻟﻤﺘﺴﻠﺴﻼت‬
‫‪.‬اﻟﻤﺘﺴﻠﺴﻠﺔ ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﻪ ﻣﻦ اﻻرﻗﺎم اﻟﻤﺘﺘﺎﻟﻴﺔ ﺗﺘﻮﻟﺪ ﺗﻠﻘﺎﺋﻴﺎ ﻣﺜﻞ ‪1‬و‪2‬و‪ ,,, 3‬ﺣﻴﺚ ﺗﺴﺘﺨﺪم‬
‫آﻤﻔﺘﺎح أﺳﺎﺳﻲ ‪ Primary Key‬ﻻﻧﻬﺎ ﻋﺒﺎرة ﻋﻦ ﻗﻴﻢ ﻓﺮﻳﺪﻩ وﺗﺘﻌﺎﻣﻞ ﻣﻌﺎهﺎ اﻟﺬاآﺮﻩ ﺑﺴﻬﻮﻟﺔ وﺑﻜﻔﺎﺋﻪ‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫‪CREATE SEQUENCE name‬‬


‫]‪[INCREMENT BY n1‬‬
‫]‪[START WITH n2‬‬
‫]}‪[{MAXVALUE n3 | NOMAXVALUE‬‬
‫]}‪[{MINVALUE n4 | NOMINVALUE‬‬
‫]}‪[{CYCLE | NOCYCLE‬‬
‫]}‪[{CACHE n5 | NOCACHE‬‬

‫ﺣﻴﺚ أن‬
‫اﺳﻢ اﻟﻤﺘﺴﻠﺴﻠﺔ‬ ‫‪Name‬‬
‫ﻣﻘﺪار اﻟﺰﻳﺎدة آﻞ ﻣﺮة‬ ‫‪N1‬‬
‫اول رﻗﻢ ﺗﺒﺪأ ﻣﻨﻪ اﻟﻤﺘﺴﻠﺴﻠﺔ‬ ‫‪N2‬‬
‫اﻗﺼﻰ ﻗﻴﻤﻪ ﻟﻠﻤﺘﺴﻠﺴﻠﺔ‬ ‫‪N3‬‬
‫ادﻧﻰ ﻗﻴﻤﺔ ﻟﻠﻤﺘﺴﻠﺴﻠﺔ‬ ‫‪N4‬‬
‫ﻋﺪد اﻟﺨﺎﻧﺎت ﻓﻲ اﻟﺬاآﺮﻩ‬ ‫‪N5‬‬

‫اﻟﺸﺮح‬

‫اﻟﺴﻄﺮ اﻻول ﻗﻤﻨﺎ ﺑﺘﻌﺮﻳﻒ اﺳﻢ اﻟﻤﺘﺴﻠﺴﻠﺔ‬ ‫•‬


‫اﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ﻣﻘﺪار اﻟﺰﻳﺎدة‬ ‫•‬
‫اﻟﺴﻄﺮ اﻟﺜﺎﻟﺚ اﻟﺮﻗﻢ اﻟﺬي ﺳﺘﺒﺪأ ﻣﻨﻪ هﺬﻩ اﻟﻤﺘﺴﻠﺴﻠﻪ‬ ‫•‬
‫اﻟﺴﻄﺮ اﻟﺮاﺑﻊ ﻧﺤﺪد اﻗﺼﻰ ﻗﻴﻤﻪ ﺗﺼﻞ اﻟﻴﻬﺎ اﻟﻤﺘﺴﻠﺴﻠﺔ واﻟﻮﺿﻊ اﻻﻓﺘﺮاﺿﻲ ﻋﺪم وﺟﻮد‬ ‫•‬
‫‪(27‬‬
‫ﻗﻴﻤﺔ ﻗﺼﻮى‪ NOMAXVALUE‬ﺣﻴﺚ ﻳﻤﻜﻦ ﻟﻠﻤﺘﺴﻠﺴﻠﺔ ان ﺗﺼﻞ اﻟﻰ) ‪10‬‬
‫ﻟﻠﻤﺘﺴﻠﺴﻠﺔ اﻟﺘﺼﺎﻋﺪﻳﻪ وﻟﻠﺘﻨﺎزﻟﻴﻪ )‪(1-‬‬
‫اﻟﺴﻄﺮ اﻟﺨﺎﻣﺲ ﻳﺘﻢ ﺗﺤﺪﻳﺪ ادﻧﻰ ﻗﻴﻤﻪ ﻟﻠﻤﺘﺴﻠﺴﻠﻪ واﻟﻮﺿﻊ اﻻﻓﺘﺮاﺿﻲ ﻋﺪم وﺟﻮد ﻗﻴﻤﺔ‬ ‫•‬
‫‪ NOMINVALUE‬ﺣﻴﺚ ﻳﻤﻜﻦ ﻟﻠﻤﺘﺴﻠﺴﻠﺔ ﺗﺼﻞ اﻟﻰ )‪ (1‬ﻓﻲ ﺣﺎﻟﺔ اﻟﻤﺴﻠﺴﻠﺔ اﻟﺘﺼﺎﻋﺪﻳﺔ‬
‫وﺣﺎﻟﺔ اﻟﺘﻨﺎزﻟﻴﻪ اﻟﻰ )‪(2610-‬‬
‫اﻟﺴﻄﺮ اﻟﺴﺎدس ‪ cycle‬ﻳﺴﻤﺢ ﺑﺘﻜﺮارا اﻟﻤﺘﺴﻠﺴﻠﺔ اذا وﺻﻠﺖ اﻟﻰ‬ ‫•‬
‫أﻗﺼﻰ ﻗﻴﻤﻪ وأدﻧﻰ ﻗﻴﻤﻪ واﻟﻮﺿﻊ اﻻﻓﺘﺮاﺿﻲ هﻮ ﻋﺪم اﻟﺘﻜﺮار‬
‫• اﻟﺴﻄﺮ اﻟﺴﺎدس ﻳﺘﻢ ﻓﻴﻪ ﺣﺠﺰ اﻣﺎآﻦ ﻓﻲ اﻟﺬاآﺮﻩ ﻟﻠﻤﺘﺴﻠﺴﻠﺔ وذﻟﻚ ﻟﺴﺮﻋﻪ اﻟﺘﻌﺎﻣﻞ ﻣﻊ‬
‫اﻟﻤﺘﺴﻠﺴﻠﺔ ﺣﻴﺚ ﻧﻜﺘﺐ ﻓﻲ ‪ n5‬ﻋﺪد اﻟﺨﺎﻧﺎت واﻟﻮﺿﻮع اﻻﻓﺘﺮاﺿﻲ أن اآﻮن ‪ 20‬واذا‬
‫اﺧﺘﺮﻧﺎ ‪ NOCACHE‬ﻓﺎﻧﻪ ﻻﻳﺘﻢ ﺣﺠﺰ اﻣﺎآﻦ ﻓﻲ اﻟﺬاآﺮﻩ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪91 http://www.boosla.com‬‬

‫ﻣﺜﺎل‬

‫‪CREATE SEQUENCE s_dept_id‬‬


‫‪INCREMENT BY 1‬‬
‫‪START WITH 51‬‬
‫‪MAXVALUE 9999999‬‬
‫‪NOCACHE‬‬
‫;‪NOCYCLE‬‬

‫ﻟﻜﻲ ﻧﺤﺼﻞ ﻋﻠﻰ أﻓﻀﻞ أداء ﻟﻠﻤﺘﺴﻠﺴﻠﺔ ﻧﻘﻮم ﺑﺤﺠﺰ اﻣﺎآﻦ ﻓﻲ اﻟﺬاآﺮﻩ ﻷآﺒﺮ ﻋﺪد ﻣﻦ اﻟﻤﺼﻔﻮﻓﺎت‬
‫ﻧﻌﺮﻓﻪ وﻟﻜﻦ اذا ﺳﺘﺨﺪﻣﻨﺎ ﻋﺪد آﺒﻴﺮ ﻓﺈﻧﻨﺎ ﺳﻨﺸﻐﻼ ﻻذاآﺆﻩ وﻧﺒﻄﺊ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺠﻬﺎز واذا ﺳﺘﺨﺪﻣﻨﺎ‬
‫ﻋﺪد ﻗﻠﻴﻞ ﻟﻦ ﻳﻜﻮن آﺎﻓﻲ ﻟﻠﻤﺘﺴﻠﺴﻠﻪ‬

‫ﻟﺬﻟﻚ ﻧﺴﺘﺨﺪم ﻣﺎﻳﺴﻤﻰ ﻣﻮﻟﺪ اﻟﻤﺘﺴﻠﺴﻼت ‪sequence generator‬‬

‫اﺳﺘﺨﺪام اﻟﻤﺘﺴﻠﺴﻼت‬ ‫‪-9‬‬


‫اذا اردﻧﺎ اﺿﺎﻓﺔ ﻗﻴﻤﻪ ﺟﺪﻳﺪة اﻟﻰ ﻣﺘﺴﻠﺴﻠﺔ ﺗﺴﺘﺨﺪم‬

‫‪Table_name.NEXTVAL‬‬ ‫‪-10‬‬

‫واذا اردﻧﺎ اﻟﻘﻴﻤﺔ اﻟﺤﺎﻟﻴﻪ ﻧﺴﺘﺨﺪم‬

‫‪Table_name.CURRVAL‬‬

‫وﻟﻨﺄﺧﺬ هﺬا اﻟﻤﺜﺎل‬

‫)‪INSERT INTO s_dept(id, name, region_id‬‬


‫;)‪VALUES (s_dept_id.NEXTVAL, ‘Finance’, 2‬‬

‫ﺣﻴﺚ ﻗﻤﻨﺎ ﺑﺈﺿﺎﻓﺔ ﻗﻴﻤﻪ ﺟﺪﻳﺪة اﻟﻰ اﻟﻤﺘﺴﻠﺴﻠﺔ ﻓﻲ ﺧﺎﻧﺔ ‪ id‬ﺛﻢ ﻗﻤﻨﺎ ﺑﺎﺿﺎﻓﺔ‬
‫‪ finance‬اﻟﻰ ﺧﺎﻧﺔ ‪ name‬و ‪ 2‬ﻓﻲ ﺧﺎﻧﺔ ‪region_id‬‬

‫واذا اردﻧﺎ اﻟﻘﻴﻤﺔ اﻟﺤﺎﻟﻴﺔ ﻧﺴﺘﺨﺪم‬

‫‪SELECT s_dept_id.CURRVAL‬‬
‫;‪FROM SYS.dual‬‬
‫ﻣﻼﺣﻈﺔ‬
‫ﻟﻜﻦ ﺗﻮﺟﺪ ﺛﻐﺮات ﻓﻲ اﻟﻤﺘﺴﻠﺴﻼت‬
‫‪ -1‬اذا ﺗﻢ ﻧﻘﻞ ﺳﺠﻞ ﻣﻦ ﻣﻜﺎن اﻟﻰ اﺧﺮ ﻓﺈاﻧﻪ ﻳﺤﺪث ﺧﻠﻞ ﻓﻲ اﻟﻤﺘﺴﻠﺴﻠﺔ‬
‫‪ -2‬اﻟﻤﺘﺴﻠﺴﻠﺔ ﻳﻤﻜﻦ أن ﻧﺘﺴﺘﺨﺪم ﻓﻲ اآﺜﺮ ﻣﻦ ﺟﺪول‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪92 http://www.boosla.com‬‬

‫ﺗﻌﺪﻳﻞ ﻣﺘﺴﻠﺴﻠﺔ‬

‫ﻳﻤﻜﻦ ﺗﻌﺪﻳﻞ ﻣﻘﺪار اﻟﺰﻳﺎدﻩ أو اﻟﻘﻴﻤﻪ اﻻﺑﺘﺪاﺋﻴﺔ ﻟﻠﻤﺘﺴﻠﺴﻠﻪ وﻧﺤﺪﻳﺪ اآﺒﺮ وﻗﻴﻤﻪ وادﻧﻰ ﻗﻴﻤﻪ أو ﺗﻐﻴﺒﺮ‬
‫ﺧﻴﺎر اﻟﺘﻜﺮاراو اﻟﺬاآﺮﻩ ﻋﻦ ﻃﺮﻳﻖ اﻻﻣﺮ ‪ALTER‬‬

‫اﻟﺼﻴﻐﻪ اﻟﻌﺎﻣﻪ‬

‫‪ALTER SEQUENCE sequence‬‬


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

‫وﻟﻜﻦ ﺗﻮﺟﺪ ﻗﻮاﻋﺪ ﻟﻬﺬا اﻟﺘﻐﻴﻴﺮ‬

‫ﻳﺠﺐ أن ﺗﻜﻮن ﻟﻚ اﻟﺴﻤﺎﺣﻴﺔ ﻟﺘﻌﺪﻳﻞ هﺬﻩ اﻟﻤﺘﺴﻠﺴﻠﻪ‬ ‫‪-1‬‬


‫ﺳﻴﺘﻢ ﺗﻄﺒﻴﻖ اﻟﺘﻐﻴﻴﺮ اﻟﺤﺎدث ﻋﻠﻰ اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪﻩ‬ ‫‪-2‬‬
‫اذا اردت ان ﻳﺘﻢ اﻟﺘﻐﻴﻴﺮ ﻋﻠﻰ ﺟﻤﻴﻊ اﻟﻤﺘﺴﻠﺴﻠﺔ ﻳﺠﺐ أـﻦ ﻧﻘﻮم ﺑﻤﺴﺤﻬﺎ اوﻻ ﺛﻢ‬ ‫‪-3‬‬
‫اﻋﺎدة اﻧﺸﺎﺋﻬﺎ‬

‫ﺣﺬف ﻣﺘﺴﻠﺴﻠﺔ‬

‫ﻳﺘﻢ ﺣﺬف ﻣﺘﺴﻠﺴﻠﺔ ﻋﻦ ﻃﺮﻳﻖ اﻷﻣﺮ ‪DROP‬‬

‫ﻣﺜﺎل‬

‫;‪DROP SEQUENCE s_dept_id‬‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪93 http://www.boosla.com‬‬

‫اﻟﻔﻬﺮﺳﺔ‬

‫اﻟﻔﻬﺮﺳﺔ ﻋﺒﺎرة ﻋﻦ وﺳﺒﻠﺔ ﻣﺼﻤﻤﻪ ﻟﺘﺴﻬﻴﻞ اﻟﺤﺼﻮل ﻋﻠﻰ اﻟﺒﻴﺎﻧﺎت ﺑﺴﺮﻋﻪ ﻣﻦ اﻟﺠﺪاول ﻣﺜﻞ‬
‫اﻟﻔﻬﺮس اﻟﻤﻮﺟﻮد ﺑﺄي آﺘﺎب ﻓﻌﻨﺪﻣﺎ ﻧﺮﻳﺪ اﻟﻮﺻﻮل اﻟﻰ ﻣﻌﻠﻮﻣﺔ ﺑﺴﺮﻋﺔ ﻧﻨﻈﺮ اﻟﻰ اﻟﻔﻬﺮس اوﻻ‬
‫وآﺬﻟﻚ هﻮ اﻟﺤﺎل ﻓﻲ اﻷوراآﻞ ﻓﻌﻨﺪﻣﺎ ﻧﻘﻮم ﺑﻔﻬﺮﺳﺔ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺒﻴﺎﻧﺎت ﻓﺎﻧﻨﺎ ﻧﺴﺘﻄﻴﻊ اﻟﻰ اﺣﺪ‬
‫هﺬﻩ اﻟﺒﻴﺎﻧﺎت ﺑﺴﺮﻋﻪ وﻳﺘﻢ آﺬﻟﻚ اﻟﻴﺤﺚ ﺑﻴﻦ اﻟﺠﺪاول ﺑﺴﺮﻋﻪ وم ﻣﻤﻴﺰات اﻟﻔﻬﺮﺳﻪ آﺬﻟﻚ اﻧﻬﺎ ﺗﻘﻠﻞ‬
‫ﻋﺪد اﻟﺒﻴﺎﻧﺎت اﻟﻤﻨﺘﻘﻠﻪ ﺧﻼل وﺳﺎﺋﻞ اﻻﺧﺮاج واﻻدﺧﺎل‬
‫ﻣﻦ اﻟﻀﺮوري اﺣﻴﺎﻧﺎ ﺗﺮﻗﻴﻢ اﻟﺤﻘﻮل ﺗﺮﻗﻴﻢ ﺗﻠﻘﺎﺋﻲ ﻣﺜﻞ ارﻗﺎم اﻟﻤﻨﺎﻃﻖ او ارﻗﺎم اﻟﺴﻠﻊ ﺑﺪﻻ ﻣﻦ‬
‫اﻟﺘﺮﻗﻴﻢ اﻟﻌﺎدي‬

‫آﻴﻒ ﺗﺘﻢ اﻟﻔﻬﺮﺳﺔ ؟‬

‫اﻟﻔﻬﺮﺳﻪ اﻟﺘﻠﻘﺎﺋﻴﺔ‬

‫ﻋﻨﺪﻣﺎ ﻧﻘﻮم ﺑﺘﻌﺮﻳﻒ ﺣﻘﻞ ﻋﻠﻰ اﻧﻪ ﻣﻔﺘﺎح أﺳﺎﺳﻲ أو اذا ﺟﻌﻠﻨﺎﻩ ﺣﻘﻞ ﻓﺮﻳﺪ ﻓﺎﻧﻪ ﺗﻠﻘﺎﺋﻴﺎ ﻳﻔﻬﺮس‬

‫اﻟﻔﻬﺮﺳﺔ اﻟﻌﺎدﻳﺔ‬

‫ﻳﻤﻜﻦ أن ﻧﻘﻮم ﺑﻔﻬﺮﺳﺔ ﺑﻴﺎﻧﺎت ﻏﻴﺮ ﻓﺮﻳﺪة ﻟﺘﺴﻬﻴﻞ اﻟﻮﺻﻮل اﻟﻴﻬﺎ‬

‫أﻧﻮاع اﻟﻔﻬﺮﺳﺔ‬

‫ﺗﻮﺟﺪ ﻋﺪة أﻧﻮاع ﻟﻠﻔﻬﺮﺳﻪ ﻳﺚ ﻳﻤﻜﻦ ﻓﻬﺮﺳﺔ ﺣﻘﻞ )ﻋﻤﻮد( واﺣﺪ او ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷﻋﻤﺪة ﻣﻨﻬﺎ‬

‫اﻟﻔﻬﺮﺳﺔ اﻟﻔﺮﻳﺪة ‪unique index‬‬


‫هﻲ ﻋﺒﺎرة ﻋﻦ ﻗﻴﻢ ﻣﻔﻬﺮﺳﺔ وﻟﻜﻦ ﺑﺘﻘﻴﻴﺪ ﺣﻴﺚ ان آﻞ ﻗﻴﻤﺔ ﻻ ﺗﺘﻜﺮر اﻻ ﻣﺮة واﺣﺪة‬

‫اﻟﻔﻬﺮﺳﺔ اﻟﻐﻴﺮ ﻓﺮﻳﺪة ‪nonunique index‬‬


‫هﻲ ﻋﺒﺎرة ﻋﻦ ﻗﻴﻢ ﻣﻔﻬﺮﺳﺔ وﻟﻜﻦ ﺑﺪون أي ﺗﻘﻴﻴﺪ‬

‫اﻟﻔﻬﺮﺳﺔ اﻟﻤﺮآﺒﺔ ‪composite index‬‬


‫ﺣﻴﺚ ﻳﺘﻢ ﻓﻬﺮﺳﺔ ﻋﺪة اﻋﻤﺪة ﺣﻴﺚ أن آﻞ ﻋﻤﻮد ﻟﻪ ﻗﻴﻢ ﻣﺨﺘﻠﻔﺔ‬

‫وﺗﺴﺘﺨﺪم اﻟﻔﻬﺮﺳﺔ اﻟﻤﺮآﺒﻪ ﻋﻨﺪﻣﺎ ﺗﻌﻮد ﺟﻤﻠﺔ ‪ SELECT‬ﺑﻌﺪة ﻗﻴﻢ ﻓﻴﺘﻢ ﺗﺮﺗﻴﺒﻬﺎ ﻋﻦ ﻃﺮﻳﻖ‬
‫اﺳﺘﺨﺪام اﻟﻔﻬﺮﺳﺔ اﻟﻤﺮآﺒﺔ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪94 http://www.boosla.com‬‬

‫آﻴﻒ ﻳﻘﻮم اﻻوراآﻞ ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻔﻬﺮﺳﺔ‬

‫ﻋﻨﺪﻣﺎ ﻧﻘﻮم ﺑﻔﻬﺮﺳﺔ ﺣﻘﻞ ﻓﺈن اﻻوراآﻞ ﻳﻘﻮم ﺑﺘﻜﻮﻳﻦ ﻣﺎﻳﺴﻤﻰ ‪ index segment‬ﺑﺘﻢ ﻓﻴﻬﺎ ﺗﺨﺰﻳﻦ‬
‫ﻣﻌﻠﻮﻣﺎت ﺧﺎﺻﺔ ﺑﺎﻟﻔﻬﺮﺳﺔ واﻟﺘﻲ ﺗﺴﺮع اﻟﻮﺻﻮل اﻟﻰ اﻟﺒﻴﺎﻧﺎت ﺣﻴﺚ أن هﺬﻩ اﻟﻤﻌﻠﻮﻣﺎت ﺗﻮﺿﺢ‬
‫أﻣﺎآﻦ اﻟﺴﺠﻼت وﺗﻮﺿﺢ أﻗﺼﺮ اﻟﻄﺮق ﻟﻠﻮﺻﻮل اﻟﻴﻬﺎ ﻋﻦ ﻃﺮﻳﻖ وﺳﺎﺋﻞ اﻻﺧﺮج واﻻدﺧﺎل‬

‫واﻟﻤﺼﻄﻠﺢ اﻟﺬي ﺗﻌﺘﻤﺪ ﻋﻠﻴﻪ اﻟﻔﻬﺮﺳﺔ ﻳﺴﻤﻰ ‪ B*-tree index‬هﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺤﻄﻂ ﺷﺠﺮي‬
‫ﻟﻤﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻘﻴﻢ ﻣﺮﺗﺒﺔ ﺗﻨﺎزﻟﻴﺎ ﺣﻴﺚ آﻠﻤﺎ ﻧﻨﺘﻘﻞ اﻟﻰ ﻗﻴﻤﺔ ﺗﺎﻟﻴﻪ ﻳﺘﻢ ﻣﻘﺎرﻧﺘﻬﺎ ﻣﻊ آﺘﻠﺔ اﻟﻘﻴﻢ اﻟﺘﻲ‬
‫ﺗﻌﻠﻮهﺎ وﺗﺴﻤﻰ هﺬﻩ اﻟﻜﺘﻞ ‪ branch blocks‬وﻧﺎﺗﺞ هﺬﻩ اﻟﻤﻘﺎرﻧﻪ ﻳﺘﻢ ﻣﻘﺎرﻧﺘﻪ ﻣﻊ آﺘﻞ اﺧﺮى إﻟﻰ‬
‫أدﻧﻰ درﺟﺔ ﻓﻲ هﺬﻩ اﻟﻜﺘﻞ وﻳﺴﻤﻰ ‪ leaf blocks‬ﺣﺒﺚ ﺗﺤﺘﻮي هﺬﻩ اﻟﻜﺘﻠﺔ ﻋﻠﻰ آﻞ اﻟﺒﻴﺎﻧﺎت‬
‫اﻟﻤﻔﻬﺮﺳﻪ وﻳﻮﺟﺪ ﻣﺎ ﻳﺴﻤﻰ ‪ ROWID‬ﻟﻬﺬﻩ اﻟﺒﻴﺎﻧﺎت‬

‫اذا آﺎﻧﺖ اﻟﺒﻴﺎﻧﺎت ﻓﺮدﻳﺔ ﻓﺈﻧﻪ ﻳﻮﺟﺪ ‪ ROWID‬ﻟﻜﻞ ﻗﻴﻤﺔ وﻟﻜﻦ اذا ﻟﻤﺖ ﺗﻜﻦ ﻓﺮدﻳﺔ ﻓﺎﻧﻪ ﻳﻤﻜﻦ ان‬
‫ﻳﺘﻮاﺟﺪ أآﺜﺮ ﻣﻦ ‪ ROWID‬وﻓﻲ هﺬﻩ اﻟﺤﺎﻟﺔ ﻳﺘﻢ ﺗﺮﺗﻴﺒﻬﺎ اﻟﺒﻴﺎﻧﺎت ﺣﺴﺐ ﻣﻔﺘﺎح اﻟﻔﻬﺮﺳﻪ ﺛﻢ ﺣﺴﺐ‬
‫‪ROWID‬‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫;)‪CREATE INDEX indexON table (column[, column]...‬‬

‫ﺣﻴﺚ أن‬

‫‪ Index‬اﺳﻢ اﻟﻔﻬﺮس‬
‫‪ Table‬اﺳﻢ اﻟﺠﺪول‬
‫اﺳﻦ اﻟﺤﻘﻞ اﻟﻤﺮاد ﻓﻬﺮﺳﺘﺔ‬ ‫‪Column‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪95 http://www.boosla.com‬‬

‫ﻣﺜﺎل‬

‫‪CREATE INDEX‬‬ ‫‪s_emp_last_name_idx‬‬


‫‪ON‬‬ ‫;)‪s_emp(last_name‬‬

‫ﻋﻨﺪ اﻟﻔﻬﺮﺳﺔ ﻳﺠﺐ ﻣﺮاﻋﺎة ﻣﺎﻳﻠﻲ‬

‫ﻻ ﻧﻔﻬﺮس اﻟﺠﺪاول اﻟﺘﻲ اﺳﺘﻌﻠﻢ ﻋﻨﻬﺎ ﺑﻌﺪد آﺒﻴﺮ ﻣﻦ اﻟﺼﻔﻮف ﻳﺚ ﻧﺴﺘﺨﺪم‬ ‫‪-1‬‬
‫اﻟﻔﻬﺮﺳﻪ ﻋﻨﺪﻣﺎ ﻳﻜﻮن اﻻﺳﺘﻌﻼم ﻻ ﻳﺘﺠﺎوز ‪ % 5‬ﻣﻦ اﻟﺠﺪول‬
‫ﻻ ﻧﻔﻬﺮس اﻟﺤﻘﻮل اﻟﺘﻲ ﻳﻨﻢ اﻟﺘﻌﺪﻳﻞ ﻗﻴﻬﺎ ﺑﺎﺳﺘﻤﺮار‬ ‫‪-2‬‬
‫ﻻ ﻧﻔﻬﺮس اﻟﺠﺪاول اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ ﻗﻴﻢ ﻣﺘﻜﺮرة ﺑﻜﺜﺮة‬ ‫‪-3‬‬
‫ﻧﻔﻬﺮس اﻟﺤﻘﻮل اﻟﺘﻲ ﻳﻜﻮن اﻻﺳﺘﻌﻼم ﻋﻨﻬﺎ ﺳﻬﻞ ﻋﺎﻟﺒﺎ ﻓﻼ ﻧﺴﺘﺨﺪم اﻟﻔﻬﺮﺳﻪ ﻣﻊ‬ ‫‪-4‬‬
‫اﺳﺘﻌﻼﻣﺎت ﺷﺮوﻃﻬﺎ ﻣﻌﻘﺪة‬
‫ﻻ ﻧﻔﻬﺮس ﻏﺎﻟﺒﺎ اﻟﺤﻘﻮل اﻟﺘﻲ ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ ﻗﻴﻢ ﻓﺮﻳﺪة‬ ‫‪-5‬‬
‫ﻧﻔﻬﺮس اﻟﺤﻘﻮل اﻟﺘﻲ ﺗﻌﺘﺒﺮ ﺣﻘﻮل راﺑﻄﻪ ﺑﻴﻦ ﺟﺪول واﺧﺮ‬ ‫‪-6‬‬

‫ﺣﺬف اﻟﻔﻬﺮﺳﺔ‬

‫ﻟﺤﺬف اﻟﻔﻬﺮﺳﺔ ﻧﺴﺘﺨﺪم اﻷﻣﺮ ‪DROP INDEX‬‬

‫ﻣﺜﺎل‬

‫;‪DROP INDEX s_emp_last_name_idx‬‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪96 http://www.boosla.com‬‬

‫اﻟﻌﺮوض‬

‫اﻟﻌﺮض ﻋﺒﺎرة ﻋﻦ اﺳﺘﻌﻼم ﻣﻦ ﺟﺪول واﺣﺪ أو اآﺜﺮ ﺣﻴﺚ ﻳﻌﺘﺒﺮ ﺟﺪول وهﻤﻲ ﻳﺤﺘﻮي‬
‫ﻋﻠﻰ اﻟﺒﻴﺎﻧﺎت اﻟﺘﻲ ﻳﺄﺧﺬهﺎ ﻣﻦ ﺟﻤﻠﺔ ‪ SELECT‬وﻟﻜﻦ ﺣﻘﻴﻘﺔ ان هﺬا اﻟﺠﺪول ﻏﻴﺮ ﻣﻮﺟﻮد‬

‫وﻳﻤﻜﻦ اﺳﺘﺨﺪم اﻟﻌﻼض ﻓﻲ ﻋﺪة ﻣﻬﺎم ﻣﻨﻬﺎ ‪:‬‬

‫ﻳﺤﺎﻓﻆ ﻋﻠﻰ اﻟﺘﺤﻜﻢ ﻓﻲ ﻣﺴﺘﻮي اﻻﻣﺎن‬ ‫•‬


‫اﺧﻔﺎء ﺗﻌﻘﻴﺪ اﻟﺒﻴﻨﺎﺗﺎ ﻋﻦ اﻟﻤﺴﺘﺨﺪم‬ ‫•‬
‫اﻋﺎدة ﺗﺴﻤﻴﺔ اﻷﻋﻤﺪة‬ ‫•‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫‪CREATE VIEW view-name‬‬


‫)‪(column1,...,columnN‬‬
‫‪AS‬‬
‫‪select-statement‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻟﻌﺮض‬ ‫‪view-name‬‬


‫‪ Column1‬اﺳﻢ اﻟﺤﻘﻮل اﻟﺘﻲ ﺳﺘﻢ ﻋﺮﺿﻬﺎ‬

‫ﻣﺜﺎل‬

‫‪CREATE VIEW empvu45‬‬


‫‪AS SELECT id, last_name, title‬‬
‫‪FROM s_emp‬‬
‫;‪WHERE dept_id = 45‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪97 http://www.boosla.com‬‬

‫وﻳﻤﻜﻨﻚ ﻣﺸﺎهﺪة اﻟﻤﻌﻠﻮﻣﺎت اﻟﺨﺎﺻﺔ ﺑﻬﺬا اﻟﻌﺮض ﻋﻦ ﻃﺮﻳﻖ اﻻﻣﺮ ‪ DESCRIBE‬ﻓﻨﻜﺘﺐ‬

‫;‪DESC empvu45‬‬

‫اﻟﺘﺤﻜﻢ ﻓﻲ ﻣﺴﺘﻮى اﻷﻣﺎن‬

‫ﻧﺤﺘﺎج اﺣﻴﺎﻧﺎ اﻟﻰ أن ﻧﺠﻌﻞ ﺑﻌﺾ اﻟﺠﺪاول او اﻟﻌﺮوض ﻣﺴﻤﻮﺣﺔ ﻟﻤﺴﻨﺨﺪﻣﻴﻦ ﻣﻌﻴﻨﻲ آﻤﺪراء‬
‫اﻟﺸﺒﻜﺔ ﻓﻠﺬﻟﻚ ﻧﻘﻮم ﺑﺎﺿﺎﻓﺔ ﺣﻘﻞ ﺟﺪﻳﺪ وﻧﻔﻴﺪﻩ ﺑـ ‪ CHECK‬ﺣﺒﺚ اذا آﺎن اﻟﻤﺴﺘﺨﺪم ﻣﺪﻳﺮ ﻳﻌﻄﻲ ‪Y‬‬
‫واذا ﻟﻢ ﻳﻜﻦ ﻳﻌﻄﻲ ‪ N‬وﻟﻌﻤﻞ ذﻟﻚ ﻧﻘﻮم ﺑﻌﺪة ﺧﻄﻮات‬

‫اوﻻ‬
‫‪alter table S_EMP‬‬
‫‪add‬‬
‫;)))'‪(Manager char(1) check (Manager in ('Y','N‬‬

‫ﺛﺎﻧﻴﺎ‬

‫‪update S_EMP‬‬
‫'‪set Manager = 'N‬‬
‫‪where‬‬
‫;‪ID != 1001‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪98 http://www.boosla.com‬‬

‫ﺛﺎﻟﺜﺎ‬

‫‪update S_EMP‬‬
‫'‪set Manager = 'Y‬‬
‫‪where‬‬
‫;‪ID = 1001‬‬

‫ﻓﻲ اﺧﺮ ﺧﻄﻮﺗﻴﻦ ﻗﻤﻨﺎ ﺑﺘﺤﺪﻳﺪ ﺷﺮط وهﻮ ﻓﻲ ﺣﺎﻟﺔ اذاآﺎن رﻗﻢ اﻟﻤﻮﻇﻒ ‪ 1001‬ﻓﺎﻧﻪ هﻮ اﻟﻤﺪﻳﺮ ﻟﺬﻟﻚ‬
‫ﻓﻲ ﺣﻘﻞ ‪ Manager‬ﻳﻌﻄﻲ ‪ Y‬وﻏﻴﺮ ذﻟﻚ ﻳﻌﻄﻲ ‪N‬‬

‫راﺑﻌﺎ‬

‫ﻓﻲ هﺬﻩ اﻟﺨﻄﻮة واﻟﺘﻲ ﺗﻠﻴﻬﺎ ﺳﻨﻘﻮم ﺑﺈﺿﺎﻓﺔ ﺣﻘﻞ ﻻﺳﻢ ﻣﺴﺘﺨﺪم ﺣﻴﺚ اﺳﻢ اﻟﻤﺴﺘﺨﺪم ﺳﻴﻜﻮن ﻋﺒﺎرة‬
‫ﻋﻦ اول ﺣﺮف ﻣﻦ اﻻﺳﻢ اﻷول ﻟﻠﻤﻮﻇﻒ ﺑﺎﻻﺿﺎﻓﺔ اﻟﻰ اﺳﻤﻪ اﻻﺧﻴﺮ‬

‫‪alter table S_EMP‬‬


‫‪add‬‬
‫;))‪(username varchar2(31‬‬

‫ﺧﺎﻣﺴﺎ‬

‫‪update S_EMP‬‬
‫|| )‪set username = substr(first_name,1,1‬‬
‫;‪last_name‬‬

‫ﺳﺎدﺳﺎ‬

‫اﻻن ﺳﻨﻘﻮم ﺑﻌﻤﻞ ﻋﺮض اﺳﻤﻪ ‪ Re_SALARY‬ﻣﺮﺑﻮط ﺑﺎﻟﺠﺪول ‪S_EMP‬‬

‫‪create view Re_SALARY as‬‬


‫‪select e.id, e.last_name, e.first_name,‬‬
‫‪decode(s.manager,'Y',e.salary,null) salary‬‬
‫‪from S_EMP e, S_EMP s‬‬
‫‪where‬‬
‫;)‪user = s.username(+‬‬

‫‪ user‬ﺗﻌﺔد ﺑﺎﺳﻢ اﻟﻤﺴﺘﺨﺪم ﻟﻘﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اﻟﺤﺎﻟﻲ ﻟﺬﻟﻚ ﻗﻴﻤﺔ هﺬا اﻟﻤﺘﻐﻴﺴﺮ ﺗﻌﺘﻤﺪ ﻋﻠﻰ اﻟﻤﺴﺘﺨﺪم‬
‫اﻟﺤﺎﻟﻲ ﻟﻠﻘﺎﻋﺪة ﺣﻴﺚ ﻗﻤﻨﺎ ﺑﻌﻤﻞ ﻋﻤﻠﻴﺔ رﺑﻂ ﺧﺎرﺟﻲ ‪ outer-join‬ﺷﺮﻃﻬﺎ أﻧﻪ اذا آﺎن اﻟﻤﺴﺘﺨﺪم‬
‫اﻟﺤﺎﻟﻲ ﻟﻘﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اﺳﻤﻪ ﻣﻮﺟﻮد ﻓﻲ ﺣﻘﻞ اﺳﻤﺎء اﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﻓﻲ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ ﻓﺎﻧﻪ ﻳﻌﻮد‬
‫ﺑﻘﻴﻤﺔ ﻓﻲ ﺣﻘﻞ ‪ Manager‬اﻣﺎ ‪ Y‬او ‪ N‬آﻤﺎ ﻗﻠﻨﺎ ﺣﺴﺐ رﻗﻢ اﻟﻤﻮﻇﻒ واﻟﺪاﻟﺔ ‪ Decode‬ﺗﻘﻮم‬
‫ﻣﺸﺎهﺪة ﻗﻴﻤﺔ ‪ Manager‬اذا آﺎﻧﺖ ‪ Y‬ﻓﺈن اﻟﻤﺴﺘﺨﺪم ﻣﺪﻳﺮ وﺑﺘﻢ ﻋﺮض ﺣﻘﻞ اﻟﻤﺮﺗﺐ واذا آﺎﻧﺖ ‪N‬‬
‫ﻻ ﻳﺘﻢ ﻋﺮض ﺣﻘﻞ اﻟﻤﺮﺗﺐ‬
99 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

‫ هﻮ اﻟﻤﺪﻳﺮ ﻓﺎذا ﻗﺎم ﺑﻜﺘﺎﺑﺔ اﻻﺳﺘﻌﻼم‬Ahmed‫ﻓﻠﻨﻔﺮض أن‬

select *
from Re_Salary;

‫ﻓﺎن اﻟﻤﺨﺮﺟﺎت ﺳﺘﻜﻮن‬

ID LAST_NAME FIRST_NAME SALARY


----------- ------------------------------ ------
1001 AHMED AHMED 1500
1002 HERNANDEZ RANDY 3000
1003 EASON PAUL 1500
1004 BARRETT SARAH 1500
1005 HIGGINS BEN 3000
1006 YEN CINDY 1500
1007 GILROY MAX 1500
1008 CARSON BETH 3000
1009 SWANSON HARRY 2500

: ‫ ﺑﺎﻻﺳﺘﻌﻼم ﻓﺈن اﻟﻤﺨﺮﺟﺎت‬MAX ‫وﻟﻜﻦ اذا ﻗﺎم‬

ID LAST_NAME FIRST_NAME SALARY


----------- ------------------------------ ------
1001 AHMED AHMED
1002 HERNANDEZ RANDY
1003 EASON PAUL
1004 BARRETT SARAH
1005 HIGGINS BEN
1006 YEN CINDY
1007 GILROY MAX
1008 CARSON BETH
1009 SWANSON HARRY
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪100 http://www.boosla.com‬‬

‫ﺗﻌﺪﻳﻞ اﻟﻌﺮض‬

‫ﻳﺘﻢ اﻟﺘﻌﺪﻳﻞ ﻓﻲ اﻟﻌﺮض ﻋﻦ ﻃﺮﻳﻖ اﻻﻣﺮ‬

‫‪11- CREATE OR REPLACE‬‬

‫ﻣﺜﺎل‬

‫‪CREATE OR REPLACE VIEW empvu45‬‬


‫)‪(id_number, employee, job‬‬
‫‪AS SELECT id, last_name, title‬‬
‫‪FROM s_emp‬‬
‫;‪WHERE dept_id = 45‬‬

‫اﻟﻌﺮض ﻣﻦ ﻋﺮض اﺧﺮ‬

‫ﻳﻤﻜﻦ أن ﻧﻘﻮم ﺑﻌﻤﻞ ﻋﺮض ﻣﻦ ﻋﺮض اﺧﺮ‬

‫ﻣﺜﺎل‬

‫‪create view EMBVY45‬‬


‫‪as‬‬
‫‪select ID, Last_Name, First_Name,‬‬
‫‪Middle_Initial,HireDate,‬‬
‫;‪from S_EMP‬‬

‫ﺣﺬف ﻋﺮض‬

‫ﻻﻟﻐﺎء ﻋﺮض ﻧﺴﺘﺨﺪم اﻻﻣﺮ ‪DROP‬‬

‫;‪DROP VIEW empvu45‬‬

‫ﻣﻠﺨﺺ اﻟﻔﺼﻞ‬

‫ﺗﻨﺎوﻟﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ آﻴﻔﻴﺔ ﺗﻜﻮﻳﻦ اﻟﻤﺘﺴﻠﺴﻼت وﻧﻌﺪﺑﻠﻬﺎ وﻃﺮﻳﻘﺔ ﺣﺬﻓﻬﺎ ﺛﻢ ﺗﻄﺮﻗﻨﺎ اﻟﻰ اﻟﻔﻬﺮﺳﺔ‬
‫وﻓﻮاﺋﺪهﺎ واﻧﻮاﻋﻬﺎ وآﻴﻔﻴﺔ ﻋﻤﻠﻬﺎ وﺗﻌﺪﻳﻠﻬﺎ وآﺬﻟﻚ اﻟﻐﺎﺋﻬﺎ وﻓﻲ اﺧﺮ اﻟﻔﺼﻞ ﺗﻄﺮﻗﻨﺎ اﻟﻰ اﻟﻌﺮوض‬
‫ﻣﻔﻬﻮﻣﻬﺎ وﻓﻮاﺋﺪهﺎ واﻓﻜﺎرهﺎ وآﻴﻔﻴﺔ ﺗﻌﺪﻳﻠﻬﺎ واﻟﻐﺎﺋﻬﺎ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪101 http://www.boosla.com‬‬

‫ﻧﺒﺬﻩ ‪pl/sql‬‬

‫أهﺪاف اﻟﻔﺼﻞ‪.‬‬
‫‪ -1‬اﻟﺘﻌﺮف ﻋﻠﻰ ‪PL/SQL‬‬
‫‪ -2‬اﺳﺘﺨﺪام ﻗﺎﻋﺪة ‪IF.‬‬
‫‪ -3‬اﺳﺘﺨﺪام اﻟﺘﻜﺮار‬
‫‪-4‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪102 http://www.boosla.com‬‬

‫اﻟﺘﻌﺮف ﻋﻠﻰ ‪PL/SQL‬‬


‫هﻲ ﻋﺒﺎرة ﻋﻦ آﺘﻞ ﺑﺮﻣﺠﻴﺔ ﺗﺸﻴﻪ ﻓﻲ ﻓﻲ ﻃﺮﻳﻘﺔ آﺘﺎﺑﺘﻬﺎ ﻟﻐﺔ ‪ C‬ﺑﺎﻹﺿﺎﻓﺔ ﻟﺪﻋﻤﻬﺎ ‪ SQL‬وﺗﺤﺘﻮي‬
‫هﺬﻩ اﻟﻠﻐﺔ ﻋﻠﻰ اﺟﺮاءات ﺧﺎﺻﺔ ﺑﻬﺎ واوﻣﺮ ﻣﺜﻞ ‪ IF‬وﻏﻴﺮهﺎ وآﺬﻟﻚ دوال وآﺘﻞ ﺑﺮﻣﺠﻴﺔ ﻣﺠﻬﻮﻟﺔ‬
‫وهﻲ اﻟﺘﻲ ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ اوﻣﺮ و ﻻ ﺗﻌﻮد ﺑﻘﻴﻤﺔ‬
‫وﻳﻤﻜﻦ ﺗﻤﺜﻴﻞ ﺑﻨﻴﺔ اﻟﺒﺮﻧﺎﻣﺞ ﻓﻲ ‪ PL/SQL‬ﻓﻲ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ‬

‫ﺑﺮاﻣﺞ ‪ pl/sql‬ﺗﺘﻢ آﺘﺎﺑﺘﻬﺎ ﻓﻲ آﺘﻞ ﻣﻦ اواﻣﺮ اﻟﺒﺮﻣﺠﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﻣﻘﺎﻃﻊ ﻣﻨﻔﺼﻠﺔ ﻟﻼﻋﻼن ﻋﻦ‬
‫اﻟﻤﺘﻐﻴﺮات واواﻣﺮ اﻟﺒﺮاﻣﺞ وﻣﻌﺎﻟﺠﺔ اﻻﺳﺘﺜﻨﺎءت)اﻻﺧﻄﺎء( ‪.‬‬
‫وﻣﻦ اﻟﻤﻤﻜﻦ ﺗﺨﺰﺑﻦ اﻻﺟﺮاء ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت آﺒﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﻟﻪ اﺳﻢ ﻣﺤﺪد او آﺘﺎﺑﺘﻬﺎ ﻣﺒﺎﺷﺮة‬
‫ﻓﻲ ‪ sql * plus‬آﻜﺘﻠﻪ ﻣﺠﻬﻮﻟﺔ‪.‬‬

‫وآﺘﻠﺔ اﻟﺒﺮﻧﺎﻣﺞ آﻤﺎﻳﻠﻲ‪:‬‬

‫ﺳﻨﺒﺪا اوﻻ آﺘﺎﺑﺔ اﻻﺟﺮاء ﻣﺒﺎﺷﺮة ﻓﻲ ‪ sql * plus‬وهﻲ آﻤﺎﻳﻠﻲ‪:‬‬

‫‪DECLARE‬‬
‫هﻨﺎ ﺗﻮﺟﺪ ﺗﻌﺮﻳﻔﺎت اﳌﺘﻐﲑات واﳌﻮﺷﺮات‬
‫‪BEGIN‬‬
‫ﺟﺴﻢ اﻟﱪﻧﺎﻣﺞ‬

‫‪EXCEPTION‬‬
‫رﻣﻮز ﻣﻌﺎﳉﺔ اﻻﺧﻄﺎء‬
‫‪END:‬‬

‫ﻣﻊ ﻣﻼﺣﻈﺔ ﻣﺎﻳﻠﻲ‪:‬‬

‫ان ﻗﺴﻢ ‪ declare‬وﻗﺴﻢ ‪ exception‬هﻤﺎ اﺧﺘﻴﺎرﻳﻦ اي ﻻﻳﺸﺘﺮط وﺟﻮدهﻤﺎ‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪103 http://www.boosla.com‬‬

‫اي اذا آﺎن ﻻﻳﻮﺟﺪ ﻟﺪﻳﻚ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮات ﻻﺗﺴﺘﺨﺪم ‪ declare‬واذا آﻨﺖ ﻻن ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﻻﺧﻄﺎء‬
‫ﻻﺗﺴﺘﺨﺪم ‪exception‬‬
‫واﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ ﻟﺘﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮات ﻓﻲ ‪declare‬‬

‫]‪identifier [CONSTANT] datatype [NOT NULL‬‬


‫;]‪[:= | DEFAULT expr‬‬
‫ﻏﺎﻟﺒﺎ ﻳﺘﻢ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ واﺣﺪ ﻓﻲ آﻞ ﺳﻄﺮ‬
‫ﻣﺜﺎل‬

‫;)‪v_gender CHAR(1‬‬
‫;‪v_count BINARY_INTEGER := 0‬‬
‫;‪v_total_sal NUMBER(9,2) := 0‬‬
‫;‪v_order_date DATE := SYSDATE + 7‬‬
‫‪c_tax_rate‬‬ ‫;‪CONSTANT NUMBER(3,2) := 8.25‬‬
‫;‪v_valid BOOLEAN NOT NULL := TRUE‬‬
‫‪ SQL‬ﺑﺎﻹﺿﺎﻓﺔ اﻟﻰ اﻟﻤﺘﻐﻴﺮات اﻟﺘﻲ ﺗﻮﺟﺪ ‪PL/SQL‬وﻣﻦ اﻧﻮاع اﻟﻤﺘﻐﻴﺮات اﻟﺘﻲ ﺗﺪﻋﻤﻬﺎ‬

‫اﻟﻤﺘﻐﻴﺮ ‪BINARY_INTEGER‬‬ ‫‪-1‬‬

‫وﺗﺸﻤﻞ اﻷرﻗﺎم اﻟﺼﺤﻴﺤﺔ ﺑﻴﻦ –‪2.147.483.647‬و ‪2.147.483.647‬‬

‫اﻟﻤﺘﻌﻴﺮ ‪PLS_INTEGER‬‬ ‫‪-2‬‬

‫وﺗﺸﻤﻞ اﻷرﻗﺎم اﻟﺼﺤﻴﺤﺔ ﺑﻴﻦ –‪2.147.483.647‬و ‪ 2.147.483.647‬وهﺬا اﻟﻨﻮع ﻻ ﻳﺸﻐﻞ‬


‫ﻣﺴﺎﺣﺔ آﺒﻴﺮة ﻣﻦ اﻟﺬاآﺮ ة وأﺳﺮع ﻣﻦ ‪ BINARY_INTEGER‬و ‪Number‬‬

‫‪NATURAL -3‬‬

‫وﺗﺸﻤﻞ اﻻرﻗﺎم ﻣﻦ ‪ 0‬اﻟﻰ ‪2.147.483.647‬‬

‫‪POSITIVE -4‬‬
‫وﺗﺸﻤﻞ اﻻرﻗﺎم اﻟﻤﻮﺟﺒﺔ ﻓﻘﻂ ﻣﻦ ‪ 1‬اﻟﻰ ‪2.147.483.647‬‬

‫‪BOOLEAN -3‬‬

‫وهﻮ ﻣﺘﻐﻴﺮ ﻳﺤﻤﻞ اﻟﻘﻴﻤﺔ ‪ TRUE‬أو ‪ FALSE‬أو ‪NULL‬‬

‫‪%TYPE-4‬‬

‫ﺻﻤﻢ هﺬا اﻟﻤﺘﻐﻴﺮ ﻟﻴﺤﻤﻞ ﻧﻔﺲ ﺗﻮع اﻟﺒﻴﺎﻧﺎت اﻟﺘﻲ ﻳﺤﻤﻠﻬﺎ ﺣﻘﻞ ﻣﻌﻴﻦ‬

‫‪%ROWTYPE -4‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪104 http://www.boosla.com‬‬

‫ﺻﻤﻢ هﺬا اﻟﻤﺘﻐﻴﺮ ﻟﻴﻜﻮن ﻣﺘﻐﻴﺮ ﻣﺮآﺐ ﻳﺤﻤﻞ ﻧﻔﺲ ﺗﻮع اﻟﺒﻴﺎﻧﺎت اﻟﺘﻲ ﻳﺤﻤﻠﻬﺎ ﺻﻒ ﻣﻌﻴﻦ‬

‫ﻃﺮﻳﻘﺔ ﺗﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮ ﻣﻦ اﻟﻨﻮع ‪%TYPE‬‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫‪variable-name‬‬ ‫;‪table-name.column-name%TYPE‬‬

‫ﻣﺜﺎل‬

‫‪v_last_name‬‬ ‫;‪s_emp.last_name%TYPE‬‬
‫أﻧﻪ ﻣﻦ ﻧﻔﺲ ﻧﻮع اﻟﺤﻘﻞ ‪v_last_name‬ﻓﻲ هﺬا اﻟﺴﻄﺮ ﻧﻘﻮم ﺑﺘﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮ‬
‫‪ last_name‬ﻓﻲ ﺟﺪول ‪ S_EMP‬وﻳﺤﺘﻮي ﻋﻠﻰ ﻧﻔﺲ اﻟﻘﻴﻢ‬

‫ﻃﺮﻳﻘﺔ ﺗﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮ ﻣﻦ اﻟﻨﻮع ‪% ROWTYPE‬‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫‪variable-name‬‬ ‫;‪table-name%ROWTYPE‬‬

‫ﻣﺜﺎل‬

‫‪emp_record‬‬ ‫;‪s_emp%ROWTYPE‬‬
‫اﻟﺬي ﻳﺤﻤﻞ ﻗﻴﻤﺔ ﺻﻒ ﻣﻦ ﺻﻔﻮف اﻟﺠﺪول ‪emp_record‬ﻗﻤﻨﺎ ﺑﺘﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮ اﻟﻤﺮآﺐ‬
‫‪s_emp‬‬

‫ﻃﺮق اﻻﺳﻨﺎد‬

‫ﻣﺜﻞ اذا اردت ان ﺗﻘﻮل ان ﻗﻴﻤﺔ ‪ i=5‬ﻓﻴﺘﻢ ذﻟﻚ آﻤﺎﻳﻠﻲ‪:‬‬

‫;‪i:=5‬‬

‫ﻳﺠﺐ وﺿﻊ اﻟﻨﻘﻄﺘﻴﻦ ﻗﺒﻞ =‬

‫ﺳﻮف ﻧﺎﺧﺬ ﻣﺜﺎل ﻋﻠﻰ ذﻟﻚ‬

‫ﻳﻮﺟﺪ ﺿﻤﻦ اواﻣﺮ ‪ sql‬اﻻﻣﺮ ‪DBMS_OUTPUT.PUT_LINE‬‬


‫ﻳﺴﺘﺨﺪم ﻟﻜﻲ ﺗﻌﺮض اﻟﻨﺘﻴﺠﺔ ﻓﻲ ‪ sql * plus‬وهﻮ أﻣﺮ ﺗﺎﺑﻊ ﻟﻠﺤﺰﻣﺔ ‪DBMS_OUTPUT‬‬
‫ﻓﻬﺬا اﻻﻣﺮ ﻳﻘﻮم ﺑﻌﺮض اﻟﺠﻤﻞ وﻳﻤﻜﻦ أن ﻳﻌﺮض آﺬﻟﻚ اﻟﺘﻮارﻳﺦ واﻻرﻗﺎم واذا اردﻧﺎ ان ﻳﻌﺮض‬
‫اﻧﻮاع ﺑﻴﺎﻧﺎت اﺧﺮى ﻧﺴﺘﺨﺪم اﻻﻣﺮ ‪TO_CHAR‬‬
‫واﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ ﻟﻪ ‪:‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪105 http://www.boosla.com‬‬

‫)‪DBMS_OUTPUT.PUT_LINE(massege‬‬

‫ﺣﻴﺚ‬

‫هﻲ اﻟﻨﺺ او اﻟﺸﻲ اﻟﺬي ﺗﺮﻳﺪ ﻋﺮﺿﺔ‬ ‫‪massage‬‬

‫ﺗﻢ ﺷﺮح هﺬا اﻻﻣﺮ ﻟﻜﻲ ﻧﺒﺪأ ﺑﻪ وﻧﺴﺘﺨﺪﻣﻪ ﻟﻔﻬﻢ اواﻣﺮ ال ‪ pl/sql‬ﻟﻜﻦ ﻓﻲ اﻟﻤﺴﺘﻘﺒﻞ ﺳﻮف ﺗﻌﺮف‬
‫ان هﺬا اﻻﻣﺮ ﻻﻳﻬﻤﻚ آﺜﻴﺮا‬

‫‪.‬ﻣﺜﺎل ‪:‬‬

‫ﻧﺮﻳﺪ ﻃﺒﺎﻋﺔ "‪ "hi all‬ﻋﻠﻰ اﻟﺸﺎﺷﺔ ‪ sql * plus‬ﻳﺘﻢ ذﻟﻚ آﻤﺎﻳﻠﻲ‪:‬‬

‫;‪SET SERVEROUTPUT ON‬‬


‫‪BEGIN‬‬
‫;)'‪DBMS_OUTPUT.PUT_LINE('hi all‬‬
‫;‪End‬‬
‫‪/‬‬
‫ﺟﺮب هﺬا وﻻﺣﻆ اﻟﻨﺘﺎﺋﺞ وﻟﻌﻠﻚ ﺗﺘﺴﺎل ﻋﻦ ﺳﺒﺐ وﺟﻮد اﻟﺴﻄﺮ اﻻول‬
‫اﻟﺴﻄﺮ اﻻول ﻳﺨﺒﺮ ‪ sql * plus‬ﺑﺄن ﻳﻜﺘﺐ آﻞ ﻣﺎﻳﻌﻮد ﺑﻪ اﻟﺨﺎدم‪.‬‬
‫وﻳﻜﻔﻲ آﺘﺎﺑﺘﻪ ﻣﺮة واﺣﺪة ﻋﻨﺪﻣﺎ ﺗﺪﺧﻞ ‪sql * plus‬‬

‫ﻣﺜﺎل اﺧﺮ ﺑﺎﺳﺘﺨﺪام اﻟﻤﺘﻐﻴﺮات‬


‫‪Declare‬‬
‫‪i‬‬ ‫;)‪number(5‬‬
‫‪BEGIN‬‬
‫;‪i:=5‬‬
‫;)‪DBMS_OUTPUT.PUT_LINE('i = ' || i‬‬
‫;‪END‬‬

‫ﻓﺎﺋﺪة || اﻟﻤﻮﺟﺪة ﺿﻤﻦ ﻋﻤﻠﺔ اﻟﻄﺒﺎﻋﺔ هﻲ ﻟﻠﻮﺻﻞ ﺑﻴﻦ اﻟﺘﻌﺒﻴﺮﻳﻦ‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪106 http://www.boosla.com‬‬

‫اﻟﺸﺮط ﻋﺒﺎرة ‪IF THEN‬‬

‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﻌﺒﺎرة ﻣﺜﻞ اي اﻟﻌﺒﺎرت اﻟﺸﺮﻃﻴﺔ ﻓﻲ ﻟﻐﺔ ﺳﻲ او ﺳﻲ‪ ++‬او ﻓﻴﺠﻮال ﺑﻴﺴﻚ وﻏﻴﺮهﺎ ‪,‬‬
‫وﻟﻬﺎ اﺳﺘﺨﺪﻣﺎت ﻋﺪﻳﺪة وﺳﻮف ﻧﻌﺮف آﻴﻒ ﻧﺴ ﺘﺨﺪﻣﻬﺎ ﻣﻘ ﺪﻣﺎ ﻣ ﻊ ﺣﻘ ﻮل ﻗﻮاﻋ ﺪ اﻟﺒﻴﺎﻧ ﺎت وذﻟ ﻚ ﺑﻌ ﺪ‬
‫اﺧﺬ اﻟﻤﺆﺷﺮات‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ ﻟﻬﺎ آﻤﺎﻳﻠﻲ‪:‬‬

‫‪IF condition THEN‬‬


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

‫ﺣﻴﺚ أن‬

‫هﻲ اﻟﺸﺮط‬ ‫‪conditional‬‬

‫ﻣﻼﺣﻈﺔ‬
‫• ‪ELSE‬و ‪ ELSIF‬اﺧﺘﻴﺎرﻳﺔ‬
‫• ﺟﻤﻠﺔ ‪ IF‬ﻧﺤﻨﻮي ﻋﻠﻰ ﻋﺪة ﻋﺒﺎرات ‪ ELSIF‬وﻟﻜﻦ ﺗﺤﺘﻮي ﻋﻠﻰ ﻋﺒﺎرة ‪ ELSE‬واﺣﺪة‬
‫• اﻧﺘﺒﻪ اﻟﻰ أن ﻃﺮﻳﻘﺔ آﺘﺎﺑﺔ ‪ ELSIF‬وﻟﻴﺴﺖ ‪ELSEIF‬‬

‫ﻣﺜﺎل ﻋﻠﻰ ذﻟﻚ ‪:‬‬

‫‪Declare‬‬
‫‪i‬‬ ‫;)‪number(5‬‬
‫‪BEGIN‬‬
‫;‪i:=5‬‬
‫‪IF i=5 then‬‬
‫;)‪DBMS_OUTPUT.PUT_LINE('i = ' || i‬‬
‫‪ELSE‬‬
‫;)' ‪DBMS_OUTPUT.PUT_LINE('i not eqal 5‬‬
‫;‪END IF‬‬
‫;‪END‬‬
107 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

‫اﻟﺸﺮط ﺑﺎﺳﺘﺨﺪام اآﺜﺮ ﻣﻦ ﺷﺮط‬

Declare
i number(5);
BEGIN
i:=5;
IF i>1 then
DBMS_OUTPUT.PUT_LINE(i || ' > 1');
ELSIF i<1 then
DBMS_OUTPUT.PUT_LINE(i || ' < 1');
ELSIF i=1 then
DBMS_OUTPUT.PUT_LINE(i || ' = 1');
END IF;
END;
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪108 http://www.boosla.com‬‬

‫اﻟـــﺘﻜﺮار‬

‫ﻳﻮﺟﺪ ﻋﺪة اواﻣﺮ ﻟﻠﺘﻜﺮار وهﻲ‪:‬‬

‫‪loop-exit-end -1‬‬

‫وهﻨﺎ ﻻﺑﺪ ﻣﻦ وﺿﻊ ﺷﺮط ﻷﻧﻬﺎء اﻟﺤﻠﻘﺔ‬


‫ﻧﺄﺧﺬ ﻣﺜﺎل ﺑﺴﻴﻂ ﻋﻠﻰ ذﻟﻚ‬
‫‪Declare‬‬
‫‪i‬‬ ‫;)‪number(5‬‬
‫‪BEGIN‬‬
‫;‪i:=1‬‬
‫‪LOOP‬‬
‫‪IF i>10 then‬‬
‫;‪EXIT‬‬
‫;‪END IF‬‬
‫;)‪DBMS_OUTPUT.PUT_LINE('i =' || i‬‬
‫;‪i:=i+1‬‬
‫;‪End loop‬‬
‫;‪END‬‬
‫‪/‬‬

‫اﻟﺸﺮح‬

‫اﻟﺴﻄﺮ اﻟﺜﺎﻧﻲ ‪ :‬ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻣﻦ ﻧﻮع رﻗﻢ‬


‫اﻟﺴﻄﺮ اﻟﺜﺎﻟﺚ ‪:‬اﻟﺒﺪاﻳﺔ‬
‫اﻟﺴﻄﺮ اﻟﺮاﺑﻊ ‪ :‬اﻋﻄﺎء اﻟﻤﺘﻐﻴﺮ ﻗﻴﻤﺔ اﺑﺘﺪاﺋﻴﺔ وهﻲ ‪i=1‬‬
‫اﻟﺴﻄﺮ اﻟﺨﺎﻣﺲ ‪ :‬ﺷﺮط اﻻﻧﻬﺎء‬
‫اﻟﺴﻄﺮ اﻟﺴﺎدس ‪ :‬اﻻﻧﻬﺎء اذا آﺎن ‪ i>10‬وﻻ ﻳﻜﻤﻞ‬
‫اﻟﺴﻄﺮ اﻟﺴﺎﺑﻊ ‪:‬اﻧﻬﺎ ‪if‬‬
‫اﻟﺴﻄﺮ اﻟﺜﺎﻣﻦ ‪ :‬ﻃﺒﺎﻋﺔ ‪i‬‬
‫اﻟﺴﻄﺮ اﻟﺘﺎﺳﻊ ‪:‬زﻳﺎدة ﻗﻴﻤﺔ ‪ i‬ﺑﻮاﺣﺪ‬
‫اﻟﺴﻄﺮ اﻟﻌﺎﺷﺮ ‪ :‬ﻧﻬﺎﻳﺔ اﻟﺤﻠﻘﺔ‬
109 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

:‫وﺑﻌﺪ آﺘﺎﺑﺔ هﺬا اﻟﻜﻮد ﻳﻜﻮن اﻟﻨﺎﺗﺞ آﻤﺎﻳﻠﻲ‬

i =1
i =2
i =3
i =4
i =5
i =6
i =7
i =8
i =9
i =10

WHEN - END LOOP- EXIT -2

Declare
i number(5);
BEGIN
i:=1;
LOOP
EXIT WHEN i>10;
DBMS_OUTPUT.PUT_LINE('i =' || i);
i:=i+1;
End loop;
END;
/

‫وﻳﻜﻮن اﻟﻨﺎﺗﺞ ﻧﻔﺲ اﻟﺴﺎﺑﻖ ﻟﻜﻦ ﻻﺣﻆ اﺳﺘﺨﺪم ﺷﺮط اﻻﻧﻬﺎء‬

EXIT WHEN i>10;

WHILE - LOOP - END -3

Declare
i number(5);
BEGIN
i:=1;
WHILE i <= 10 LOOP
DBMS_OUTPUT.PUT_LINE('i =' || i);
i:=i+1;
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪110 http://www.boosla.com‬‬

‫;‪End loop‬‬
‫;‪END‬‬
‫‪/‬‬

‫وﻳﻜﻮن اﻟﻨﺎﺗﺞ ﻧﻔﺲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ‬

‫‪FOR - IN - LOOP - END -4‬‬

‫وهﺬﻩ اﻳﻀﺎ ﻃﺮﻳﻘﺔ اﺧﺮى ﻻﺳﺘﺨﺪام ﺣﻠﻘﺎت اﻟﺘﻜﺮار وهﻲ ﻧﻔﺲ ﻋﻤﻞ اﺳﻠﻮب ﺣﻠﻘﺎت ‪ for‬ﻓﻲ اي ﻟﻐﺔ‬
‫ﺑﺮﻣﺠﺔ‬
‫واﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﻪ ﻟﻬﺎ هﻲ ﻋﻠﻰ اﻻﺗﻲ‬

‫‪LOOP‬‬ ‫‪ FOR‬اﻟﻨﻬﺎﻳﺔ‪ ..‬اﻟﺒﺪاﻳﺔ‬ ‫‪i‬‬ ‫‪IN‬‬


‫اﳉﻤﻞ اﳌﺮاد ﺗﻜﺮارهﺎ‬
‫‪END LOOP‬‬

‫ﻣﺜـــﺎل‪:‬‬
‫‪Declare‬‬
‫‪i‬‬ ‫;)‪number(5‬‬
‫‪BEGIN‬‬
‫‪FOR i‬‬ ‫‪IN 1..10 LOOP‬‬
‫;)‪DBMS_OUTPUT.PUT_LINE('i =' || i‬‬
‫;‪End loop‬‬
‫;‪END‬‬
‫‪/‬‬
‫وﺳﻮف ﻳﻜﻮن اﻟﻨﺎﺗﺞ آﻤﺎﻳﻠﻲ)ﻧﻔﺲ اﻟﺴﺎﺑﻖ(‪:‬‬

‫‪1= i‬‬
‫‪i =2‬‬
‫‪i =3‬‬
‫‪i =4‬‬
‫‪i =5‬‬
‫‪i =6‬‬
‫‪i =7‬‬
‫‪i =8‬‬
‫‪i =9‬‬
‫‪10= i‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪111 http://www.boosla.com‬‬

‫ﺟﻤﻠﺔ ‪GOTO‬‬

‫آﻤﺎ ﻓﻲ ﺑﺎﻗﻲ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﻓﺎن ‪ GOTO‬ﺗﻨﻘﻞ ﺗﺴﻠﺴﻞ ﻋﻤﻞ اﻟﺒﺮاﻣﺞ ﻣﻦ ﻧﻘﻄﻪ اﻟﻰ اﺧﺮى‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ‬

‫>>‪GOTO <<my_label‬‬

‫ﺣﻴﺚ أن‬

‫ﻋﻨﻮان اﻟﻨﻘﻈﺔ اﻟﺘﻲ ﺳﻴﺘﻢ اﻻﻧﺘﻘﺎل اﻟﻴﻬﺎ‬ ‫‪my_label‬‬

‫ﻣﺜﺎل‬

‫‪declare‬‬
‫;‪i positive := 1‬‬
‫;‪max_loops constant positive := 100‬‬
‫‪begin‬‬
‫;‪i := 1‬‬
‫‪loop‬‬
‫;‪i := i + 1‬‬
‫‪if i > max_loops then‬‬
‫;‪goto more_processing‬‬
‫;‪end if‬‬
‫;‪end loop‬‬
‫>>‪<<more_processing‬‬
‫;‪i := 1‬‬
‫;‪end‬‬
‫‪/‬‬

‫اﻟﺘﻌﻠﻴﻘﺎت‬

‫ﻳﻤﻜﻦ آﺘﺎﺑﺔ اﻟﺘﻌﻠﻴﻘﺎت ﻓﻲ ‪ PL/SQL‬ﺑﻌﺪة ﻃﺮق‬

‫آﺘﺎﺑﺔ )‪ (--‬ﺛﻢ اﻟﺘﻌﻠﻴﻖ‬ ‫‪-1‬‬

‫ﻣﺜﺎل‬

‫‪-- DON’T FORGET‬‬ ‫‪MY NAME‬‬


112 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

‫آﺘﺎﺑﺔ )***( ﺛﻢ اﻟﺘﻌﻠﻴﻖ ﺛﻢ )***( ﻣﺮة أﺧﺮى‬ -2

‫ﻣﺜﺎل‬
*** DON’T FORGET MY NAME ***

‫*( ﻣﺮة اﺧﺮى‬/ ) ‫( ﺛﻦ اﻟﺘﻌﻠﻴﻖ ﺛﻢ‬/*) ‫آﺘﺎﺑﺔ‬ -3

‫ﻣﺜﺎل‬
/* DON’T FORGET MY NAME */

PL/SQL‫ ﻓﻲ آﺘﻞ‬SQL ‫اﺳﺘﺨﺪام أواﻣﺮ‬

‫ وﻟﻜﻦ ﻣﻊ وﺟﻮد‬PL/SQL ‫ داﺧﻞ اﻟﻜﺘﻞ اﻟﺒﺮﻣﺠﻴﺔ اﻟﺨﺎﺻﺔ ﺑـ‬SQL ‫ﻳﻤﻜﻨﻚ اﺳﺘﻌﻤﺎل ﺟﻤﻞ‬
(;) ‫ ﺗﻨﺘﻬﻲ ﺑﻔﺎﺻﻠﺔ ﻣﻨﻘﻮﻃﺔ‬SQL ‫اﺧﺘﻼﻓﺎت ﺣﻴﺚ آﻞ ﺟﻤﻠﺔ‬

‫ﻣﺜﺎل‬

DECLARE
max_records CONSTANT int := 100;
i int := 1;
BEGIN
FOR i IN 1..max_records LOOP
if (mod(i,10) = 0) then
INSERT INTO test_table
(record_number, current_date)
VALUES
(i, SYSDATE);
else
NULL;
end if;
END LOOP;
COMMIT;
END;
/

SQL ‫ وهﻲ ﻣﻦ أواﻣﺮ‬sysdate‫ و‬INSERT‫ﻓﻲ هﺬا اﻟﻤﺜﺎل ﻗﻤﻨﺎ ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪113 http://www.boosla.com‬‬

‫اﻟﻤﺆﺷﺮات‬

‫اهﺪاف اﻟﻔﺼﻞ‬

‫ﻗﻲ ﻣﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ إن ﺷﺎء اﷲ ﺳﺘﻜﻮن ﻗﺎدر ﻋﻠﻰ‬


‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺆﺷﺮات اﻟﺼﺮﻳﺤﻪ‬ ‫‪-1‬‬
‫اﻟﻨﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺆﺷﺮات اﻟﻀﻤﻨﻴﺔ‬ ‫‪-2‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪114 http://www.boosla.com‬‬

‫ﺍﻟﻤﺅﺸﺭﺍﺕ ‪CURSORS‬‬

‫ﺗﺴﺘﺨﺪم ‪ pl/sql‬اﻟﻤﺆﺷﺮات ‪ cursors‬ﻷدارة ﻋﺒﺎرات اﻟﺘﺤﺪﻳﺪ ‪ select‬ﻓﻲ ﻟﻐﺔ ‪ sql‬وآﻤﺎ ﻻﺣﻈﻨﺎ‬


‫اﻻواﻣﺮ اﻟﺴﺎﺑﻘﺔ ﻣﺜﻞ ‪ if‬واﻟﺘﻜﺮار ﻟﻢ ﻧﺴﺘﺨﺪﻣﻬﺎ ﻣﻊ ﺑﻴﺎﻧﺎت اﻟﺠﺪاول اﻟﻤﺨﺰﻧﻪ وﻟﻌﻤﻞ ذﻟﻚ ﻻﺑﺪ ﻣﻦ‬
‫اﺳﺘﺨﺪام هﺬﻩ اﻟﻤﺆﺷﺮات‪.‬‬
‫وهﻨﺎك ﻧﻮﻋﻴﻦ ﻣﻦ اﻟﻤﺆﺷﺮات هﻲ اﻟﻀﻤﻨﻴﺔ واﻟﺼﺮﻳﺤﺔ وﺳﻮف ﻧﺘﻄﺮق ﻟﻚ واﺣﺪ ﺑﺎﻟﺘﻔﺼﻴﻞ‬
‫واﻻﻣﺜﻠﺔ اﻟﻼزﻣﺔ‪.‬‬

‫‪ -1‬اﻟﻤﺆﺷﺮات اﻟﺼﺮﻳﺤﻪ ‪:‬‬

‫ﻳﺘﻢ ﺗﻌﺮﻳﻒ هﺬا اﻟﻨﻮع ﻣﻦ اﻟﻤﺆﺷﺮات آﺠﺰء ﻣﻦ اﻻﻋﻼن ‪ declare‬وﻳﺠﺐ ان ﺗﺸﺘﻤﻞ ﻋﺒﺎرة ‪sql‬‬
‫اﻟﻤﻌﺮﻓﻪ ﻋﻠﻰ ﻋﺒﺎرة اﻟﺘﺤﺪﻳﺪ ‪ select‬ﻓﻘﻂ ﺣﻴﺚ ﻻﻳﻤﻜﻦ اﺳﺘﺨﺪام اﻟﻜﻠﻤﺎت اﻻﺳﺎﺳﻴﺔ‬
‫‪insert,update,delete‬‬
‫وﻋﻨﺪ اﺳﺘﺨﺪام اﻟﻤﺆﺷﺮات اﻟﺼﺮﻳﺤﻪ داﺋﻤﺎ ﻣﺎﺳﺘﻜﺘﺐ ارﺑﻌﺔ ﻣﻜﻮﻧﺎت آﻤﺎﻳﻠﻲ‪:‬‬
‫‪ -1‬ﻳﺘﻢ ﺗﻌﺮﻳﻒ اﻟﻤﺆﺷﺮ ﻓﻲ اﻟﺠﺰء ‪declare‬‬
‫‪ -2‬ﻳﺘﻢ ﻓﺘﺢ اﻟﻤﺆﺷﺮ ﺑﻌﺪ ﻋﺒﺎرة ‪begin‬‬

‫اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ ﻟﺘﻌﺮﻳﻒ اﻟﻤﺆﺷﺮ اﻟﺼﺮﻳﺢ آﻤﺎﻳﻠﻲ‪:‬‬

‫‪DECLARE‬‬
‫‪IS‬‬ ‫اﺳﻢ اﳌﺆﺷﺮ‬ ‫‪CURSOR‬‬
‫اﻻﺳﺘﻌﻼم‬

‫ﺗﻘﻮم ﺑﺎﺳﺘﺒﺪال اﺳﻢ اﻟﻤﺆﺷﺮ ﺑﺎﺳﻢ ﻣﺆﺷﺮ ﺣﻘﻴﻘﻲ‬


‫وﺗﻘﻮم ﺑﻮﺿﻊ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم ‪ select‬ﻓﻲ ﻣﻜﺎن اﻻﺳﺘﻌﻼم‬

‫وﻟﻜﻲ ﺗﻘﻮم ﺑﻔﺘﺢ هﺬا اﻟﻤﺆﺷﺮ وﺗﺴﺘﺨﺪﻣﻪ ﻧﻘﻮم ﺑﻔﺘﺤﻪ ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ ‪ open‬آﻤﺎﻳﻠﻲ‪:‬‬

‫اﺳﻢ اﻟﻤﺆﺷﺮ ‪OPEN‬‬

‫وﺑﻌﺪ ﻓﺘﺢ اﻟﻤﺆﺷﺮ ﺗﻘﻮم ﺑﺎﺳﺘﺮﺟﺎع او ﺗﺤﻤﻴﻞ اﻟﺒﻴﺎﻧﺎت ﺳﻄﺮ)ﺳﺠﻞ( واﺣﺪ ﻣﻦ اﻟﻤﺆﺷﺮ اﻟﺬي ﺗﻢ‬
‫ﺗﻌﺮﻳﻔﻪ ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ ‪ FETCH‬آﻤﺎﻳﻠﻲ‪:‬‬

‫‪ INTO‬اﺳﻢ اﳌﺆﺷﺮ ‪FETCH‬‬ ‫‪,.......‬ﻣﺘﻐﲑ‪,2‬ﻣﺘﻐﲑ‪1‬‬

‫وﻣﻌﻨﻰ هﺬا اي ﻗﻢ ﺑﺎﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﻦ اﻟﻤﺆﺷﺮ اﻟﻤﻌﻄﻰ اﺳﻤﻪ وﺣﻤﻠﻬﺎ ‪ into‬اﻟﻰ اﻟﻤﺘﻐﻴﺮات آﻊ‬
‫ﻣﻼﺣﻈﺔ ان ﻋﺪد اﻟﻤﺘﻐﻴﺮات ﻳﺴﺎوي ﻋﺪد اﻟﺤﻘﻮل اﻟﻤﻮﺟﻮدة ﻓﻲ اﺳﺘﻌﻼم اﻟﻤﺆﺷﺮ‪.‬‬
‫وﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ اﺟﺮاء اﻟﻌﻤﻠﻴﺎت ﻋﻠﻰ اﻟﻤﺆﺷﺮ ﻳﺠﺐ ﻋﻠﻴﻚ اﻏﻼﻗﻪ وﻳﺘﻢ اﻏﻼﻗﻪ آﻤﺎﻳﻠﻲ‪:‬‬

‫‪close cursor_name‬‬
115 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

: ‫ﻣﺜﺎل ﻋﻠﻰ ﻃﺮﻳﻘﺔ ﺗﻌﺮﻳﻒ ﻣﺆﺷﺮ‬

‫اﻓﺮض اﻧﻪ ﻟﺪﻳﻨﺎ هﺬا اﻟﺠﺪول‬

age name no
23 mohammed 111
22 talal 222
24 majed 333

:‫اوﻻ ﻗﻢ ﺑﺎﻧﺸﺎء هﺬا اﻟﺠﺪول آﻤﺎﻳﻠﻲ‬

create table stud(


no number(4),
name varchar2(40),
age number(2));

:‫ﺛﺎﻧﻴﺎ ﻗﻢ ﺑﺎدﺧﺎل اﻟﺒﻴﺎﻧﺎت اﻟﺴﺎﺑﻘﺔ ﻓﻲ هﺬا اﻟﺠﺪول آﻤﺎﻳﻠﻲ‬

insert into stud values(111,'mohammed',23);


insert into stud values(222,'talal',22);
insert into stud values(333,'majed',24);

‫ﺛﻢ ﻗﻢ ﺑﻨﺘﻔﻴﺬ ﻣﺎﻳﻠﻲ‬

set serveroutput on;


DECLARE
name_stu varchar2(40);
CURSOR name_student IS
select name from stud
where no=111;
BEGIN
OPEN name_student;
FETCH name_student INTO name_stu;
DBMS_OUTPUT.PUT_LINE(name_stu);
CLOSE name_student;
END;
/
:‫ﺑﻌﺪ اﻟﺘﻨﻔﻴﺬ ﺳﻮف ﻳﻈﻬﺮ ﻟﻚ اﻟﻨﺎﺗﺞ آﻤﺎﻳﻠﻲ‬

mohammed
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪116 http://www.boosla.com‬‬

‫وهﺬا اﻟﺸﻲ ﺻﺤﻴﺢ‬


‫ﻻﺣﻆ اﻧﻨﺎ اﺗﺒﻌﻨﺎ ﻧﻔﺲ اﻟﺨﻄﻮات اﻟﺘﻲ ذآﺮﻧﺎﻩ ﻟﻜﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺆﺷﺮ ﺻﺮﻳﺢ‬

‫ﻻﺣﻈﻨﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ان اﻻﺳﺘﻌﻼم ﻓﻲ ‪ cursor‬ﺳﻮف ﻳﻌﻮد ﺑﺴﺠﻞ واﺣﺪ ﻟﻜﻦ ﻣﺎذا ﻳﺤﺪث ﻟﻮ‬
‫اﻋﺎد اﻟﻤﺆﺷﺮ اآﺜﺮ ﻣﻦ ﺳﺠﻞ واردﻧﺎ اﻟﻤﺮور ﻋﻠﻰ آﺎﻓﺔ اﻟﺴﺠﻼت ؟‬

‫ﻟﺤﻞ اﻟﺴﺆال اﻟﺴﺎﺑﻖ ﻻﺑﺪ ﻣﻦ اﺳﺘﺨﺪام ﺣﻠﻘﺔ ﺑﻬﺎ ﺷﺮط وهﺬا هﻮ هﻞ ﺳﺠﻼت اﻟﻤﺆﺷﺮ اﻧﺘﻬﺖ ام ﻻ‬
‫وﻧﻌﺮف ذﻟﻚ ﻣﻦ ﺧﻼل ﺧﺎﺻﻴﺔ ‪ found‬ﻟﻠﻤﺆﺷﺮ آﻤﺎﻳﻠﻲ‪:‬‬

‫‪found%mycur‬‬

‫ﺣﻴﺚ ‪:‬‬

‫‪ mycur :‬هﻲ اﺳﻢ اﻟﻤﺆﺷﺮ‪.‬‬

‫‪ : %‬ﺗﻮﺿﺢ اﻧﺎ ﻣﺎﻳﻠﻲ اﺳﻢ اﻟﻤﺆﺷﺮ هﻲ اﺣﺪ ﺧﺼﺎﺋﺼﻪ‪.‬‬

‫‪ found :‬ﺧﺎﺻﻴﺔ اﻟﺘﻲ ﻣﻦ ﺧﻼﻟﻬﺎ ﻧﻌﺮف هﻞ ﺗﻢ اﻻﻧﺘﻬﺎء ﻣﻦ ﺟﻤﻴﻊ اﻟﺴﺠﻼت ام ﻻ‬

‫ﻣﺜﺎل ‪:‬‬

‫اﺳﻢ اﻟﻄﺎﻟﺐ‬ ‫آﻮد اﻟﻤﻘﺮر‬ ‫اﻟﺪرﺟﺔ‬ ‫اﻟﻨﺘﻴﺠﺔ‬


‫‪NO_STU SUBJECT‬‬ ‫‪MARK RESULT‬‬
‫‪111‬‬ ‫‪216CS‬‬ ‫‪88‬‬
‫‪222‬‬ ‫‪225CS‬‬ ‫‪75‬‬
‫‪333‬‬ ‫‪225CS‬‬ ‫‪40‬‬

‫ﻧﺮﻳﺪ اﻧﺸﺎء اﺟﺮاء ﻳﻘﻮم ﺑﺎﻟﻤﺮور ﻋﻠﻰ اﻟﺠﺪول وﻳﻨﻈﺮ اﻟﻰ درﺟﺔ اﻟﻄﺎﻟﺐ اذا آﺎن ﻧﺎﺟﺢ ﻓﻲ اﻟﻤﻘﺮر‬
‫ام ﻻ ﻓﺎذا آﺎن ‪ mark‬اآﺒﺮ او ﻳﺴﺎوي ‪ 50‬ﺿﻊ ﻗﻴﻤﺔ ‪ true‬ﻓﻲ ﺣﻘﻞ ‪ result‬واﻻ ﺿﻊ ﻗﻴﻤﺔ ‪false‬‬
‫ﻓﻲ ﺣﻘﻞ ‪result‬‬

‫ﻧﻘﻮم اوﻻ ﺑﺎﻧﺸﺎء هﺬا اﻟﺠﺪول ‪:‬‬

‫(‪create table stu_study‬‬


‫‪NO_STU number(4),‬‬
‫‪SUBJECT varchar2(8),‬‬
‫‪MARK number(3),‬‬
‫;))‪RESULT varchar2(20‬‬

‫اﻟﻤﺪﺧﻼت اﻟﺴﺎﺑﻘﺔ وﺑﻌﺪ اﻧﺸﺎء اﻟﺠﺪول ﻧﻘﻮم ﺑﺎدﺧﺎل‬


117 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

insert into stu_study (NO_STU,SUBJECT,MARK)


values (111,'216CS',88);

insert into stu_study (NO_STU,SUBJECT,MARK)


values (222,'225CS',75);

insert into stu_study (NO_STU,SUBJECT,MARK)


values (333,'225CS',40);

:‫ﺑﻌﺪ ذﻟﻚ ﻧﻘﻮم ﺑﺎﻧﺸﺎء اﻻﺟﺮاء‬

declare
mar number(3);
no number(3);
cursor res_stu is
select no_stu,mark
from stu_study;
begin
open res_stu;
loop
fetch res_stu into no,mar;
exit when res_stu%notfound;
if mar>=50 then
update stu_study set result='TRUE' where
no_stu=no;
else
update stu_study set result='FALSE' where
no_stu=no;
end if;
end loop;
close res_stu;
end;
/

: ‫وﺑﻬﺬا ﺗﻜﻮن اﻟﻨﺘﺎﺋﺞ ﻓﻲ اﻟﺠﺪول آﻤﺎﻳﻠﻲ‬

NO_STU SUBJECT MARK RESULT


111 216CS 88 TRUE
222 225CS 75 TRUE
333 225CS 40 FALSE
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪118 http://www.boosla.com‬‬

‫هﻨﺎك ﻃﺮﻳﻘﺔ اﺧﺮى ﻟﺘﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮات ﻻﺣﻆ ﻓﻲ اﻟﺠﺪول اﻟﺴﺎﺑﻖ ان اﻟﺤﻘﻞ ‪ no_Stu‬ﺗﻢ ﺗﻌﺮﻳﻔﻪ‬
‫ﻋﻠﻰ اﻧﻪ ﻣﻦ ﻧﻮع ‪ number‬وﺗﻢ ﺗﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮ ‪ no‬ﻓﻲ اﻻﺟﺮاء ﻋﻠﻰ اﻧﻪ ‪ number‬اﻳﻀﺎ ﻟﻜﻲ‬
‫ﻳﺘﻢ وﺿﻊ رﻗﻢ اﻟﻄﺎﻟﺐ ﻓﻴﻪ ﻟﻜﻦ ﻻﺣﻆ ﻟﻮ ﺗﻢ ﺗﻐﻴﺮ ﻧﻮع اﻟﺤﻘﻞ ﻓﻲ اﻟﺠﺪول ﻣﻦ ‪ number‬اﻟﻰ‬
‫‪ varchar2‬ﻓﺎﻧﻪ ﻳﺠﺐ ﻋﻠﻴﻚ ﺗﻐﻴﺮ ﻧﻮع اﻟﻤﺘﻐﻴﺮ ‪ no‬ﻓﻲ اﻻﺟﺮاء اﻳﻀﺎ ﻟﻜﻦ هﻨﺎك ﻃﺮﻳﻘﻪ ﺗﺠﻌﻠﻚ‬
‫ﻻﺗﻌﺪل اﻻﺟﺮاء آﻞ ﻣﺮة وهﻲ اﺳﺘﺨﺪام اﻻﻣﺮ اﻟﺘﺎﻟﻲ ﻟﺘﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮ ‪ no‬ﻓﻲ اﻻﺟﺮاء‬

‫‪type%no_stu.stu_study NO‬‬

‫ﺣﻴﺚ ‪:‬‬

‫‪ NO‬هﻲ اﺳﻢ اﻟﻤﺘﻐﻴﺮ‬

‫‪ : stu_study‬اﺳﻢ اﻟﺠﺪول‬

‫‪ : no_stu‬اﻟﺤﻘﻞ اﻟﻤﻄﻠﻮب ﻓﻲ اﻟﺠﺪول‬

‫‪ : type%‬ﺧﺎﺻﻴﺔ ﻧﻮع اﻟﺤﻘﻞ‬

‫وﻣﻌﻨﻰ ﻣﺎﺳﺒﻖ ﻗﻢ ﺑﺘﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ اﺳﻤﻪ ‪ no‬ﻟﻪ ﻧﻔﺲ ﻧﻮﻋﻴﺔ اﻟﺤﻘﻞ اﻟﺬي اﺳﻤﻪ ‪ NO_STU‬اﻟﻤﻮﺟﻮد‬
‫ﻓﻲ اﻟﺠﺪول ‪stu_study .‬‬

‫وﺑﻬﺬا ﻻن ﺗﻘﻮم ﺑﺘﻐﻴﺮ ﻧﻮع اﻟﻌﻨﺼﺮ ﻓﻲ اﻻﺟﺮاء ﻓﻲ آﻞ ﻣﺮة ﺗﻐﻴﺮ اﻟﻨﻮع وهﻜﺬا ﻣﻊ ﺟﻤﻴﻊ‬
‫اﻟﻤﺘﻐﻴﺮات اﻟﺘﻲ ﻟﻬﺎ ﺻﻠﻪ ﺑﺎﻟﺠﺪاول‬

‫وﺑﺬﻟﻚ ﻳﺼﺒﺢ اﻻﺟﺮاء ﺑﻌﺪ اﻟﺘﻌﺪﻳﻞ آﻤﺎﻳﻠﻲ‪:‬‬

‫‪declare‬‬
‫;‪mar stu_study.mark%type‬‬
‫;‪no stu_study.no_stu%type‬‬
‫‪cursor res_stu is‬‬
‫‪select no_stu,mark‬‬
‫;‪from stu_study‬‬
‫‪begin‬‬
‫;‪open res_stu‬‬
‫‪loop‬‬
‫;‪fetch res_stu into no,mar‬‬
‫;‪exit when res_stu%notfound‬‬
‫‪if mar>=50 then‬‬
‫‪update stu_study set result='TRUE' where‬‬
‫;‪no_stu=no‬‬
‫‪else‬‬
‫‪update stu_study set result='FALSE' where‬‬
‫;‪no_stu=no‬‬
‫;‪end if‬‬
119 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

end loop;
close res_stu;
end;
/
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪120 http://www.boosla.com‬‬

‫اﻟﻤﺆﺷﺮات اﻟﻀﻤﻨﻴﺔ‬

‫ﺗﻌﺮﻓﻨﺎ ﺳﺎﺑﻘﺎ ﻋﻠﻰ ﻓﺎﺋﺪ اﻟﻤﺆﺷﺮات ‪ cursors‬ودرﺳﻨﺎ اﻟﻨﻮع اﻻول ﻣﻨﻬﺎ وﻓﻲ هﺬا اﻟﻔﺼﻞ ﻋﻨﺪﻧﺎ‬
‫ﻧﻮع اﺧﺮ وهﻮ اﻟﻤﺆﺷﺮات اﻟﻀﻤﻨﻴﺔ وهﻲ اﺳﻬﻞ ﻣﻦ اﻟﻤﺆﺷﺮات اﻟﺼﺮﻳﺤﻪ‬

‫وﺗﻮﺟﺪ ﻧﻘﻄﺘﻴﻦ هﺎﻣﺘﻴﻦ ﻋﻨﺪ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻤﺆﺷﺮات اﻟﻀﻤﻨﻴﻪ ‪:‬‬

‫* ﻳﻈﻬﺮ اﻟﻤﺆﺷﺮ اﻟﻀﻤﻨﻲ ﻓﻲ ﺟﺴﻢ اﻻﺟﺮاء ‪ body‬وﻟﻴﺲ ﻓﻲ ‪ declare‬اﻟﺨﺎص ﺑﺎﻻﺟﺮاء آﻤﺎﻓﻲ‬


‫اﻟﻤﺆﺷﺮات اﻟﺼﺮﻳﺤﻪ‬

‫* ﻻﺑﺪ ان ﻳﺴﺘﺮﺟﻊ ﻣﺆﺷﺮ ‪ select‬اﻟﻀﻤﻨﻲ ﺳﻄﺮ واﺣﺪ‪.‬‬

‫واﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﻪ ﻟﻠﻤﺆﺷﺮ اﻟﻀﻤﻨﻲ آﻤﺎﻳﻠﻲ‪:‬‬

‫‪SELECT COLUM1,COLUM2,.......‬‬ ‫‪INTO‬‬


‫‪VARIABLE1,VARIABLE2,.....‬‬

‫‪FROM‬‬ ‫‪table_name‬‬

‫وﻣﻌﻨﻰ هﺬا ﻗﻢ ﺑﺎﺧﺘﻴﺎر اﻟﺤﻘﻞ‪ 1‬و اﻟﺤﻘﻞ‪ 2‬وﺿﻌﻬﺎ ﻓﻲ اﻟﻤﺘﻐﻴﺮات ﻣﻨﻐﻴﺮ‪ 1‬و ﻣﺘﻐﻴﺮ‪ 2‬ﻣﻦ اﻟﺠﺪول‬
‫‪table_name‬‬

‫ﺳﻮف ﻧﺄﺧﺬ ﻣﺜﺎل ﻋﻠﻰ ذﻟﻚ وﺳﻮف ﻧﺴﺘﺨﺪم اﻟﺠﺪول اﻟﺬي اﻧﺸﺌﻨﺎﻩ ﺳﺎﺑﻖ ﻓﻲ اﻟﺪرس اﻟﺜﺎﻧﻲ ﻋﻨﺪﻣﺎ‬
‫ﺗﻌﺎﻣﻠﻨﺎ ﻣﻊ اﻟﻤﺆﺷﺮات اﻟﺼﺮﻳﺤﺔ وآﺎن اﺳﻢ اﻟﺠﺪول ‪stud‬‬

‫‪no‬‬ ‫‪name‬‬ ‫‪age‬‬


‫‪111‬‬ ‫‪mohammed‬‬ ‫‪23‬‬
‫‪222‬‬ ‫‪talal‬‬ ‫‪22‬‬
‫‪333‬‬ ‫‪majed‬‬ ‫‪24‬‬

‫واردﻧﺎ ﻣﺜﻼ آﺘﺎﺑﺔ اﺟﺮاء ﻳﻘﻮم ﺑﺤﺴﺎب ﻣﺘﻮﺳﻂ اﻋﻤﺎر اﻟﻄﻼب ) ﻗﺪ ﻳﻘﻮل اﻟﺒﻌﺾ اﻧﻪ ﻻﻳﺤﺘﺎج ذﻟﻚ‬
‫اﻟﻰ اﺟﺮاء ﻓﻤﺠﺮد اﺳﺘﺨﺪام ﺟﻤﻠﺔ ‪ select‬ﻧﺴﺘﻄﻴﻊ ﻋﻤﻞ ذﻟﻚ اﻧﺎ اﻗﻮل ﻧﻌﻢ هﺬا ﺻﺤﻴﺢ ﻟﻜﻦ اﺣﺐ‬
‫اﺳﺘﺨﺪام اﻻﺟﺮاء ﻓﻲ هﺬا اﻟﻤﺜﺎل ﻟﻜﻲ ﻧﺮى ﻃﺮﻳﻘﺔ ﻋﻤﻞ اﻟﻤﺆﺷﺮ اﻟﻀﻤﻨﻲ وﻟﻜﻦ ﺳﻮف ﻧﺮى ﺑﻌﺪ‬
‫ﻗﻠﻴﻞ ﻣﺜﺎل ﺷﺎﻣﻞ ﻳﺘﻢ ﻓﻴﻪ اﺳﺘﺨﺪام اﻟﻤﻮﺷﺮات اﻟﺼﺮﻳﺤﻪ واﻟﻀﻤﻨﻴﺔ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ( واﻻن ﻧﻘﻮم‬
‫ﺑﻜﺘﺎﺑﺔ اﻻﺟﺮاء آﻤﺎﻳﻠﻲ ‪:‬‬
121 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

set serveroutput on;


declare
aveage number(4,2);
begin
select avg(age)
into aveage
from stud;
DBMS_OUTPUT.PUT_LINE(aveage);
end;
/

: ‫*** ﻣﺜﺎل ﺷﺎﻣﻞ ﻻﺳﺘﺨﺪام اﻟﻤﻮﺷﺮات اﻟﺼﺮﻳﺤﺔ واﻟﻀﻤﻨﻴﻪ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ‬

:(‫ )اﻟﻤﻘﺮرات‬courses ‫ اﻟﺠﺪول اﻻول اﺳﻤﻪ‬: ‫ﻟﻨﻔﺮض اﻧﻪ ﻟﺪﻳﻨﺎ اﻟﺠﺪوﻟﻴﻦ اﻟﺘﺎﻟﻴﻴﻦ‬

‫رﻗﻢ اﻟﻤﻘﺮر‬ ‫اﺳﻢ اﻟﻤﻘﺮر‬ ‫ﻋﺪد اﻟﺴﺎﻋﺎت‬


code course_name hours
216CS NETWORK 3
225CS ASSEMBLY 3
325CS DATABASE 4

:‫وﻗﻢ ﺑﺎﻧﺸﺎء اﻟﺠﺪول آﻤﺎﻳﻠﻲ‬

create table courses(


code varchar2(8),
course_name varchar2(40),
hours number(3),
primary key(code));

:‫وﻗﻢ ﺑﺎدﺧﺎل اﻟﺒﻴﺎﻧﺎت اﻟﻤﻮﺟﻮد ﺑﺎﻟﺠﺪول آﻤﺎﻳﻠﻲ‬

insert into courses values('216CS','NETWORK',3);

insert into courses


values('225CS','ASSEMBLY',3);
122 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

insert into courses


values('325CS','DATABASE',4);

: studys ‫ﺛﻢ ﻧﻘﻮم ﺑﺘﻜﻮﻳﻦ اﻟﺠﺪول اﻟﺜﺎﻧﻲ وهﻮ‬

‫ﻋﺪد‬
‫اﺳﻢ اﻟﻄﺎﻟﺐ‬ ‫آﻮد اﻟﻤﻘﺮر‬ ‫اﻟﺪرﺟﺔ‬
‫اﻟﻨﻘﺎط‬
NO_STU COURSE_CODE MARK POINT
111 216CS 88
222 225CS 75
333 225CS 40
111 225CS 90
222 216CS 78
333 216CS 85

:‫وﻳﺘﻢ اﻻﻧﺸﺎء آﻤﺎﻳﻠﻲ‬

create table studys(


NO_STU varchar2(6),
COURSE_CODE varchar2(8),
MARK number(3),
point number(5,2),
primary key(NO_STU,COURSE_CODE));

‫ وﻳﺘﻢ ادﺧﺎل‬:‫ﺑﺎﻟﺒﻴﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﺑﺎﻟﺠﺪول آﻤﺎﻳﻠﻲ‬

insert into studys(NO_STU,COURSE_CODE,MARK)


values ('111','216CS',88);
insert into studys(NO_STU,COURSE_CODE,MARK)
values ('222','225CS',75);
insert into studys(NO_STU,COURSE_CODE,MARK)
values ('333','225CS',40);
insert into studys(NO_STU,COURSE_CODE,MARK)
values ('111','225CS',90);
insert into studys(NO_STU,COURSE_CODE,MARK)
values ('222','216CS',75);
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪123 http://www.boosla.com‬‬

‫)‪insert into studys(NO_STU,COURSE_CODE,MARK‬‬


‫;)‪values ('333','216CS',85‬‬

‫ﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ اﻧﺸﺎء وادﺧﺎل اﻟﺒﻴﺎﻧﺎت اﻟﻤﻄﻠﻮب اﻧﺸﺎء اﺟﺮاء ﻳﻘﻮم ﺑﺤﺴﺎب ﻋﺪد اﻟﻨﻘﺎط ﻟﻜﻞ ﻃﺎﻟﺐ‬
‫وﻓﻲ آﻞ ﻣﺎدة وهﻮ اﻟﺤﻘﻞ ﻋﺪد اﻟﻨﻘﺎط اﻟﺬي ﻟﻢ ﻧﺪﺧﻞ ﻓﻴﻪ اي ﺷﻲء وﻳﺠﺐ ﻧﻌﻠﻢ ان ‪:‬‬

‫‪MARK‬‬ ‫‪average‬‬
‫‪95-100‬‬ ‫‪5‬‬
‫‪90-94‬‬ ‫‪4.75‬‬
‫‪85-89‬‬ ‫‪4.5‬‬
‫‪80-84‬‬ ‫‪4‬‬
‫‪75-79‬‬ ‫‪3.5‬‬
‫‪70-74‬‬ ‫‪3‬‬
‫‪65-69‬‬ ‫‪2.5‬‬
‫‪60-64‬‬ ‫‪2‬‬
‫‪1-59‬‬ ‫‪1‬‬

‫وﻳﺘﻢ ﺣﺴﺎب اﻟﻨﻘﺎط آﻤﺎﻳﻠﻲ ‪:‬‬

‫ﻋﺪد اﻟﻨﻘﺎط ﻓﻲ اي ﻣﻘﺮر = ﻣﻌﺪل اﻟﻤﺎدة )وﻟﻴﺲ اﻟﺪرﺟﺔ آﻤﺎﻓﻲ اﻟﺠﺪول اﻟﺴﺎﺑﻖ( * ﻋﺪد ﺳﺎﻋﺎت‬
‫اﻟﻤﻘﺮر‬

‫ﻣﺜﺎل ﻟﺤﺴﺎب ﻣﻌﺪل اﻟﻄﺎﻟﺐ اﻟﺬي رﻗﻤﻪ ‪ 111‬ﻓﻲ اﻟﻤﻘﺮر ‪216CS‬‬

‫ﻧﻼﺣﻆ ﻣﻦ ﺟﺪول ‪ studys‬ان اﻟﻄﺎﻟﺐ ﻗﺪ ﺗﺤﺼﻞ ﻋﻠﻰ درﺟﺔ ‪ 88‬وﻧﻼﺣﻆ ان اﻟﺪرﺟﺔ ﻣﻦ اﻟﺠﺪول‬
‫اﻟﺴﺎﺑﻖ هﻲ ﺑﻴﻦ ‪ 89 -85‬وﺑﺎﻟﺘﺎﻟﻲ ﻓﺈن ﻣﻌﺪل اﻟﻄﺎﻟﺐ ﻓﻲ هﺬا اﻟﻤﻘﺮر هﻮ ‪) 4.5‬وهﻲ اﻟﻄﺮﻳﻘﺔ‬
‫اﻟﻤﺘﺒﻌﺔ ﻓﻲ اﻏﻠﺐ اﻟﺠﺎﻣﻌﺎت( ‪ ,‬وﻣﻦ ﺟﺪول ‪ courses‬ﻧﺤﺼﻞ ﻋﻠﻰ ﻋﺪد اﻟﺴﺎﻋﺎت ﻟﻠﻤﻘﺮر وﺑﺎﻟﺘﺎﻟﻲ‬
‫ﻓﺎن ‪:‬‬

‫ﻋﺪد اﻟﻨﻘﺎط = ‪ 13.5 = 3 * 4.5‬وهﻜﺬا ﻓﻲ ﺟﻤﻴﻊ اﻟﻄﻼب وهﺬا هﻮ اﻟﻤﻄﻠﻮب ﻣﻦ اﻻﺟﺮاء ﻋﻤﻠﻪ‪.‬‬

‫وﺑﺎﻟﺘﺎﻟﻲ ﻓﺎن اﻻﺟﺮاء ﺳﻮف ﻳﻜﻮن آﻤﺎﻳﻠﻲ‪:‬‬

‫‪DECLARE‬‬
‫;‪no_Student studys.NO_STU%type‬‬
‫;‪hou courses.hours%type‬‬
‫;‪mark studys.mark%type‬‬
‫;‪cou_code courses.code%type‬‬
‫;‪poi studys.point%type‬‬
‫‪cursor st_point is‬‬
124 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

select NO_STU,COURSE_CODE,MARK from studys;


BEGIN
open st_point;
loop
exit when st_point%notfound;
fetch st_point into no_Student,cou_code,mark;
select hours
into hou
from courses
where code=cou_code ;
if (mark>=95)and(mark<=100) then
poi:=5 * hou;
elsif mark>=90 then
poi:=4.75 * hou;
elsif mark>=85 then
poi:=4.5 * hou;
elsif mark>=80 then
poi:=4 * hou;
elsif mark>=75 then
poi:=3.5 * hou;
elsif mark>=70 then
poi:=3 * hou;
elsif mark>=65 then
poi:=2.5 * hou;
elsif mark>=60 then
poi:=2 * hou;
else
poi:=1 * hou;
end if;
update studys set POINT=poi
where NO_STU=no_Student and COURSE_CODE=cou_code
;
end loop;
close st_point;
end;

‫ﻻﺣﻆ هﻨﺎ اﻧﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ اﻟﻤﺆﺷﺮات اﻟﺼﺮﻳﺤﺔ واﻟﻤﺆﺷﺮات اﻟﻀﻤﻨﻴﻪ واﻟﺼﺮﻳﺤﺔ اﺳﺘﺨﺪﻣﻨﺎﻩ ﻟﻜﻲ‬
‫ واﻟﻤﺆﺷﺮ اﻟﻀﻤﻨﻠﻲ اﺳﺘﺨﺪﻣﻨﺎ ﻟﻜﻲ ﻳﻌﻮد ﺑﻌﺪد اﻟﺴﺎﻋﺎت ﻓﻲ آﻞ‬studys ‫ﺗﻘﻮم ﺑﻔﺘﺢ ﺳﺠﻼت اﻟﺠﺪول‬
.‫ﻣﺮة ﻳﺪور ﺑﺎﻟﺤﻠﻘﺔ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪125 http://www.boosla.com‬‬

‫ﺷﺮح اﻻﺟﺮاء ‪:‬‬

‫ﻓﻲ اﻟﺘﻌﺮﻳﻔﺎت اﺗﻮﻗﻊ اﻧﻪ ﻻﺗﻮﺟﺪ هﻨﺎك ﻣﺸﻜﻠﺔ ﻟﺪﻳﻜﻢ ‪ ,‬اﻣﺎ ﺟﺴﻢ اﻟﺒﺮﻧﺎﻣﺞ اﺑﺘﺪًأ ﻣﻦ ‪ begin‬ﻓﻬﻮ‬
‫آﻤﺎﻳﻠﻲ ‪:‬‬

‫اوﻻ ﻳﻔﺘﺢ اﻟﻤﺆﺷﺮ اﻟﺼﺮﻳﺢ واﻟﺬي ﻳﺤﺘﻮي ﻋﻠﻰ ﺟﻤﻴﻊ ﺳﺠﻼت اﻟﺠﺪول ‪ studys‬ﺛﻢ ﻳﻜﻮن ﺣﻠﻘﺔ‬
‫دوراﻧﻴﺔ ﻟﻜﻲ ﻳﻤﺮ ﻋﻠﻰ ﺟﻤﻴﻊ ﺳﺠﻼت اﻟﻄﻼب اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻤﺆﺷﺮ اﻟﺼﺮﻳﺢ وﻃﺒﻌﺎ ﺷﺮط اﻻﻧﻬﺎء‬
‫ﻟﻬﺬﻩ اﻟﺤﻠﻘﺔ هﻮ اﻟﻮﺻﻮل اﻟﻰ اﺧﺮ ﺳﺠﻞ ‪ .‬ﺛﻢ ﻳﻘﻮم ﺑﻌﻤﻠﻴﺔ ﺗﺤﺪﻳﺚ ﺳﺠﻼت اﻟﻄﺎﻟﺐ اﻻوﻟﻰ ﻓﻲ‬
‫اﻟﻤﺘﻐﻴﺮات آﻤﺎﻳﻠﻲ‪:‬‬

‫;‪fetch st_point into no_Student,cou_code,mark‬‬

‫وﻃﺒﻌﺎ اﻟﻤﺘﻐﻴﺮات هﻲ رﻗﻢ اﻟﻄﺎﻟﺐ ورﻗﻢ اﻟﻤﻘﺮر واﻟﺪرﺟﺔ ﻓﻲ اﻟﻤﻘﺮر وﻟﻨﻔﺮض اﻻن ﻧﺤﻦ اﻻن ﻋﻨﺪ‬
‫اﻟﺴﺠﻞ اﻻول ووهﻮ اﻟﻄﺎﻟﺐ اﻟﺬي رﻗﻤﻪ ‪ 111‬ورﻗﻢ اﻟﻤﻘﺮر ‪ CS216‬ودرﺟﺘﻪ هﻲ ‪ 88‬ﺳﻮف ﻳﻀﻊ‬
‫هﺬﻩ اﻟﺒﻴﺎﻧﺎت ﻓﻲ اﻟﻤﺘﻐﻴﺮات‪ ,‬ﺛﻢ ﻳﺴﺘﺨﺪم ﻣﺆﺷﺮ ﺿﻤﻨﻲ ﻟﻜﻲ ﻳﺤﻀﺮ ﻋﺪد ﺳﺎﻋﺎت اﻟﻤﺎدة اﻟﺘﻲ درﺳﻬﺎ‬
‫اﻟﻄﺎﻟﺐ ‪ 111‬وهﻲ ‪ CS216‬و اﻟﻤﺆﺷﺮ هﻮ‬

‫‪select hours‬‬
‫‪into hou‬‬
‫‪from courses‬‬
‫; ‪where code=cou_code‬‬

‫وﻣﻌﻨﻰ هﺬا اﺣﻀﺮ ﻋﺪد ﺳﺎﻋﺎت اﻟﻤﻘﺮر اﻟﺬي رﻗﻤﻪ هﻮ ‪ cou_code‬وهﺬا اﻟﻤﺘﻐﻴﺮ هﻮ ﻣﻌﺮوف‬
‫ﻣﻦ اﻟﻤﺆﺷﺮ اﻟﺼﺮﻳﺢ اﻻول وﺳﺒﺐ اﺳﺘﺨﺪاﻣﻨﺎ هﺬا اﻟﻤﺆﺷﺮ هﻮ ان ﻋﺪد ﺳﺎﻋﺎت اﻟﻤﻘﺮر ﻣﻮﺟﻮدة ﻓﻲ‬
‫ﺟﺪول اﺧﺮ وﻻﺑﺪ ﻣﻦ اﺳﺘﺨﺪام هﺬا اﻟﻤﺆﺷﺮ ﻟﻜﻲ ﻳﺤﻀﺮ ﻋﺪد اﻟﺴﺎﻋﺎت‪ .‬وﺑﻤﺎ اﻧﻨﺎ ﻓﺮﺿﻨﺎ اﻧﻨﺎ ﻋﻨﺪ‬
‫اﻟﺴﺠﻞ اﻻول ﻓﺴﻮف ﻳﺤﻀﺮ ﻋﺪد ﺳﺎﻋﺎت اﻟﻤﻘﺮر ‪ CS216‬وهﻲ ‪ 3‬ﺳﺎﻋﺎت ﺛﻢ ﺑﺪأ ﻳﺨﺘﺒﺮ اﻟﺪرﺟﺔ‬
‫وذﻟﻚ ﻃﺒﻘﺎ ﻟﻠﺠﺪول اﻟﺪرﺟﺎت واﻟﻤﻌﺪﻻت ﺣﻴﺚ آﺎﻧﺖ درﺟﺔ اﻟﻄﺎﻟﺐ اﻟﺬي رﻗﻤﻪ ‪ 111‬ﻓﻲ اﻟﻤﻘﺮر‬
‫‪ cCS216‬هﻲ ‪ 88‬وﺑﺎﻟﺘﺎﻟﻲ ﻳﻜﻮن ﻋﺪد اﻟﻨﻘﺎط آﻤﺎﻳﻠﻲ = ‪ , 13.5 = 3 * 4.75‬وﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ‬
‫ﺣﺴﺎب اﻟﻤﻌﺪل ﻳﻘﻮم ﺑﻨﻌﺪﻳﻞ اﻟﺠﺪول وﺗﺤﺪﻳﺚ ﻗﻴﻤﺔ ‪ point‬ﺑﻘﻴﻤﺘﻬﺎ اﻟﺠﺪﻳﺪة ‪ ,‬وهﻜﺬا ﻳﻤﺮ ﻋﻠﻰ آﻞ‬
‫ﻃﺎﻟﺐ ﺑﻨﻔﺲ اﻟﻄﺮﻳﻘﺔ اﻟﺴﺎﺑﻘﺔ اﻟﻰ ان ﻳﺼﻞ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺴﺠﻼت‪.‬وﺑﺎﻟﺘﺎﻟﻲ ﺗﻜﻮن اﻟﻨﺘﺎﺋﺞ آﻤﺎﻳﻠﻲ ﻓﻲ‬
‫اﻟﺠﺪول ‪: studys‬‬

‫‪NO_STU COURSE_CODE MARK POINT‬‬


‫‪111‬‬ ‫‪216CS‬‬ ‫‪88‬‬ ‫‪13.5‬‬
‫‪222‬‬ ‫‪225CS‬‬ ‫‪75‬‬ ‫‪10.5‬‬
‫‪333‬‬ ‫‪225CS‬‬ ‫‪40‬‬ ‫‪3‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪126 http://www.boosla.com‬‬

‫‪111‬‬ ‫‪225CS‬‬ ‫‪90‬‬ ‫‪14.25‬‬


‫‪222‬‬ ‫‪216CS‬‬ ‫‪78‬‬ ‫‪10.5‬‬
‫‪333‬‬ ‫‪216CS‬‬ ‫‪85‬‬ ‫‪13.5‬‬

‫ﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ هﺬا اﻟﻤﺜﺎل ﻧﻜﻮن اﻧﻬﻴﻨﺎ اﻟﻤﺆﺷﺮات ﺑﻨﻮﻋﻴﻬﺎ ﺑﺸﻜﻞ ﺗﺎم وﺑﺎﻣﺜﻠﻪ واﻗﻌﻴﻪ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪127 http://www.boosla.com‬‬

‫اﻟﻤﺼﻔﻮﻓﺎت و اﻻﺟﺮاﺋﻴﺎت و اﻟﺪوال اﻟﻤﺨﺰﻧﺔ‬


‫اهﺪاف اﻟﻔﺼﻞ‬
‫ﺳﻨﺘﻌﻠﻢ ﻓﻲ هﺬا اﻟﻘﺼﻞ ﺑﺎذن اﷲ‬
‫اﻧﺸﺎء اﻟﻤﺼﻔﻮﻓﺎت واﻟﺘﻌﺎﻣﻞ ﻣﻌﻬﺎ‬ ‫‪-1‬‬
‫آﻴﻔﻴﺔ اﻧﺸﺎء اﺟﺮاء‬ ‫‪-2‬‬
‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﻮﻇﺎﺋﻒ اﻟﻤﺨﺰﻧﺔ‬ ‫‪-3‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪128 http://www.boosla.com‬‬

‫اﻟﺠـﺪاول ﻓﻲ ‪ ) pl/sql‬اﻟﻤﺼﻔﻮﻓﺎت(‬
‫ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺠﺪاول )اﻟﻤﺼﻔﻮﻓﺎت( ﻣﺜﻞ اﻟﻤﺼﻔﻮﻓﺎت ﻓﻲ هﻲ ﻟﻐﺔ ﻣﻦ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﻣﺜﻞ ﻟﻮ آﺎﻧﺖ‬
‫ﻟﺪﻳﻚ ﺳﻠﺴﻠﺔ ﻣﻦ اﻻرﻗﺎم وﺗﺮﻳﺪ ﺗﺨﺰﻳﻨﻬﺎ ﻓﺎﻧﻚ ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺠﺪاول ﻟﻠﺘﺨﺰﻳﻦ وﻳﺘﻢ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻣﻦ‬
‫هﺬا اﻟﻨﻮع آﻤﺎﻳﻠﻲ اوﻻ ﻳﺘﻢ ﺗﻌﺮﻳﻒ هﺬا اﻟﻨﻮع ‪:‬‬

‫‪TYPE‬‬ ‫‪ INDEX BY‬ﻧﻮع_اﳌﺘﻐﲑ ‪ IS TABLE OF‬اﺳﻢ_اﻟﻨﻮع‬


‫‪BINARY_INTEGER‬‬

‫ﻣﺜﺎل ﻋﻠﻰ ذﻟﻚ ‪:‬‬

‫‪DECLARE‬‬
‫‪TYPE num_array IS TABLE OF number(4) INDEX BY‬‬
‫;‪BINARY_INTEGER‬‬
‫;‪num num_array‬‬
‫‪BEGIN‬‬
‫‪........‬‬
‫‪........‬‬
‫;‪END‬‬

‫ﻻﺣﻆ اوﻻ ﺗﻢ ﺗﻌﺮﻳﻒ ﻧﻮع واﺳﻤﺎﻩ ‪ , num_array‬ﺛﻢ ﻗﺎم ﺑﺘﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ‪ num‬واﻋﻄﺎﻩ ﻧﻮع‬
‫‪ num_array‬وهﻮ اﻟﻨﻮع اﻟﺠﺪﻳﺪ اﻟﺬي ﻗﻤﻨﺎ ﺑﺎﻧﺸﺎءﻩ‪.‬‬

‫ﻣﺜﺎل ﻋﻤﻠﻲ ‪/‬‬

‫;‪set serveroutput on‬‬


‫‪DECLARE‬‬
‫‪TYPE num_array IS TABLE OF number(4) INDEX BY‬‬
‫;‪BINARY_INTEGER‬‬
‫‪i‬‬ ‫;)‪number(4‬‬
‫‪num‬‬ ‫;‪num_array‬‬
‫‪BEGIN‬‬
‫‪FOR i IN 1..10 LOOP‬‬
‫; ‪num(i) := i * i‬‬
‫;‪END LOOP‬‬
‫‪FOR i IN 1..10 LOOP‬‬
‫|| ' =' || ‪DBMS_OUTPUT.PUT_LINE(i || '*' || i‬‬
‫;) )‪num(i‬‬
‫;‪END LOOP‬‬
‫;‪END‬‬
‫‪/‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪129 http://www.boosla.com‬‬

‫ووﻳﻜﻮن ﻋﻤﻞ هﺬا اﻻﺟﺮاء آﻤﺎﻳﻠﻲ ‪ :‬اﻟﺤﻠﻘﺔ اﻻوﻟﻰ ﺗﻘﻮم ﺑﻀﺮب اﻟﻌﺪد ‪ i‬ﻓﻲ ﻧﻔﺴﻪ وﺗﺨﺰﻧﻪ ﻓﻲ‬
‫اﻟﻤﺘﻐﻴﺮ ‪ num‬ﺑﺮﺗﺒﻪ ‪ i‬وهﻜﺬا واﻟﺤﻠﻘﺔ اﻟﺜﺎﻧﻴﺔ ﻟﻠﻄﺒﺎﻋﺔ وﻳﻜﻮن اﻟﻨﺎﺗﺞ آﻤﺎﻳﻠﻲ ‪:‬‬

‫‪1*1= 1‬‬
‫‪2*2= 4‬‬
‫‪3*3= 9‬‬
‫‪4*4= 16‬‬
‫‪5*5= 25‬‬
‫‪6*6= 36‬‬
‫‪7*7= 49‬‬
‫‪8*8= 64‬‬
‫‪9*9= 81‬‬
‫‪10*10= 100‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪130 http://www.boosla.com‬‬

‫اﻻﺟﺮاﺋﻴﺎت اﻟﻤﺨﺰﻧﺔ‬
‫ﺷﺎهﺪﻧﺎ ﻓﻲ اﻟﺪروس اﻟﻤﺎﺿﻴﺔ ان اي اﺟﺮاء ﻧﻘﻮم ﺑﻜﺘﺎﺑﺔ اﻧﻲ اذا اردت اﺳﺘﺨﺪاﻣﺔ اآﺜﺮ ﻣﻦ ﻣﺮة ﻓﺎﻧﻲ‬
‫اﻗﻮم ﺑﻜﺘﺎﺑﺔ آﻞ ﻣﺮة ﻓﻲ ‪ sql * plus‬ﻟﻜﻲ اﺣﺼﻞ ﻋﻠﻰ اﻟﻨﺘﺎﺋﺞ ﻟﻜﻦ ﻣﺎهﻮ رأﻳﻚ ﻟﻮ ﻧﻘﻮم ﺑﺘﺨﺰﻳﻦ هﺬا‬
‫اﻻﺟﺮاء ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وﻧﻌﻄﻴﺔ اﺳﻢ وﺣﻴﻨﻤﺎ ﻧﺤﺘﺎﺟﻪ ﻧﺴﺘﺪﻋﻴﺔ ﺑﺎﺳﻤﻪ وهﺬا ﻳﻮﻓﺮ ﻋﻠﻴﻨﺎ اﻟﺸﻲء‬
‫اﻟﻜﺜﻴﺮ ﻟﺬﻟﻚ ﻓﺼﻠﻨﺎ هﻮ اﻻﺟﺮاﺋﻴﺎت اﻟﻤﺨﺰﻧﺔ‪.‬‬

‫وﻟﻜﻲ ﻧﻘﻮم ﺑﺎﻧﺸﺎء اﺟﺮاء ﻣﺨﺰن ﻧﻘﻮم ﺑﻤﺎﻳﻠﻲ ‪:‬‬

‫‪CREATE [OR REPLACE] PROCEDURE procedure-name‬‬


‫‪[(argument1 ... [, argumentN) ] IS‬‬
‫]‪[local-variable-declarations‬‬
‫‪BEGIN‬‬
‫‪executable-section‬‬
‫]‪[exception-section‬‬
‫;]‪END [procedure-name‬‬

‫ﺣﻴﺚ أن‬

‫اﺳﻢ اﻻﺟﺮاء اﻟﻤﺴﺘﺨﺪم‪.‬‬ ‫‪procedure_name‬‬

‫اﻣﺎ ‪ OR REPLACE‬ﻓﻬﻲ ﺗﻮﺿﻊ ﺣﻴﻨﻤﺎ ﺗﻌﻠﻢ ان اﻻﺟﺮاء ﻣﻮﺟﻮد ﻣﻦ اﻟﺴﺎﺑﻖ‪.‬‬

‫اﻣﺎ ﻋﻦ اﻟﻤﻐﻴﺮات اﻟﺘﻲ ﺑﻴﻦ اﻟﻘﻮﺳﻴﻦ ﻓﻬﻲ اﻣﺎ ﻣﺘﻐﻴﺮات ﻣﺪﺧﻠﻪ ﻣﺜﻞ اذا آﺎن ﻟﺪﻳﻚ اﺟﺮاء ﺣﺴﺎب‬
‫ﻣﻌﺪل ﻃﺎﻟﺐ وﺗﺮﻳﺪ ﺗﻤﺮﻳﺮ رﻗﻢ اﻟﻄﺎﻟﺐ اﻟﺬي ﺗﺮﻳﺪ ﺣﺴﺎب ﻣﻌﺪﻟﻪ ﻓﻬﺬﻩ هﻲ ﺗﻌﺘﺒﺮ آﻤﺪﺧﻼت‬
‫وﻟﺘﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﺑﻬﺬا اﻟﺸﻜﻞ ﻳﻜﻮن آﻤﺎﻳﻠﻲ ‪:‬‬

‫‪student_id‬‬ ‫)‪in number(9‬‬

‫ﻻﺣﻆ اﺳﻢ اﻟﻤﺘﻐﻴﺮ هﻮ ‪ student_id‬ﺛﻢ ﺑﻌﺪﻩ وﺿﻌﻨﺎ اﻟﻜﻠﻤﺔ ‪ in‬وﻣﻌﻨﻰ ان هﺬا اﻟﻤﺘﻐﻴﺮ ﻳﻌﺘﺒﺮ‬
‫آﻤﺪﺧﻞ‬

‫اﻣﺎ ﻟﺘﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻳﻌﻮد ﺑﻘﻴﻤﺔ ﻣﻦ اﻻﺟﺮاء ﻣﺜﻼ ﻟﻮ اردﻧﺎ ﺗﻌﺮف ﻣﺘﻐﺒﺮ ﻳﺮﺟﻊ ﺑﻤﻌﺪل اﻟﻄﺎﻟﺐ ﻳﺘﻢ‬
‫اﻟﺘﻌﺮﻳﻒ آﻤﺎﻳﻠﻲ ‪:‬‬

‫)‪ave out number(5,2‬‬

‫ﺑﻌﺪ ﺗﻨﻔﻴﺬ اﻻﺟﺮاء ﻳﻜﻮن هﺬا اﻟﻤﺘﻐﻴﺮ ﻳﺤﺘﻮي ﻋﻠﻰ ﻣﻌﺪل اﻟﻄﺎﻟﺐ اﻟﺬي ﺗﻢ ﺗﻤﺮﻳﺮ رﻗﻤﻪ ﻣﺜﻼ‪.‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪131 http://www.boosla.com‬‬

‫ﻣﻊ اﻟﻌﻠﻢ اﻧﻪ ﻳﻤﻜﻦ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻟﻠﻤﺪﺧﻼت واﻟﻤﺨﺮﺟﺎت ﺣﻴﺚ ﺗﻤﺮر ﺑﻪ اﻟﻘﻴﻤﻪ اوﻻ وﺑﻌﺪ ﺗﻨﻔﻴﺬ‬
‫اﻻﺟﺮاء ﻳﺘﻢ وﺿﻊ اﻟﻘﻴﻤﻪ ﻓﻲ ﻧﻔﺲ اﻟﻤﺘﻐﻴﺮ وﺗﺘﻢ آﻤﺎﻳﻠﻲ ‪:‬‬

‫)‪ave in out number(5,2‬‬

‫وﻣﻌﻨﻰ هﺬا اي ﻣﺪﺧﻞ وﻣﺨﺮج ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ ‪.‬‬

‫ﻣــــﺜﺎل ‪:‬‬

‫ﻓﻲ اﻟﺠﺪول اﻟﺬي ﻗﻤﻨﺎ ﺑﺪراﺳﺘﻪ ﻓﻲ اﻟﻔﺼﻮل اﻟﺴﺎﺑﻘﺔ وآﺎن ﺑﺄﺳﻢ ‪studys‬‬

‫وآﺎن آﻤﺎﻳﻠﻲ ‪:‬‬

‫‪NO_STU COURSE_CODE MARK‬‬ ‫‪POINT‬‬


‫‪111‬‬ ‫‪216CS‬‬ ‫‪88‬‬ ‫‪13.5‬‬
‫‪222‬‬ ‫‪225CS‬‬ ‫‪75‬‬ ‫‪10.5‬‬
‫‪333‬‬ ‫‪225CS‬‬ ‫‪40‬‬ ‫‪3‬‬
‫‪111‬‬ ‫‪225CS‬‬ ‫‪90‬‬ ‫‪14.25‬‬
‫‪222‬‬ ‫‪216CS‬‬ ‫‪78‬‬ ‫‪10.5‬‬
‫‪333‬‬ ‫‪216CS‬‬ ‫‪85‬‬ ‫‪13.5‬‬

‫ﻟﻮ اردﻧﺎ ﺗﺼﻤﻴﻢ اﺟﺮاء ﻣﺨﺰن ﻟﻜﻲ ﻳﻘﻮم ﺑﻄﺒﺎﻋﺔ درﺟﺔ اﻟﻄﺎﻟﺐ ﺑﻌﺪ ﺗﻤﺮﻳﺮ رﻗﻢ اﻟﻄﺎﻟﺐ ورﻗﻢ‬
‫اﻟﻤﻘﺮر‪.‬‬

‫اﻻﺟﺮاء اﻟﻤﺨﺰن ﺳﻮف ﻳﻜﻮن آﻤﺎﻳﻠﻲ ‪:‬‬

‫(‪create or replace procedure stu_mark‬‬


‫‪stu_id in studys.NO_STU%type,‬‬
‫)‪cou in studys.COURSE_CODE%type‬‬
‫‪as‬‬
‫;‪mar studys.mark%type‬‬
‫‪begin‬‬
‫‪select mark‬‬
‫‪into mar‬‬
‫‪from studys‬‬
‫‪where NO_STU=stu_id‬‬
‫;‪and COURSE_CODE=cou‬‬
‫;)‪DBMS_OUTPUT.PUT_LINE(mar‬‬
‫;‪end‬‬
‫‪/‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪132 http://www.boosla.com‬‬

‫ﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ﺗﻨﻔﻴﺬ اﻻﺟﺮاء ﻳﻜﻮن اﻻﺟﺮاء ﻣﺨﺰن ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وﻟﻜﻲ ﻧﻘﻮم ﺑﺎﺳﺘﺪﻋﺎءﻩ ﻧﻘﻮم‬
‫ﺑﻤﺎﻳﻠﻲ‬

‫‪begin‬‬
‫;)'‪stu_mark(111,'216CS‬‬
‫;‪end‬‬
‫‪/‬‬

‫ﻻﺣﻆ آﻴﻒ ﺗﻢ اﺳﺘﺪﻋﺎء اﻻﺟﺮاء اﻟﺴﺎﺑﻖ ﻣﻦ ﺧﻼل اﺳﻢ اﻻﺟﺮاء وﺑﺬﻟﻚ ﺳﻮف ﻳﻜﻮن اﻟﻨﺎﺗﺞ ﻋﻠﻰ‬
‫اﻟﺸﺎﺷﺔ آﻤﺎﻳﻠﻲ ‪ 88‬وهﻲ ﺻﺤﻴﺤﺔ ﺑﻌﺪ ﺗﻤﺮﻳﺮ رﻗﻢ اﻟﻄﺎﻟﺐ ‪ 111‬وﻣﻘﺮر ‪216CS‬‬

‫ﻟﻜﻦ ﻻﺣﻆ اﻧﻨﺎ ﻟﻢ ﻧﺴﺘﺨﺪم ﻣﺘﻐﻴﺮات اﺧﺮاج ﻟﻜﻦ ﻣﺄراﻳﻚ ان ﻧﺼﻤﻢ اﺟﺮاء اﺧﺮ ﻳﻘﻮم ﺑﻨﻔﺲ اﻟﻮﻇﻴﻔﺔ‬
‫اﻟﺘﻲ ﻳﻘﻮم ﺑﻬﺎ اﻻﺟﺮاء اﻟﺴﺎﺑﻖ ﻟﻜﻦ ﻋﻤﻠﻴﺔ اﻟﻄﺒﺎﻋﺔ ﺗﻜﻮن ﺑﻌﺪ اﻻﺳﺘﺪﻋﺎء ﻟﻜﻲ ﻧﺠﻌﻞ اﻻﺟﺮاء ﻳﻘﻮم‬
‫ﺑﺎرﺟﺎع درﺟﺔ اﻟﻄﺎﻟﺐ ﺑﻤﺘﻐﻴﺮ ﻟﺬﻟﻚ ﻓﺎن اﻻﺟﺮاء آﻤﺎﻳﻠﻲ ‪:‬‬

‫(‪create or replace procedure stu_mark22‬‬


‫‪stu_id in studys.NO_STU%type,‬‬
‫‪cou in studys.COURSE_CODE%type,‬‬
‫)‪mara out studys.mark%type‬‬
‫‪as‬‬
‫‪begin‬‬
‫‪select mark‬‬
‫‪into mara‬‬
‫‪from studys‬‬
‫‪where NO_STU=stu_id‬‬
‫;‪and COURSE_CODE=cou‬‬
‫;‪end‬‬
‫‪/‬‬

‫ﺑﻌﺪ ذﻟﻚ ﻧﻘﻮم ﺑﺎﺳﺘﺪﻋﺎء اﻻﺟﺮاء وﻣﻦ ﺛﻢ ﻃﺒﺎﻋﺔ اﻟﺪرﺟﺔ ﻻن ﻟﻮ ﻻﺣﻈﺖ اﻻﺟﺮاء ﻻﻳﻘﻮم ﺑﺎﻟﻄﺒﺎﻋﺔ‬
‫وﻻﺣﻆ اﻳﻀﺎ ان اﻟﺪرﺟﺔ ﺗﻢ وﺿﻌﻬﺎ ﻓﻲ اﻟﻤﺘﻐﻴﺮ ‪ mara‬وﻟﺬﻟﻚ ﺳﻮف ﻳﻌﻮد ﺑﻬﺬﻩ اﻟﻘﻴﻤﺔ وﺳﻮف‬
‫ﻳﻜﻮن اﻻﺳﺘﺪﻋﺎء آﻤﺎﻳﻠﻲ ‪:‬‬

‫‪declare‬‬
‫;‪m studys.mark%type‬‬
‫‪begin‬‬
‫;)‪stu_mark1(111,'225CS',m‬‬
‫;)‪DBMS_OUTPUT.PUT_Line(m‬‬
‫;‪end‬‬
‫‪/‬‬

‫وﺳﻮف ﻳﻜﻮن اﻟﻨﺎﺗﺞ هﻮ ‪ 90‬وهﺬا ﺻﺤﻴﺢ ﺑﻨﺎء ﻋﻠﻰ اﻟﺠﺪول‪.‬‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪133 http://www.boosla.com‬‬

‫اﻟﻮﻇﺎﺋﻒ اﻟﻤﺨﺰﻧﺔ‬
‫آﺎن درﺳﺎ اﻟﺴﺎﺑﻖ ﻋﻦ اﻻﺟﺮاءات اﻟﻤﺨﺰﻧﺔ واﻟﻴﻮم ﻟﺪﻳﻨﺎ درس ﻣﺸﺎﺑﻪ ﻟﻪ وهﻮ اﻟﻮﻇﺎﺋﻒ اﻟﻤﺨﺰﻧﺔ‬
‫ﻟﻜﻦ اﻟﻔﺮق ان اﻟﻮﻇﺎﺋﻒ ﻻﺑﺪ ان ﺗﻌﻴﺪ ﻗﻴﻤﺔ‬

‫واﻟﺼﺴﻐﺔ اﻟﻌﺎﻣﺔ ﻟﺘﻜﻮﻳﻦ وﻇﻴﻔﺔ آﻤﺎﻳﻠﻲ‪:‬‬

‫‪CREATE [OR REPLACE] FUNCTION function-name‬‬


‫] )‪[(argument1 ... [, argumentN‬‬
‫‪RETURN function-datatype IS‬‬
‫]‪[local-variable-declarations‬‬
‫‪BEGIN‬‬
‫‪executable-section‬‬
‫]‪[exception-section‬‬
‫‪RETURN function-value‬‬
‫;]‪END [function-name‬‬

‫ﺣﻴﺚ أن‬

‫‪ function_name‬اﺳﻢ اﻟﻮﻇﻴﻔﺔ اﻟﻤﺴﺘﺨﺪﻣﻪ‪.‬‬

‫اﻣﺎ ‪ REPLACE OR‬ﻓﻬﻲ ﺗﻮﺿﻊ ﺣﻴﻨﻤﺎ ﺗﻌﻠﻢ ان اﻻﺟﺮاء ﻣﻮﺟﻮد ﻣﻦ اﻟﺴﺎﺑﻖ‪.‬‬

‫اﻣﺎ ﻋﻦ اﻟﻤﻐﻴﺮات اﻟﺘﻲ ﺑﻴﻦ اﻟﻘﻮﺳﻴﻦ ﻓﻬﻲ اﻣﺎ ﻣﺘﻐﻴﺮات ﻣﺪﺧﻠﻪ ﻣﺜﻞ اذا آﺎن ﻟﺪﻳﻚ اﺟﺮاء ﺣﺴﺎب‬
‫ﻣﻌﺪل ﻃﺎﻟﺐ وﺗﺮﻳﺪ ﺗﻤﺮﻳﺮ رﻗﻢ اﻟﻄﺎﻟﺐ اﻟﺬي ﺗﺮﻳﺪ ﺣﺴﺎب ﻣﻌﺪﻟﻪ ﻓﻬﺬﻩ هﻲ ﺗﻌﺘﺒﺮ آﻤﺪﺧﻼت ‪ ,‬وهﻲ‬
‫ﺑﻨﻔﺲ اﻟﻄﺮﻳﻘﺔ اﻟﺘﻲ ﺗﻌﺎﻣﻠﻨﺎ ﺑﻬﺎ ﻣﻊ اﻻﺟﺮاءت اﻟﻤﺨﺰﻧﺔ ﻻﺗﻐﻴﺮ ﻋﻠﻰ اﻟﻤﺘﻐﻴﺮات وﻃﺮق ﺗﻌﺮﻳﻔﻬﺎ‪.‬اﻣﺎ‬
‫‪ datatype RETURN‬ﻓﻬﻲ ﺗﺪل ﻋﻠﻰ ﻧﻮع اﻟﻘﻴﻤﺔ اﻟﻤﻌﺎدة ﻣﻦ اﻟﻮﻇﻴﻔﺔ ‪.‬‬

‫ﻣﺜــــــــﺎل ‪ :‬ﻓﻲ اﻟﺠﺪول اﻟﺬي ﻗﻤﻨﺎ ﺑﺪراﺳﺘﻪ ﻓﻲ اﻟﺪرس اﻟﺮاﺑﻊ وآﺎن ﺑﺄﺳﻢ ‪ studys‬وآﺎن آﻤﺎﻳﻠﻲ‬
‫‪:‬‬

‫‪NO_STU COURSE_CODE MARK‬‬ ‫‪POINT‬‬


‫‪111‬‬ ‫‪216CS‬‬ ‫‪88‬‬ ‫‪13.5‬‬
‫‪222‬‬ ‫‪225CS‬‬ ‫‪75‬‬ ‫‪10.5‬‬
‫‪333‬‬ ‫‪225CS‬‬ ‫‪40‬‬ ‫‪3‬‬
‫‪111‬‬ ‫‪225CS‬‬ ‫‪90‬‬ ‫‪14.25‬‬
‫‪222‬‬ ‫‪216CS‬‬ ‫‪78‬‬ ‫‪10.5‬‬
‫‪333‬‬ ‫‪216CS‬‬ ‫‪85‬‬ ‫‪13.5‬‬

‫ﻟﻮ اردﻧﺎ ﺗﺼﻤﻴﻢ وﻇﻴﻔﺔ ﺗﺮﺟﻊ ﺑﻤﻌﺪل اﻟﻄﺎﻟﺐ اﻟﻔﺼﻞ اي ﻳﺘﻢ ﺗﻤﺮﻳﺮ رﻗﻢ اﻟﻄﺎﻟﺐ اﻟﻰ اﻟﻮﻇﻴﻔﺔ ﺛﻢ ﻳﺘﻢ‬
‫ﺣﺴﺎب اﻟﻤﻌﺪل اﻟﻔﺼﻠﻲ ﻟﻠﻄﺎﻟﺐ‬
134 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

‫وﻳﺘﻢ ﺣﺴﺎب اﻟﻤﻌﺪل اﻟﻔﺼﻞ ﻟﻠﻄﺎﻟﺐ آﻤﺎﻳﻠﻲ =ﻣﺠﻤﻮع اﻟﻨﻘﺎط ÷ ﻣﺠﻤﻮع ﻋﺪد اﻟﺴﺎﻋﺎت ﻟﻤﻘﺮرات‬

: ‫وﻻﻧﺸﺎء اﻟﻮﻇﻴﻔﺔ آﻤﺎﻳﻠﻲ‬

create or replace function stu_avea(stnum in


1
studys.NO_STU%type)
2
return real
3
as
4
hour courses.hours%type;
5
avrage number(4,2);
6
sum_hours courses.hours%type:=0;
7
point studys.POINT%type;
8
total_Point studys.POINT%type:=0;
9
codem courses.CODE%type;
10
cursor sumpoint
11
is
12
select COURSE_CODE,POINT
13
from studys
14
where NO_STU=stnum;
15
begin
16
open sumpoint;
17
loop
18
fetch sumpoint into codem,point;
19
exit when sumpoint%notfound;
20
select hours
21
into hour
22
from courses
23
where code=codem;
24
total_Point:=total_Point+point;
25
sum_hours:=sum_hours+hour;
26
end loop;
27
close sumpoint;
28
avrage:=total_Point/sum_hours;
29
return avrage;
30
end;

: ‫اﻟﺸﺮح‬

‫ ﻟﺘﻌﺮﻳﻒ اﻟﻮﻇﻴﻔﺔ‬:1 ‫اﻟﺴﻄﺮ رﻗﻢ‬


‫ ﻧﻮع اﻟﻘﻴﻤﺔ اﻟﺘﻲ ﺳﻮف ﺗﺮﺟﻊ ﺑﻬﺎ اﻟﻮﻇﻴﻔﺔ‬:2 ‫اﻟﺴﻄﺮ رﻗﻢ‬
‫ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻋﺪد اﻟﺴﺎﻋﺎت وهﻮ ﻧﻔﺲ ﺣﻘﻞ ﻋﺪد ﺳﺎﻋﺎت اﻟﻤﻘﺮر اﻟﻤﻮﺟﻮدة ﻓﻲ‬:4 ‫اﻟﺴﻄﺮ رﻗﻢ‬
courses ‫ﺟﺪول‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪135 http://www.boosla.com‬‬

‫اﻟﺴﻄﺮ رﻗﻢ ‪ :5‬ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ اﻟﺬي ﺳﻮف ﻧﻀﻊ ﺑﻪ اﻟﻤﻌﺪل‬


‫اﻟﺴﻄﺮ رﻗﻢ ‪ :6‬ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻟﻜﻲ ﻳﻮﺿﻊ ﺑﻪ ﻣﺠﻤﻮﻋﺎت اﻟﺴﺎﻋﺎت ﻟﻠﻄﻼب ﻓﻲ آﻞ اﻟﻤﻮاد‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :7‬ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻟﻜﻲ ﻳﻮﺿﻊ ﺑﻪ ﻋﺪد ﻧﻘﺎط اﻟﻄﻼب ﻓﻲ اي ﻣﻘﺮر‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :8‬ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻟﻜﻲ ﻳﻮﺿﻊ ﺑﻪ ﻣﺠﻤﻮع ﻋﺪد ﻧﻘﺎط اﻟﻄﺎﻟﺐ ﻓﻲ آﻞ اﻟﻤﻘﺮر‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :9‬ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻟﻜﻮد اﻟﻤﺎدة‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :10‬ﺗﻌﺮﻳﻒ ﻣﺆﺷﺮ ﺻﺮﻳﺢ ﻟﻠﺤﺼﻮل ﻋﻠﻰ آﻮد اﻟﻤﺎدة ﻟﻜﻲ ﻧﺴﺘﻔﻴﺪ ﻣﻨﻪ ﻓﻲ اﻟﺤﺼﻮل‬
‫ﻋﻠﻰ ﻋﺪد اﻟﺴﺎﻋﺎت وﻋﺪد اﻟﻨﻘﺎط ﻓﻲ ذﻟﻚ اﻟﻤﻘﺮر ﻟﻜﻲ ﻧﻀﻴﻔﻬﺎ اﻟﻰ ﻣﺠﻤﻮع اﻟﻨﻘﺎط‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :16‬ﻓﺘﺢ هﺬا اﻟﻤﺆﺷﺮ ﻟﻜﻲ ﻧﺘﻌﺎﻣﻞ ﻣﻌﻪ‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :17‬اﻟﺪﺧﻮل ﻋﻠﻰ ﺣﻠﻘﺔ ﻟﻜﻲ ﻧﻤﺮ ﻋﻠﻰ ﺟﻤﻴﻊ اﻟﺠﺪول‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :18‬ﺗﺤﺪﻳﺚ ﻗﻴﻢ اﻟﻤﺆﺷﺮ ﻟﻠﺴﺠﻞ اﻟﺤﺎﻟﻲ ﻓﻲ اﻟﻤﺘﻐﻴﺮات ‪codem,point‬‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :19‬ﺷﺮط اﻧﻬﺎء اﻟﺤﻠﻘﺔ وهﻮ اذا ﻟﻢ ﻳﺠﺪ اي ﺳﺠﻞ ﻓﻲ اﻟﻤﺆﺷﺮ‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :20‬ﻣﺆﺷﺮ ﺿﻤﻨﻲ ﻟﻜﻲ ﻳﻘﻮم ﺑﺎﻟﺤﺼﻮل ﻋﻠﻰ ﻋﺪد ﺳﺎﻋﺎت اﻟﻄﻼب ﻓﻲ اﻟﻤﻘﺮر‬
‫اﻟﻤﻮﺟﻮد ﺣﺎﻟﻴﺎ ﻓﻲ اﻟﻤﺆﺷﺮ اﻟﺼﺮﻳﺢ وﻳﻀﻊ ﻋﺪد اﻟﺴﺎﻋﺎت ﻓﻲ اﻟﻤﺘﻐﻴﺮ ‪hour‬‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :24‬اﺿﺎﻓﺔ ﻋﺪد اﻟﻨﻘﺎط ﻟﻠﻤﻘﺮر اﻟﺤﺎﻟﻲ اﻟﻰ ﻣﺠﻤﻮع اﻟﻨﻘﺎط اﻟﺴﺎﺑﻖ‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :25‬اﺿﺎﻓﺔ ﻋﺪد اﻟﺴﺎﻋﺎت ﻟﻠﻤﻘﺮر اﻟﺤﺎﻟﻲ اﻟﻰ ﻣﺠﻤﻮع اﻟﺴﺎﻋﺎت اﻟﺴﺎﺑﻖ‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :26‬اﻟﺨﺮوج ﻣﻦ اﻟﺤﻠﻘﺔ‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :27‬اﻧﻬﺎء اﻟﻤﺆﺷﺮ اﻟﻀﻤﻨﻲ‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :28‬ﺣﺴﺎب اﻟﻤﻌﺪل وهﻮ ﻣﺠﻤﻮع اﻟﻨﻘﺎط ﺗﻘﺴﻴﻢ ﻣﺠﻤﻮع ﻋﺪد اﻟﺴﺎﻋﺎت‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :29‬اﻟﺮﺟﻮع ﺑﻘﻴﻤﺔ اﻟﻤﻌﺪل‬
‫اﻟﺴﻄﺮ رﻗﻢ ‪ :30‬اﻻﻧﻬﺎء‬

‫اﻻن ﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ﺷﺮح ﻃﺮﻳﻘﺔ ﺗﺼﻤﻴﻢ اﻟﻮﻇﻴﻔﺔ ﺟﺎء دور ﻃﺮﻳﻘﺔ اﻻﺳﺘﺪﻋﺎء ‪:‬‬

‫ﻟﻜﻦ ﻗﺒﻞ اﻻﺳﺘﺪﻋﺎء ﻟﻨﺤﺴﺐ ﻳﺪوﻳﺎ ﻣﻌﺪل اﻟﻄﺎﻟﺐ اﻟﺬي رﻗﻤﻪ ‪ 111‬ﻣﺜﻞ ﻟﻜﻲ ﻧﻘﺎرﻧﻪ ﺑﺎﻟﻨﺘﺎﺋﺞ ﺑﻌﺪ‬
‫اﻻﺳﺘﻌﻼم ‪:‬‬

‫ﻣﺠﻤﻮع ﻧﻘﺎط اﻟﻄﺎﻟﺐ = ‪27.75 =14.25+13.5‬‬

‫ﻣﺠﻤﻮع ﻋﺪد اﻟﺴﺎﻋﺎت = )ﻋﺪد ﺳﺎﻋﺎت اﻟﻤﻘﺮر ‪) + ( CS216‬ﻋﺪد ﺳﺎﻋﺎت اﻟﻤﻘﺮر ‪CS )225‬‬
‫=‪6=3+3‬‬

‫وﺑﺎﻟﺘﺎﻟﻲ ﻓﺎن ﻣﻌﺪل اﻟﻄﺎﻟﺐ = ‪4.63 = 6 ÷ 27.75‬‬

‫ﻟﻜﻦ اﻻن دﻋﻨﺎ ﻧﺴﺘﺪﻋﻲ اﻟﺪاﻟﺔ وﻧﺸﺎهﺪ اﻟﻨﺘﺎﺋﺞ‬

‫)‪SELECT distinct(NO_STU),stu_avea(no_stu‬‬
‫‪from studys‬‬
‫;‪where no_stu=111‬‬

‫ﻻﺣﻆ آﻴﻒ ﺗﻢ اﺳﺘﺪﻋﺎء اﻟﺪاﻟﺔ ﻣﻦ ﺧﻼل اﻻﺳﺘﻌﻼم وﻻﺣﻆ اﺳﺘﺨﺪام اﻟﺪاﻟﺔ ‪ distinct‬وهﻲ ﻟﻌﺪم‬
‫ﺗﻜﺮار اﻟﺴﺠﻞ واﻟﻴﻚ اﻟﻨﺘﺎﺋﺞ ‪:‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪136 http://www.boosla.com‬‬

‫‪NO_STU‬‬ ‫)‪STU_AVEA(NO_STU‬‬
‫‪------‬‬ ‫;‬ ‫‪----------------‬‬
‫‪111‬‬ ‫‪4.63‬‬

‫ﻻﺣﻆ ﻟﻮ آﺎن اﻻﺳﺘﻌﻼم ﺑﺪون وﺟﻮد اﻟﺪاﻟﺔ ‪ distinct‬ﻓﺴﻮف ﻳﺘﻜﺮر رﻗﻢ اﻟﻄﺎﻟﺐ ﻋﺪد ﻇﻬﻮرﻩ ﻓﻲ‬
‫اﻟﺠﺪول ﻟﺬﻟﻚ ﻟﻮآﺎن آﻤﺎﻳﻠﻲ ‪:‬‬

‫)‪SELECT NO_STU,stu_avea(no_stu‬‬
‫‪from studys‬‬
‫;‪where no_stu=111‬‬

‫ﻓﺎن اﻟﻨﺘﺎﺋﺞ ﺳﺘﺼﺒﺢ هﻜﺬا‬

‫‪NO_STU‬‬ ‫)‪STU_AVEA(NO_STU‬‬
‫‪------‬‬ ‫;‬ ‫‪----------------‬‬
‫‪111‬‬ ‫‪4.63‬‬
‫‪111‬‬ ‫‪4.63‬‬

‫وهﺬا ﺳﺒﺐ ﻇﻬﻮر اﻟﺪاﻟﺔ ‪distinct‬‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪137 http://www.boosla.com‬‬

‫اﻟﺤﺰم اﻟﺒﺮﻣﺠﻴﺔ و اﻟﺰﻧﺎدات‬


‫أهﺪاف اﻟﻔﺼﻞ‬

‫ﺳﻨﺘﻨﺎول ﻓﻲ هﺬا اﻟﻔﺼﻞ ان ﺷﺎء اﷲ ‪:‬‬

‫ﻣﺎهﻴﺔ اﻟﺤﺰم اﻟﺒﺮﻣﺠﻴﺔ‬ ‫‪-1‬‬


‫آﻴﻘﻴﺔ اﻧﺸﺎء اﻟﺤﺰم اﻟﺒﺮﻣﺠﻴﺔ وﻣﻜﻮﻧﺎﺗﻬﺎ‬ ‫‪-2‬‬
‫ﻣﺎهﻴﺔ اﻟﺰﻧﺎدات‬ ‫‪-3‬‬
‫اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺰﻧﺎدات‬ ‫‪-4‬‬
‫ﻗﻮاﺋﺪ اﻟﺰﻧﺎدات‬ ‫‪-5‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪138 http://www.boosla.com‬‬

‫اﻟﺤﺰم اﻟﺒﺮﻣﺠﻴﺔ‬
‫ﺗﻌﻠﻤﻨﺎ ﺳﺎﺑﻘﺎ آﻴﻔﻴﺔ اﻧﺸﺎء اﻻﺟﺮاءت واﻟﻮﻇﺎﺋﻒ اﻟﻤﺨﺰﻧﺔ‪ .‬ﻟﻜﻦ ﻣﺎرأﻳﻚ ﻟﻮ وﺟﺪ ﻟﺪﻳﻨﺎ ﻗﺎﻋﺪة ﺑﻴﺎﻧﺎت‬
‫آﺒﻴﺮة ﺟﺪا وﻟﻨﻀﺮب ﻣﺜﺎل اﻧﻬﺎ ﺗﺤﺘﻮي ﻋﻠﻰ ‪ 50‬اﺟﺮاء او وﻇﻴﻔﺔ وﻇﻴﻔﺔ او اﺟﺮاء ﻟﻬﺎ ﻋﻤﻞ ﺧﺎص‬
‫وﻟﻨﻔﺮض ان هﺬﻩ اﻟﻘﺎﻋﺪة هﻲ ﻟﻤﺤﻞ ﺗﺠﺎري ﺿﺨﻢ ﻳﺤﺘﻮي ﻋﻠﻰ ﺑﻴﺎﻧﺎت اﻟﻌﻤﻼء وﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ‬
‫وﺑﻴﺎﻧﺎت اﻻﺻﻨﺎف اﻟﺘﺠﺎرﻳﺔ وﺑﻴﺎﻧﺎت اﻟﻤﺨﺰون وﻏﻴﺮهﺎ ﻣﻦ ﺑﻴﺎﻧﺎت ‪ ,‬وﻟﺬﻟﻚ ﻓﺎن ﺑﻌﺾ هﺬﻩ‬
‫اﻻﺟﺮاﺋﻴﺎت واﻟﻮﻇﺎﺋﻒ اﻟﻤﺨﺰﻧﺔ ﻣﺨﺘﺺ ﺑﺎﻟﻌﻤﻼء ﻣﺜﻼ وﺟﻮد اﺟﺮاء ﻟﺤﺴﺎب اﺟﻤﺎﻟﻲ ﻋﻤﻴﻞ‬
‫وﻏﻴﺮهﺎ ﻣﻦ اﻻﺟﺮاﺋﻴﺎت ‪ ,‬وﻣﺜﻞ وﺟﻮد اﺟﺮﺋﻴﺎت ﺧﺎﺻﺔ ﺑﺎﻟﻤﻮﻇﻔﻴﻦ ﻣﺜﻼ اﺟﺮاﺋﻴﺔ ﺧﺎﺻﺔ ﺑﺤﺴﺎب‬
‫راﺗﺐ اﻟﻤﻮﻇﻒ ﺑﻌﺪ ﺣﺬف اﻟﺤﺴﻮﻣﺎت واﺿﺎﻓﺔ اﻟﻌﻼوات وﻏﻴﺮهﺎ اﻳﻀﺎ ‪ ,‬ﻟﻜﻦ وﺿﻌﻬﺎ ﻓﻲ هﺬا‬
‫اﻟﺸﻜﻞ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ﻗﺪ ﻳﺴﺴﺐ ﻟﻚ ﺑﻌﺾ اﻻرﺑﺎك ﻟﺬﻟﻚ ﻣﺎرأﻳﻚ ﺑﺎن ﺗﺠﻤﻊ آﻞ اﻟﻮﻇﺎﺋﻒ‬
‫واﻻﺟﺮاﺋﻴﺎت اﻟﺨﺎﺻﺔ ﺑﻜﻞ ﻗﺴﻢ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﻟﻮﺣﺪهﺎ وهﺬﻩ اﻟﻤﺠﻤﻮﻋﺔ ﺗﺪﻋﻲ اﻟﺤﺰﻣﻪ ‪package‬‬
‫ﻣﺜﻼ ﻧﺠﻤﻊ آﻞ اﺟﺮاﺋﻴﺎت واﻟﻮﻇﺎﺋﻒ اﻟﺨﺎﺻﺔ ﺑﺎﻟﻌﻤﻼء ﻓﻲ ﺣﺰﻣﺔ ﺧﺎﺻﺔ‬

‫ﻓﻮاﺋﺪ اﺳﺘﺨﺪام اﻟﺤﺰﻣﺔ‬

‫‪ -1‬ﺗﺠﻤﻴﻊ وﺣﺪات ‪ pl/sql‬اﻟﻤﺮﺗﺒﻄﺔ‪.‬‬


‫‪ -2‬اداء اﻓﻀﻞ‪.‬‬
‫‪ -3‬ﺗﻜﻮن اﻟﺴﺮﻳﺔ اﻓﻀﻞ‪.‬‬
‫‪ -4‬اهﻢ ﺷﻲء هﻮ ﻓﻲ ﻋﻤﻠﻴﺔ اﻟﺼﻴﺎﻧﻪ ﺣﻴﺚ ﺗﺴﻬﻞ ﻋﻤﻠﻴﺔ اﻟﺼﻴﺎﻧﺔ ﺑﺎﺳﺘﺨﺪاﻣﻢ اﻟﺤﺰم‪.‬‬

‫ﻣﻜﻮﻧﺎت اﻟﺤﺰم‬

‫ﺗﺘﻜﻮن اﻟﺤﺰﻣﺔ ﻣﻦ ﺟﺰءﻳﻦ اﻻول وهﻮ اﻟﻮﺻﻒ ‪ specification‬وﻳﺤﺘﻮي ﻋﻠﻰ اﻟﺘﻌﺎرﻳﻒ ﻣﺜﻞ‬
‫ﻣﺘﻐﻴﺮات او ﻣﺆﺷﺮات او اﺳﻤﺎء اﻻﺟﺮاءت وﻣﺘﺤﻮﻟﺘﻬﺎ‪.‬‬
‫اﻣﺎ اﻟﺠﺰ اﻟﺜﺎﻧﻲ ﻓﻬﻮ ﺟﺴﻢ اﻟﺤﺰﻣﺔ وﻳﺤﺘﻮي ﻋﻠﻰ ﺗﻔﺎﺻﻴﻞ اﻻﺟﺮاءت واﻟﻌﻤﻠﻴﺎت وﻏﻴﺮهﺎ‬
‫واﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ ﻻﻧﺸﺎء اﻟﺠﺰء اﻻول آﻤﺎﻳﻠﻲ ‪:‬‬

‫‪CREATE OR REPLACE PACKAGE pack_name AS‬‬


‫‪.........‬‬
‫‪.........‬‬
‫‪.........‬‬
‫;‪end‬‬

‫واﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ ﻻﻧﺸﺎء اﻟﺠﺰء اﻟﺜﺎﻧﻲ آﻤﺎﻳﻠﻲ ‪:‬‬

‫‪CREATE OR REPLACE PACKAGE BODY pack_name AS‬‬


‫‪.........‬‬
‫اﳊﺰﻣﺔ ﺟﺴﻢ‬
‫‪.........‬‬
‫;‪end‬‬

‫ﻟﻜﻦ ﻳﺠﺐ ان ﻳﻜﻮن اﺳﻢ اﻟﺤﺰﻣﺔ ﻓﻲ اﻟﺠﺰء اﻻول هﻮ ﻧﻔﺲ اﺳﻢ اﻟﺤﺰﻣﺔ ﻓﻲ اﻟﺠﺰء اﻟﺜﺎﻧﻲ‪.‬‬
139 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

: ‫ﻣــﺜﺎل‬

‫ﻟﻨﻘﻢ ﺑﺎﻧﺸﺎء ﺣﺰﻣﺔ ﺗﺤﺘﻮي ﻋﻠﻰ وﻇﻴﻔﺔ ﻟﺤﺴﺎب ﻣﻌﺪل ﻃﺎﻟﺐ واﺟﺮاء ﻟﻄﺒﺎﻋﺔ اﻟﻤﻌﺪل‬
stu_avea ‫وﻟﺬﻟﻚ ﺳﻮف ﻧﺴﺘﺨﺪم ﻧﻔﺲ اﻟﻮﻇﻴﻔﺔ اﻟﺘﻲ اﻧﺸﻨﺎهﺎ ﻓﻲ اﻟﺪرس اﻟﺴﺎدس واﻟﺘﻲ اﺳﻤﻬﺎ‬
‫ اﻟﺠﺰء اﻻول ﻣﻦ اﻟﺤﺰﻣﺔ‬. ‫واﻟﺘﻲ ﺗﻘﻮم ﺑﺤﺴﺎب ﻣﻌﺪل اﻟﻄﺎﻟﺐ واﻻن ﻧﺒﺪاء ﺑﺎﻧﺸﺎء اﻟﺤﺰﻣﺔ‬
: ‫ آﻤﺎﻳﻠﻲ‬specification

CREATE OR REPLACE PACKAGE student AS


function stu_avea(stnum in
studys.NO_STU%type)return real;
procedure print_ave(avrage in real);
end;

‫آﻤﺎﻳﻠﻲ‬.‫اﻻن ﻧﻘﻮم ﺑﺎﻧﺸﺎء ﺟﺴﻢ اﻟﺤﺰﻣﺔ واﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ اﻟﺘﻔﺎﺻﻴﻞ‬

CREATE OR REPLACE PACKAGE BODY student AS


function stu_avea(stnum in studys.NO_STU%type)
return real
as
hour courses.hours%type;
avrage number(4,2);
sum_hours courses.hours%type:=0;
point studys.POINT%type;
total_Point studys.POINT%type:=0;
codem courses.CODE%type;
cursor sumpoint
is
select COURSE_CODE,POINT
from studys
where NO_STU=stnum;
begin
open sumpoint;
loop
fetch sumpoint into codem,point;
exit when sumpoint%notfound;
select hours
into hour
from courses
where code=codem;
total_Point:=total_Point+point;
sum_hours:=sum_hours+hour;
end loop;
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪140 http://www.boosla.com‬‬

‫;‪close sumpoint‬‬
‫;‪avrage:=total_Point/sum_hours‬‬
‫;‪return avrage‬‬
‫;‪end‬‬

‫)‪procedure print_ave(avrage in real‬‬


‫‪as‬‬
‫‪begin‬‬
‫;)‪DBMS_OUTPUT.PUT_LINE(avrage‬‬
‫;‪end‬‬
‫;‪end‬‬

‫وﻳﺤﺘﻮي ﺟﺴﻢ اﻟﺤﺰﻣﺔ آﻤﺎﻧﻼﺣﻆ ﻋﻠﻰ ﻣﻜﻮﻧﺎت اﻟﻮﻇﻴﻔﺔ واﻻﺟﺮاء اﻟﺬي ﺗﻢ ﺗﻌﺮﻳﻔﻬﻤﺎ ﻓﻲ وﺻﻒ‬
‫اﻟﺤﺰﻣﺔ ﺣﻴﺚ ان اﻟﻮﻇﻴﻔﺔ ﻟﺤﺴﺎب اﻟﻤﻌﺪل واﻻﺟﺮاء ﻟﻄﺒﺎﻋﺔ اﻟﻤﻌﺪل‪.‬‬

‫ﻃﺮﻳﻘﺔ اﺳﺘﺪﻋﺎء اﺟﺮاء او وﻇﻴﻔﺔ ﻣﻮﺟﻮد داﺧﻞ ﺣﺰﻣﺔ ‪:‬‬

‫ﺗﺘﻢ ﻋﻤﻠﻴﺔ اﻻﺳﺘﺪﻋﺎء آﻤﺎﻳﻠﻲ ‪:‬‬

‫‪pack_name.func_proc_name‬‬

‫اي اﺳﻢ اﻟﺤﺰﻣﺔ اوﻻ ﺛﻢ ﻧﻘﻄﺔ ﺛﻢ اﺳﻢ اﻻﺟﺮاء او اﻟﻮﻇﻴﻔﺔ ﻣـــــــﺜﺎل ‪:‬‬

‫‪set serveroutput on‬‬


‫‪declare‬‬
‫;‪aa real‬‬
‫‪begin‬‬
‫;)‪aa:=student.stu_avea(111‬‬
‫;)‪student.print_ave(aa‬‬
‫;‪end‬‬
‫‪/‬‬

‫وﺑﻌﺪ اﻟﺘﻔﻴﺬ ﻳﻜﻮن اﻟﻨﺎﺗﺞ هﻮ ﻣﻌﺪل اﻟﻄﺎﻟﺐ اﻟﺬي رﻗﻤﻪ ‪ 111‬ﻻﺣﻆ اول ﺷﻲ اﺳﺘﺪﻋﻴﻨﺎ داﻟﻪ ﺣﺴﺎب‬
‫اﻟﻤﻌﺪل ووﺿﻌﻨﺎهﺎ ﻓﻲ اﻟﻤﺘﻐﻴﺮ ‪ aa‬ﺛﻢ اﺳﺘﺪﻋﻴﻨﺎ اﺟﺮاء اﻟﻄﺒﺎﻋﺔ ﻟﻴﺘﻢ ﻃﺒﻌﺔ ﻋﻠﻰ اﻟﺸﺎﺷﺔ‪.‬‬

‫واﻻن و ﺑﻌﺪ ان ﺗﻌﺮﻓﺖ ﻋﻠﻰ ﻓﺎﺋﺪة اﻟﺤﺰم ﻣﺎرأﻳﻚ ﻣﻦ اﻻن ﻓﺼﺎﻋﺪ ان ﺗﺴﺘﺨﺪم اﻟﺤﺰم ﻓﻲ آﺘﺎﺑﺔ‬
‫اﻻﺟﺮاﺋﻴﺎت واﻟﻮﻇﺎﺋﻒ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪141 http://www.boosla.com‬‬

‫اﻟﺰﻧﺎدات ‪TRRIGERs‬‬
‫ﺗﺘﺸﺎﺑﻪ اﻟﺰﻧﺎدات ﻣﻊ اﻟﺒﺮاﻣﺞ اﻟﻔﺮﻋﻴﺔ اﻻ ﻓﻲ اﻟﻄﺮق اﻟﺘﺎﻟﻴﺔ ‪:‬‬

‫* ﻳﺘﻢ ﺗﻨﻔﻴﺬ اﻟﺰﻧﺎدات ﺿﻤﻨﻴﺎ‪,‬ﻋﻨﺪﻣﺎ ﻳﻌﺪل اﻟﺠﺪول ﺑﺎﻟﺮﻏﻢ ﻣﻦ ﻋﻤﻞ اﻟﻤﺴﺘﺨﺪم او اﻟﺘﻄﺒﻴﻘﺎت ﻋﻠﻰ‬
‫اﻟﺠﺪول ‪.‬‬

‫* ﻳﺘﻢ ﺗﻌﺮﻳﻒ اﻟﺰﻧﺎدات ﻟﻠﺠﺪول اﻟﺨﺎص ﺑﻘﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت‬

‫* ﻻﺗﻘﺒﻞ اﻟﺰﻧﺎدات اﻟﻤﻌﺎﻣﻼت‬

‫ﺗﻌﺪ اﻟﺰﻧﺎدات هﺎﻣﺔ ﺟﺪا ﻓﻲ ﺗﻄﻮﻳﺮ ﻧﻈﻢ اﻟﺒﻴﺎﻧﺎت اﻟﻤﻮﺟﻬﺔ اﻟﺨﺎﺻﺔ ﺑﺎﻻﻧﺘﺎج ‪.‬‬

‫ﺗﺮآﻴﺐ اﻟﺰﻧﺎد ‪:‬‬

‫>‪create [or replace] Trigger <TRRIGER_NAME‬‬


‫>‪<before|after] [instead of] trigger event on <table name‬‬
‫]]‪[for Each row [whene triggering restriction‬‬
‫>‪<trigger body‬‬

‫آﻤﺎهﻮ ﻣﻊ اﻻﺟﺮاءات اﻟﻤﺨﺰﻧﺔ اﻣﻜﺎﻧﻴﺔ اﺳﺘﺨﺪام ‪ replace‬ﻟﻜﻲ ﺗﻘﻮم ﺑﺎﻟﺘﻌﺪﻳﻞ ﻋﻠﻰ اﻟﺰﻧﺎد اذا آﺎن‬
‫ﻣﻮﺟﻮد وﻻﺗﻘﻮم ﺑﺎﻧﺸﺎءﻩ ﻣﻦ ﺟﺪﻳﺪ‪.‬‬
‫ﻳﻨﻔﺬ اﻟﺘﻮﻗﻴﺖ اﻟﺨﺎص ﺑﺎﻟﺰﻧﺎد ﺳﻮاء ﻧﻔﺬ اﻟﺰﻧﺎد ﻗﺒﻞ او ﺑﻌﺪ اﻏﻼق اﻟﺰﻧﺎد ﺑﻮاﺳﻄﺔ اﻟﺨﻴﺎرﻳﻦ ‪before‬‬
‫و ‪ , after‬ﻟﻜﻦ ﺧﻴﺎر ‪ after‬اآﺜﺮ آﻔﺎءة ﻻن ﻗﻄﻊ اﻟﺒﻴﺎﻧﺎت اﻟﻤﺆﺛﺮة ﻳﺠﺐ ان ﺗﻘﺮاء ﻣﻨﻄﻘﻴﺎ ﻣﺮة‬
‫ﻟﻠﺰﻧﺎد وﻣﺮة ﻟﻌﺒﺎرة ‪trigger‬‬
‫ﻣﻼﺣﻈﺔ‪ /‬ان ﺣﺪث اﻃﻼق اﻟﺰﻧﺎد هﻮ ﺟﻤﻠﺔ ‪ sql‬اﻟﺘﻲ ﺗﺠﻌﻞ اﻟﺰﻧﺎد وﺣﺪث اﻻﻃﻼق اﻣﺎ ‪ update‬او‬
‫‪ delete‬او ‪ insert‬او ﺑﻜﻠﻴﻬﻤﺎ‪..‬‬
‫وﻳﻮﺟﺪ ارﺑﻌﺔ اﻧﻮاع ﻣﻦ اﻟﺰﻧﺎدات‪:‬‬
‫‪ -1‬ﺻﻒ ‪after.‬‬
‫‪ -2‬ﺟﻤﻠﺔ ‪after.‬‬
‫‪ -3‬ﺻﻒ ‪before.‬‬
‫‪ -4‬ﺟﻤﻠﺔ ‪before.‬‬
‫وآﻞ زﻧﺎد ﻣﻦ اﺟﻞ ﺟﻤﻠﺔ ‪ update‬او ‪ insert‬او ‪ delete‬آﻞ زﻧﺎد ﻳﻌﺪ ﻧﻮع واﺣﺪ ﻣﻦ ) ‪instead‬‬
‫‪ (of , after,before‬وﻳﻤﻜﻦ ﺗﻌﺮﻳﻒ ﺗﺴﻊ زﻧﺎدات ﻟﻠﺠﺪول اﻟﻮاﺣﺪ‪..‬‬

‫* ﻣﻌﺎﻟﺠﺔ اﺣﺪاث اﻃﻼق اﻟﺰﻧﺎد ‪:‬‬


‫او ﻋﻠﻰ ﺗﻮﻟﻴﻔﺔ ﻣﻦ هﺬﻩ ‪ delete‬او ‪ update‬او ‪insert‬ﻳﺤﺘﻮي ﺣﺪث اﻃﻼق اﻟﺰﻧﺎد ﻋﻠﻰ ﻋﻤﻠﻴﺔ‬
‫اﻟﻌﻤﻠﻴﺎت ﻋﻨﺪﻣﺎ ﻳﺘﻌﺎﻣﻞ زﻧﺎد واﺣﺪ ﻣﻊ اآﺜﺮ ﻣﻦ ﻋﻤﻠﻴﺔ واﺣﺪة‪ ,‬ﻓﻴﻤﻜﻨﻚ ان ﺗﺴﺘﺨﺪم دﻋﺎﺋﻢ ﺷﺮﻃﻴﺔ‬
‫ﻟﻠﺘﻌﺮف ﻋﻠﻰ ﻧﻮع اﻟﻌﺒﺎرة اﻟﺘﻲ ﺗﺴﺘﺨﺪم ﻟﺘﻨﻔﻴﺬ اﻟﺠﺰء اﻟﺨﺎص ﺑﺎﻟﺮﻣﺰ ﻓﻲ اﻟﺰﻧﺎد‬
‫واﻟﺪﻋﺎﺋﻢ هﻲ آﻤﺎﻳﻠﻲ‪:‬‬
‫;‪IF inserting then .....end if‬‬
‫;‪IF updating then .....end if‬‬
‫;‪IF deleting then .....end if‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪142 http://www.boosla.com‬‬

‫** ﻟﻜﻞ ﺻﻒ‪:‬‬


‫ﻳﻌﺪ هﺬا اﻟﺨﻴﺎر ﻣﺎ اذا آﺎن اﻟﺰﻧﺎد ﺳﻮف ﻳﻨﻄﻠﻖ ﻣﺮة واﺣﺪة ﻟﻜﻞ ﺻﻒ ﺗﺎﺛﺮ ﺑﺎﻟﺰﻧﺎد‪for each row‬‬
‫‪ ,‬ﻳﻤﻜﻨﻚ ﻣﻦ اﻟﻮﺻﻮل اﻟﻰ اﻟﻘﻴﻢ اﻟﻘﺪﻳﻤﺔ ‪for each row‬ﻓﻲ ﻧﺺ اﻟﺰﻧﺎد اﻟﺨﺎص ﺑﺰﻧﺎد اﻟﺴﻄﺮ‬
‫ﻳﻤﻜﻨﻚ اﻟﻮﺻﻮل ﻣﻦ اﻟﻘﻴﻢ اﻟﻘﺪﻳﻤﺔ ‪ update‬و ‪insert‬واﻟﺤﺪﻳﺜﺔ ﻟﻠﺼﻒ اﻟﺤﺎﻟﻲ ﺣﻴﺚ ﻓﻲ ﻋﻤﻠﻴﺘﻲ‬
‫ﻓﻤﻦ اﻟﻄﺒﻴﻌﻲ ان اﻟﻤﺘﺎح هﻮ اﻟﻘﻴﻢ اﻟﻘﺪﻳﻤﺔ ﻓﻘﻂ‪delete‬واﻟﺤﺪﻳﺜﺔ اﻣﺎ ﺑﺎﻟﻨﺴﺒﺔ ﻟﻌﻤﻠﻴﺔ‬
‫وﺳﻮف ﺗﻜﻮن اﻟﻘﻴﻢ اﻟﻘﺪﻳﻤﺔ ‪ before‬و ‪after‬وﻳﻤﻜﻨﻚ اﺳﺘﺨﺪام اﻟﻘﻴﻢ اﻟﻘﺪﻳﻤﺔ واﻟﺤﺪﻳﺜﺔ ﻓﻲ زﻧﺎدات‬
‫ﻓﺎﻧﻪ ﻳﻘﻮم ﺑﺎﻟﺘﻘﺎط ‪. after trigger‬اﻣﺎ اذا آﺎن ‪before trigger‬واﻟﺤﺪﻳﺜﺔ هﻲ اﻟﻤﻮﺟﻮدة ﻓﻘﻂ ﻓﻲ‬
‫اﻟﻘﻴﻤﺔ ﺑﻌﺪ اﻟﺘﺤﺪﻳﺚ‪.‬‬

‫ﻗﻴﺪ اﻟﺰﻧﺎد‬

‫ﻳﺤﺪد هﺬا اﻟﻘﻴﺪ ﺗﻌﺒﻴﺮ ﻣﻨﻄﻘﻲ ﻳﺠﺐ ان ﻳﻜﻮن ﺻﺤﻴﺢ آﻲ ﻳﻄﻠﻖ اﻟﺰﻧﺎد‪.‬‬
‫ﻋﻠﻰ ﺳﺒﻴﻞ اﻟﻤﺜﺎل اﻟﺰﻧﺎد اﻟﺘﺎﻟﻲ ‪ stduent_trigger‬ﻻ ﻳﺘﻢ ﺣﺪوﺛﺔ اﻻ اذا آﺎن رﻗﻢ اﻟﻄﺎﻟﺐ‬
‫‪ student_id‬اﻗﻞ ﻣﻦ ‪100‬‬

‫‪create or replace trigger stduent_trigger‬‬


‫‪before insert or update on student‬‬
‫‪for each row‬‬
‫)‪when(new.student_id<100‬‬

‫ﻗﻴﻮد ﻋﻠﻰ اﻧﺸﺎء اﻟﺰﻧﺎدات‪:‬‬

‫‪ -1‬ﻳﻤﻜﻦ ﻟﻠﻨﺺ ان ﻳﺤﺘﻮي ﻋﻠﻰ ﺟﻤﻞ ‪ dml sql‬ﻟﻜﻦ ﺟﻤﻞ ‪ select‬ﻳﺠﺐ ان ﺗﻜﻮن ﺟﻤﻞ ‪select‬‬
‫‪into‬‬
‫‪ -2‬ﻻﻳﺴﻤﺢ ﺑﺠﻤﻞ اﻟﺘﺤﻜﻢ )‪( commit,savepoint,rollback‬‬
‫‪-3‬ﻻﻳﻤﻜﻦ ﻟﺒﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﻣﺨﺰن ان ﻳﺘﻀﻤﻦ ﺟﻤﻞ اﻟﺘﺤﻜﻢ اﻟﺴﺎﺑﻘﺔ اذا ﺗﻢ اﺳﺘﺪﻋﺎﺋﻪ ﺑﻮاﺳﻄﺔ اﻟﺰﻧﺎد‪.‬‬

‫ﻣـــــــــــــــــﺜﺎل ‪:‬‬

‫ﻟﻨﻔﺮض اﻧﻪ ﻟﺪﻳﻨﺎ اﻟﺜﻼث ﺟﺪاول اﻟﺘﺎﻟﻴﺔ‪:‬‬

‫اﻻول ‪ :‬هﻮ ﺟﺪول ‪ player‬ﺑﻴﺎﻧﺎت ﺟﻤﻴﻊ اﻟﻼﻋﺒﻴﻦ ﻓﻲ اﻟﻨﺎدي ﺳﻮاء درﺟﺔ ﺷﺒﺎب او درﺟﺔ ﻣﻤﺘﺎز ‪:‬‬

‫‪no_player name‬‬ ‫‪date_birth phone address levels‬‬


‫‪1‬‬ ‫‪talal‬‬ ‫‪11/11/1973 123456 riyadh1 1‬‬
‫‪2‬‬ ‫‪mohammed 1/1/1982 654321 riyadh2 2‬‬
‫‪3‬‬ ‫‪sami‬‬ ‫‪1/1/1988 123789 riyadh3 2‬‬
‫‪4‬‬ ‫‪yosif‬‬ ‫‪12/3/1970 123123 riyadh4 1‬‬

‫ﺣﻴﺚ ‪ level‬ﺗﻤﺜﻞ اﻟﺪرﺟﺔ اﻟﺘﻲ ﻳﻠﻌﺐ ﺑﻬﺎ اﻟﻼﻋﺐ ﺣﻴﺚ ‪ 1‬ﺗﻤﺜﻞ اﻟﺪرﺟﺔ اﻻوﻟﻰ اﻟﻤﻤﺘﺎز ‪ -‬و ‪ 2‬ﺗﻤﺜﻞ‬
‫اﻟﺸﺒﺎب ‪.‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪143 http://www.boosla.com‬‬

‫وﻻﻧﺸﺎء اﻟﺠﺪول آﻤﺎﻳﻠﻲ ‪:‬‬

‫(‪create table player‬‬


‫‪no_player varchar2(6) primary key,‬‬
‫‪name varchar2(50),‬‬
‫‪date_birth date,‬‬
‫‪phone varchar2(9),‬‬
‫‪address varchar2(20),‬‬
‫;))‪levels number(2‬‬

‫اﻟﺜﺎﻧﻲ ‪ :‬هﻮ ﺟﺪول اﻟﻼﻋﺒﻴﻦ ﻓﻲ درﺟﺔ اﻟﻤﻤﺘﺎز وهﻮ ﺧﺎص ﺑﺎﻟﺮواﺗﺐ واﺳﻢ اﻟﺠﺪول ‪larg_player‬‬

‫‪no_player‬‬ ‫‪level_no‬‬ ‫‪salary‬‬


‫‪1‬‬ ‫‪1‬‬
‫‪4‬‬ ‫‪1‬‬

‫وﻻﻧﺸﺎء اﻟﺠﺪول آﻤﺎﻳﻠﻲ ‪:‬‬

‫(‪create table larg_player‬‬


‫‪no_player varchar2(6) primary key,‬‬
‫‪level_no number(2),‬‬
‫;))‪salary number(7,2‬‬

‫اﻟﺜﺎﻟﺚ ‪ :‬هﻮ ﺟﺪول اﻟﻼﻋﺒﻴﻦ ﻓﻲ درﺟﺔ اﻟﺸﺒﺎب وهﻮ ﺧﺎص ﺑﺎﻟﺮواﺗﺐ واﺳﻢ اﻟﺠﺪول ‪youth‬‬

‫‪no_player‬‬ ‫‪level_no‬‬ ‫‪salary‬‬


‫‪2‬‬ ‫‪2‬‬
‫‪3‬‬ ‫‪2‬‬

‫وﻻﻧﺸﺎء اﻟﺠﺪول آﻤﺎﻳﻠﻲ ‪:‬‬

‫(‪create table youth‬‬


‫‪no_player varchar2(6) primary key,‬‬
‫‪level_no number(2),‬‬
‫;))‪salary number(7,2‬‬

‫اﻻن ﻧﺮﻳﺪ ﻋﻤﻞ زﻧﺎد ﺑﺤﻴﺚ ﺣﻴﻨﻤﺎ ﻳﻘﻮم اﻟﻤﺴﺘﺨﺪم ﺑﺎدﺧﺎل اﺳﻢ ﻻﻋﺐ ﺟﺪﻳﺪ وﺗﺤﺪﻳﺪ ﻣﺴﺘﻮاﻩ )ﺷﺒﺎب‬
‫او ﻣﻤﺘﺎز( ﻳﻘﻮم اﻟﺰﻧﺎد ﺑﺎﺧﺘﺒﺎر اﻟﻤﺴﺘﻮى ﻓﺎذا آﺎن ﺷﺒﺎب اﺿﺎف رﻗﻢ اﻟﻼﻋﺐ ﻓﻲ ﺟﺪول اﻟﺸﺒﺎب‬
‫وآﺬﻟﻚ ﻟﻮآﺎن ﻣﺴﺘﻮاﻩ درﺟﺔ اوﻟﻰ اﻟﻤﻤﺘﺎز ﻓﺎﻧﻪ ﻳﻀﻴﻒ رﻗﻢ اﻟﻼﻋﺐ ﻓﻲ ﺟﺪول ‪larg_player‬‬
‫وﺑﺬﻟﻚ ﻳﻜﻮن اﻟﺰﻧﺎد آﻤﺎﻳﻠﻲ ‪:‬‬
144 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

create or replace trigger player_age


before insert on player
for each row
begin
if inserting then
if :new.levels=1 then
insert into larg_player(no_player,level_no) values
(:new.no_player,:new.levels);
elsif :new.levels=2 then
insert into larg_player(no_player,level_no) values
(:new.no_player,:new.levels);
end if;
end if;
end;

: ‫ﺑﻌﺪ ذﻟﻚ ﻗﻢ ﺑﺎدﺧﺎل ﻣﺎﻳﻠﻲ‬

insert into player values('1','talal','11/11/1973','123456','riyadh1',1);

‫ ﺑﻌﺪ ذﻟﻚ اذهﺐ وﻗﻤﺎ ﺑﺎﻻﺳﺘﻌﻼم ﻓﻲ ﺟﺪول‬player ‫ﻻﺣﻆ ان اﻟﻤﺪﺧﻼت ﺗﻤﺖ ﻋﻠﻰ ﺟﺪول‬
.‫ ﺳﻮف ﺗﺠﺪ اﻧﻪ اﺿﺎف رﻗﻢ اﻟﻼﻋﺐ هﻨﺎك‬larg_player
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪145 http://www.boosla.com‬‬

‫اﻟﺘﺠﻤﻴﻌﺎت‬
‫اﻧﻮاع اﻟﺘﺠﻤﻴﻌﺎت ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت‪:‬‬
‫اﻟﺘﺠﻤﻴﻌﺔ هﻲ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻌﻨﺎﺻﺮ ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع‬

‫واﻟﺘﺠﻤﻴﻌﺎت هﻲ ﻋﻠﻰ ﻧﻮﻋﻴﻦ‪:‬‬

‫• اﻟﺘﺠﻤﻴﻌﺔ ‪varray‬‬

‫وهﻲ آﻤﺼﻔﻮﻓﺔ ﻣﺘﻐﻴﺮة وﻣﺸﺎﺑﻬﺔ ﻟﻠﻤﺼﻔﻮﻓﺎت ﻓﻲ اي ﻟﻐﺔ ﻣﻦ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﻣﺜﻞ ‪ c‬و‪ c++‬وﺗﺘﻢ‬
‫اﻻﺷﺎرة اﻟﻰ اي ﻋﻨﺼﺮ ﻓﻲ هﺬﻩ اﻟﺘﺠﻤﻴﻌﺔ ﺑﺎﺳﺘﺨﺪام اﻻرﻗﺎم اﻟﺴﻔﻠﻴﺔ وﻳﺘﻢ اﻟﺘﺨﺰﻳﻦ ﻓﻲ هﺬﻩ‬
‫اﻟﺘﺠﻤﻴﻌﺔ ﺑﺼﻮرة ﺧﻄﻴﺔ ‪inline‬‬

‫• اﻟﺘﺠﻤﻴﻌﺔ ‪nested table‬‬

‫ﺗﻌﺘﺒﺮ آﺠﺪول ﻣﻮﺟﻮد ﻓﻲ ﻗﺎﻋﺔ اﻟﺒﻴﺎﻧﺎت واﻻﺷﺎرة اﻟﻰ اي ﻋﻨﺼﺮ ﻓﻲ هﺬﻩ اﻟﺘﺠﻤﻴﻌﺔ اﻳﻀﺎ‬
‫ﺑﺎﺳﺘﺨﺪام اﻻرﻗﺎم اﻟﺴﻔﻠﻴﺔ وﻳﺘﻢ ﺗﺨﺰﻳﻦ اﻟﺒﻴﺎﻧﺎت ﻓﻲ ﺟﺪول ﺗﺨﺰﻳﻦ ﻣﻨﻔﺼﻞ‪.‬‬

‫‪--‬اوﻻ ‪:‬اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﺠﻤﻴﻌﺎت ﻓﻲ ‪sql plus‬‬

‫أ ‪-‬اﻟﺘﺠﻤﻴﻌﺔ ‪ varray‬ﻣﻦ اﻟﻨﻮع اﻟﺒﺴﻴﻂ‬

‫ﻣﺜﺎل‪ /‬ﻧﻔﺮض اﻧﻚ ﺗﺮﻳﺪ اﻧﺸﺎء ﺟﺪول اﻻﻗﺴﺎم ﻓﻲ ﻣﺴﺘﺸﻔﻰ واﻟﺬي ﺳﻮف ﻳﺤﺘﻮي ﻋﻠﻰ رﻗﻢ اﻟﻘﺴﻢ‬
‫‪ ,‬اﺳﻢ اﻟﻘﺴﻢ ‪ ,‬واﺳﻢ اﻟﻘﺴﻢ ‪ ,‬وﻣﻦ ﺛﻢ اﺳﻤﺎء ﻣﻮﻇﻔﻴﻦ اﻟﻘﺴﻢ ‪.‬ﻣﻊ اﻟﻌﻠﻢ ان اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﺳﻮف‬
‫ﺗﻜﻮن ﻓﻲ ﺗﺠﻤﻴﻌﺔ‪. varray‬‬

‫ﻧﻘﻮم اوﻻ ﺑﺎﻧﺸﺎء اﻟﺘﺠﻤﻴﻌﺔ آﻤﺎﻳﻠﻲ‪:‬‬

‫;)‪Create type namev as varray(30) of varchar2(50‬‬

‫‪/‬‬

‫ﺣﻴﺚ ﻟﻮ ﻓﺮﺿﻨﺎ ان اآﺒﺮ ﻋﺪد ﻟﻠﻤﻮﻇﻔﻴﻦ هﻮ ‪ 30‬واآﺒﺮ ﻃﻮل ﻟﻼﺳﻢ هﻮ ‪. 50‬‬

‫ﺛﻢ ﻧﻘﻮم ﺑﺄﻧﺸﺎء اﻟﺠﺪول وﻧﻘﻮم ﺑﺎﻧﺸﺎءﻩ آﻤﺎﻳﻠﻲ‪/‬‬

‫‪Create table deptv‬‬


‫‪(nodept number(5) primary key,‬‬
‫‪namedept varchar2(50),‬‬
‫;)‪emp namev‬‬

‫وﻧﻘﻮم ﻓﻴﻤﺎﻳﻠﻲ ﺑﺘﻨﻔﻴﺬﺑﻌﺾ اواﻣﺮ ‪ sql‬ﻋﻠﻰ اﻟﺠﺪول‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪146 http://www.boosla.com‬‬

‫اﻻدراج ‪: insert‬‬ ‫‪-1‬‬


‫;))'‪Insert into deptv values(10,'medical',namev('ali','sami','fahad','fady‬‬

‫‪ -2‬اﻟﺘﺤﺪﻳﺚ ‪: update‬‬

‫ﻟﺘﺤﺪﻳﺚ اﻟﻌﻨﺎﺻﺮ ﻓﻲ اﻟﺘﺠﻤﻴﻌﺔ ﻳﺘﻄﻠﺐ اﺳﺘﺨﺪام ‪ pl/sql‬وﻻﻳﻤﻜﻦ ﺗﻨﻔﻴﺬ ذﻟﻚ ﻣﻦ ﺧﻼل ‪sql‬‬
‫اﻟﻘﻴﺎﺳﻴﺔ ﻣﺜﺎل‪:‬‬

‫‪Declare‬‬
‫;‪Editname namev‬‬
‫‪I‬‬ ‫;‪number:=1‬‬
‫‪Begin‬‬
‫‪Select emp into editname‬‬
‫;‪From deptv where nodept=10‬‬
‫‪Loop‬‬
‫‪If (i=editname.count+1) then‬‬
‫;‪Exit‬‬
‫‪Elsif (editname(i)='sami') then‬‬
‫;'‪Editname(i):='mohammed‬‬
‫;‪End if‬‬
‫;‪i:=i+1‬‬
‫;‪end loop‬‬
‫;‪update deptv set emp=editname where nodept=10‬‬
‫;‪end‬‬

‫ﺷﺮح اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ‪:‬‬

‫ﺳﻮف ﻳﻘﻮم ﺑﺘﻐﻴﺮ اﺳﻢ اﻟﻤﻮﻇﻒ ‪sami‬اﻟﺬي ﻗﻤﻨﺎ ﺑﺎدﺧﺎل وﺗﺒﺪﻳﻠﺔ اﻟﻰ ‪ mohammed‬وﺷﺮح‬
‫اﻟﺨﻄﻮات آﻤﺎﻳﻠﻲ‬

‫اوﻻ ﻗﻤﻨﺎ ﺑﺘﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ‪ editname‬ﻣﻦ ﻧﻔﺲ ﻧﻮع اﻟﺘﺠﻤﻴﻌﺔ ‪ namev‬وذﻟﻚ ﻟﻜﻲ ﻧﻘﻮم‬
‫ﺑﺘﺨﺰﻳﻦ اﻟﻤﺆﺷﺮ واﻟﺬي ﻳﺤﺘﻮي ﻋﻠﻰ اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﻓﻴﻪ وﻧﻌﺮف اﻳﻀﺎ ﻣﺘﻐﻴﺮ ‪ I‬وهﻮ ﻣﻦ‬
‫ﻳﺴﺘﺨﺪم آﻌﺪاد‪.‬‬

‫ﺛﻢ ﻧﻘﻮم ﺑﻌﻤﻞ ﻣﺆﺷﺮ ﻻﺳﺘﺨﺮاج اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ وهﻲ آﻤﺎﻳﻠﻲ‬

‫‪Select emp into editname‬‬

‫;‪From deptv where nodept=10‬‬

‫ﻳﻘﻮم هﻨﺎ ﺑﺎﺳﺘﺨﺮاج اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﻟﻠﻘﺴﻢ ‪ 10‬وﺗﺨﺰﻳﻦ ﻧﺎﺗﺞ اﻻﺳﺘﻌﻼم ﻓﻲ اﻟﻤﺘﻐﻴﺮ‬
‫‪ editname‬واﻟﺬي هﻮ ﻣﻦ ﻧﻔﺲ ﻧﻮع اﻟﺘﺠﻤﻴﻌﺔ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪147 http://www.boosla.com‬‬

‫ﺛﻢ ﻳﺒﺪأ ﺣﻠﻘﺔ وﻣﻦ ﺛﻢ ﻳﺨﺘﺒﺮ هﻞ ‪ I‬وﺻﻠﺖ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ اذا آﺎن ﻧﻌﻢ ﻗﺎم ﺑﺎﻧﻬﺎء اﻻﺟﺮاء‬
‫واذا ﻟﻢ ﻳﺼﻞ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ ﻳﺨﺘﺒﺮ ﻋﻨﺼﺮ اﻟﺘﺠﻤﻴﻌﺔ اﻟﺤﺎﻟﻲ هﻞ هﻮ ﻳﺴﺎوي ‪ sami‬ام ﻻ‬
‫اذا آﺎن ﻳﺴﺎوي ‪sami‬ﻳﻘﻮم ﺑﺘﻐﻴﺮ هﺬﻩ اﻟﻘﻴﻤﺔ اﻟﻰ ‪ mohammed‬وﻣﻦ ﺛﻢ ﻳﺰﻳﺪ اﻟﻌﺪاد ﺑﻮاﺣﺪ‬
‫وﻣﻦ ﺛﻢ ﻳﻌﻮد ﻣﻦ ﺟﺪﻳﺪ اﻟﻰ ان ﻳﺼﻞ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ وﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ﺟﻤﻴﻊ اﻟﻌﻨﺎﺻﺮ ﻳﻘﻮم‬
‫ﺑﻌﻤﻞ اﻟﺘﺤﺪﻳﺚ ﻟﻠﺠﺪول‬

‫;‪update deptv set emp=editname where nodept=10‬‬

‫وﻣﻦ ﺛﻢ ﻳﻘﻮم ﺑﺎﻧﻬﺎء اﻻﺟﺮاء‪.‬‬

‫اﻟﺤﺬف )‪: delete(Trim‬‬ ‫‪-2‬‬

‫ﺣﺬف ﻋﻨﺼﺮ ﻣﻦ اﻟﺘﺠﻤﻴﻌﺔ ﻳﺘﻄﻠﺐ ﻋﻤﻞ اﺟﺮاء ‪pl/sql‬‬

‫واﻟﺤﺬف ﻓﻲ اﻟﺘﺠﻤﻴﻌﺎت ‪ varray‬ﻳﺘﻢ ﻋﻠﻰ اﺧﺮ ﻋﻨﺼﺮ ﻓﻲ اﻟﺘﺠﻤﻴﻌﺔ اي ﻟﻮ ﺣﺬﻓﻨﺎ ﻋﻨﺼﺮ‬


‫واﺣﺪ ﻓﺎﻧﻪ ﻳﺘﻢ ﻋﻠﻰ اﺧﺮ ﻋﻨﺼﺮ وﻻ ﻳﻤﻜﻦ ﺗﺤﺪﻳﺪ اﻟﻌﻨﺼﺮ‬

‫ﻣﺜﺎل‪:‬‬

‫‪Declare‬‬
‫;‪Namedel namev‬‬
‫‪Begin‬‬
‫‪Select emp into namedel‬‬
‫;‪From deptv where nodept=10‬‬
‫;)‪Namedel.trim(1‬‬
‫;‪update deptv set emp=namedel where nodept=10‬‬
‫;‪end‬‬
‫‪/‬‬

‫‪ -4‬اﻟﺘﺤﺪﻳﺚ ﺑﺎﻻﺿﺎﻓﺔ )‪update(append‬‬

‫هﺬا اﻻﻣﺮ ﻳﺴﺘﺨﺪم ﻟﻼﺿﺎﻓﺔ‬

‫أﻟﻢ ﻳﺘﺒﺎدر اﻟﻰ ذهﻨﻚ آﻴﻒ ﻧﻀﻴﻒ ﻣﺰﻳﺪا ﻣﻦ اﻟﻤﻮﻇﻔﻴﻦ اﻟﻰ اﻟﻘﺴﻢ ‪ 10‬ﻳﻤﻜﻦ ان ﺗﻘﻮل ﻧﺴﺘﺨﺪم اﻻﻣﺮ‬
‫‪ insert‬ﻟﻜﻦ هﺬا ﻏﻴﺮ ﺻﺤﻴﺢ ﻻﻧﻨﺎ ﻋﻨﺪﻣﺎ ﻧﺴﺘﺨﺪم اﻻﻣﺮ ‪ insert‬وﻧﺪﺧﻞ رﻗﻢ اﻟﻘﺴﻢ ‪ 10‬ﻳﻈﻬﺮ ﻟﻨﺎ‬
‫ﺧﻄﺎء ﻻن ﺣﻘﻞ رﻗﻢ اﻟﻘﺴﻢ ﻣﻔﺘﺎح رﺋﺴﻲ‬

‫ﻟﺬﻟﻚ اذا اردﻧﺎ اﺿﺎﻓﺔ اﻟﻤﺰﻳﺪ ﻣﻦ اﻟﻤﻮﻇﻔﻴﻦ اوﻻ ﻧﻘﻮم ﺑﻌﻤﻞ ﺗﻮﺳﻊ ‪ extend‬ﻟﻠﺘﺠﻤﻴﻌﺔ ﻟﻜﻲ ﺗﺴﻤﺢ‬
‫ﻟﻨﺎ ﺑﺎﺿﺎﻓﺔ ﻋﻨﺼﺮ ﺟﺪﻳﺪ ‪.‬وﻧﺴﺘﺨﺪم اﻻﺟﺮاء ﻟﺬﻟﻚ‬

‫وﻳﻜﻮن اﻻﺟﺮاء آﻤﺎﻳﻠﻲ‪:‬‬

‫‪Declare‬‬
‫;‪Newname namev‬‬
‫‪Begin‬‬
148 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

Select emp into newname


From deptv where nodept=10;
Newname.extend;
Newname(newname.last):='khaled';
update deptv set emp=newname where nodept=10;
end;
/

:‫ ﻣﻦ اﻟﻨﻮع اﻟﺸﻲء‬varray ‫ اﻟﺘﺠﻤﻴﻌﺔ‬- ‫ب‬

‫هﺬﻩ اﻟﺘﺠﻤﻴﻌﺔ هﻲ ﺗﺠﻤﻴﻌﺔ ﻣﻌﺮﻓﺔ ﺑﻮاﺳﻄﺔ اﻟﻤﺴﺘﺨﺪم‬

: ‫ﻣﺜﺎل ذﻟﻚ‬

‫ﻟﻮ اردﻧﺎ اﻧﺸﺎء ﺟﺪول ﻳﺤﺘﻮي ﻋﻠﻰ ﻣﺴﻤﻰ اﻟﻮﻇﻴﻔﺔ وﻓﻲ ﺣﻘﻞ اﺧﺮ ﻧﻜّﻮن ﺗﺠﻤﻴﻌﺔ ﺗﺤﺘﻮي ﻋﻠﻰ‬
‫اﺳﻢ اﻟﻤﻮﻇﻒ وراﺗﺒﺔ ﻟﺠﻤﻴﻊ ﻣﻮﻇﻔﻴﻦ هﺬﻩ اﻟﻮﻇﻴﻔﺔ‬

JOB_NAME EMPLOYEE
manager (ali,5000),(sami,6000),(fahad,4000)
Analysis (laui,7500),(mohammed,7500)
Programming (fady,8000),(saed,6000)

‫ آﻤﺎﻳﻠﻲ‬object ‫وﺑﺎﻟﺘﺎﻟﻲ ﻓﺈن اﻟﺨﻄﻮة اﻻوﻟﻰ هﻲ اﻧﺸﺎء‬

Create type empobj

as object (nameemp varchar2(50),salary number(6));

‫ﺛﻢ ﻧﻘﻮم ﺑﺎﻧﺸﺎء اﻟﺘﺠﻤﻴﻌﺔ‬

Create type employeeobj as varray(20) of empobj;

‫ اﻟﺬي اﻧﺸﺌﻨﺎﻩ وﻟﺬﻟﻚ ﺳﻤﻲ هﺬا اﻟﻨﻮع ﺑﻬﺬا اﻻﺳﻢ‬object ‫ﻻﺣﻆ اﻟﻔﺮق اﻧﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ‬

:‫وﺑﻌﺪ اﻧﺸﺎء اﻟﺘﺠﻤﻴﻌﺔ ﻧﻘﻮم ﺑﺈﻧﺸﺎء اﻟﺠﺪول آﻤﺎﻳﻠﻲ‬

Create table jobobj


(job_name varchar2(50),
employee employeeobj);
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪149 http://www.boosla.com‬‬

‫وﺑﻌﺪ اﻧﺸﺎء اﻟﺠﺪول ﺳﻮف ﻧﺘﻌﺮف اﻻن ﻋﻠﻰ آﻴﻔﻴﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ هﺬا اﻟﺠﺪول ﻣﻦ ﺧﻼل * ‪sql‬‬
‫‪plus‬‬

‫‪ -1‬اﻻﺿﺎﻓﺔ ‪:‬‬

‫ﻻﺿﺎﻓﺔ ﺻﻒ إﻟﻰ اﻟﺠﺪول اﻟﺴﺎﺑﻖ ﻧﻘﻮم ﺑﻤﺎﻳﻠﻲ ‪:‬‬

‫‪Insert into jobobj values‬‬

‫( ‪('manager',employeeobj‬‬

‫‪empobj('ali',5000),‬‬

‫‪empobj('sami',6000),‬‬

‫;)))‪empobj('fahad',4000‬‬

‫وﺑﻬﺬا ﻧﻜﻮن ﻗﺪ اﺿﻔﻨﺎ اﻟﺼﻒ اﻻول ﻓﻲ اﻟﺠﺪول اﻟﺴﺎﺑﻖ‬

‫وﻟﻮ ذهﺒﻨﺎ اﻟﻰ ‪ sql * plus‬وﻃﻠﺒﻨﺎ ﻣﻨﻪ ﻣﺎﻳﻠﻲ‬

‫‪Select * from jobobj‬‬

‫‪JOB_NAME‬‬

‫‪---------------------------------------------------‬‬

‫)‪EMPLOYEEobj(NAMEEMP, SALARY‬‬

‫‪-------------------------------------------------------------‬‬

‫‪manager‬‬

‫‪EMPLOYEE1(EMPOBJ('ali', 5000), EMPOBJ('sami', 6000),‬‬


‫))‪EMPOBJ('fahad', 4000‬‬

‫وﻧﻼﺣﻆ ﻟﻘﺪ ﺗﻢ اﺿﺎﻓﺔ اﻟﺼﻒ اﻟﺠﺪﻳﺪ‬

‫‪ -2‬اﻟﺘﺤﺪﻳﺚ ‪:‬‬
‫ﻳﺠﺐ ﺗﻄﺒﻴﻖ ﻗﻄﻌﺔ ‪ pl/sql‬آﻤﺎﻳﻠﻲ‪:‬‬
150 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

Declare
Editname employeeobj;
Editobj empobj;
i number:=1;
Begin
Select employee into editname
From jobobj where job_name='manager';
Loop
Editobj:=editname(i);
If (i=editname.count) then
Exit ;
Elsif editobj.nameemp='sami' then
Editobj.salary:=10000;
Editname(i):=editobj;
End if;
i:=i+1;
End loop;
Update jobobj set employee=editname
Where job_name='manager';
End;

‫ وﺟﻌﻞ راﺗﺒﻪ‬manager ‫ اﻟﻤﻮﺟﻮد ﻓﻲ ﻗﺴﻢ‬sami ‫وﺑﻬﺬا ﻳﺘﻢ ﺗﻌﺪﻳﻞ راﺗﺐ اﻟﻤﻮﻇﻒ اﻟﺬي اﺳﻤﻪ‬
10000

:‫ اﻟﺤﺬف‬-3

Declare
Editemp employeeobj;
begin
select Select employee into editemp
From jobobj where job_name='manager';
Editemp.trim(1);
Update jobobj set employee=editemp
Where job_name='manager';

‫وﺑﻬﺬا ﻳﺘﻢ ﺣﺬف ﺳﺠﻞ واﺣﺪ وهﻮ اﺧﺮ ﺻﻒ ﻣﻦ اﻟﺘﺠﻤﻴﻌﺔ‬

:‫ ﻣﻦ اﻟﻨﻮع اﻟﺒﺴﻴﻂ‬NESTED TABLE ‫ اﻟﺘﺠﻤﻴﻌﺔ‬-‫ج‬

‫ ﻣﻦ اﻟﻨﻮع اﻟﺒﺴﻴﻂ واﻟﺘﻲ ﻧﻘﻮم ﺑﺘﻌﺮﻳﻔﻬﺎ ﺑﻮاﺳﻄﺔ اﺣﺪ‬varray ‫ﺗﻌﺘﺒﺮ هﺬﻩ اﻟﺘﺠﻤﻴﻌﺔ ﻧﻔﺲ اﻟﺘﺠﻤﻴﻌﺔ‬
‫ وﺳﻮف ﻧﺴﺘﺨﺪم هﻨﺎ ﻧﻔﺲ اﻟﻤﺜﺎل اﻟﺬي‬varchar2 ‫ و‬number ‫اﻧﻮاع اﻟﺒﻴﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻣﺜﻞ‬
. ‫ ﻣﻦ اﻟﻨﻮع اﻟﺸﻴﺊ‬varray ‫اﺳﺘﺨﺪﻣﻨﺎﻩ ﻓﻲ اﻟﺘﺠﻤﻴﻌﺔ‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪151 http://www.boosla.com‬‬

‫ﻣﺜﺎل‪ /‬ﻧﻔﺮض اﻧﻚ ﺗﺮﻳﺪ اﻧﺸﺎء ﺟﺪول اﻻﻗﺴﺎم ﻓﻲ ﻣﺴﺘﺸﻔﻰ واﻟﺬي ﺳﻮف ﻳﺤﺘﻮي ﻋﻠﻰ رﻗﻢ اﻟﻘﺴﻢ ‪,‬‬
‫اﺳﻢ اﻟﻘﺴﻢ ‪ ,‬واﺳﻢ اﻟﻘﺴﻢ ‪ ,‬وﻣﻦ ﺛﻢ اﺳﻤﺎء ﻣﻮﻇﻔﻴﻦ اﻟﻘﺴﻢ ‪.‬ﻣﻊ اﻟﻌﻠﻢ ان اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﺳﻮف ﺗﻜﻮن‬
‫ﻓﻲ ﺗﺠﻤﻴﻌﺔ‪nested table‬‬

‫اوﻻ ﻧﻘﻮم ﺑﺎﻧﺸﺎء اﻟﺘﺠﻤﻴﻌﺔ وﺗﻜﻮن آﻤﺎﻳﻠﻲ‪:‬‬

‫;)‪Create type namenested as table of varchar2(50‬‬

‫‪/‬‬

‫ﺛﻢ ﻧﻘﻮم ﺑﺄﻧﺸﺎء اﻟﺠﺪول آﻤﺎﻳﻠﻲ‪:‬‬

‫‪Create table deptnested‬‬


‫‪(nodept number(5) primary key,‬‬
‫‪namedept varchar2(50),‬‬
‫)‪emp namenested‬‬
‫;‪nested table emp store as nestedtablesimple‬‬

‫ﻻﺣﻆ اﻟﺴﻄﺮ اﻻﺧﻴﺮ اﻟﺬي ﺗﻢ اﺿﺎﻓﻨﺘﻪ‬

‫ﻓﻴﺠﺐ داﺋﻢ وﺿﻌﻪ اذا اﺳﺘﺨﺪﻣﻨﺎ ‪ nested table‬ﻣﻊ ﺗﻐﻴﺮ اﻟﻤﻜﺘﻮب ﺑﺎﻟﻠﻮن اﻻﺣﻤﺮ واﻟﺬي ﻳﻤﺜﻞ‬
‫اﺳﻢ اﻟﺤﻘﻞ اﻟﺬي هﻮ ﻣﻦ اﻟﻨﻮع ‪.nested table‬‬

‫واﻟﺬي ﺗﺤﺘﻪ ﺧﻂ ﻳﻌﺘﺒﺮ آﺄﺳﻢ ﻟﻬﺬا ‪nested table‬‬

‫**اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺠﺪول اﻟﺴﺎﺑﻖ ﻣﻦ ﺧﻼل اواﻣﺮ ‪sql‬‬

‫‪ -1‬اﻻﺿﺎﻓﺔ ‪:‬‬

‫‪Insert into deptnested‬‬


‫;))'‪values(1,'medical',namenested('ali','sami','fahad','fady‬‬

‫‪ -2‬اﻟﺘﺤﺪﻳﺚ ‪: update‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪152 http://www.boosla.com‬‬

‫ﻟﺘﺤﺪﻳﺚ اﻟﻌﻨﺎﺻﺮ ﻓﻲ اﻟﺘﺠﻤﻴﻌﺔ ﻳﺘﻄﻠﺐ اﺳﺘﺨﺪام ‪ pl/sql‬وﻻﻳﻤﻜﻦ ﺗﻨﻔﻴﺬ ذﻟﻚ ﻣﻦ ﺧﻼل ‪sql‬‬
‫اﻟﻘﻴﺎﺳﻴﺔ ﻣﺜﺎل‪:‬‬

‫‪Declare‬‬
‫;‪Editname namenested‬‬
‫‪I‬‬ ‫;‪number:=1‬‬
‫‪Begin‬‬
‫‪Select emp into editname‬‬
‫;‪From deptnested where nodept=1‬‬
‫‪Loop‬‬
‫‪If (i=editname.count+1) then‬‬
‫;‪Exit‬‬
‫‪Elsif (editname(i)='sami') then‬‬
‫;'‪Editname(i):='mohammed‬‬
‫;‪End if‬‬
‫;‪i:=i+1‬‬
‫;‪end loop‬‬
‫‪update deptnested set emp=editname where‬‬
‫;‪nodept=1‬‬
‫;‪end‬‬
‫‪/‬‬

‫ﺷﺮح اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ‪:‬‬

‫ﺳﻮف ﻳﻘﻮم ﺑﺘﻐﻴﺮ اﺳﻢ اﻟﻤﻮﻇﻒ ‪sami‬اﻟﺬي ﻗﻤﻨﺎ ﺑﺎدﺧﺎل وﺗﺒﺪﻳﻠﺔ اﻟﻰ ‪ mohammed‬وﺷﺮح‬
‫اﻟﺨﻄﻮات آﻤﺎﻳﻠﻲ‬

‫اوﻻ ﻗﻤﻨﺎ ﺑﺘﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ‪ editname‬ﻣﻦ ﻧﻔﺲ ﻧﻮع اﻟﺘﺠﻤﻴﻌﺔ ‪ namenested‬وذﻟﻚ ﻟﻜﻲ ﻧﻘﻮم‬
‫ﺑﺘﺨﺰﻳﻦ اﻟﻤﺆﺷﺮ واﻟﺬي ﻳﺤﺘﻮي ﻋﻠﻰ اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﻓﻴﻪ وﻧﻌﺮف اﻳﻀﺎ ﻣﺘﻐﻴﺮ ‪ I‬وهﻮ ﻳﺴﺘﺨﺪم‬
‫آﻌﺪاد‪.‬‬

‫ﺛﻢ ﻧﻘﻮم ﺑﻌﻤﻞ ﻣﺆﺷﺮ ﻻﺳﺘﺨﺮاج اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ وهﻲ آﻤﺎﻳﻠﻲ‬

‫‪Select emp into editname‬‬

‫;‪From deptnested where nodept=1‬‬


‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪153 http://www.boosla.com‬‬

‫ﻳﻘﻮم هﻨﺎ ﺑﺎﺳﺘﺨﺮاج اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﻟﻠﻘﺴﻢ ‪ 1‬وﺗﺨﺰﻳﻦ ﻧﺎﺗﺞ اﻻﺳﺘﻌﻼم ﻓﻲ اﻟﻤﺘﻐﻴﺮ ‪editname‬‬
‫واﻟﺬي هﻮ ﻣﻦ ﻧﻔﺲ ﻧﻮع اﻟﺘﺠﻤﻴﻌﺔ‬

‫ﺛﻢ ﻳﺒﺪأ ﺣﻠﻘﺔ وﻣﻦ ﺛﻢ ﻳﺨﺘﺒﺮ هﻞ ‪ I‬وﺻﻠﺖ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ اذا آﺎن ﻧﻌﻢ ﻗﺎم ﺑﺎﻧﻬﺎء اﻻﺟﺮاء‬
‫واذا ﻟﻢ ﻳﺼﻞ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ ﻳﺨﺘﺒﺮ ﻋﻨﺼﺮ اﻟﺘﺠﻤﻴﻌﺔ اﻟﺤﺎﻟﻲ هﻞ هﻮ ﻳﺴﺎوي ‪ sami‬ام ﻻ‬
‫اذا آﺎن ﻳﺴﺎوي ‪sami‬ﻳﻘﻮم ﺑﺘﻐﻴﺮ هﺬﻩ اﻟﻘﻴﻤﺔ اﻟﻰ ‪ mohammed‬وﻣﻦ ﺛﻢ ﻳﺰﻳﺪ اﻟﻌﺪاد ﺑﻮاﺣﺪ‬
‫وﻣﻦ ﺛﻢ ﻳﻌﻮد ﻣﻦ ﺟﺪﻳﺪ اﻟﻰ ان ﻳﺼﻞ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ وﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ﺟﻤﻴﻊ اﻟﻌﻨﺎﺻﺮ ﻳﻘﻮم‬
‫ﺑﻌﻤﻞ اﻟﺘﺤﺪﻳﺚ ﻟﻠﺠﺪول‬

‫;‪update deptnested set emp=editname where nodept=1‬‬

‫وﻣﻦ ﺛﻢ ﻳﻘﻮم ﺑﺎﻧﻬﺎء اﻻﺟﺮاء‪.‬‬

‫‪ -3‬اﻟﺘﺤﺪﻳﺚ ﺑﺎﻻﺿﺎﻓﺔ )‪: update(append‬‬

‫اذا اردﻧﺎ اﺿﺎﻓﺔ اﻟﻤﺰﻳﺪ ﻣﻦ اﻟﻤﻮﻇﻔﻴﻦ اوﻻ ﻧﻘﻮم ﺑﻌﻤﻞ ﺗﻮﺳﻊ ‪ extend‬ﻟﻠﺘﺠﻤﻴﻌﺔ ﻟﻜﻲ ﺗﺴﻤﺢ ﻟﻨﺎ‬
‫ﺑﺎﺿﺎﻓﺔ ﻋﻨﺼﺮ ﺟﺪﻳﺪ ‪.‬وﻧﺴﺘﺨﺪم اﻻﺟﺮاء ﻟﺬﻟﻚ‬

‫وﻳﻜﻮن اﻻﺟﺮاء آﻤﺎﻳﻠﻲ‪:‬‬

‫‪Declare‬‬
‫;‪Newname namenested‬‬
‫‪Begin‬‬
‫‪Select emp into newname‬‬
‫;‪From deptnested where nodept=1‬‬
‫;‪Newname.extend‬‬
‫;'‪Newname(newname.last):='khaled‬‬
‫;‪update deptnested set emp=newname where nodept=1‬‬
‫;‪end‬‬
‫‪/‬‬

‫‪-4‬اﻟﺤﺬف ‪:‬‬

‫هﻨﺎك ﻃﺮﻳﻘﺘﺎن اﻻوﻟﻰ ﺑﺎﺳﺘﺨﺪام ‪ trim‬وهﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺗﺤﺬف اﺧﺮ ﺻﻒ ﻓﻲ اﻟﺘﺠﻤﻴﻌﺔ وﻻﻳﻤﻜﻦ‬
‫اﺧﺘﻴﺎر اي ﻋﻨﺼﺮ ﻓﻲ اﻟﺘﺠﻤﻴﻌﺔ‪:‬‬

‫‪Declare‬‬
‫;‪Namedel namenested‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪154 http://www.boosla.com‬‬

‫‪Begin‬‬
‫‪Select emp into namedel‬‬
‫;‪From deptnested where nodept=1‬‬
‫;)‪Namedel.trim(1‬‬
‫;‪update deptnested set emp=namedel where nodept=1‬‬
‫;‪end‬‬
‫‪/‬‬

‫اﻣﺎ اﻟﻄﺮﻳﻘﺔ اﻟﺜﺎﻧﻴﺔ ﻓﻬﻲ ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ )‪ delete(m‬وهﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻻ ﺗﺤﺬف ﻣﻦ اﻻﺧﻴﺮ ﺑﻞ ﻳﺘﻢ‬
‫اﺧﺘﻴﺎر اي اﻟﻌﻨﺎﺻﺮ اﻟﺬي ﺗﺮﻳﺪ ﺣﺬف ﻓﻠﻮ وﺿﻌﻨﺎ ‪ m=2‬وآﺎﻧﺖ اﻟﻤﺪﺧﻼت اﻟﺠﺪول آﻤﺎ ﻓﻌﻼ ﺳﺎﺑﻘﺎ‬
‫ﺳﻴﺘﻢ ﺣﺬف اﻟﻌﻨﺼﺮ اﻟﺜﺎﻧﻲ واﻟﺬي هﻮ اﻟﻤﻮﻇﻒ ‪sami‬‬

‫‪Declare‬‬
‫;‪Namedel namenested‬‬
‫‪Begin‬‬
‫‪Select emp into namedel‬‬
‫;‪From deptnested where nodept=1‬‬
‫;)‪Namedel.delete(2‬‬
‫;‪update deptnested set emp=namedel where nodept=1‬‬
‫;‪end‬‬
‫‪/‬‬

‫وهﺬﻩ اﻟﻄﺮﻳﻘﺔ)ﻃﺮﻳﻘﺔ ‪ (delete‬هﻲ ﻣﻦ اﺑﺮز اﻟﻔﻮارق ﺑﻴﻦ ‪ varray‬و ‪ nested table‬ﺣﻴﺚ‬


‫‪ varray‬ﻻ ﻳﻤﻜﻨﻬﺎ ﺣﺬف اي ﻋﻨﺼﺮ وﻟﻜﻦ ﺗﺤﺬف ﻓﻘﻂ اﻟﻌﻨﺼﺮ اﻻﺧﻴﺮ ﺑﻌﻜﺲ ‪nested table‬‬

‫د‪ -‬اﻟﺘﺠﻤﻴﻌﺔ ‪ NESTED TABLE‬ﻣﻦ اﻟﻨﻮع اﻟﺸﻴﺊ‪:‬‬


‫آﻤﺎ ﻻﺣﻈﻨﺎ ان اﻟﺘﺠﻤﻴﻌﺔ ‪ varray‬ﻳﺘﻢ اﻧﺸﺎءهﺎ ﻣﻦ اﻟﻨﻮع اﻟﺸﻲء ﻓﺈن ‪ NESTED TABLE‬ﻳﺘﻢ‬
‫إﻧﺸﺎءﻩ اﻳﻀﺎ ﻣﻦ اﻟﻨﻮع اﻟﺸﻲء اﻟﻤﻌﺮف ﺑﻮاﺳﻄﺔ اﻟﻤﺴﺘﺨﺪم‪.‬‬

‫ﺳﻮف ﻧﺴﺘﺨﺪم ﻟﺸﺮح هﺬا اﻟﻤﺜﺎل ﻧﻔﺲ اﻟﻤﺜﺎل اﻟﺬي اﺳﺘﺨﺪﻣﻨﺎﻩ ﻓﻲ ‪ varray‬ﻣﻦ اﻟﻨﻮع ‪object‬‬
‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ ‪155 http://www.boosla.com‬‬

‫ﻣﺜﺎل ذﻟﻚ ‪:‬‬

‫ﻟﻮ اردﻧﺎ اﻧﺸﺎء ﺟﺪول ﻳﺤﺘﻮي ﻋﻠﻰ ﻣﺴﻤﻰ اﻟﻮﻇﻴﻔﺔ وﻓﻲ ﺣﻘﻞ اﺧﺮ ﻧﻜّﻮن ﺗﺠﻤﻴﻌﺔ ﺗﺤﺘﻮي ﻋﻠﻰ‬
‫اﺳﻤﺎء اﻟﻤﻮﻇﻒ وراﺗﺒﺔ ﻟﺠﻤﻴﻊ ﻣﻮﻇﻔﻴﻦ هﺬﻩ اﻟﻮﻇﻴﻔﺔ‬

‫اول ﺧﻄﻮة هﻲ اﻧﺸﺎء اﻟﺸﻲء ‪ empobj‬واﻟﺬي ﺗﻢ اﻧﺸﺎءﻩ ﺳﺎﺑﻖ ﻋﻨﺪﻣﺎ ﻗﻤﻨﺎ ﺑﺸﺮح ‪vaaray‬‬
‫ﻣﻦ اﻟﻨﻮع اﻟﺸﻲء واذا آﻨﺖ ﻟﻢ ﺗﻘﻢ ﺑﺎﻧﺸﺎءﻩ ﻓﻬﺬا اﻟﻜﻮد ‪:‬‬

‫‪Create type empobj‬‬


‫‪as object (nameemp varchar2(50),salary‬‬
‫;))‪number(6‬‬
‫‪/‬‬

‫ﺛﺎﻧﻲ ﺧﻄﻮة هﻲ إﻧﺸﺎء اﻟﺘﺠﻤﻴﻌﺔ ‪ nested table‬ﺑﺎﺳﺘﺨﺪام اﻟﺸﻲء ‪ empobj‬آﻤﺎﻳﻠﻲ‬

‫;‪Create type empnestedobj as table of empobj‬‬

‫‪/‬‬

‫ﺛﺎﻟﺚ ﺧﻄﻮة ﻧﻘﻮم ﺑﺈﻧﺸﺎء اﻟﺠﺪول آﻤﺎﻳﻠﻲ‪:‬‬

‫‪Create table jobnested‬‬


‫‪(job_name varchar2(50),‬‬
‫)‪employee empnestedobj‬‬
‫;‪nested table employee store as nestedtablesimple‬‬

‫* اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺠﺪول اﻟﺴﺎﺑﻖ ﻣﻦ ﺧﻼل اواﻣﺮ ‪sql‬‬


156 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

: ‫ اﻻﺿﺎﻓﺔ‬-1

:‫ﻟﻜﻲ ﺗﻘﻮم ﺑﺎدراج ﺑﻴﺎﻧﺎت ﻓﻲ اﻟﺠﺪول اﻟﺴﺎﺑﻖ ﻧﻘﻮم ﺑﻤﺎﻳﻠﻲ‬

Insert into jobnested


Values('manager',
empnestedobj(empobj('ali',6000),
empobj('sami',7000),
empobj('fahad',6500)));

: ‫اﻟﺘﺤﺪﻳﺚ‬ -1

:‫ آﻤﺎﻳﻠﻲ‬pl/sql ‫ﻳﺘﻢ اﻟﺘﺤﺪﻳﺚ ﺑﺎﺳﺘﺨﺪام‬

9000 ‫ اﻟﻰ‬manager ‫ اﻟﻤﻮﻇﻒ اﻻداري اي ﻓﻲ ﻣﺴﻤﻰ وﻇﻴﻔﺘﻬﺎ‬ali ‫ﻣﺜﻼ ﻟﺘﻐﻴﺮ راﺗﺐ اﻟﻤﻮﻇﻒ‬

Declare
Editsal empnestedobj;
Editempobj empobj;
i number:=1;
Begin
Select employee into editsal
From jobnested where job_name='manager';
Loop
Editempobj:=editsal(i);
If (i=editsal.count) then
Exit;
Elsif (editempobj.nameemp='fahad') then
Editempobj.salary:=9900;
Editsal(i):=editempobj;
End if;
i:=i+1;
end loop;
update jobnested set employee=editsal where
job_name='manager';
end;
/
157 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

-: update(append) ‫ اﻟﺘﺤﺪﻳﺚ ﺑﺎﻻﺿﺎﻓﺔ‬-3

Declare
Editemp empnestedobj;
Begin
Select employee into editemp
From jobnested where job_name='manager';
Editemp.extend;
Editemp(editemp.last):=empobj('mohammed',7000);
update jobnested set employee=editemp where
job_name='manager';
end;
/

: delete(trim) ‫ اﻟﺤﺬف‬-4

‫ وهﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺗﺤﺬف اﺧﺮ ﺻﻒ ﻓﻲ اﻟﺘﺠﻤﻴﻌﺔ وﻻﻳﻤﻜﻦ‬trim ‫هﻨﺎك ﻃﺮﻳﻘﺘﺎن اﻻوﻟﻰ ﺑﺎﺳﺘﺨﺪام‬
:‫اﺧﺘﻴﺎر اي ﻋﻨﺼﺮ ﻓﻲ اﻟﺘﺠﻤﻴﻌﺔ‬

declare
empdel empnestedobj;
begin
Select employee into empdel
From jobnested where job_name='manager';
Empdel.trim(1);
update jobnested set employee=empdel where
job_name='manager';
end;
/

‫ وهﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻻ ﺗﺤﺬف ﻣﻦ اﻻﺧﻴﺮ ﺑﻞ ﻳﺘﻢ‬delete(m) ‫اﻣﺎ اﻟﻄﺮﻳﻘﺔ اﻟﺜﺎﻧﻴﺔ ﻓﻬﻲ ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ‬
‫ وآﺎﻧﺖ اﻟﻤﺪﺧﻼت اﻟﺠﺪول آﻤﺎ ﻓﻌﻼ ﺳﺎﺑﻘﺎ‬m=2 ‫اﺧﺘﻴﺎر اي اﻟﻌﻨﺎﺻﺮ اﻟﺬي ﺗﺮﻳﺪ ﺣﺬف ﻓﻠﻮ وﺿﻌﻨﺎ‬
‫ وﻓﻴﻤﺎﻳﻠﻲ اﻟﻜﻮد‬sami ‫ﺳﻴﺘﻢ ﺣﺬف اﻟﻌﻨﺼﺮ اﻟﺜﺎﻧﻲ وهﻮ اﻟﻤﻮﻇﻒ‬

‫اﻟﻄﺮﻳﻘﺔ اﻟﺜﺎﻧﻴﺔ‬

declare
empdel empnestedobj;
begin
Select employee into empdel
From jobnested where job_name='manager';
Empdel.delete(2);
158 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

update jobnested set employee=empdel where


job_name='manager';
end;
/
159 http://www.boosla.com ‫ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ‬

‫اﻟﻤﺮاﺟﻊ‬

Oracle 8 Unleashed Second Edition – Sams -1


Introduction to Oracle: SQL and PL/SQL Using -2
Procedure Builder (Electronic Presentation)1995
Oracle8 How-To -3
Teach Yourself Oracle 8 In 21 Days -4

You might also like