Oracl2e PDF
Oracl2e PDF
com
أوراآﻞ
ﻧﻨﻌﺮض ﻓﻲ هﺬا اﻟﻔﺼﻞ اﻟﻰ ﻣﻘﺪﻣﺔ ﻓﻲ ادارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت Databaseوﺧﺎﺻﺔ ﻗﻮاﻋﺪ ﺑﻴﺎﻧﺎت
اﻷوراآﻞ واﻟﺬي ﻳﻌﺘﺒﺮ أﺣﺪ اﻟﻨﻈﻢ اﻟﻘﻮﻳﺔ ﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت Data Base Management
) System (DBMSﻟﻤﺎ ﻟﻪ ﻣﻤﻴﺰات ﻣﻘﺎرﻧﺔ ﺑﻘﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت اﻻﺧﺮى .
اﻻﺳﺘﻌﻼم Query
هﻮ ﻧﻈﺎم اﺳﺘﻔﺴﺎري ﻟﻼﺳﺘﻌﻼم ﻋﻦ ﺑﻴﺎﻧﺎت ﻣﻌﻴﻨﺔ وﻏﺎﻟﻴﺎ ﻻ ﻳﻐﻴﺮ اﻻﺳﺘﻌﻼم ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ﺣﻴﺚ
إن ﻏﺎﻟﺒﻴﺔ ﻧﻈﻢ اﻻﺳﺘﻌﻼم ﻋﺒﺎرة ﻋﻦ ﻗﺮاءة ﻓﻘﻂ ﻟﻠﺒﻴﺎﻧﺎت
دوال Function
ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ ﺗﻌﻠﻴﻤﺎ ت أو أواﻣﺮ ﺗﺴﺘﺨﺪم ﺿﻤﻦ ﻣﺴﻤﻰ وﻇﻴﻔﻲ ﻻداء ﻋﻤﻠﻴﺔ ﻣﺤﺪدة
وﻏﺎﻟﺒﺎ ﺗﻌﻴﺪ اﻟﺪاﻟﺔ ﻗﻴﻤﺔ ﻣﻌﻴﻨﻪ ﺑﻌﺪ ﺗﻨﻔﻴﺬهﺎ
اﻻﺟﺮاء Procedure
ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺘﻌﻠﻴﻤﺎت ﻣﺜﻞ ﺗﻌﻠﻴﻤﺎت اﻟﺪاﻟﺔ ﺑﻬﺪف ﺗﻨﻔﻴﺬ ﻣﻬﻤﺔ ﻣﺤﺪدة ﻟﻜﻦ اﻻﺟﺮاء ﻻ ﻳﻌﻴﺪ ﻗﻴﻤﺔ
ﻣﺜﻞ اﻟﺪاﻟﺔ
ﻣﺨﻄﻂ Schema
ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻜﺎﺋﻨﺎت Objectsﻣﺮﺗﺒﻄﺔ ﺑﻘﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت وﻳﺘﺄﻟﻒ ﻣﺨﻄﻂ اﻟﻜﺎﺋﻦ ﻣﻦ
آﺎﺋﻨﺎت ﻣﺜﻞ اﻟﺠﺪاول Tablesواﻻﺟﺮاءات Procedureواﻟﻌﺮوض Viewsواﻟﻔﻬﺎرس
... Directoriesاﻟﺦ
وﻳﻤﻜﻦ ان ﻳﻘﻮم ﻣﺪﻳﺮ ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت ﺑﺎﻟﺘﺨﻄﻴﻂ ﻟﺘﻄﻴﺮ وﺗﻨﻤﻴﺔ اﻟﻨﻈﺎم اﻟﻤﻄﺒﻖ ،وﺗﺤﺪﻳﺪ اﻟﺤﺎﺟﻮ ﻟﻬﺬﻩ
اﻟﺘﻄﻮرات اﻟﻤﺴﺘﻘﺒﻠﻴﺔ .
وﻳﺴﻌﻰ ﻓﺮﻳﻖ اﻟﻌﻤﻞ اﻟﺬي ﻳﺘﻜﻮن ﻣﻦ ﻣﺪﻳﺮي ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت DBAﻟﻠﺤﻔﺎظ ﻋﻠﻰ ﺳﻴﺮ اﻟﻌﻤﻞ داﺧﻞ
اﻟﺸﺮآﺔ ﺑﺸﻜﻞ ﻣﺘﺠﺎﻧﺲ .وﺗﺘﻢ ﺗﺠﺰﺋﺔ اﻟﻤﻬﺎم ﺑﻴﻦ هﺆﻻء اﻟﻤﺪﻳﺮﻳﻦ .
2 ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ http://www.boosla.com
هﻮ ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﺔ اﻷدوات اﻟﺒﺮﻣﺠﻴﻪ ) اﻟﺒﺮاﻣﺞ ( اﻟﺘﻲ ﺗﺪﻳﺮ وﺗﻨﻈﻢ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وﺗﻮﺟﺪ
ﻋﻼﻗﺔ ارﺗﺒﺎط ﺑﻴﻦ هﺬﻩ اﻟﺒﻴﺎﻧﺎت ﺗﺴﻤﻰ ﻋﻼﻗﺔ ) (Relationﻟﺬا اﺣﺒﺎﻧﺎ ﻳﻄﻠﻖ ﻋﻠﻴﻬﺎ RDBMSأي
ﻧﻈﺎم إدارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت اﻟﻌﻼﺋﻘﻴﺔ ) اﻻرﺗﺒﺎﻃﻴﺔ (
ﻳﺘﻤﻴﺰ ﻧﻈﺎم ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت أوراآﻞ ﻋﻦ ﻏﻴﺮﻩ ﻣﻦ ﻧﻈﻢ إدارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت اﻷﺧﺮى ﺑﺎﻵﺗﻲ:
-1اﻟﻘﺪرة اﻟﻔﺎﺋﻘﺔ ﻋﻠﻰ اﺳﺘﻴﻌﺎب آﻤﻴﺎت آﺒﻴﺮة ﻣﻦ اﻟﺒﻴﺎﻧﺎت ﻗﺪ ﻳﺼﻞ ﻋﺪد اﻟﺴﺠﻼت إﻟﻰ
اﻟﻤﻼﻳﻴﻦ ﻣﻊ اﻟﺤﻔﺎظ ﻋﻠﻰ اﻟﻤﺴﺘﻮى اﻟﻌﺎﻟﻲ ﻓﻲ اﻷداء واﻟﺴﺮﻋﺔ ﻋﻨﺪ اﺳﺘﺮﺟﺎع واﻟﺘﺨﺰﻳﻦ
واﻟﺤﺬف
-2ﻻﺳﺮﻳﺔ اﻟﺘﺎﻣﺔ واﻷﻣﻦ ﻻ ﺣﺘﻮاﺋﻪ ﻋﻠﻰ ﻧﻈﺎم اﻟﺼﻼﺣﻴﺎت واﻟﺤﻘﻮق اﻟﺬي ﻳﻀﻤﻦ ﺗﻄﺒﻴﻖ
اﻟﺸﺮوط اﻟﻘﻴﺎﺳﻴﺔ واﻷﻣﻨﻴﺔ ﻟﻠﺤﻔﺎظ ﻋﻠﻰ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت
-3ﻓﻌﺎﻟﻴﺔ اﻟﺘﺤﻜﻢ اﻟﻤﺮآﺰي ﺑﺎﻟﺒﻴﺎﻧﺎت ﻻذي ﻳﻀﻤﻦ :
• ﺗﻘﻠﻴﻞ اﻟﺘﻜﺮرات ﻋﻴﺮ اﻟﻼزﻣﺔ ﻓﻲ اﻟﺒﻴﺎﻧﺎت اﻟﺪﺧﻠﺔ )(No Repetition
• ﺗﺠﻨﺐ اﻟﺘﻨﺎﻗﺾ ﺑﻴﻦ اﻟﺒﻴﺎﻧﺎت )(No Contradiction
• إﻣﻜﺎﻧﻴﺔ اﻟﺘﺸﺎرك ﻓﻲ اﻟﺒﻴﺎﻧﺎت )(Data Sharing
• اﻟﺤﻔﺎظ ﻋﻠﻰ ﺗﻜﺎﻣﻞ اﻟﺒﻴﺎﻧﺎت ﻓﻴﻤﺎ ﺑﻴﻨﻬﺎ )(Data Integrity
-4اﻟﺴﻴﻄﺮة اﻟﺘﺎﻣﺔ ﻋﻠﻰ ﻋﻤﻠﻴﺔ اﻟﻨﺴﺦ اﻻﺣﺘﻴﺎﻃﻲ ﻟﻘﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وﺣﻤﺎﻳﺘﻬﺎ ﻣﻦ اﻟﻔﻘﺪان أو
اﻟﺘﻠﻒ ﻣﻊ اﻣﻜﺎﻧﻴﺔ اﺳﺘﺮﺟﺎﻋﻬﺎ ﻓﻲ أي ﻟﺤﻈﺔ
3 ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ http://www.boosla.com
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﻠﻐﺔ ﻓﻲ ﺗﻌﺮﻳﻒ وإﻧﺸﺎء اﻟﻜﺎﺋﻦ ، Objectوﻳﻤﻜﻦ أن ﻳﻜﻮن اﻟﻜﺎﺋﻦ ﻣﻠﻔﺎت
وﺟﺪاول ﺑﻴﺎﻧﺎت ،ﻓﻴﻤﻜﻨﻨﺎ إﻧﺸﺎء وﺗﻌﺪﻳﻞ وﺣﺬف اﻟﻜﺎﺋﻦ وﻳﻤﻜﻨﻨﺎ إﻧﺸﺎء اﻣﺘﻴﺎز ﻟﻤﺴﺘﺨﺪم
ﻣﻌﻴﻦ ،أو اﻧﺸﺎء آﺎﺋﻦ ﺧﻴﺎرات ﻟﻔﺤﺺ وإﺿﺎﻓﺔ ﺗﻌﻠﻴﻘﺎت إﻟﻰ ﻗﺎﻣﻮس اﻟﺒﻴﺎﻧﺎت وﻣﻦ هﺬﻩ
اﻷواﻣﺮ CREAT , DROP and ALTER :
ﺗﺘﻴﺢ هﺬﻩ اﻷواﻣﺮ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺒﻴﺎﻧﺎت وﺗﻌﺪﻳﻠﻬﺎ ﺿﻤﻦ اﻟﻜﺎﺋﻦ اﻟﻤﻮﺟﻮد Objectوﻣﻦ هﺬﻩ
اﻷواﻣﺮ SELECT, DELETE,UPDATE and INSERT :
ﺗﺘﻴﺢ هﺬﻩ اﻷواﻣﺮ اﻟﺘﺤﻜﻢ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وأداﺋﻬﺎ آﺎﻟﺼﻼﺣﻴﺎت واﻟﻤﺴﺘﺨﺪﻣﻴﻦ واﻟﺤﻘﻮق
وﻏﺎﻟﺒﺎ ﻣﺎﺗﻜﻮن هﺬﻩ اﻷواﻣﺮ ﻣﺨﺼﺼﺔ ﻟﻼﺳﺘﺨﺪام ﻣﻦ ﻗﺒﻞ ﻣﺪﻳﺮ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت )(DBA
وﻣﻦ هﺬﻩ اﻻواﻣﺮ GRANT and REVOKE :
4 ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ http://www.boosla.com
ﻓﻲ اﻟﻤﺎﺿﻲ آﺎن اﻟﻨﻤﻮذج اﻷول ) اﻟﻬﺮﻣﻲ ( اﻷآﺜﺮ اﻧﺘﺸﺎرا ﻣﻊ أﺟﻬﺰة اﻟﻜﻤﺒﻴﻮﺗﺮ اﻟﻜﺒﻴﺮة Main
Frameﺛﻢ ﺑﺪا اﻟﻨﻈﺎم اﻟﺜﺎﻧﻲ ) اﻟﺸﺒﻜﻲ ( ﻓﻲ اﻻﻧﺘﺸﺎر وﺧﺎﺻﺔ ﻣﻊ اﻟﺘﻮﺳﻊ ﻓﻲ ﺑﻨﺎء وﺗﺮآﻴﺐ
ﺷﺒﻜﺎت اﻟﺤﺎﺳﺐ وآﺎﻧﺖ هﻨﺎك ﺻﻌﻮﺑﺎت ﻓﻲ اﺳﺘﺨﺪام اﻟﻨﻈﺎﻣﻴﻦ اﻟﻮل واﻟﺜﺎﻧﻲ ) اﻟﻬﺮﻣﻲ واﻟﺸﺒﻜﻲ (
ﻧﺘﻴﺠﺔ ﻻﺳﺘﺨﺪام ﻣﺆﺷﺮات اﻟﺒﺮﻣﺠﺔ ) ( Pointersﻟﺮﺑﻂ ﺳﺠﻼت اﻟﺒﻴﺎﻧﺎت ﺑﻌﻀﻬﺎ ﻣﻊ ﺑﻌﺾ ،ﻟﺬا
ﻧﺠﺪ أن إﺿﺎﻓﺔ أو ﺗﻌﺪﻳﻞ أو ﺣﺬف اﻟﺴﺠﻼت ﻳﺤﺘﺎج إﻟﻰ اﻟﻤﺰﻳﺪ ﻣﻦ ﻗﻬﻢ ﻃﺒﻴﻌﺔ وﻋﻤﻞ اﻟﻤﺆﺷﺮات
وﻓﻲ هﺬﻩ اﻟﻔﺘﺮة اﻟﻤﺎﺿﻴﺔ ﻃﺮق ﺑﺮﻣﺠﺔ اﻟﻤﺆﺷﺮات ﺗﻜﺘﺐ ﺑﻠﻐﺔ اﻟﻜﻮﺑﻮل ).(COBOL
أﻣﺎ اﻟﻨﻤﻮذج اﻟﻌﻼﺋﻘﻲ ) (Relationalﻓﻬﻮ اﻷآﺜﺮ ﺳﻬﻮﻟﺔ ﻓﻲ اﻻﺳﺘﺨﺪام وﻓﻲ ﺑﺮﻣﺠﺔ ﺗﻄﺒﻴﻘﺎت ﻧﻈﻢ
ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت وﻣﻦ اﻟﻨﺎﺣﻴﺔ اﻟﻨﻈﺮﻳﺔ اﻷآﺎدﻳﻤﻴﺔ ﻓﻴﻠﺰﻣﻚ دراﺳﺔ اﻟﻤﻔﺎهﻴﻢ اﻷﺳﺎﺳﻴﺔ واﻟﻀﺮورﺑﺔ ﻟﻬﺬا
اﻟﻨﻤﻮذج اﻟﻌﻼﺋﻘﻲ ﻟﻬﺬا ﺳﻨﺮآﺰ هﻨﺎ ﻋﻠﻰ
ﻟﺮﺑﻂ ﻋﻼﻗﺔ ﺑﺄﺧﺮى ﺗﺘﺤﺘﺎج إﻟﻰ ﻃﺮﻳﻘﺔ ﻟﻼرﺗﺒﺎط .وهﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺗﺴﺘﺨﺪم ﺣﻘﻼ Fieldﻳﻜﻮن
ﻣﻮﺟﻮدا ﻓﺐ اﻟﺠﺪوﻟﻴﻦ وﺣﻘﻞ اﻻرﺗﺒﺎط ﻳﺴﻤﻰ ﻓﻲ اﻟﺠﺪول اﻷول ﺑﺎﻟﻤﻔﺘﺎح اﻟﺮﺋﻴﺴﻲ (Primary
) Keyﻟﻠﺠﺪول اﻷل وﻳﺴﻤﻰ ﻳﺎﻟﻤﻔﺘﺎح ال ) (Foreign Keyﻓﻲ اﻟﺠﺪول اﻟﺜﺎﻧﻲ
7 ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ http://www.boosla.com
وﻳﺘﻜﻮن ﻧﻈﺎم ﺗﺸﻐﻴﻞ وﺗﻨﻈﻴﻢ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ) (Kernelﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻮﺣﺪان اﻟﺒﺮﻣﺠﻴﺔ
Softwareواﻟﺬي ﺻﻤﻢ ﺑﻴﺤﻜﻢ وﻳﻨﻈﻢ وﻳﻨﻌﺎﻣﻞ ﻣﻊ اﻟﺒﻴﺎﻧﺎت ﻣﺎﺑﻴﻦ ﺣﻔﻆ واﺳﺘﺮﺟﺎع وﻃﺒﺎﻋﺔ
وآﺬﻟﻚ ﺗﺤﺪﻳﺪ اﻟﻤﺴﺆﻟﻴﺎت وﻋﻤﻞ ﻧﻈﻢ اﻷﻣﺎن وﺣﻤﺎﻳﺔ اﻟﺒﻴﺎﻧﺎت
وﻋﺎدة ﻳﺤﺘﻔﻆ ﻧﻈﺎم ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ﺑﻘﺎﺋﻤﺔ ﻣﻦ اﻟﻤﺴﺘﺨﺪﻣﻴﻦ اﻟﺬﻳﻦ ﻟﻬﻢ ﺻﻼﺣﻴﺔ ﻟﻠﺘﻌﻤﻞ ﻣﻊ ﺗﻄﺒﻴﻖ
ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ ﺑﻌﻀﺎ ﻣﻦ ﻣﻜﻮﻧﺎت اﻟـ Kernelﻓﻲ ﻧﻈﺎم أوراآﻞ
وﻳﺤﻮي ﻗﺎﻣﻮس اﻟﺒﻴﺎﻧﺎت Data Dictionaryوﺻﻔﺎ ﻟﺸﻜﻞ اﻟﺒﻴﺎﻧﺎت وﻳﻄﻠﻖ ﻋﻠﻰ هﺬا اﻟﻮﺻﻒ
Meta Descriptionأو Meta Dataوهﺬا اﻟﻮﺻﻒ ﻳﺮﺗﺒﻂ ﺑﻜﺎﻓﺔ اﻟﻜﺎﺋﻨﺎ ت Objectsﺿﻤﻦ
ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت
وﻗﺎﻣﻮس ﺑﻴﺎﻧﺎت أوراآﻞ ﻳﺤﺘﻮي ﻋﻠﻰ ﻣﺠﻮﻋﺔ ﺟﺪاول ﺻﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻋﻦ ﻃﺮﻳﻖ
اﻟـ Kernelوأﻳﻀﺎ ﻋﻠﻰ آﺎﺋﻨﺎت اﻟﻔﻬﺎرس Indexesآﺎﺋﻨﺎت اﻟﻌﺮض Viewsآﺎﺋﻨﺎت اﻻﺳﺘﻌﻼم
واﻻﺳﺘﻘﺴﺎر SQL and Queryآﺎﺋﻨﺎت اﻹﺟﺮاء Procedureواﻟﺪوال ... Functionإﻟﺦ
9 ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ http://www.boosla.com
اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ آﻴﻔﻴﺔ ﻗﺮاءة أو ﺗﻌﺪﻳﻞ ﻗﺎﻋﺪة ﺑﻴﺎﻧﺎت ﺑﺎﺳﺘﺨﺪام أوراآﻞ
اﻟﺨﺎدم Server
ﻳﺤﻮي اﻟﺨﺎدم ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اﻟﻤﺮآﺰﻳﺔ ووﻇﺎﺋﻔﻬﺎ ،وآﺬﻟﻚ آﺎﻓﺔ اﻟﻌﻤﻠﻴﺎت اﻟﺨﻠﻔﻴﺔ ﻟﺤﻔﻆ هﺬﻩ اﻟﻔﺎﻋﺪة
وﺑﺤﻮي اﻳﻀﺎ أدوات ﺗﺸﻐﻴﻞ وإﻳﻘﺎف ﻓﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت
واﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ ﻳﻮﺿﺢ اﻟﺒﻨﺎء اﻟﺪاﺧﻠﻲ ﻟﻨﻈﺎم اﻟﺨﺎدم
اﻟﻤﺴﺘﻔﻴﺪ Client
أﻣﺎ اﻟﻤﺴﺘﻔﻴﺪ Clientﻓﻴﺤﺘﻮي ﻋﻠﻰ ﺑﺮاﻣﺞ اﻟﺨﺪﻣﺎت واﻟﺒﺮاﻣﺞ اﻟﻤﺴﺎﻋﺪﻩ واﻟﺘﻲ ﺑﻤﻜﻨﻨﺎ ﺗﺸﻐﻴﻠﻬﺎ ﻋﻦ
ﺑﻌﺪ ﺑﺎﺳﺘﺨﺪام اﻟﺸﺒﻜﺔ آﻤﺎ ﻳﺘﻀﻤﻦ ﻧﻈﺎم اﻟﻤﺴﺘﻔﻴﺪ اﻟﻮﺳﻴﻂ اﻟﺮﺳﻮﻣﻲ Graphical Interfaceاﻟﺬي
ﻳﺴﻬﻞ ﻋﻠﻴﻨﺎ اﺳﺘﺨﺪاﻣﻪ وﺗﻮﺟﺪ أداة اﻻﺗﺼﺎل ﺑﻴﻦ اﻟﺨﺎدم واﻟﻤﺴﺘﻘﻴﺪ وهﻲ Net 8ﻟﺘﻘﻮم ﺑﻌﻤﻠﻴﺎت اﻟﺮﺑﻂ
واﻻﺗﺼﺎل ﻋﺒﺮ اﻟﺸﺒﻜﺔ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 11 http://www.boosla.com
-2اﻟﻤﺴﺎﻋﺪون Assistants
-3ﻧﻈﺎم اﻻﺳﺘﻌﻼم SQL*PLUS
ﻣﺪﻳﺮ اﻟﺴﺮﻳﺔ Security ﻣﺪﻳﺮ اﻟﻨﺴﺦ اﻻﺣﺘﻴﺎﻃﻲ ﻟﻠﺒﻴﺎﻧﺎت ﻣﺪﻳﺮ اﻟﻄﺒﻌﺔ Instance
Manager Backup and Recovery Manager
Manager
ﻣﻠﺨﺺ اﻟﻮﺣﺪة
ﺗﻨﺎوﺑﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ ﻧﻌﺮﻳﻒ اﻟﺘﺮآﻴﺐ اﻟﺪاﺧﻠﻲ ﻟﻨﻈﺎم أوراآﻞ وأهﻢ ﻣﻜﻮﻧﺎﺗﻪ واﻟﻌﻼﻗﺔ ﺑﻴﻦ اﻟﺠﺪاول
,وآﺬﻟﻚ ﻋﻜﻠﻴﺔ ﻧﻤﺬﺟﺔ اﻟﻌﻼﻗﺔ ﻋﻠﻰ اﻟﺠﺪاول وﺗﻢ ﺗﻌﺮﻳﻒ اﻟﺨﺎدم واﻟﻤﺴﺘﻔﻴﺪ واﻟﻌﻼﻗﺔ ﺑﻴﻨﻬﻤﺎ .
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 12 http://www.boosla.com
ﺟﻤﻞ SQLاﻟﺒﺴﻴﻄﺔ
أهﺪاف اﻟﻔﺼﻞ
ﻧﺘﺎاول ﻋﻤﻠﻴﺔ اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻓﻲ ﺣﺎﻻت ﻣﺨﺘﻠﻔﺔ ﻣﺸﺘﺨﺪﻣﻴﻦ ﻓﻲ ذﻟﻚ ﺟﻤﻠﺔ SELECTوﻓﻲ
ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ ﺳﺘﻜﻮن إن ﺷﺎء اﷲ ﻗﺎدر ﻋﻠﻰ :
• اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ SELECTاﻟﺒﺴﻴﻄﺔ
• ﻓﻬﻢ ﻣﺘﻄﻠﺒﺎت وإرﺷﺎدات آﺘﺎﺑﺔ ﺟﻤﻞ SQL
• اﺳﺘﺨﺪام اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ وأوﻟﻮﻳﺎت ﺗﻨﻔﻴﺬهﺎ ﻣﻊ ﺟﻤﻞ SQL
• اﺳﺘﺨﺪام اﻟﺠﻤﻞ اﻹﻟﺤﺎﻗﻴﺔ ﻋﻠﻰ اﻟﺒﻴﺎﻧﺎت
• اﺳﺘﺨﺪام ﻋﺒﺎرة DISTINCTﻟﻤﻨﻊ ﺗﻜﺮار ﻋﺮض اﻟﺒﻴﺎﻧﺎت
• ﻋﺮض ﻣﻮاﺻﻔﺎت اﻟﺠﺪول
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 13 http://www.boosla.com
ﺟﻤﻠﺔ SELECT
ﺗﺴﺘﺨﺪم ﺟﻤﻠﺔ SELECTﻻﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ ﺟﺪول أو ﻋﺪة ﺟﺪاول ﺣﻴﺚ أن ﻋﻤﻠﻴﺔ
اﻻﺳﺘﺮﺟﺎع ﻻ ﺗﻌﺪل ﻓﻲ هﺬﻩ اﻟﺒﻴﺎﻧﺎت وﻳﻤﻜﻨﻨﺎ ﻣﻦ ﺧﻼل ﺟﻤﻠﺔ SELECTأن ﻧﻘﻮم ﺑﺎﻟﺘﺎﻟﻲ:
ﻣﻼﺣﻈﺔ
ﻳﻤﻜﻦ أن ﻧﺴﺘﺨﺪم آﻞ أو ﺑﻌﺾ هﺬﻩ اﻟﻤﺰاﻳﺎ ﻓﻲ ﺟﻤﻠﺔ اﺳﺘﻔﺴﺎر واﺣﺪة
ﻣﻼﺣﻈﺔ
أواﻣﺮ ﻣﺤﺮرSQL*PLUs
هﻨﺎﻟﻚ ﺑﻌﺾ اﻟﻮاﻣﺮ اﻟﺒﺴﻴﻄﺔ اﻟﺘﻲ ﺳﺘﺴﺎﻋﺪك ﻓﻲ آﺘﺎﺑﺔ وﺗﺤﺮﻳﺮ وﺗﻨﻔﻴﺬ اﻷواﻣﺮ ﻋﻠﻰ ﻣﺤﺮر SQL
وﻣﻨﻬﺎ
-1اﻻﻣﺮ EDITوﻳﻤﻜﻦ آﺘﺎﺑﺘﻪ : EDﻳﺴﺘﺨﺪم هﺬا اﻷﻣﺮ ﻟﺘﺤﺮﻳﺮ ﺁﺧﺮ اﻣﺮ ﺗﻢ آﺘﺎﺑﺘﻪ ﻋﻠﻰ
ﻣﺮر SQLوﻋﻨﺪ ﺗﻨﻔﻴﺬ هﺬا اﻷﻣﺮ ﺳﺘﻔﺘﺢ ﻟﻚ ﺷﺎﺷﺔ اﻟﻤﺤﺮر )اﻟﻤﻔﻜﺮة( اﻟﺘﻲ ﻳﻤﻜﻨﻚ ﺧﻼﻟﻬﺎ
اﻋﺎدة ﺗﺤﺮﻳﺮ اﻷﻣﺮ وﻋﻨﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ذﻟﻚ اﺣﻔﻆ اﻟﻤﺮ ﺛﻢ اﻏﻠﻖ ﺷﺎﺷﺔ اﻟﻤﻔﻜﺮة وﻟﻜﻦ ﻻﺣﻆ
ﻻ ﺗﻜﺘﺐ اﻟﻔﺎﺻﻠﺔ اﻟﻤﻨﻘﻮﻃﺔ );( ﺑﻌﺪ ﻧﻬﺎﻳﺔ اﻷﻣﺮ ﻓﻲ هﺬﻩ اﻟﺤﺎﻟﺔ ﻓﻘﻂ
-2اﻷﻣﺮ Rوﻃﺮﻳﻘﺔ آﺘﺎﺑﺘﻪ ) (/وﻳﺴﺘﺨﺪم ﻻﻋﺎدة ﺗﻨﻔﻴﺬ اﺧﺮ اﻣﺮ SQLﻣﺤﻔﻮظ
ﺣﻴﺚ أن
COLUMNاﺳﻢ اﻟﺤﻘﻞ
table_nameاﺳﻢ اﻟﺠﺪول
ﺗﺴﻤﻴﺔ اﻟﻌﻤﻮد alies
ﻣﺜﺎل
; S E L E C T * F R OM s _ d e p t
اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ
ﻳﻤﻜﻦ أن ﻧﺴﺘﺨﺪم اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ ﻋﻨﺪ ﻋﺮض اﻟﺒﻴﺎﻧﺎت دون أن ﺗﺆﺛﺮ هﺬﻩ اﻟﻤﻌﺎﻟﺠﺔ ﻋﻠﻰ
اﻟﺒﻴﺎاﻧﺎت اﻟﻤﺨﺰﻧﺔ ﻓﻲ اﻟﺠﺪول ،وﻳﻤﻜﻦ أن ﻳﺤﺘﻮي اﻟﺘﻌﺒﻴﺮ اﻟﺤﺴﺎﺑﻲ ﻋﻠﻰ اﺳﻢ اﻟﺤﻘﻞ ﻗﻴﻤﺔ ﺛﺎﺑﺘﺔ و
اﻟﻌﻤﻠﻴﺔ اﻟﺤﺴﺎﺑﻴﺔ
اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ
وﻳﻤﻜﻦ اﺳﺘﺨﺪام هﺬﻩ اﻟﻌﻤﻠﻴﺎت ﻓﻲ ﺣﻤﻴﻊ أﺟﺰاء ﺟﻤﻠﺔ 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
...
ﻧﻼﺣﻆ ان اﻻﺳﻢ اﻻول اﺗﺼﻞ ﺑﺎﻻﺳﻢ اﻻﺧﻴﺮ ﺑﺪون وﺟﻮد ﻣﺴﺎﻓﺎت ﻓﻈﻬﺮ آﺎﻧﻪ اﺳﻢ واﺣﺪ وﻟﻜﻲ
ﺗﻮﺟﺪ ﻣﺴﺎﻓﺎت ﻧﻜﺘﺐ
ﺗﺴﺘﺨﺪم ﻋﺒﺎرة DISTINCTﻟﻤﻨﻊ ﺗﻜﺮار ﻇﻬﻮر ﺑﻴﺎﻧﺎت اﻟﺴﺠﻞ اﻟﻤﺴﺘﺮﺟﻊ ﻓﻤﺜﻼ إذا أردﻧﺎ أن
ﻧﻌﺮف ﻋﻠﻰ اﻟﻮاﺋﻒ اﻟﺘﻲ ﻳﻨﺘﺴﺐ إﻟﻴﻬﺎ اﻟﻤﻮﻇﻔﻮن واﻟﻤﺨﺰﻧﺔ ﻓﻲ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ ﻧﺠﺪ أن هﻨﺎﻟﻚ
وﻇﺎﺋﻒ ﺗﺘﻜﺮر ﺣﺴﺐ ﻋﺪد اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻳﻨﺘﻤﻮن إﻟﻴﻬﺎ ﻟﻤﻨﻊ ﺗﻜﺮار ﻧﺴﺘﺨﺪم ﻋﺒﺎرة
DISTINCT
ﺣﻴﺚ أن
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
ﻟﻘﺪ ﻗﻤﻨﺎ ﻓﻲ اﻟﻮﺣﺪة اﻟﺴﺎﺑﻘﺔ ﺑﺎﻟﺘﻌﺮف اﻟﻰ ﺟﻤﻠﺔ اﻻﺳﺘﻌﻼم اﻟﺒﺴﻴﻂ )(SELECT Statement
اﻟﺘﻲ ﻣﻦ ﺧﻼﻟﻬﺎ ﺗﻢ اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﻦ اﻟﺠﺪاول .وﻓﻲ هﺬا اﻟﻔﺼﻞ ﺳﻨﺘﺎﺑﻊ اﻟﺤﺪﻳﺚ ﻋﻦ هﺬﻩ
اﻟﺠﻤﻠﺔ ﻳﺸﻜﻞ أوﺳﻊ ،ﺣﻴﺚ ﺳﻨﺴﺘﺮﺟﻊ اﻟﺒﻴﺎﻧﺎت ﻣﻦ اﻟﺠﺪاول ﺑﻨﺎء ﻋﻠﻰ ﺷﺮوط ﻣﻌﻴﻨﺔ ،أو ﻣﺮﺗﺒﺔ
ﺣﺴﺐ ﺑﻴﺎﻧﺎت ﺣﻘﻮل ﻣﻌﻴﻨﺔ ،أي ﺳﻨﺪرس اﻟﻤﻮر اﻟﻤﺘﻌﻠﻘﺔ ﺑﺠﻤﻠﺔ اﻟﺸﺮط ﻓﻲ ﺟﻤﻠﺔ اﻻﺳﺘﺮﺟﺎع ،ﻣﻦ
ﺣﻴﺚ اﻟﻤﻌﺎﻣﻼت اﻟﺸﺮﻃﻴﺔ وﻃﺮﻳﻘﺔ اﻟﺘﻌﺒﻴﺮ ﻋﻦ اﻟﺸﺮط واﻟﺘﺮﺗﻴﺐ اﻟﺘﺼﺎﻋﺪي واﻟﺘﺮﺗﻴﺐ اﻟﺘﺼﺎﻋﺪي
واﻟﺘﺮﺗﻴﺐ اﻟﺘﻨﺎزﻟﻲ ﻟﻠﺒﻴﺎﻧﺎت
ﺣﻴﺚ أن
اﻟﺸﺮح
ﺗﺴﺘﺨﺪم ﺟﻤﻠﺔ WHEREﻟﺤﺼﺮ اﻟﺒﻴﺎﻧﺎت ﻻﺗﻲ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎﻋﻬﺎ ﻣﻦ اﻟﺠﺪاول وهﻲ ﺗﺘﻮي ﻋﻠﻰ
ﺷﺮط وﺗﻘﻊ ﻣﺒﺎﺷﺮة ﺑﻌﺪ اﻟﻤﻘﻄﻊ FROMوﻋﻨﺪ ﺗﻨﻔﻴﺬ اﻟﺠﻤﻠﺔ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎﻋﻬﺎ ﺑﻴﺎﻧﺎت اﻟﺤﻘﻮل
اﻟﻤﺬآﻮرة اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط اﻟﻤﺬآﻮر ﻓﻲ ﺟﻤﻠﺔ WHEREوﻳﻤﻜﻦ أن ﺗﻘﺎرن اﻟﺠﻤﻠﺔ اﻟﺸﺮﻃﻴﺔ ﺑﻴﻦ
ﻗﻴﻢ أو ﺣﻘﻮل ﻓﻲ اﻟﺠﺪول أو ﺗﻌﺒﻴﺮات ﺣﺴﺎﺑﻴﺔ أي أن ﺟﻤﻠﺔ WHEREﺗﺤﺘﻮي ﻋﻠﻰ ﻣﺎﻳﻠﻲ:
-1ﻋﻨﺪ اﺳﺘﺨﺪام ﺣﻘﻮل اﻟﻨﺺ وﺣﻘﻮل اﻟﺘﺎرﻳﺦ ﻓﻲ ﺟﻤﻠﺔ اﻟﺸﺮط ﻳﺠﺐ وﺿﻊ اﻟﻘﻴﻢ ﺑﻴﻦ ﻋﻼﻣﺘﻲ
ﺗﻨﺼﻴﺺ ﻣﻔﺮدﺗﻴﻦ )‘ ‘(
-2ﻓﻲ ﺣﺎﻟﺔ اﻟﺤﻘﻮل اﻟﻨﺼﻴﺔ ﻳﺠﺐ ﻣﺮاﻋﺎة ﺣﺎﻟﺔ اﻷﺣﺮف آﺒﻴﺮة أو ﺻﻐﻴﺮة
-3ﻓﻲ اﻟﺔ ﺣﻘﻮل اﻟﺘﺎرﻳﺦ ﻳﺠﺐ ﻣﺮاﻋﺎة ﺻﻴﻐﺔ اﻟﺘﺎرﻳﺦ ) (FORMATواﻟﺼﻴﻐﺔ اﻷﺳﻠﺴﻴﺔ ﻟﻠﺘﺎرﻳﺦ
هﻲ آﻤﺎ ﻳﻠﻲ DD-MON-YY
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 20 http://www.boosla.com
اﻟﻤﻌﻨﻰ اﻟﻤﻌﺎﻣﻞ
ﻳﺴﺎوي =
أآﺒﺮ ﻣﻦ >
أﻗﻞ ﻣﻦ <
أآﺒﺮ ﻣﻦ أو ﻳﺴﺎوي =>
اﻗﻞ ﻣﻦ أو ﻳﺴﺎوي =<
ﻻ ﻳﺴﺎوي ><
ﺗﺴﺘﺨﺪم ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﻧﺔ ﻓﻲ ﺟﻤﻠﺔ اﻟﺸﺮط ﻟﻤﻘﺎرﻧﺔ ﺗﻌﺒﻴﺮ ﺑﺂﺧﺮ ﻓﻲ ﺟﻤﻠﺔ WHEREآﻤﺎ ﻓﻲ
اﻟﺼﻴﻐﺔ اﻟﺘﺎﻟﻴﺔ :
ﻣﺜﺎل
’WHERE hiredate=’01-SEP-96
WHERE sal>=1500
’WHERE name=’Ahmed
WHERE sal<> other
-1اﻟﻤﻌﺎﻣﻞ BETWEEN
ﻳﺴﺘﺨﺪم هﺬا اﻟﻤﻌﺎﻣﻞ ﻻﺳﺘﺮﺟﺎع ﺑﻴﺎﻧﺎت اﻟﺼﻔﻮف اﻟﺘﻲ ﺗﻌﺘﻤﺪ ﻋﻠﻰ ﻣﺪى ﻣﻦ اﻟﻘﻴﻢ أي اﻟﺒﻴﺎﻧﺎت اﻟﺘﻲ
ﺗﻘﻊ ﺑﻴﻦ ﻗﻴﻤﺘﻴﻦ
ﻣﺜﺎل
أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع ﺟﻤﻴﻊ ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ اﻗﻊ رواﺗﺒﻬﻢ ﺑﻴﻦ 1500و 2500
ﻣﻼﺣﻈﺔ
ﺳﺘﻢ اﺳﺘﺮﺟﺎع ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻒ اﻟﺬي ﻳﺒﺒﻠﻎ راﺗﺒﻪ ﺗﻤﺎﻣﺎ 1500أو 2500أي أن ﺟﻤﻠﺔ
BETWEENﺗﺘﻀﻤﻦ اﻟﺤﺪ اﻷﻋﻠﻰ واﻟﺤﺪ اﻷدﻧﻰ ﻟﻠﻘﻴﻢ اﻟﺘﻲ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎﻋﻬﺎ
-2اﻟﻤﻌﺎﻣﻞ IN
ﻳﺴﺘﺨﺪم هﺬا اﻟﻤﻌﺎﻣﻞ ﻟﻠﺒﺤﺚ ﻋﻦ ﻗﻴﻤﺔ داﺧﻞ ﻗﺎﺋﻤﺔ ﻣﻦ اﻟﻘﻴﻢ ﻓﺘﺤﺘﻮي هﺬﻩ اﻟﻘﺎﺋﻤﺔ ﻗﻴﻤﺎ ﺛﺎﺑﺘﺔ أو ﻗﺪ
ﺗﻜﻮن هﺬﻩ اﻟﻘﺎﺋﻤﺔ ﻋﺒﺎرة ﻋﻦ ﺟﻤﻠﺔ اﺳﺘﻌﻼم ﻓﺮﻋﻲ
ﻣﺜﺎل
أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع اﺳﻢ اﻟﻤﻮﻇﻒ وراﺗﺒﻪ ورﻗﻢ اﻟﻘﺴﻢ اﻟﺬي ﻳﻌﻤﻞ ﺑﻪ ﻟﻠﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻳﻌﻤﻠﻮن ﻓﻲ
ﻗﺴﻢ رﻗﻢ 10أو ﻗﺴﻢ رﻗﻢ 30
-3اﻟﻤﻌﺎﻣﻞ .LIKE
ﻳﺴﺘﺨﺪم هﺬا اﻟﻤﻌﺎﻣﻞ ﻟﻠﺒﺤﺚ ﻋﻦ ﻧﺺ ﻣﻌﻴﻦ داﺧﻞ ﺣﻘﻞ ﻧﺼﻲ ،ﺣﻴﺚ ﺳﻴﺘﻢ ﻣﻄﺎﺑﻘﺔ ﺣﺮوف اﻟﻨﺺ
اﻟﻤﺬآﺮة ﻓﻲ ﺟﻤﻠﺔ اﻟﺸﺮط
ﻣﺜﺎل
SELECT * FROM S_EMP
;’WHERE name LIKE ‘S%
أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع ﺟﻤﻴﻊ ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﺗﺒﺪأ أﺳﻤﺎؤهﻢ ﺑﺤﺮف S
ﻣﻼﺣﻈﺔ
ﺗﺴﺘﺨﺪم اﻻﺷﺎرة %ﻋﻮﺿﺎ ﻋﻦ أي ﻗﻴﻤﺔ ﻧﺼﻴﺔ ،ﻗﺪ ﺗﻜﻮن ﻻ ﺷﻲء أو أي ﻋﺪد ﻣﻦ اﻟﺤﺮوف ﻟﻠﺒﺤﺚ
ﻣﺜﻼ ﻋﻦ اﺳﻢ ﻣﻌﻴﻦ ﻳﻨﺘﻬﻲ ﺑﺤﺮف Aﻧﻜﺘﺐ ‘ ’%Aوﻟﻠﺒﺤﺚ ﻋﻦ ﻧﺺ ﻳﺤﺘﻮي ﺣﺮف Aﻧﻜﺘﺐ
‘ ’%A%وهﻜﺬا ﺑﺈﻣﻜﺎﻧﻨﺎ أن ﻧﺒﺤﺚ ﻋﻦ أي ﻣﻘﻄﻊ داﺧﻞ ﺣﻘﻞ ﻧﺼﻲ ﻣﻌﻴﻦ
ﻣﺜﺎل
أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع ﺟﻤﺒﻊ ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻳﻜﻮن اﻟﺤﺮف اﻟﺜﺎﻧﻲ ﻓﻲ أﺳﻤﺎﺋﻬﻢ هﻮ A
ﻣﻼﺣﻈﺔ
ﺗﺴﺘﺨﺪم اﻹﺷﺎرة _ ﻋﻮﺿﺎ ﻋﻦ ﺣﺮف واﺣﺪ ﻓﻘﻂ
ﻳﺴﺘﺨﺪم هﺬا اﻟﻤﻌﺎﻣﻞ ﻟﻔﺤﺺ اﻟﻘﻴﻤﺔ )ﻻ ﺷﻲء( أي ﻗﻴﻢ اﻟﻘﻮل اﻟﺘﻲ ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ ﺑﻴﺎﻧﺎت
ﻣﺜﺎل
SELECT name, sal FROM S_EMP
;WHERE comm. IS NULL
أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع اﺳﻢ اﻟﻤﻮﻇﻒ وراﺗﺒﻪ ﻟﻠﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻟﻴﺲ ﻟﻬﻢ ﻋﻤﻮﻟﺔ أو ﻟﻢ ﻳﺘﻢ ادﺧﺎل
ﻋﻤﻮﻟﺘﻬﻢ
ﺗﺴﺘﺨﺪم اﻟﻤﻌﺎﻣﻼت اﻟﻤﻨﻄﻘﻴﺔ ﻟﺘﺮﺟﻊ ﻗﻴﻤﺔ واﺣﺪة TRUEأو FALSEآﻨﺘﻴﺠﺔ ﺑﻴﻦ ﻗﻴﻤﺘﻴﻦ
ﻣﻨﻄﻘﻴﺘﻴﻦ او ﻟﻌﻜﺲ ﻗﻴﻤﺔ ﻣﻨﻄﻘﻴﺔ ﻣﻦ TRUEاﻟﻰ FALSEواﻟﻌﻜﺲ
ﻣﻦ ﺧﻼل اﻟﻤﻌﺎﻣﻼت اﻟﻤﻨﻄﻘﻴﺔ ﻳﻤﻜﻨﻨﺎ ﺗﻜﻮﻳﻦ أآﺜﺮ ﻣﻦ ﺷﺮط داﺧﻞ ﺟﻤﻠﺔ WHEREﺑﺎﺳﺘﺨﺪام
اﻟﻤﻌﺎﻣﻞ ANDاو اﻟﻤﻌﺎﻣﻞ OR
-1اﻟﻤﻌﺎﻣﻞ AND
ﻣﺜﺎل
SELECT name, sal FROM S_EMP
;WHERE sal>=2600 AND comm<200
أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع اﺳﻢ اﻟﻤﻮﻇﻒ وراﺗﺒﻪ ﻟﻠﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﻳﺰﻳﺪ راﺗﺒﻬﻢ ﻋﻦ 2600وﺗﻘﻞ
ﻋﻤﻮﻟﺘﻬﻢ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ ﻋﻦ 200أي اﻧﻪ ﻳﺠﺐ ﻳﺘﺤﻘﻖ اﻟﺸﺮﻃﻴﻦ ﻻﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 23 http://www.boosla.com
-2اﻟﻤﻌﺎﻣﻞ OR
ﻣﺜﺎل
SELECT name, sal FROM S_EMP
;WHERE sal <2000 OR deptno=30
أي أﻧﻪ ﺳﻴﺘﻢ اﺳﺘﺮﺟﺎع اﺳﻢ اﻟﻤﻮﻇﻒ وراﺗﺒﻪ ﻟﻠﻤﻮﻓﻴﻦ اﻟﺬﻳﻦ ﻳﺰﻳﺪ راﺗﺒﻬﻢ ﻋﻦ 2000أو ﻳﻌﻤﻠﻮن ﻓﻲ
ﻗﺴﻢ رﻗﻢ 30أي أﻧﻪ ﻳﺠﺐ ﻳﺘﺤﻘﻖ أي ﻣﻦ اﻟﺸﺮﻃﻴﻦ ﻻﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت
ﻣﺜﺎل
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
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
}*|…SELECT {Field1, Field2,…,
FROM Table1
WHERE Condition
;]ORDER BY 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وﺳﺘﻜﻮن اﻟﺒﻴﺎﻧﺎت ﻣﺮﺗﺒﺔ ﺗﺼﺎﻋﺪﻳﺎ ﺣﺴﺐ رﻗﻢ اﻟﻤﻮﻇﻒ
ﻣﺜﺎل
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
اﻟﺪوال اﻟﺤﺮﻓﻴﺔ
اهﺪاف اﻟﻔﺼﻞ
ﺗﺴﻨﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﺤﻮﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺣﺮوف آﺒﻴﺮة إﻟﻰ ﺣﺮوف ﺻﻐﻴﺮة وﻳﺘﻢ اﺳﺘﺨﺪام هﺬﻩ اﻟﺪاﻟﺔ
ﻏﺎﻟﻴﺎ ﻣﻊ ﺟﻤﻞ أﺧﺮى
ﻣﺜﺎل .
)SELECT LOWER (name), LOWER (job
;FROM S_EMP
ﺗﺴﻨﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﺤﻮﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺣﺮوف ﺻﻐﻴﺮة إﻟﻰ ﺣﺮوف آﺒﻴﺮة وﻳﺘﻢ اﺳﺘﺨﺪام هﺬﻩ اﻟﺪاﻟﺔ
ﻏﺎﻟﻴﺎ ﻣﻊ ﺟﻤﻞ أﺧﺮى
ﻣﺜﺎل
)SELECT UPPER (name), UPPER (job
;FROM S_EMP
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﻮﻳﻞ أول ﺣﺮف ﻣﻦ ﺑﻴﺎﻧﺎت اﻟﻘﻞ اﻟﻤﺤﺪد إﻟﻰ ﺣﺮف آﺒﻴﺮ وﻳﺘﻢ اﺳﺘﺨﺪام هﺬﻩ
اﻟﺪاﻟﺔ ﻏﺎﻟﺒﺎ ﻣﻊ اﻟﺠﻤﻞ أﺧﺮى
ﻣﺜﺎل
)SELECT INITCAP (name), INITCAP (job
;FROM S_EMP
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 28 http://www.boosla.com
ﺳﻴﺘﻢ ﻋﺮض اﺳﻢ اﻟﻤﻮﻇﻒ ووﻇﺒﻘﺘﻪ وﻟﻜﻦ اول ﺣﺮف ﻓﻲ آﻼهﻤﺎ ﺳﻴﻜﻮن آﺒﻴﺮ
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
)SUBSTR(Field1,N,M
ﺣﻴﺚ أن
اﻟﺤﻘﻞ اﻟﻤﺮاد اﻻﻗﺘﻄﺎع ﻣﻨﻪ String
اول ﺣﺮف ﻳﺒﺪأ ﻋﻨﺪﻩ اﻻﻗﺘﻄﺎع N
ﻋﺪد اﻟﺤﺮوف اﻟﻤﺮاد اﻗﺘﻄﺎﻋﻬﺎ M
ﻣﺜﺎل
)SUBSTR('Ahmed',1,3
ﻗﻴﻜﻮن اﻟﻨﺎﺗﺞ
Ahm
ﻣﺜﺎل
)SELECT SUBSTR (name, 1,2
;FROM S_EMP
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﺤﺪﻳﺪ ﻣﻜﺎن أو ﻣﻮﻗﻊ ﺣﺮف ﻓﻲ ﺑﻴﺎﻧﺎت اﻟﻌﻤﻮد أو اﻟﺤﻘﻞ
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
)’INSTR (Field, ‘C
ﺣﻴﺚ أن
ﻣﺜﺎل
)’SELECT INSTR (name, ‘l
;FROM S_EMP
INSTR name
--------------------
2
0
0
4
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻤﺤﺎذاة اﻟﺒﻴﺎﻧﺎت ﻧﺎﺣﻴﺔ اﻟﻴﻤﻴﻦ ﺣﻴﺚ ﻳﺘﻢ ﻣﻞء ﺣﺮف ﻣﻌﻴﻦ )أو ﺣﺮوف ( ﻳﻤﻴﻦ
اﻟﺒﻴﺎﻧﺎت
اﻟﺸﻜﻞ اﻟﻌﺎم
ﺣﻴﺚ أن
ﻣﺜﺎل
)’SELECT name, RPAD (sal, 7,’$
;FROM S_EMP
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻤﺤﺎذاة اﻟﺒﻴﺎﻧﺎت ﻧﺎﺣﻴﺔ اﻟﻴﻤﻴﻦ ﺣﻴﺚ ﻳﺘﻢ ﻣﻞء ﺣﺮف ﻣﻌﻴﻦ )أو ﺣﺮوف ( ﻳﺴﺎر
اﻟﺒﻴﺎﻧﺎت
اﻟﺸﻜﻞ اﻟﻌﺎم
ﺣﻴﺚ أن
ﻣﺜﺎل
)’SELECT name, LPAD (sal, 7,’#
;FROM S_EMP
ﺗﺴﺘﻨﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺤﺬف ﺑﻴﺎﻧﺎت ﻣﻦ ﻧﺎﻳﺔ ﻳﻤﻴﻦ اﻟﻌﻤﻮد او اﻟﺤﻘﻞ اﻟﻤﺤﺪد
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
)’RTRIM (COL | VALUE,‘ String
ﺣﻴﺚ أن
ﻣﺜﺎل
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺤﺬف ﺑﻴﺎﻧﺎت ﻣﻦ ﻧﺎﺣﻴﺔ ﻳﺴﺎر اﻟﻌﻤﻮد أو اﻟﺤﻘﻞ اﻟﻤﺤﺪد
اﻟﺸﻜﻞ اﻟﻌﺎم
)’LTRIM (COL | VALUE,‘ String
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 32 http://www.boosla.com
ﺣﻴﺚ أن
ﻣﺜﺎل
اﻟﺸﻜﻞ اﻟﻌﺎم
)LENGTH (COL | VALUE
ﻣﺜﺎل
)’SELECT LENGTH (name), LENGTH (‘WELCOME
;FROM S_EMP
اﻟﺸﻜﻞ اﻟﻌﺎم:
)TRANSLATE (COL|VALUE, FROM, TO
ﺣﻴﺚ أن
ﻣﺜﺎل
)’SELECT name, TRANSLATE (name,’MI’,’WY
;FROM S_EMP WHERE sal=1512.5
name )TRANSLATE(name
-------------------- --------------------
SAMI SAWY
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻹﻳﺠﺎد اﻟﻠﻔﻆ اﻟﺼﻮﺗﻲ ﻟﻠﺒﻴﺎﻧﺎت )اﻟﻤﺘﻐﻴﺮات( اﻟﻤﻮﺟﻮدة ﻓﻲ ﺟﺪول ﻣﻌﻴﻦ ﺣﺘﻰ وﻟﻮ
آﺎن هﻨﺎك اﺧﺘﻼف ﻓﻲ ﺑﻌﺾ اﻷﺣﺮف اﻟﻬﺠﺎﺋﻴﺔ
اﻟﺸﻜﻞ اﻟﻌﺎم:
)SOUNDEX (COL|VALUE
ﺣﻴﺚ أن
ﻣﺜﺎل
ﻣﻠﺨﺺ اﻟﻔﺼﻞ
ﺗﻨﺎوﻟﻨﺎ اﻟﺪوال اﻟﺤﺮﻓﻴﺔ اﻟﺨﺎﺻﺔ ﺑﺘﺤﻮﻳﻞ ﺣﺎﻟﺔ اﻟﺤﺮوف ﻣﻦ ﺣﺮوف آﺒﻴﺮة إﻟﻰ ﺣﺮوف ﺻﻐﻴﺮة
واﻟﻌﻜﺲ وآﺬﻟﻚ ﺿﺒﻂ ﻣﺤﺎذاة اﻟﺤﺮوف داﺧﻞ اﻟﻨﺺ وﻣﻦ اﻟﺪوال اﻟﻬﺎﻣﺔ اﻟﻨﻲ ﺗﻨﺎوﻟﻨﺎهﺎ اﻳﻀﺎ دوال
ﺣﺬف اﻟﺒﻴﺎﻧﺎت ودوال ﻋﺮض اﻟﻠﻔﻆ اﻟﺼﻮﺗﻲ وﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت اﻟﺠﺪاول .
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 35 http://www.boosla.com
أهﺪاف اﻟﻔﺼﻞ
دوال اﻟﺘﺎرﻳﺦ
اﻟﻮﻓﺖ هﻮ اﻟﺤﻴﺎة واﻟﺘﺎرﻳﺦ هﻮ أﺻﻞ اﻻﻣﻢ ﻟﺬا ﻟﺘﺎ ﻟﻨﺘﻌﻤﻖ ﻓﻲ آﻴﻔﻴﺔ اﺳﺘﺨﺪام دوال اﻟﺘﺎرﻳﺦ
اﻟﺪاﻟﺔ Sysdate
هﺬﻩ اﻟﺪاﻟﺔ ﺗﻘﻮم ﺑﺈﻋﻄﺎء ﺗﺎرﻳﺦ اﻟﻴﻮم اﻟﺤﺎﻟﻲ أي اﻟﺘﺎرﻳﺦ اﻟﻤﺨﺰن ﻓﻲ ﺟﻬﺎز اﻟﻜﻤﺒﻴﻮﺗﺮ اﻟﺬي ﻳﻨﻔﺬ ﻋﻠﻴﻪ
هﺬا اﻷﻣﺮ وﻳﺘﻢ ﺗﺨﺰﻳﻦ اﻟﺘﺎرﻳﺦ وهﻤﻲ ﻳﺴﻤﻰ Dualوهﻮ ﻣﻮﺟﻮد أﺻﻼ داﺧﻞ ﻟﻐﺔ أوراآﻞ ﻟﺬﻟﻚ
ﻳﺠﺐ أن ﺗﺘﻢ ﻋﻤﻠﻴﺔ اﺳﺘﺪﻋﺎء اﻟﺘﺎرﻳﺦ ﻣﻦ هﺬا اﻟﺠﺪول
ﻣﺜﺎل
اﻟﺪاﻟﺔ NEXT_DAY
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻌﺮض اﻟﺘﺎرﻳﺦ اﻟﺬي ﻳﻮاﻓﻖ اﻟﺘﺎرﻳﺦ اﻟﺘﺎﻟﻲ ﻟﻠﺘﺎرﻳﺦ اﻟﻤﻌﻄﻰ
ﻓﻌﻠﻰ ﺳﺒﻴﻞ اﻟﻤﺜﺎل إذا آﺎن اﻟﺘﺎرﻳﺦ اﻟﻤﻮﺟﻮد هﻮ 2003/7/7وﻃﻠﺐ ﻣﻦ اﻟﺠﻬﺎز ﺗﺤﺪﻳﺪ اﻟﻴﻮم اﻟﺬي
ﻳﺼﺎدف ﻳﻮم اﻟﺠﻤﻌﺔ ﻣﻦ ﻧﻔﺲ اﻟﺸﻬﺮ ﻓﺈﻧﻪ ﻳﻌﻄﻲ 2003/7/11
اﻟﺸﻜﻞ اﻟﻌﺎم
)NEXT_DAY (DATE,CHAR
ﺣﻴﺚ إن DATEهﻮ اﻟﺘﺎرﻳﺦ اﻟﻤﻌﻄﻰ واﻟﻤﺮاد إﻳﺠﺎد اﻟﺘﺎرﻳﺦ ﻟﻠﻴﻮم اﻟﺬي ﻳﻠﻴﻪ ﻣﻦ ﺧﻼل وﺿﻊ اﺳﻢ
اﻟﻴﻮم داﺧﻞ اﻟﻤﺘﻐﻴﺮ CHAR
ﻣﺜﺎل
ﻧﺘﻴﺠﺔ اﻟﺘﻨﻔﻴﺬ
NEXT_DAY
-------------------
11/7/2003
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 37 http://www.boosla.com
اﻟﺸﻜﻞ اﻟﻌﺎم
)LAST_DAY (DATE
ﻣﺜﺎل
ﺑﻔﺮض أن ﺗﺎرﻳﺦ اﻟﻬﺎز SYSDATEهﻮ 2003/2/2ﻓﺈن ﻧﺘﻴﺠﺔ ﻟﻠﺠﻤﻠﺔ اﻟﺴﺎﺑﻘﺔ هﻲ آﻤﺎ ﻳﻠﻲ :
)LAST_DAY(SYSDATE
--------------------------------
28/2/2003
ﻣﻼﺣﻈﺔ
ﻳﻤﻜﻨﻚ أن ﺗﻘﻮم ﺑﻄﺮح ﺗﺎرﻳﺦ ﻣﻦ ﺗﺎرﻳﺦ ﺁﺧﺮ آﺎﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ
اﻟﺪاﻟﺔ MONTHES_BETWEEN
اﻟﺸﻜﻞ اﻟﻌﺎم
MONTHES_BETWEEN )(DATE1,DATE2
ﻣﺜﺎل
MONTHES_BETWEEN )’(’01-SEP-95’,’11-JAN-94
ﺳﻴﻜﻮن اﻟﻨﺎﺗﺞ
1.9774194
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 38 http://www.boosla.com
)ADD_MONTHES (DATE,M
ﺣﻴﺚ أن
ﻣﺜﺎل
)ADD_MONTHES (‘7-JAN-99’,6
7-JUL-99
اﻟﺪاﻟﺔ ROUND
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻌﺮض اﻗﺮب ﺑﺪاﻳﺔ ﺷﻬﺮ أو ﺳﻨﻪ ﻟﺘﺎرﻳﺦ ﻣﻌﻴﻦ ﺗﺤﺪدﻩ
ﻣﻼﺣﻈﺔ :ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ أﻳﻀﺎ ﻟﻠﺒﻴﺎﻧﺎت اﻟﺮﻗﻤﻴﺔ ﻟﻠﺘﻘﺮﻳﺐ وﺳﻴﺘﻢ ﺷﺮﺣﻬﺎ ﻓﻲ ﺑﺎب اﻟﺪوال اﻟﺮﻗﻤﻴﺔ
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
ﺣﻴﺚ أن
ﻣﺜﺎل
)’ROUND (’07-MAY-96’, ‘MONTH
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 39 http://www.boosla.com
01-JUN-96
ﻣﺜﺎل
)’ROUND (’07-MAY-96’, ‘YEAR
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﻌﺮض ﺗﺎرﻳﺦ اول ﻳﻮم ﻓﻲ ﺷﻬﺮ أو ﺳﻨﻪ ﻟﺘﺎرﻳﺦ ﻣﻌﻴﻦ ﺗﺤﺪدﻩ
ﻣﻼﺣﻈﺔ :ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ أﻳﻀﺎ ﻟﻠﺒﻴﺎﻧﺎت اﻟﺮﻗﻤﻴﺔ ﻟﻠﺘﻘﺮﻳﺐ وﺳﻴﺘﻢ ﺷﺮﺣﻬﺎ ﻓﻲ ﺑﺎب اﻟﺪوال اﻟﺮﻗﻤﻴﺔ
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
ﻣﺜﺎل
ﻣﺜﺎل
01-JAN-96
دوال اﻟﺘﺤﻮﻳﻞ
ﻳﺘﻢ ﺗﺤﻮﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺷﻜﻞ إﻟﻰ اﺧﺮ وﺗﻮﺟﺪ دوال ﺧﺎﺻﺔ ﺑﺎﻟﺘﻮﻳﻞ وﻣﻨﻬﺎ
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﺤﻮﻳﻞ اﻟﺘﺎرﻳﺦ او اﻷرﻗﺎم اﻟﻰ ﺟﻤﻠﺔ ﺣﺮﻓﻴﺔ ﺣﻴﺚ ﻳﺘﻢ ﺗﻐﻴﻴﺮ ﺷﻜﻞ اﻟﺘﺎرﻳﺦ او
اﻻرﻗﺎم ﻣﻦ ﺻﻮرة إﻟﻰ اﺧﺮى
اﻟﺸﻜﻞ اﻟﻌﺎم
)’TO_CHAR (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
اﻟﺸﻜﻞ اﻟﻌﺎم
)’TO_CHAR (NUMBER,’FMT
ﺣﻴﺚ أن
NUMBERاﻟﺮﻗﻢ
اﻟﺼﻮرة اﻟﺠﺪﻳﺪة FMT
ﻣﺜﺎل
)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ﺑﻪ ارﻗﺎم وﻟﻜﻨﻬﺎ ارﻗﺎم رﻓﻴﻪ أي اﻧﻬﺎ ﺗﻌﺎﻣﻞ
ﻣﻌﺎﻣﻠﺔ اﻟﺤﺮوف ﻓﻼ ﺗﺪﺧﻞ ﻓﻲ اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ ﻓﻌﻨﺪ ﺗﻨﻔﻴﺬ هﺬﻩ اﻟﺪاﻟﺔ ﺳﺘﻢ ﺗﺤﻮﻳﻞ اﻟﻘﻴﻢ إﻟﻰ ﻓﻴﻢ
رﻗﻤﻴﺔ ﻳﻤﻜﻦ ان ﺗﺪﺧﻞ ﻓﻲ اﻟﻌﻤﻠﻴﺎت اﻟﺤﺴﺎﺑﻴﺔ
NUM )TO_NUMBER(NUM
----------------------------------------------------------------------------------------
9236 9236
7526 7526
ﻣﻼﺣﻈﺔ
اﻟﻌﻤﻮدان ﺑﻬﻤﺎ ﻧﻔﺲ اﻟﻘﻴﻢ وﻟﻜﻦ ﻳﻮﺟﺪ اﺧﺘﻼف ﻓﻲ اﻟﻨﻮع
اﻟﺪاﻟﺔ TO_DATE
ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﺘﺤﻮﻳﻞ اﻟﻤﺘﻐﻴﺮ اﻟﺤﺮﻓﻲ داﺧﻞ اﺷﺎؤة اﻟﻨﺺ اﻟﻰ ﻣﺘﻌﻴﺮ ﺑﺸﻜﻞ ﺗﺎرﻳﺦ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ
ﻳﻮﺿﺢ ذﻟﻚ :
)’SELECT TO_DATE (‘JULY 7,2003’,’MONTH DD, YY
;FROM DUAL
ﻣﻠﺨﺺ اﻟﻔﺼﻞ
ﺗﻨﺎوﻟﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ دوال اﻟﺘﺎرﻳﺦ اﻟﺨﺎﺻﺔ ﺑﺎﻟﺘﻌﺎﻣﻞ ﻣﻊ آﺎﻣﻞ اﻟﺼﻴﻎ ﻟﻠﺘﺎرﻳﺦ واﻟﻮﻗﺖ
واﺳﺘﻌﺮاﺿﻬﺎ ﺑﻌﺪة أﺷﻜﺎﻟﻬﺎ ﺛﻢ ﺗﻄﺮﻗﻨﺎ دوال اﻟﺘﺤﻮﻳﻞ اﻟﺘﻲ ﺗﻌﻤﻞ ﺗﺤﻮﻳﻞ ﺣﺎﻻت اﻟﻜﺘﺎﺑﺔ ﻣﻦ ﻧﺺ إﻟﻰ
ﺗﺎرﻳﺦ و ﺑﺎﻟﻌﻜﺲ آﺬﻟﻚ ﻣﻦ أرﻗﺎم اﻟﻰ ﻧﺺ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 43 http://www.boosla.com
اﻟﺪوال اﻟﺮﻗﻤﻴﺔ
أهﺪاف اﻟﻔﺼﻞ
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻹﻳﺠﺎد اﻟﻘﻴﻤﺔ اﻟﻤﻄﻠﻘﺔ ﻟﺮﻗﻢ ﻣﻌﻴﻦ وﻏﺎﻟﺒﺎ ﻳﺘﻢ اﺳﺘﺨﺪان هﺬﻩ اﻟﺪاﻟﺔ ﻣﻊ ﺟﻤﻞ أﺧﺮى
اﻟﺸﻜﻞ اﻟﻌﺎم
)ABS (COL|VALUE
ﺣﻴﺚ أن
ﻣﺜﺎل
ﻧﻼﺣﻆ أن ﻗﻢ اﻟﻌﻤﻮد hierdate-sysdateﻗﻲ ﺳﺎﻟﺒﺔ وﻟﻜﻲ ﻧﺠﻌﻠﻬﺎ داﺋﻤﺎ ﻣﻮﺟﺒﺔ ﻧﺄﺧﺬ اﻟﻘﻴﻤﺔ
اﻟﻤﻄﻠﻘﺔ ﻟﻬﺬا اﻟﻌﻤﻮد وﻧﻜﺘﺐ
اﻟﺸﻜﻞ اﻟﻌﺎم
)POWER (COL|VALUE,P
ﺣﻴﺚ أن
ﻣﺜﺎل
اﻟﺸﻜﻞ اﻟﻌﺎم
)SQRT (COL|VALUE
ﺣﻴﺚ أن
ﻣﺜﺎل
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪاﻟﺔ ﻟﺘﻘﺮﻳﺐ اﻟﻌﺪد إﻟﻰ اﻗﺮب رﻗﻢ ﻋﺸﺮي أو ﺻﺤﻴﺢ
اﻟﺸﻜﻞ اﻟﻌﺎم
)ROUND (COL|VALUE, N
ﺣﻴﺚ أن
ﻣﺜﺎل
اﻟﺸﻜﻞ اﻟﻌﺎم
)TRUNC (COL|VALUE,N
ﺣﻴﺚ أن
ﻣﺜﺎل
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
MOD (VALUE1, VALUE2)
ﺣﻴﺚ أن
ﻣﺜﺎل
SELECT DIGIT1, MOD (DIGIT1, 7) FROM DIGITS
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺪااة ﺑﻔﺤﺺ إﺷﺎرة اﻟﺮﻗﻢ ﻓﺈذا آﺎﻧﺖ اﻹﺷﺎؤة ﻣﻮﺟﺒﺔ ﺗﻌﻮد ﺑﺎﻟﻘﻴﻤﺔ ) (1أﻣﺎ اذا آﺎﻧﺖ
اﻹﺷﺎرة ﺳﺎﻟﺒﺔ ﻓﺘﻌﻮد ﺑﺎﻟﻘﻴﻤﺔ )(-1
ﻣﺜﺎل
-50 -1
-30.5 -1
ﻣﻠﺨﺺ اﻟﻔﺼﻞ
ﺗﻨﺎوﻟﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ اﻟﺪوال اﻟﺮﻗﻤﻴﺔ ﻓﻲ ﻟﻐﺔ اﻻﺳﺘﻌﻼم واﻻﺳﺘﻔﻬﺎم ﻓﻲ ﻧﻈﺎم ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت
اوراآﻞ وﻗﺪ ﻗﺴﻤﻨﺎ هﺬﻩ اﻟﺪوال ﺣﺴﺐ وﻇﺎﺋﻔﻬﺎ ﻓﻤﻨﻬﺎ ﻣﺎﻳﺘﻌﺎﻣﻞ ﻣﻊ ﺳﺠﻞ أو ﺻﻒ ﻣﻦ اﻟﺒﻴﺎﻧﺎت
وﻣﻨﻬﺎ ﻣﺎﻳﺘﻌﺎﻣﻞ ﻣﻊ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺴﺠﻼت RECORDSاو اﻷﻋﻤﺪة )COLUMNSاﻟﺤﻘﻮل(
ﺣﻴﺚ ﺗﻄﺮﻗﻨﺎ اﻟﻰ داﻟﺔ اﻟﻘﻴﻤﺔ اﻟﻤﻄﻠﻘﺔ واﻟﺪاﻟﺔ اﻻﺳﻴﺔ واﻟﺠﺬر اﻟﺘﺮﺑﻴﻌﻲ وآﺬﻟﻚ دوال اﻟﺘﻘﺮﻳﺐ وداﻟﺔ
ﺑﺎﻗﺲ اﻟﻘﺴﻤﺔ واﻻﺷﺎرة
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 50 http://www.boosla.com
اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت
أهﺪاف ااﻓﺼﻞ
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
ﺣﻴﺚ ﻧﻜﺘﺐ ﺑﻌﺪ SELESTاﻻﻋﻤﺪة اﻟﺘﻲ ﻧﺮﻳﺪ ﻇﻬﺮوهﺎ وﻻﺣﻆ آﺬﻟﻚ أﻧﻪ ﻣﻦ اﻟﻀﺮوري آﺘﺎﺑﺔ
اﻻﻋﻤﺪة اﻟﺘﻲ ﻋﻦ ﻃﺮﻳﻘﻬﺎ ﺗﻢ اﻟﺮﺑﻂ)اﻟﺘﻲ ﻳﺘﺴﺎوى ﻓﻴﻬﺎ اﻟﺤﻘﻮل ﻓﻲ اﻟﺠﺪوﻟﻴﻦ( وﻧﻜﺘﺐ ﺑﻌﺪ آﻠﻤﺔ
WHEREاﻟﻌﻤﻮدان اﻟﻠﺬان ﺗﻢ رﺑﻂ اﻟﺠﺪوﻟﻴﻦ ﻋﻦ ﻃﺮﻳﻘﻬﻤﺎ
ﻣﻼﺣﻈﺔ
ﻧﻜﺘﺐ اﺳﻢ اﻟﺠﺪول اوﻻ ﺛﻢ اﺳﻢ اﻟﻌﻤﻮد وﺑﻴﻨﻬﻤﺎ ﻧﻘﻄﻪ table.column
52 http://www.boosla.com ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
ﻣﺜﺎل
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
DEPT_ID L A S T_ N A M E NAME
------------------------------------------------
41 NGAO OPERATOPNS
41 URGIHART OPERATOPNS
ﻣﺜﺎل
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
ﻳﺴﺘﺨﺪم هﺬا اﻟﻨﻮع ﻟﺮؤﻳﺔ اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول اﻟﺜﺎﻧﻲ اﻟﺘﻲ ﻻ ﻳﻘﺎﺑﻠﻬﺎ ﺳﺠﻼت ﻓﻲ اﻟﺠﺪول اﻷول
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
ﻣﻼﺣﻈﺔ
( ﻓﻲ هﺬا اﻟﻨﻮع ﻣﻦ اﻟﺮﺑﻂ ﺣﻴﺚ ﻧﻜﺘﺒﻪ ﺑﺠﻮار اﻻﺳﻢ اﻟﺤﻘﻞ اﻟﺬي ﻻ ﻳﺤﺘﻮي هﻠﻰ+) ﻧﺴﻨﺨﺪم اﻟﻤﻌﺎﻣﻞ
ﻗﻴﻤﺔ
54 http://www.boosla.com ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
ﻣﺜﺎل
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;
ﻓﻲ اﺧﺮ ﻣﺜﺎل ﻗﻤﻨﺎ ﺑﺎﺳﺘﺪﻋﺎء اﻟﺠﺪول s_empﺑﺎﺳﻢ ﻣﺴﺘﻌﺎر workerوﻣﺮة أﺧﺮى ﻳﺎﺳﻢ
managerوهﺬا اﻻﺳﻢ ﻳﻘﻮم ﻣﺤﻞ اﺳﻢ اﻟﺠﺪول وﻗﺪ اﺳﺘﺨﺪﻣﻨﺎﻩ ﻟﻠﺘﺴﻬﻴﻞ
ﻣﺜﺎل
ﺗﻨﺎوﻟﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ ﺟﻤﻞ SQLاﻟﺨﺎﺻﺔ ﺑﺎﺳﺘﺮﺟﺎع ﺑﻴﺎﻧﺎت ﻣﻦ اآﺜﺮ ﻣﻦ ﺟﺪول آﻐﺮض رﻗﻢ
اﻗﺴﻢ اﻟﻤﻮﻇﻔﻴﻦ ﻣﻦ ﺟﺪول اﻟﻤﻮﻃﻔﻴﻦ وﺗﻄﺮﻗﻨﺎ آﺬﻟﻚ إﻟﻰ ﻋﻤﻠﻴﺔ اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺧﻼل اﺳﻢ
ﻣﺴﺘﻌﺎر
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 57 http://www.boosla.com
أهﺪاف اﻟﻔﺼﻞ
ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﻌﻤﻠﻴﺔ ﺣﺼﺮ اﻟﺤﻘﻮل ﻓﻲ ﻋﻤﻮد ﻣﻌﻴﻦ واﻟﺘﻲ ﻻ ﺗﺤﻤﻞ اﻟﻘﻴﻤﺔ 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 (DISTINCT|ALL|EXP
ﻣﺜﺎل
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 59 http://www.boosla.com
اﻟﺸﻜﻞ اﻟﻌﺎم
)MIN (DISTINCT|ALL|EXP
ﻣﺜﺎل
;SELECT MIN (DISTINCT salary) FROM S_EMP
ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﻌﺮض ﻣﺠﻤﻮع اﻟﻘﻴﻢ اﻟﻤﻮﺟﻮدة ﻓﻲ ﺣﻘﻞ او ﻋﻤﻮد ﻣﻌﻴﻦ
)SUM (DISTINCT|ALL|EXP
ﻣﺜﺎل
;SELECT SUM (salary) FROM S_EMP
ﺗﻘﻮم هﺬﻩ اﻟﺠﻤﻠﺔ ﺑﻌﺮض ﻣﺠﻤﻮع رواﺗﺐ اﻟﻤﻮﻇﻔﻴﻦ ﻓﻲ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ S_EMP
ﺗﻘﻮم هﺬﻩ اﻟﺪاﻟﺔ ﺑﻌﺮض اﻟﻤﻌﺪل ﻟﻤﺠﻤﻮﻋﺔ ﻗﺮاءات ﻗﺪ ﺗﻜﻮن ﻣﻮﺟﻮدة ﻓﻲ ﺟﺪول ﻣﻌﻴﻦ
اﻟﺸﻜﻞ اﻟﻌﺎم
)AVG (COLUMN
ﻣﺜﺎل
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 60 http://www.boosla.com
اﻟﺸﻜﻞ اﻟﻌﺎم
)STDDEV (DISTINCT|ALL
ﻣﺜﺎل
ﻹﺑﺠﺎد اﻻﻧﺤﺮاف اﻟﻤﻌﻴﺎري ﻟﻸرﻗﺎم اﻟﻮاردة ﻓﻲ ﺣﻘﻞ اﻟﺮواﺗﺐ ﻓﻲ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ S_EMP
ﻣﺜﺎل
;SELECT VARIANCE (SALARY) FROM S_EMP
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 61 http://www.boosla.com
دوال اﻟﻤﺠﻤﻮﻋﺎت
هﻲ ﻋﺒﺎرة ﻋﻦ ﺟﻤﻴﻊ اﻟﺪوال اﻟﺴﺎﺑﻘﺔ او أي دوال اﺧﺮى وﻟﻜﻦ ﺑﺎﺳﺘﺨﺪاﻣﺎهﺎ ﻣﻊ اﻟﺪاﻟﺔ
GROUP BYﻣﻤﺎﻳﺆدي إﻟﺔ ﺗﺠﺰﺋﺔ اﻟﺠﺪول اﻟﺮﺋﻴﺴﻲ إﻟﻰ ﻣﺠﻤﻮﻋﺎت اﺻﻐﺮ ﻣﻨﻪ ﺣﺴﺐ ﺷﺮط
ﻣﻐﻴﻦ
اﻟﺸﻜﻞ اﻟﻌﺎم
GROUP BY COL_NAME
ﻣﺜﺎل
اذا اردﻧﺎ اﻇﻬﺮ ﺑﻴﺎﻧﺎت ﻣﻦ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ EMPوﻋﻤﻞ ﻣﺠﻤﻮﻋﺎت ﺑﺸﺮط أن ﺗﻜﻮن اﻟﻮﻇﻴﻔﺔ
MANAGERأو ANALYSTاو SALESMAN
ﻣﻠﺨﺺ اﻟﻔﺼﻞ
رآﺰﻧﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ ﻋﻠﻰ ﺟﻤﻞ SQLاﻟﺨﺎﺻﺔ ﺑﺎﻟﺪوال اﻟﺮﻳﺎﺿﻴﺔ واﻻﺣﺼﺎﺋﻴﺔ اﻟﺘﻲ ﺗﻘﻮم ﺑﻐﺮض
ﻗﻴﻤﺔ واﺣﺪة ﻣﻦ اﻟﺒﻴﺎﻧﺎت ﻣﺜﻞ MAX,MIN,AVGوﻏﻴﺮهﺎ وﻣﻦ ﺛﻢ دوال اﻟﻤﺠﻤﻮﻋﺎت اﻟﺘﻲ
ﺗﻜﻮن ﻏﺎﻟﺒﺎ ﻣﻊ اﻻﻣﺮ GROUP BYواﻟﺘﻲ ﺗﻘﻮم ﺑﻔﺮز اﻟﺠﺪول اﻟﻰ ﺟﺪول اﺻﻐﺮ ﻣﻨﻪ أو ﻳﺴﺎوﻳﻪ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 63 http://www.boosla.com
اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ
أهﺪاف اﻟﻔﺼﻞ
ﻓﻲ ﻧﻬﺎﻳﺔ هﺬا اﻟﻔﺼﻞ ان ﺷﺎء اﷲ ﺳﺘﻜﻮن ﻗﺎدرﻋﻠﻰ
اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ
ﻣﻘﺪﻣﺔ
ﻟﻨﻔﺘﺮض أﻧﻚ ﺗﺮﻏﺐ ﻓﻲ آﺘﺎﺑﺔ اﺳﺘﻌﻼم ﻹﻳﺠﺎد ﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﺗﺰﻳﺪ رواﺗﺒﻬﻢ ﻋﻦ راﺗﺐ أﺣﺪ
اﻟﻤﻮﻇﻔﻴﻦ
ﻓﻲ هﺬﻩ اﻟﺤﺎﻟﺔ ﺗﺤﺘﺎج اﻟﻰ اﺳﺘﻌﻼﻣﻴﻦ
اﺳﺘﻌﻼم ﻻﻳﺠﺎد راﺗﺐ اﻟﻤﻮﻇﻒ اﻟﻤﻌﻨﻲ -1
اﺳﺘﻌﻼم ﻻﻳﺠﺎد اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ ﺗﺰﻳﺪ رواﺗﺒﻬﻢ ﻋﻦ اﻟﻤﺒﻠﻎ اﻟﻤﺤﺴﻮب ﻓﻲ اﻻﺳﺘﻌﻼم اﻷول -2
وﻳﻤﻜﻨﻚ دﻣﺞ اﻻﺳﺘﻌﻼﻣﻴﻦ وذﻟﻚ ﺑﺮﺗﻜﻴﺐ اﺣﺪ اﻻﺳﺘﻌﻼﻣﻴﻦ ﻓﻲ اﻻﺧﺮ ،اﻻﺳﺘﻌﻼم اﻟﺪاﺧﻠﻲ ﺳﻮف
ﻳﻌﻮد ﺑﻘﻴﻤﺔ )ﻗﻴﻢ( واﻟﺘﻲ ﻳﺴﺘﺨﺪﻣﻬﺎ اﻻﺳﺘﻌﻼم اﻟﺨﺎرﺟﻲ )اﻟﺮﺋﻴﺴﻲ(
إن اﺳﺘﺨﺪام اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ ﻳﺸﺒﻪ ﺗﻤﺎﻣﺎ ﺗﻨﻔﻴﺬ اﻻﺳﺘﻌﻼﻣﻴﻦ ﺑﺸﻜﻞ ﻣﺘﺘﺎل واﺳﺘﻼﻋﻢ ﻧﺘﻴﺠﺔ
اﻻﺳﺘﻌﻼم اﻻول آﻨﺘﻴﺠﺔ ﺑﺤﺚ ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﺜﺎﻧﻲ
هﻮ ﺟﻤﻠﺔ اﺳﺘﻔﺴﺎر SELECTﻣﻀﻤﻨﺔ داﺧﻞ ﺟﻤﻠﺔ اﺳﺘﻔﺴﺎر رﺋﻴﺴﻴﺔ ﻻﺳﺘﺮﺟﺎع ﻗﻴﻤﺔ أو ﻣﺠﻤﻮﻋﺔ
ﻣﻦ اﻟﻘﻴﻢ ﻟﻴﺘﻢ اﺳﺘﺨﺪاﻣﻬﺎ ﻓﻲ اﻻﺳﺘﻌﻼم اﻟﺮﺋﻴﺴﻲ اﻧﻈﺮ اﻟﺸﻜﻞ اﻟﺘﺎﻟﻲ
اﻟﺸﻜﻞ اﻟﻌﺎم
ﻧﺴﺘﺨﺪم هﺬا اﻻﺳﺘﻌﻼم ﻓﻲ ﺣﺎﻟﺔ ان اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻻ ﻳﻌﻮد اﻻ ﺑﺴﻄﺮ واﺣﺪ اﻧﻈﺮ اﻟﻰ اﻟﻤﺜﺎل
اﻟﺘﺎﻟﻲ
ﻣﻼﺣﻈﺔ
-1أﻧﻮاع ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﺗﺔ اﻟﺨﺎﺻﺔ ﺑﻬﺬا اﻟﻨﻮع هﻲ
>< >, <, <=, >=.
ﻳﻘﻮم اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻓﻲ هﺬا اﻟﻤﺜﺎل ﻳﺎﺳﺘﺨﺮاج أرﻗﺎم اﻟﻤﻮﻇﻔﻴﻦ اﻟﺬﻳﻦ اﺳﻤﻬﻢ ''Finance
او رﻗﻢ ﻣﻨﻄﻘﺘﻬﻢ 2ﻣﻦ ﺟﺪول اﻻﻗﺴﺎم ﻓﻬﺬا ﻻﺳﺘﻌﻼم ﺳﻴﻌﻮد ﺑﻌﺪة ﻓﻴﻢ ﻳﺄﺧﺬهﺎ اﻻﺳﺘﻌﻼم اﻟﺮﺋﻴﺴﻲ
وﻳﺴﺘﺨﺮج اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﻋﻠﻰ اﺳﺎﺳﻬﺎ
ﻣﻼﺣﻈﺔ
أﻧﻮاع ﻣﻌﺎﻣﻼت اﻟﻤﻘﺎرﺗﺔ اﻟﺨﺎﺻﺔ ﺑﻬﺬا اﻟﻨﻮع هﻲ -1
IN, ALL, ANY
اذا اﺳﺘﺨﺪﻣﻨﺎ ﻣﻌﺎﻣﻼت اﻻﺳﺘﻌﻼم اﺣﺎدي اﻟﺼﻒ ﻣﻊ اﺳﺘﻌﻼم ﻣﺘﻌﺪد ﻓﺎن اﻻﺑﺮﻧﺎﻣﺞ ﻳﻌﻄﻴﻚ -2
رﺳﺎﻟﺔ ﺧﻄﺄ
ORA-01427:single-row sub query returns more
than one row
ﻣﻠﺨﺺ اﻟﻔﺼﻞ
ﻓﻲ هﺬا اﻟﻔﺼﻞ ﺗﻌﺮﻓﻨﺎ ﻋﻠﻰ اﻻﺳﺘﻌﻼﻣﺎت اﻟﻔﺮﻋﻴﺔ واهﻤﻴﺘﻬﺎ وﺷﺮوﻃﻬﺎ واﻧﻮاﻋﻬﺎ اﻷﺣﺎدﻳﺔ
واﻟﻤﺘﻌﺪدة
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 68 http://www.boosla.com
إﻧﺸﺎء اﻟﺠﺪاول
أهﺪاف اﻟﻔﺼﻞ
ﺗﻌﺮﻳﻒ اﻟﺠﺪول
ﻗﻠﻨﺎ ﺳﺎﻳﻘﺎ أن اﻟﺠﺪول أو اﻟﻤﻠﻒ ﻳﺘﻜﻮن ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺴﺠﻼت RECORDSوآﻞ ﺳﺠﻞ
ﻳﺘﻜﻮن ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺤﻘﻮل FIELDSآﻞ ﺣﻘﻞ ﺑﻪ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺤﺮوف او اﻻرﻗﺎم وهﺬﻩ
اﻟﺤﻘﻮل ﻟﻬﺎ ﻃﻮل أو ﻋﺮض
وﻳﻌﺮف اﻟﻤﻠﻒ أو اﻟﺠﺪول ﺑﺄﻧﻪ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷﻋﻤﺪة وﻳﻤﺜﻞ آﻞ ﻋﻤﻮد ﺑﺤﻘﻞ ﻣﻦ اﻟﺤﻘﻮل وﻟﻜﻞ ﺣﻘﻞ
ﻧﻮع ﻟﺒﻴﺎﻧﺎﺗﻪ ﻓﻴﻪ
ﻳﺘﻜﻮن هﺬا اﻟﺤﻘﻞ ﻣﻦ اﻟﺤﺮوف اﻷﺑﺠﺪﻳﺔ ,اﻷرﻗﺎم ,واﻟﺮﻣﻮز اﻟﺨﺎﺻﺔ .وﻃﻮل أو ﻋﺮض هﺬا
اﻟﺤﻘﻞ ﻳﺼﻞ اﻟﻰ 240ﺣﺮف وﻻ ﺑﺪ ﻣﻦ ﺗﺤﺪﻳﺪ ﻃﻮل أو ﻋﺮض اﻟﺤﻘﻞ وهﻮ اﺟﺒﺎري واذا ﻟﻢ ﻳﺘﻢ
اﻟﺘﺤﺪﻳﺪ ﺳﻴﻔﺘﺾ اﻟﺒﺮﻧﺎﻣﺞ اﻧﻪ 1
اﻟﺸﻜﻞ اﻟﻌﺎم
)var CHAR (size
ﻣﺜﺎل
)FirstName CHAR (20
ﻳﺘﻜﻮن هﺬا اﻟﺤﻘﻞ ﻣﻦ اﻟﺤﺮوف اﻷﺑﺠﺪﻳﺔ ,اﻷرﻗﺎم ,واﻟﺮﻣﻮز اﻟﺨﺎﺻﺔ .وﻃﻮل أو ﻋﺮض هﺬا
اﻟﺤﻘﻞ ﻳﺼﻞ اﻟﻰ 240ﺣﺮف ﻻ ﻳﻮﺟﺪ ﻃﻮل اﻓﺘﺮاﺿﻲ ﻟﻠﺤﻘﻞ
ﻣﺜﺎل
)FirstName VARCHAR2 (20
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 70 http://www.boosla.com
وﻳﺘﻜﻮن ﻣﻦ اﻷرﻗﺎم ) (0,1,2-9واﻻﺷﺎرة +أو _ وﻳﻤﻜﻦ أن ﻳﺤﺘﻮي ﻋﻠﻰ اﻟﻌﻼﻣﺔ اﻟﻌﺸﺮﻳﺔ أو
اﻟﻔﺎﺻﻠﺔ اﻟﻌﺸﺮﻳﺔ ) (.واﻟﺤﺪ اﻷﻗﺼﻰ ﻟﻌﺪد ﺧﺎﻧﺎت اﻟﺮﻗﻢ ﻳﺼﻞ إﻟﻰ 40ﺧﺎﻧﺔ وﺗﺤﺪﻳﺪ ﻃﻮل
أوﻋﺮض اﻟﺤﻘﻞ اﺧﺘﻴﺎري وآﺬﻟﻚ اﻻﺷﺎرة أو اﻟﻔﺎﺻﻠﺔ اﻟﻌﺸﺮﻳﺔ
ﻣﺜﺎل
)Serial_No NUMBER (10
ﻣﺜﺎل
)Mark NUMBER (10,3
ﻳﺘﻜﻮن هﺬا اﻟﺤﻘﻞ ﻣﻦ ﻣﺠﻤﻮﻋﺔ اﻷرﻗﺎم ﻟﻠﺪﻻﻟﺔ ﻋﻠﻰ اﻟﻴﻮم واﻟﺸﻬﺮ واﻟﺴﻨﺔ وﻃﻮل هﺬا اﻟﺤﻘﻞ 8
ﺧﺎﻧﺎت ﻋﻠﻰ اﻷﻗﻞ وﻳﻤﻜﻦ أن ﻳﺘﻐﻴﺮ ﺷﻜﻞ آﺘﺎﺑﺔ اﻟﺘﺎرﻳﺦ ﺑﺬآﺮ اﺳﻢ اﻟﺸﻬﺮ
ﻣﺜﺎل
HireDate DATE
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 71 http://www.boosla.com
إﻧﺸﺎء ﺟﺪول
إﻧﺸﺎء ﺟﺪول ﺑﺎﺳﺘﺨﺪام أﻣﺮ CREATE
اﻟﺸﻜﻞ اﻟﻌﺎم
ﺣﻴﺚ ان
ﻣﺜﺎل
( 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 •
اﻟﺸﻜﻞ اﻟﻌﺎم
ﻣﺜﺎل
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وﺑﻤﻜﻦ أن ﻳﻮﺟﺪ ﻓﻲ اﻟﺠﺪول أآﺜﺮ ﺣﻘﻞ ﻓﺮﻳﺪ
ﻣﺜﺎل
ﻻ ﻳﻤﻜﻦ ﻷي ﺟﺪول أن ﻳﺤﺘﻮي اﻻ ﻋﻠﻰ ﻣﻔﺘﺎح أﺳﺎﺳﻲ واﺣﺪ وإذا ﻗﻤﻨﺎ ﺑﺘﺤﻮﻳﻞ ﺣﻘﻞ اﻟﻰ ﻣﻔﺘﺎح
أﺳﺎﺳﻲ ﻓﻬﺬا اﻟﺤﻘﻞ ﻳﻌﺘﺒﺮ ﺣﻘﻞ ﻓﺮﻳﺪ وﻟﻜﻦ ﻻ ﻳﻤﻜﻦ أن ﻳﺤﺘﻮي ﻋﻠﻰ ﻗﻴﻢ ﻓﺎرﻏﺔ
ﻣﺜﺎل
ﻳﻤﻜﻦ ﺗﻌﻴﻴﻦ ﺣﻔﻞ )ﻋﻤﻮد( واﺣﺪ أو أآﺜﺮ ﻟﻴﻜﻮن ﻣﻔﺘﺎح ﺧﺎرﺟﻲ ﺣﻴﺚ ﻳﻜﻮن هﺬا اﻟﻌﻤﻮد ﻣﺮﺗﺒﻂ
ﺑﻌﻤﻮد اﺧﺮ ﺑﻪ ﻣﻔﺘﺎح اﺳﺎﺳﻲ او ﻓﺮﻳﺪ ﻣﻦ ﻧﻔﺲ اﻟﺠﺪول أو ﺟﺪول اﺧﺮ وﻣﻦ اﻟﻀﺮوري أن ﻳﻜﻮن
ﻣﺮﺗﺒﻂ ﺑﻘﻴﻤﺔ اﺧﺮى ﻣﻦ ﻋﻤﻮد اﺧﺮ او ﻳﻜﻮن ﻓﺎرغ
اﻧﻈﺮ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 73 http://www.boosla.com
ﻹﻧﺸﺎء ﺟﺪول ﺑﻮاﺳﻄﺔ ﺟﺪول ﺁﺧﺮ ﻳﺠﺐ أن ﻳﻜﻮن اﻟﺠﺪول اﻵﺧﺮ ﻣﻨﺸﺄ ﻣﺴﺒﻘﺎ ﺛﻢ ﻧﻜﺘﺐ اﻷﻣﺮ
آﺎﻟﺘﺎﻟﻲ
اﻟﺸﻜﻞ اﻟﻌﺎم
ﻣﺜﺎل
ﻗﻤﻨﺎ ﻓﻲ هﺬﻩ اﻟﺠﻤﻠﺔ ﺑﻌﻤﻞ ﺟﺪول ﺟﺪﻳﺪ ﺛﻢ ﻧﻘﻠﻨﺎ ﺑﻴﺎﻧﺎت اﻟﺠﺪول S_EMPاﻟﻴﻪ
ﻹﻧﺸﺎء ﺟﺪول ﺑﻮاﺳﻄﺔ اﺳﺘﻌﻼم ﻓﺮﻋﻲ ﻳﺠﺐ أن ﻳﻜﻮن اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻗﺎﺋﻢ ﻋﻠﻰ اﻻﺳﺘﻌﻼم ﻣﻦ
ﺟﺪول ﻣﻨﺸﺄ ﻣﺴﺒﻘﺎ ﺛﻢ ﻧﻜﺘﺐ اﻷﻣﺮ آﺎﻟﺘﺎﻟﻲ
اﻟﺸﻜﻞ اﻟﻌﺎم
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 74 http://www.boosla.com
ﻣﺜﺎل
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺠﻤﻠﺔ ﻟﻐﺆض ﻣﻮاﺻﻔﺎت اﻟﺠﺪول وﻳﻤﻜﻦ آﺘﺎﺑﺘﻬﺎ آﻠﻤﺔ آﺎﻣﻠﺔ أو ﻣﺨﺘﺼﺮة DESC
اﻟﺸﻜﻞ اﻟﻌﺎم
;DESCRIBE tablename
ﻣﺜﺎل
;DESCRIBE S_EMP
ﻣﻠﺨﺺ اﻟﻔﺼﻞ
ﻓﻲ هﺬا اﻟﻔﺼﻞ ﻗﻤﻨﺎ ﺑﺎﻟﺘﻌﺮف ﻋﻠﻰ اﻟﺠﺪاول وأﻧﻮاع اﻟﺘﻘﻴﻴﺪ وآﻴﻔﻴﺔ إﻧﺸﺎﺋﻬﺎ وإدراج اﻟﻤﻔﺘﺎ اﻷﺳﺎﺳﻲ
واﻟﺨﺎرﺟﻲ ﻓﻲ اﻟﺠﺪول وآﻴﻔﻴﺔ اﻧﺸﺎء ﺟﺪول ﻣﻦ ﺟﺪول اﺧﺮ وآﺬﻟﻚ ﻣﻦ اﺳﺘﻌﻼم ﻓﺮﻋﻲ وﻣﻌﺮﻓﺔ
آﻴﻔﻴﺔ ﻋﺮض ﻣﻌﻠﻮﻣﺎت اﻟﺠﺪول
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 75 http://www.boosla.com
ﺗﻌﺪﻳﻞ اﻟﺠﺪاول
ﺗﺘﻴﺢ ﻟﻚ اﻟـ SQLﻏﻤﻠﻴﺔ ﺗﻌﺪﻳﻞ اﻟﺠﺪول ﺑﻌﺪ إﻧﺸﺎﺋﻬﺎ ﻓﻲ اﻟﺤﺎﻟﺔ اﻟﺘﺎﻟﻴﺔ
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺠﻤﻠﺔ ﻹﺿﺎﻓﺔ ﻗﻮل أو ﻟﺘﻌﺪﻳﻞ اﻟﺤﻘﻮل ﻓﻲ اﻟﺠﺪول وﻳﺸﻤﻞ هﺬا اﻟﺘﻌﺪﻳﻞ اﺳﻢ اﻟﺤﻘﻞ
وﻧﻮﻋﻪ اﻟﺤﻘﻞ وﺣﺠﻢ ﺑﻴﺎﻧﺎﺗﻪ أو اﻟﺤﺎق ﻋﺒﺎرة ﻓﺎرغ أو ﻏﻴﺮ ﻓﺎرغ اﻟﻰ اﻟﺤﻘﻞ
اﻟﺸﻜﻞ اﻟﻌﺎم
ﺣﻴﺚ أن
اﺳﻢ اﻟﺠﺪول اﻟﻤﺮاد ﺗﻌﺪﻳﻠﻪ tablename
اﺳﻢ اﻟﺤﻘﻞ field
ﻧﻮع اﻟﺒﻴﺎﻧﺎت Type
ﻃﻮل أو ﺣﺠﻢ اﻟﺤﻘﻞ size
اﻟﺸﻜﻞ اﻟﻌﺎم
ﺣﺬف اﻟﺠﺪاول
ﻳﻤﻜﻦ أن ﻧﺤﺬف اﻟﺠﺪول ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ﺑﻮاﺳﻄﺔ اﻷﻣﺮ DROP TABLEﺑﺸﺮط أن ﺗﻜﻮن
ﻣﺎﻟﻚ اﻟﺠﺪول أو ﻟﻚ ﺻﻼﺣﻴﺔ ﻟﻠﺤﺬف
ﺣﻴﺚ
اﺳﻢ اﻟﺠﺪول اﻟﻤﺮاد ﺣﺬﻓﻪ ;tablename
ﻣﻠﺨﺺ اﻟﻔﺼﻞ
ﻓﻲ هﺬا اﻟﻔﺼﻞ ﺗﻨﺎوﻟﻨﺎ ﻋﻤﻠﻴﺔ ﺗﻌﺪﺑﻞ اﻟﺠﺪاول ﻣﻦ إﺿﺎﻓﺔ وﺗﻌﺪﻳﻞ ﻗﻮل اﻟﺠﺪول ﻣﻊ ﻋﺪم اﻣﻜﺎﻧﻴﺔ
ﺣﺬف ﺣﻘﻞ ﻣﻮﺟﻮد ﻓﻲ اﻟﺠﺪول وآﺬﻟﻚ آﻴﻔﻴﺔ ﺣﺬف اﻟﻤﻔﺘﺎح اﻷﺳﺎﺳﻲ ﻣﻦ اﻟﺠﺪول وﺣﺬف اﻟﺠﺪول
ﻣﻦ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ﺑﻮاﺳﻄﺔ اﻻﻣﺮ DROP
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 78 http://www.boosla.com
إﺿﺎﻓﺔ ﺑﻴﺎﻧﺎت
ﻣﻘﺪﻣﺔ
ﻟﻘﺪ ﻗﻤﻨﺎ ﻓﻲ اﻟﻘﺼﻮل اﻟﺴﺎﺑﻘﺔ ﺑﺈﻧﺸﺎء اﻟﺠﺪاول واﻟﺘﻌﺮف ﻋﻠﻰ أﻧﻮاع اﻟﺒﻴﺎﻧﺎت وﺗﻌﺪﻳﻞ ﻣﻮاﺻﻔﺎن
اﻟﺤﻘﻮل وﺑﻬﺬا ﻧﻜﻮن ﻗﺪ أﻧﺸﺄﻧﺎ ﺟﺪول اﻟﺒﻴﺎﻧﺎت وﺧﺪدﻧﺎ ﺧﺼﺎﺋﺺ اﻟﺤﻘﻮل ﻣﻦ ﺣﻴﺚ ﻧﻮع اﻟﺒﻴﺎﻧﺎت
واﻟﺤﺠﻢ أي أﻧﻨﺎ أﻋﺪدﻧﺎ اﻟﻮﻋﺎء اﻟﺬي ﺳﻴﺤﻮي اﻟﺒﻴﺎﻧﺎت وﻓﻲ هﺬا اﻟﻔﺼﻞ ﺳﻨﺘﻌﻠﻢ ﺑﻤﺸﻴﺌﺔ اﷲ آﻴﻔﻴﺔ
إﺿﺎﻓﺔ اﻟﺒﻴﺎﻧﺎت إﻟﻰ هﺬﻩ اﻟﺠﺪاول واﻷﻣﻮر اﻟﻤﺘﻌﻠﻘﺔ ﺑﻌﻤﻠﻴﺎت اﻹﺿﺎﻓﺔ وأﻧﻮاﻋﻬﺎ ،آﻤﺎ أن هﺬا
اﻟﻔﺼﻞ ﻳﺸﻜﻞ ﻣﺪﺧﻼ وﺟﺰأ أﺳﺎﺳﻴﺎ ﻟﻠﻐﺔ ﺗﻨﺎول اﻟﺒﻴﺎﻧﺎت ) (DMLﻓﻲ ﻧﻈﺎم ﻗﻮاﻋﺪ ﺑﻴﺎﻧﺎت أوراآﻞ
اﻟﺘﻲ ﺗﻌﺘﺒﺮ إﺣﺪى اﻟﻨﻈﻢ اﻟﻘﻮﻳﺔ ﻓﻲ ﻧﻈﻢ إدارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت ) (DBMSﻟﻤﺎ ﻟﻬﺎ ﻣﻦ أﺛﺮ ﻓﻌﺎل ﻓﻲ
ﻣﻌﺎﻟﺠﺔ اﻟﺒﻴﺎﻧﺎت داﺧﻞ اﻟﺠﺪول ﺣﻴﺚ ﺗﺸﻤﻞ ﻟﻐﺔ ﺗﻨﺎول اﻟﺒﻴﺎﻧﺎت ) (DMLﻋﻠﻰ اﻷﺟﺰاء اﻟﺘﺎﻟﻴﺔ :
هﻲ اﻟﻌﻤﻠﻴﺔ اﻟﺘﻲ ﻳﺘﻢ ﺑﻬﺎ إدﺧﺎل ﺳﺠﻞ /ﺳﺠﻼت إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺧﻼل ﺟﻤﻠﺔ INSERT
وﺗﺘﻨﻢ هﺬﻩ اﻏﻠﻤﻠﻴﺔ ﺑﻌﺪة ﻃﺮق
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ:
ﺣﻴﺚ أن
اﺳﻢ اﻟﺠﺪول اﻟﻤﺮاد إﻟﺤﺎق اﻟﺴﺠﻞ ﺑﻪ Table
Column1,Column2اﺳﻤﺎء اﻷﻋﻤﺪة)اﻟﺤﻘﻮل( اﻟﻤﻄﻠﻮب إدﺧﺎل اﻟﺒﻴﺎﻧﺎت إﻟﻴﻬﺎ
اﻟﻘﻴﻢ اﻟﻤﻄﻠﻮب إﺿﺎﻓﺘﻬﺎ ﻓﻲ Value1, value2
ﺣﻘﻮل اﻟﺴﺠﻞ اﻟﺠﺪﻳﺪ وآﻞ
ﻗﻴﻤﺔ ﻳﺘﻢ إدراﺟﻬﺎ ﻓﻲ اﻟﺤﻘﻞ
اﻟﻤﻨﺎﺳﺐ ﻓﻲ اﻟﻘﺎﺋﻤﺔ وﺑﺎﻟﺘﺎﻟﻲ
ﺳﻴﺘﻢ إﺿﻠﻔﺔ اﻟﻘﻴﻤﺔ 1ﻓﻲ اﻟﺤﻘﻞ
1وهﻜﺬا
اﻟﺸﺮح
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 80 http://www.boosla.com
ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻹدﺧﺎل ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﺘﻢ إﺿﺎﻓﺔ ﺑﻴﺎﻧﺎت ﺳﺠﻞ واﺣﺪ ﻓﻘﻂ ﻓﻲ اﻟﺠﺪول
اﻟﻤﺬآﻮر ﻳﺘﻮي ﻋﻠﻰ ﻗﻴﻢ ﺗﻢ إ دراﺟﻬﺎ ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل وﻟﻠﺤﻘﻮل اﻟﻤﺬآﻮرة ﻓﻘﻂ
اﻟﻘﻮاﻋﺪ اﻟﺘﻲ ﻳﺠﺐ اﻟﺘﻘﻴﺪ ﺑﻬﺎ ﻓﻲ هﺬﻩ اﻟﻄﺮﻳﻘﺔ
ﻳﺠﺐ أن ﻳﻜﻮن ﻋﺪد اﻟﻘﻴﻢ اﻟﺘﻲ ﺳﻴﺘﻢ إدﺧﺎﻟﻬﺎ هﻮ ﻧﻔﺲ ﻋﺪد اﻟﺤﻘﻮل اﻟﻤﺬآﻮر ﻓﻲ ﺟﻤﻠﺔ -1
INSERT
ﻳﺠﺐ أن ﻳﻜﻮن ﻧﻮع ﺑﻴﺎﻧﺎت اﻟﻘﻴﻢ اﻟﺘﻲ ﺳﻴﺘﻢ إدﺧﺎﻟﻬﺎ ﻣﻦ ﻧﻔﺲ ﻧﻮع ﺑﻴﺎﻧﺎت اﻟﺤﻘﻮل وأن -2
ﺗﻜﻮن هﺬﻩ اﻟﻘﻴﻢ ﻣﺮﺗﺒﺔ ﺣﺴﺐ ﺗﺮﺗﻴﺐ اﻟﺤﻘﻮل ﻓﻲ ﺟﻤﻠﺔ INSERT
ﻣﺜﺎل
ﻣﺜﺎل
INSERT INTO s_dept
VALUES ;)(13, 'Administration', NULL
ﻳﺠﻮز ﻋﺪم ذآﺮ أﺳﻤﺎء اﻟﺤﻘﻮل ﻓﻲ ﺟﻤﻠﺔ INSERTﻓﻲ ﺣﺎﻟﺔ إدﺧﺎل ﺑﻴﺎﻧﺎت ﺟﻤﻴﻊ -5
اﻟﺤﻘﻮل ﻟﻬﺬا اﻟﺴﺠﻞ ﻋﻠﻰ أن ﺗﻜﻮن اﻟﻘﻴﻢ اﻟﻤﺨﻠﺔ ﻣﺮﺗﺒﺔ ﺣﺴﺐ اﻟﺘﺮﺗﻴﺐ اﻻﻓﺘﺮاﺿﻲ ﻟﻠﺤﻔﻮل ﻓﻲ
اﻟﺠﺪول ﻋﻨﺪ ﺑﻨﺎﺋﻪ
ﻣﻼﺣﻈﺔ
ﻟﻤﻌﺮﻓﺔ اﻟﺘﺮﺗﻴﺐ اﻻﻓﺘﺮاﺿﻲ ﻟﻠﺤﻘﻮل ﻓﻲ اﻟﺠﺪول ﻧﺴﺘﺨﺪم اﻷﻣﺮ DESC
ﻣﺜﺎل
ﻣﻦ ﺧﻼل هﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻳﻤﻜﻦ ادﺧﺎل أآﺜﺮ ﻣﻦ ﺳﺠﻞ واﺣﺪ إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ اﺳﺘﺨﺪام
ﻣﺘﻐﻴﺮات اﻻدﺧﺎل وهﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺘﻐﻴﺮات ﺗﻮﺿﻊ ﻓﻲ ﺟﻤﻠﺔ اﻻدﺧﺎل ﺑﺪﻻ ﻣﻦ اﻟﻘﻴﻢ ﻧﻔﺴﻬﺎ ةﻳﻤﻜﻦ
أن ﻧﻄﻠﻖ ﻋﻠﻰ هﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺟﻤﻠﺔ اﻻدﺧﺎل ﻣﺘﻌﺪدة اﻟﺴﺠﻼت
ﺣﻴﺚ ان
اﺳﻢ اﻟﺠﺪول اﻟﻤﺮاد إﻟﺤﺎق اﻟﺴﺠﻞ ﺑﻪ Table
اﺳﻤﺎء اﻷﻋﻤﺪة)اﻟﺤﻘﻮل( اﻟﻤﻄﻠﻮب إدﺧﺎل اﻟﺒﻴﺎﻧﺎت إﻟﻴﻬﺎ Column1,Column2
ﻣﺘﻐﻴﺮات Variable1, Variable 2
اﻹدﺧﺎل اﻟﺘﻲ
ﺳﻮف ﻳﺘﻢ
اﺳﺘﺒﺪاﻟﻬﺎ ﺑﻘﻴﻢ
ﺣﻘﻴﻘﻴﺔ ﺑﻌﺪ
ﺗﻨﻘﻴﺬ ﺟﻤﻠﺔ
اﻻدﺧﺎل
اﻟﺸﺮح
ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ ﻳﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﻄﻠﺐ ﻣﻨﻚ إدﺧﺎل اﻟﻘﻴﻢ ﻟﻠﻤﺘﻐﻴﺮات اﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل
وﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ادﺧﺎل اﻟﻘﻴﻤﺔ ﺗﻀﻐﻂ ﻣﻔﺘﺎح ENTERﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﻴﺢ وهﻜﺬا ﺣﺘﻰ ﺗﻨﺘﻬﻲ ﻣﻦ
إدﺧﺎل ﺣﻘﻮل ﻻﺳﺠﻞ اﻷول وﻹدﺣﺎل ﺳﺠﻞ ﺁﺧﺮ ﻳﻤﻜﻨﻚ اﻟﻀﻐﻂ ﻋﻠﻰ ﺣﺮف ) (Rﺛﻢ ﻣﻔﺘﺎح
ENTERﻣﻦ ﻟﻮﺣﺔ اﻟﻤﻔﺎﺗﻴﺢ وهﻮ ﻳﻌﻨﻲ ﺗﻜﺮار اﻹدﺧﺎل ﻟﺴﺠﻼت اﺧﺮى
ﻣﺜﺎل
ﺗﻨﻄﺒﻖ ﻋﻠﻰ هﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺟﻤﻴﻊ اﻟﻘﻮاﻋﺪ اﻟﻤﺬآﻮرة ﻓﻲ اﻟﻄﺮﻳﻘﺔ اﻷوﻟﻰ وﻳﻀﺎف إﻟﻴﻬﺎ ﻣﺎﻳﻠﻲ :
ﺗﺴﺘﺒﺪل اﻟﻘﻴﻢ ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل ﺑﻤﺘﻐﻴﺮات -1
ﻳﻌﻮد اﺧﺘﻴﺎر أﺳﻤﺎء اﻟﻤﺘﻐﻴﺮات إﻟﻰ اﻟﻤﺴﺘﺨﺪم ﻣﻊ ﻣﺮاﻋﺎة ﺷﺮوط ﺗﺴﻤﻴﺔ اﻟﻤﺘﻐﻴﺮات -2
ﻳﺠﺐ أن ﺗﻮﺿﻊ ﻋﻼﻣﺔ & ﻗﺒﻞ ﻣﺘﻐﻴﺮ اﻻدﺧﺎل -3
ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل ﻳﻤﻜﻦ وﺿﻊ ﻋﻼﻣﺘﻰ ﺗﻨﺼﻴﺺ ﻣﻔﺮدﺗﻴﻦ ﺣﻮل ﻣﺘﻐﻴﺮ اﻻدﺧﺎل اﻟﺨﺎص -4
ﺑﺎﻟﺤﻘﻮل اﻟﻨﺼﺒﺔ
ﻣﻦ ﺧﻼل هﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻳﻤﻜﻦ إدﺧﺎل أآﺜﺮﻣﻦ ﻳﺠﻞ واﺣﺪ إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ ﻧﺴﺦ هﺬا
اﻟﺴﺠﻞ /اﻟﺴﺠﻼت ﻣﻦ ﺟﺪول ﺁﺧﺮ ﺑﻮﺗﺴﻄﺔ ﺟﻤﻠﺔ اﻻﺳﺘﻔﺴﺎر SELECTﻳﺚ ﻧﺴﺘﺨﺪم ﺟﻤﻠﺔ
INSERTﻣﻊ اﺳﺘﻌﻼم ﻓﺮﻋﻲ اﻧﻈﺮ اﻟﻰ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻲ
اﻟﺸﺮح
ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻹدﺧﺎل ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻳﻨﻢ ﻧﺴﺦ اﻟﺴﺠﻼت اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط ﻣﻦ اﻟﺠﺪوﻻ ﻟﻤﺼﺪر
إﻟﻰ اﻟﺠﺪول اﻟﻬﺪف وﻟﻠﺤﻘﻮل ااﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل
ﻣﻠﺨﺺ اﻟﻔﺼﻞ
ﺗﻨﺎوﻟﻨﺎ ﻣﻦ ﺧﻼل هﺬا اﻟﻔﺼﻞ ﻣﻮﺿﻮع اﺿﺎﻓﺔ اﻟﺒﻴﺎﻧﺎت إﻟﻰ اﻟﺠﺪاول ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ INSERT
وهﻨﺎﻟﻚ ﺛﻼﺛﺔ ﻃﺮق ﻹﺟﺮاء ﻋﻤﻠﻴﺔ اﻹﺿﺎﻓﺔ
ﺑﻬﺬﻩ اﻟﻀﺮﻳﻔﺔ ﺳﻮف ﻳﺘﻢ إﺿﺎﻓﺔ ﺑﻴﺎﻧﺎت ﺳﺠﻞ واﺣﺪ ﻓﻘﻂ إﻟﻰ ﺟﺪول ﻳﺤﺘﻮي ﻋﻠﻰ اﻟﻘﻴﻢ اﻟﺘﻲ ﺳﺘﺬآﺮ
ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل
ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻳﻤﻜﻦ إدﺧﺎل أآﺜﺮ ﻣﻦ ﺳﺠﻞ واﺣﺪ إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ اﺳﺘﺨﺪام ﻣﺘﻐﻴﺮات
اﻻدﺧﺎل وهﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺘﻐﻴﺮات ﺗﻮﺿﻊ ﻓﻲ ﺟﻤﻠﺔ اﻹدﺧﺎل ﺑﺪﻻ ﻣﻦ اﻟﻘﻴﻢ ﻧﻔﺴﻬﺎ وﻳﻤﻜﻦ أن ﻧﻄﻠﻖ
ﻋﻠﻰ هﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺟﻤﻠﺔ اﻻدﺧﺎل ﻣﺘﻌﺪدة اﻟﺴﺠﻼت
ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﻳﻤﻜﻦ إدﺧﺎل أآﺜﺮ ﻣﻦ ﺳﺠﻞ واﺣﺪ إﻟﻰ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻋﻦ ﻃﺮﻳﻖ ﻧﺴﺦ هﺬا اﻟﺴﺠﻞ /
اﻟﺴﺠﻼت ﻣﻦ ﺟﺪول ﺁﺧﺮ ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ SELECTاﻟﻤﻮﺟﻮدة ﺑﺪاﺧﻞ ﺟﻤﻠﺔ INSERT
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 84 http://www.boosla.com
ﻓﻲ هﺬا اﻟﻔﺼﻞ ﺳﻨﺘﻌﻠﻢ آﻴﻔﻴﺔ ﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت وﺣﺬف اﻟﺴﺠﻼت آﻤﺎ أن هﺬا اﻟﻔﺼﻞ ﻳﺸﻜﻞ ﺟﺰأ
أﺳﺎﺳﻴﺎ ﻣﻜﻤﻼ ﻟﻠﻐﺔ ﺗﻨﺎول اﻟﺒﻴﺎﻧﺎت DMLﻓﺲ ﻧﻈﺎم أوراآﻞ اﻟﺘﻲ ﻳﻌﺘﺒﺮ اﺣﺪى اﻟﻨﻈﻢ اﻟﻘﻮﻳﺔ ﻓﻲ ﻧﻈﻢ
إدارة ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت DBMDﻟﻤﺎ ﻟﻬﺎ ﻣﻦ أﺛﺮ ﻓﻌﺎل ﻓﻲ ﻣﻌﺎﻟﺠﺔ اﻟﺒﻴﺎﻧﺎت داﺧﻞ اﻟﺠﺪول ﺣﻴﺚ
ﺗﺸﺘﻤﻞ ﻟﻐﺔ ﺗﻨﺎول اﻟﺒﻴﺎﻧﺎت DMLﻋﻠﻰ اﻻﺟﺰاء اﻟﺘﺎﻟﻴﺔ
وﻟﻘﺪ ﺗﻨﺎوﻟﻨﺎ ادﺧﺎل اﻟﺒﻴﺎﻧﺎت ﻓﻲ اﻟﻔﺼﻞ اﻟﺴﺎﺑﻖ وﺳﻨﺪرس ﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت وﺧﺬﻓﻬﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ
هﻲ اﻟﻌﻤﻠﻴﺔ اﻟﺘﻲ ﻳﺘﻢ ﺑﻬﺎ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﻗﻞ /ﺣﻘﻮل ﻓﻲ ﺳﺠﻞ واد أو اآﺜﺮ ﻓﻲ ﺟﺪول اﻟﺒﻴﺎﻧﺎت ﻣﻦ
ﺧﻼل ﺟﻤﻠﺔ UPDATEوﺗﺘﻢ هﺬﻩ اﻟﻌﻤﻠﻴﺔ ﺑﻄﺮﻳﻘﺘﻴﻦ:
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
اﻟﺸﺮح
ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت اﻟﺤﻘﻞ /اﻟﺤﻘﻮل اﻟﻤﺬآﻮرة ﺑﺤﻴﺚ ﻳﺘﻢ
إﻟﻐﺎء اﻟﻘﻴﻢ اﻟﻤﻮﺟﻮدة ﻗﻴﻬﺎ ﻟﺘﺘﻮي اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪة اﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﻋﻠﻤﺎ ﺑﺄن اﻟﺴﺠﻼت اﻟﺘﻲ
ﺳﻴﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎﺗﻬﺎ هﻲ ﻓﻘﻂ اﻟﺴﺠﻼت اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط ﻓﻲ اﻟﺠﻤﻠﺔ اﻟﺸﺮﻃﻴﺔ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 86 http://www.boosla.com
ﻣﺜﺎل
UPDATE s_emp
SET dept_id = 10
WHERE ;id = 2
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
اﻟﺸﺮح
ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﺑﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت اﻟﺤﻘﻞ /اﻟﺤﻘﻮل اﻟﻤﺬآﻮرة ﺑﺤﻴﺚ ﻳﺘﻢ
إﻟﻐﺎء اﻟﻘﻴﻢ اﻟﻤﻮﺟﻮدة ﻓﻴﻬﺎ ﻟﺘﺘﻮي اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪة اﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﻋﻠﻤﺎ ﺑﺄن اﻟﺴﺠﻼت اﻟﺘﻲ
ﺳﻴﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎﺗﻬﺎ هﻲ ﺣﻤﻴﻊ اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول
ﻣﺜﺎل
UPDATE s_emp
SET commission_pct = 10
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 87 http://www.boosla.com
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
;]DELETE [FROM] table[WHERE condition
اﻟﺸﺮح
ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻟﺤﺬف اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﺘﻢ ﺣﺬف اﻟﺴﺠﻞ /اﻟﺴﺠﻼت اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط ﻓﻲ اﻟﺠﻤﻠﺔ
اﻟﺸﺮﻃﻴﺔ
.
اﻟﻘﻮاﻋﺪ اﻟﺘﻲ ﻳﺠﺐ اﻟﺘﻘﻴﺪ ﺑﻬﺎ ﻓﻲ هﺬﻩ اﻟﻄﺮﻳﻘﺔ :
ﻳﺠﺐ اﻟﺘﺄآﺪ ﻣﻦ ﺑﻴﺎﻧﺎت اﻟﺴﺠﻼت اﻟﺘﻲ ﺳﻴﺘﻢ ﺣﺬﻓﻬﺎ ﻗﺒﻞ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻟﺤﺬف وآﺬﻟﻚ اﻟﺘﺄآﺪ -1
ﻣﻦ اﻟﺸﺮط ﻓﻲ اﻟﺠﻤﻠﺔ اﻟﺸﺮﻃﻴﺔ ﻷن اﻟﺴﺠﻼت اﻟﺘﻲ ﺳﺘﺤﺬف ﺗﻌﺘﻤﺪ ﻋﻠﻰ اﻟﺸﺮط اﻟﻤﺬآﻮر
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
;DELETE [FROM] table
اﻟﺸﺮح
ﺑﻌﺪ ﺗﻨﻔﻴﺬ ﺟﻤﻠﺔ اﻟﺤﺬف ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﺘﻢ ﺣﺬف ﺟﻤﻴﻊ اﻟﺴﺠﻼت ﻓﻲ اﻟﺠﺪول
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 88 http://www.boosla.com
ﻣﻠﺨﺺ اﻟﻔﺼﻞ
ﺗﻨﺎوﻟﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ ﻣﻮﺿﻮع ﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻓﻲ اﻟﺠﺪول ﺑﻮاﺳﻄﺔ ﺟﻤﻠﺔ UPDATEوهﻨﺎﻟﻚ
ﻃﺮﻳﻘﺘﺎن ﻻﺟﺮاء ﻋﻤﻠﻴﺔ اﻟﺘﻌﺪﻳﻞ وهﻤﺎ
ﺣﻴﺚ ﻳﺘﻢ اﻟﻐﺎء اﻟﻘﻴﻢ اﻟﻤﻮﺟﻮدة ﺑﻬﺎ ﻟﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪة اﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﻋﻠﻤﺎ ﺑﺄن
اﻟﺴﺠﻼت اﻟﺘﻲ ﺳﻴﺘﺘﻢ اﻟﺘﻌﺪﻳﻞ ﺑﻬﺎ هﻲ اﻟﺴﺠﻼن اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط.
ﺣﻴﺚ ﻳﺘﻢ اﻟﻐﺎء اﻟﻘﻴﻢ اﻟﻤﻮﺟﻮدة ﺑﻬﺎ ﻟﺘﺤﺘﻮي ﻋﻠﻰ اﻟﻘﻴﻢ اﻟﺠﺪﻳﺪة اﻟﻤﺬآﻮرة ﻓﻲ ﺟﻤﻠﺔ اﻟﺘﻌﺪﻳﻞ ﻋﻠﻤﺎ اﻧﻪ
ﺳﻴﺘﻢ ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﺟﻤﻴﻊ اﻟﺤﻘﻮل ﻟﻌﺪم وﺟﻮد ﺷﺮط
ﺛﻢ ﺗﻨﺎوﻟﻨﺎ ﻣﻮﺿﻮع ﺣﺬف اﻟﺴﺠﻼت ﻋﻦ DELETEوهﻨﺎﻟﻚ ﻃﺮﻳﻘﺘﺎن ﻹﺟﺮاء ﻋﻤﻠﻴﺔا اﻟﺤﺬف
ﺑﻬﺬﻩ اﻟﻄﺮﻳﻘﺔ ﺳﻮف ﻳﺘﻢ ﺣﺬف اﻟﺴﺠﻞ /اﻟﺴﺠﻼت اﻟﺘﻲ ﺗﺤﻘﻖ اﻟﺸﺮط ﻓﻲ ﺟﻤﻠﺔ اﻟﺸﺮط
أهﺪاف اﻟﻔﺼﻞ
اﻟﻤﺘﺴﻠﺴﻼت
.اﻟﻤﺘﺴﻠﺴﻠﺔ ﻋﺒﺎرة ﻋﻦ ﻣﺠﻤﻮﻋﻪ ﻣﻦ اﻻرﻗﺎم اﻟﻤﺘﺘﺎﻟﻴﺔ ﺗﺘﻮﻟﺪ ﺗﻠﻘﺎﺋﻴﺎ ﻣﺜﻞ 1و2و ,,, 3ﺣﻴﺚ ﺗﺴﺘﺨﺪم
آﻤﻔﺘﺎح أﺳﺎﺳﻲ Primary Keyﻻﻧﻬﺎ ﻋﺒﺎرة ﻋﻦ ﻗﻴﻢ ﻓﺮﻳﺪﻩ وﺗﺘﻌﺎﻣﻞ ﻣﻌﺎهﺎ اﻟﺬاآﺮﻩ ﺑﺴﻬﻮﻟﺔ وﺑﻜﻔﺎﺋﻪ
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
ﺣﻴﺚ أن
اﺳﻢ اﻟﻤﺘﺴﻠﺴﻠﺔ Name
ﻣﻘﺪار اﻟﺰﻳﺎدة آﻞ ﻣﺮة N1
اول رﻗﻢ ﺗﺒﺪأ ﻣﻨﻪ اﻟﻤﺘﺴﻠﺴﻠﺔ N2
اﻗﺼﻰ ﻗﻴﻤﻪ ﻟﻠﻤﺘﺴﻠﺴﻠﺔ N3
ادﻧﻰ ﻗﻴﻤﺔ ﻟﻠﻤﺘﺴﻠﺴﻠﺔ N4
ﻋﺪد اﻟﺨﺎﻧﺎت ﻓﻲ اﻟﺬاآﺮﻩ N5
اﻟﺸﺮح
ﻣﺜﺎل
ﻟﻜﻲ ﻧﺤﺼﻞ ﻋﻠﻰ أﻓﻀﻞ أداء ﻟﻠﻤﺘﺴﻠﺴﻠﺔ ﻧﻘﻮم ﺑﺤﺠﺰ اﻣﺎآﻦ ﻓﻲ اﻟﺬاآﺮﻩ ﻷآﺒﺮ ﻋﺪد ﻣﻦ اﻟﻤﺼﻔﻮﻓﺎت
ﻧﻌﺮﻓﻪ وﻟﻜﻦ اذا ﺳﺘﺨﺪﻣﻨﺎ ﻋﺪد آﺒﻴﺮ ﻓﺈﻧﻨﺎ ﺳﻨﺸﻐﻼ ﻻذاآﺆﻩ وﻧﺒﻄﺊ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺠﻬﺎز واذا ﺳﺘﺨﺪﻣﻨﺎ
ﻋﺪد ﻗﻠﻴﻞ ﻟﻦ ﻳﻜﻮن آﺎﻓﻲ ﻟﻠﻤﺘﺴﻠﺴﻠﻪ
Table_name.NEXTVAL -10
Table_name.CURRVAL
ﺣﻴﺚ ﻗﻤﻨﺎ ﺑﺈﺿﺎﻓﺔ ﻗﻴﻤﻪ ﺟﺪﻳﺪة اﻟﻰ اﻟﻤﺘﺴﻠﺴﻠﺔ ﻓﻲ ﺧﺎﻧﺔ idﺛﻢ ﻗﻤﻨﺎ ﺑﺎﺿﺎﻓﺔ
financeاﻟﻰ ﺧﺎﻧﺔ nameو 2ﻓﻲ ﺧﺎﻧﺔ region_id
SELECT s_dept_id.CURRVAL
;FROM SYS.dual
ﻣﻼﺣﻈﺔ
ﻟﻜﻦ ﺗﻮﺟﺪ ﺛﻐﺮات ﻓﻲ اﻟﻤﺘﺴﻠﺴﻼت
-1اذا ﺗﻢ ﻧﻘﻞ ﺳﺠﻞ ﻣﻦ ﻣﻜﺎن اﻟﻰ اﺧﺮ ﻓﺈاﻧﻪ ﻳﺤﺪث ﺧﻠﻞ ﻓﻲ اﻟﻤﺘﺴﻠﺴﻠﺔ
-2اﻟﻤﺘﺴﻠﺴﻠﺔ ﻳﻤﻜﻦ أن ﻧﺘﺴﺘﺨﺪم ﻓﻲ اآﺜﺮ ﻣﻦ ﺟﺪول
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 92 http://www.boosla.com
ﺗﻌﺪﻳﻞ ﻣﺘﺴﻠﺴﻠﺔ
ﻳﻤﻜﻦ ﺗﻌﺪﻳﻞ ﻣﻘﺪار اﻟﺰﻳﺎدﻩ أو اﻟﻘﻴﻤﻪ اﻻﺑﺘﺪاﺋﻴﺔ ﻟﻠﻤﺘﺴﻠﺴﻠﻪ وﻧﺤﺪﻳﺪ اآﺒﺮ وﻗﻴﻤﻪ وادﻧﻰ ﻗﻴﻤﻪ أو ﺗﻐﻴﺒﺮ
ﺧﻴﺎر اﻟﺘﻜﺮاراو اﻟﺬاآﺮﻩ ﻋﻦ ﻃﺮﻳﻖ اﻻﻣﺮ ALTER
اﻟﺼﻴﻐﻪ اﻟﻌﺎﻣﻪ
ﺣﺬف ﻣﺘﺴﻠﺴﻠﺔ
ﻣﺜﺎل
اﻟﻔﻬﺮﺳﺔ
اﻟﻔﻬﺮﺳﺔ ﻋﺒﺎرة ﻋﻦ وﺳﺒﻠﺔ ﻣﺼﻤﻤﻪ ﻟﺘﺴﻬﻴﻞ اﻟﺤﺼﻮل ﻋﻠﻰ اﻟﺒﻴﺎﻧﺎت ﺑﺴﺮﻋﻪ ﻣﻦ اﻟﺠﺪاول ﻣﺜﻞ
اﻟﻔﻬﺮس اﻟﻤﻮﺟﻮد ﺑﺄي آﺘﺎب ﻓﻌﻨﺪﻣﺎ ﻧﺮﻳﺪ اﻟﻮﺻﻮل اﻟﻰ ﻣﻌﻠﻮﻣﺔ ﺑﺴﺮﻋﺔ ﻧﻨﻈﺮ اﻟﻰ اﻟﻔﻬﺮس اوﻻ
وآﺬﻟﻚ هﻮ اﻟﺤﺎل ﻓﻲ اﻷوراآﻞ ﻓﻌﻨﺪﻣﺎ ﻧﻘﻮم ﺑﻔﻬﺮﺳﺔ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﺒﻴﺎﻧﺎت ﻓﺎﻧﻨﺎ ﻧﺴﺘﻄﻴﻊ اﻟﻰ اﺣﺪ
هﺬﻩ اﻟﺒﻴﺎﻧﺎت ﺑﺴﺮﻋﻪ وﻳﺘﻢ آﺬﻟﻚ اﻟﻴﺤﺚ ﺑﻴﻦ اﻟﺠﺪاول ﺑﺴﺮﻋﻪ وم ﻣﻤﻴﺰات اﻟﻔﻬﺮﺳﻪ آﺬﻟﻚ اﻧﻬﺎ ﺗﻘﻠﻞ
ﻋﺪد اﻟﺒﻴﺎﻧﺎت اﻟﻤﻨﺘﻘﻠﻪ ﺧﻼل وﺳﺎﺋﻞ اﻻﺧﺮاج واﻻدﺧﺎل
ﻣﻦ اﻟﻀﺮوري اﺣﻴﺎﻧﺎ ﺗﺮﻗﻴﻢ اﻟﺤﻘﻮل ﺗﺮﻗﻴﻢ ﺗﻠﻘﺎﺋﻲ ﻣﺜﻞ ارﻗﺎم اﻟﻤﻨﺎﻃﻖ او ارﻗﺎم اﻟﺴﻠﻊ ﺑﺪﻻ ﻣﻦ
اﻟﺘﺮﻗﻴﻢ اﻟﻌﺎدي
اﻟﻔﻬﺮﺳﻪ اﻟﺘﻠﻘﺎﺋﻴﺔ
ﻋﻨﺪﻣﺎ ﻧﻘﻮم ﺑﺘﻌﺮﻳﻒ ﺣﻘﻞ ﻋﻠﻰ اﻧﻪ ﻣﻔﺘﺎح أﺳﺎﺳﻲ أو اذا ﺟﻌﻠﻨﺎﻩ ﺣﻘﻞ ﻓﺮﻳﺪ ﻓﺎﻧﻪ ﺗﻠﻘﺎﺋﻴﺎ ﻳﻔﻬﺮس
اﻟﻔﻬﺮﺳﺔ اﻟﻌﺎدﻳﺔ
أﻧﻮاع اﻟﻔﻬﺮﺳﺔ
ﺗﻮﺟﺪ ﻋﺪة أﻧﻮاع ﻟﻠﻔﻬﺮﺳﻪ ﻳﺚ ﻳﻤﻜﻦ ﻓﻬﺮﺳﺔ ﺣﻘﻞ )ﻋﻤﻮد( واﺣﺪ او ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷﻋﻤﺪة ﻣﻨﻬﺎ
وﺗﺴﺘﺨﺪم اﻟﻔﻬﺮﺳﺔ اﻟﻤﺮآﺒﻪ ﻋﻨﺪﻣﺎ ﺗﻌﻮد ﺟﻤﻠﺔ SELECTﺑﻌﺪة ﻗﻴﻢ ﻓﻴﺘﻢ ﺗﺮﺗﻴﺒﻬﺎ ﻋﻦ ﻃﺮﻳﻖ
اﺳﺘﺨﺪام اﻟﻔﻬﺮﺳﺔ اﻟﻤﺮآﺒﺔ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 94 http://www.boosla.com
ﻋﻨﺪﻣﺎ ﻧﻘﻮم ﺑﻔﻬﺮﺳﺔ ﺣﻘﻞ ﻓﺈن اﻻوراآﻞ ﻳﻘﻮم ﺑﺘﻜﻮﻳﻦ ﻣﺎﻳﺴﻤﻰ index segmentﺑﺘﻢ ﻓﻴﻬﺎ ﺗﺨﺰﻳﻦ
ﻣﻌﻠﻮﻣﺎت ﺧﺎﺻﺔ ﺑﺎﻟﻔﻬﺮﺳﺔ واﻟﺘﻲ ﺗﺴﺮع اﻟﻮﺻﻮل اﻟﻰ اﻟﺒﻴﺎﻧﺎت ﺣﻴﺚ أن هﺬﻩ اﻟﻤﻌﻠﻮﻣﺎت ﺗﻮﺿﺢ
أﻣﺎآﻦ اﻟﺴﺠﻼت وﺗﻮﺿﺢ أﻗﺼﺮ اﻟﻄﺮق ﻟﻠﻮﺻﻮل اﻟﻴﻬﺎ ﻋﻦ ﻃﺮﻳﻖ وﺳﺎﺋﻞ اﻻﺧﺮج واﻻدﺧﺎل
واﻟﻤﺼﻄﻠﺢ اﻟﺬي ﺗﻌﺘﻤﺪ ﻋﻠﻴﻪ اﻟﻔﻬﺮﺳﺔ ﻳﺴﻤﻰ B*-tree indexهﻲ ﻋﺒﺎرة ﻋﻦ ﻣﺤﻄﻂ ﺷﺠﺮي
ﻟﻤﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻘﻴﻢ ﻣﺮﺗﺒﺔ ﺗﻨﺎزﻟﻴﺎ ﺣﻴﺚ آﻠﻤﺎ ﻧﻨﺘﻘﻞ اﻟﻰ ﻗﻴﻤﺔ ﺗﺎﻟﻴﻪ ﻳﺘﻢ ﻣﻘﺎرﻧﺘﻬﺎ ﻣﻊ آﺘﻠﺔ اﻟﻘﻴﻢ اﻟﺘﻲ
ﺗﻌﻠﻮهﺎ وﺗﺴﻤﻰ هﺬﻩ اﻟﻜﺘﻞ branch blocksوﻧﺎﺗﺞ هﺬﻩ اﻟﻤﻘﺎرﻧﻪ ﻳﺘﻢ ﻣﻘﺎرﻧﺘﻪ ﻣﻊ آﺘﻞ اﺧﺮى إﻟﻰ
أدﻧﻰ درﺟﺔ ﻓﻲ هﺬﻩ اﻟﻜﺘﻞ وﻳﺴﻤﻰ leaf blocksﺣﺒﺚ ﺗﺤﺘﻮي هﺬﻩ اﻟﻜﺘﻠﺔ ﻋﻠﻰ آﻞ اﻟﺒﻴﺎﻧﺎت
اﻟﻤﻔﻬﺮﺳﻪ وﻳﻮﺟﺪ ﻣﺎ ﻳﺴﻤﻰ ROWIDﻟﻬﺬﻩ اﻟﺒﻴﺎﻧﺎت
اذا آﺎﻧﺖ اﻟﺒﻴﺎﻧﺎت ﻓﺮدﻳﺔ ﻓﺈﻧﻪ ﻳﻮﺟﺪ ROWIDﻟﻜﻞ ﻗﻴﻤﺔ وﻟﻜﻦ اذا ﻟﻤﺖ ﺗﻜﻦ ﻓﺮدﻳﺔ ﻓﺎﻧﻪ ﻳﻤﻜﻦ ان
ﻳﺘﻮاﺟﺪ أآﺜﺮ ﻣﻦ ROWIDوﻓﻲ هﺬﻩ اﻟﺤﺎﻟﺔ ﻳﺘﻢ ﺗﺮﺗﻴﺒﻬﺎ اﻟﺒﻴﺎﻧﺎت ﺣﺴﺐ ﻣﻔﺘﺎح اﻟﻔﻬﺮﺳﻪ ﺛﻢ ﺣﺴﺐ
ROWID
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
ﺣﻴﺚ أن
Indexاﺳﻢ اﻟﻔﻬﺮس
Tableاﺳﻢ اﻟﺠﺪول
اﺳﻦ اﻟﺤﻘﻞ اﻟﻤﺮاد ﻓﻬﺮﺳﺘﺔ Column
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 95 http://www.boosla.com
ﻣﺜﺎل
ﻻ ﻧﻔﻬﺮس اﻟﺠﺪاول اﻟﺘﻲ اﺳﺘﻌﻠﻢ ﻋﻨﻬﺎ ﺑﻌﺪد آﺒﻴﺮ ﻣﻦ اﻟﺼﻔﻮف ﻳﺚ ﻧﺴﺘﺨﺪم -1
اﻟﻔﻬﺮﺳﻪ ﻋﻨﺪﻣﺎ ﻳﻜﻮن اﻻﺳﺘﻌﻼم ﻻ ﻳﺘﺠﺎوز % 5ﻣﻦ اﻟﺠﺪول
ﻻ ﻧﻔﻬﺮس اﻟﺤﻘﻮل اﻟﺘﻲ ﻳﻨﻢ اﻟﺘﻌﺪﻳﻞ ﻗﻴﻬﺎ ﺑﺎﺳﺘﻤﺮار -2
ﻻ ﻧﻔﻬﺮس اﻟﺠﺪاول اﻟﺘﻲ ﺗﺤﺘﻮي ﻋﻠﻰ ﻗﻴﻢ ﻣﺘﻜﺮرة ﺑﻜﺜﺮة -3
ﻧﻔﻬﺮس اﻟﺤﻘﻮل اﻟﺘﻲ ﻳﻜﻮن اﻻﺳﺘﻌﻼم ﻋﻨﻬﺎ ﺳﻬﻞ ﻋﺎﻟﺒﺎ ﻓﻼ ﻧﺴﺘﺨﺪم اﻟﻔﻬﺮﺳﻪ ﻣﻊ -4
اﺳﺘﻌﻼﻣﺎت ﺷﺮوﻃﻬﺎ ﻣﻌﻘﺪة
ﻻ ﻧﻔﻬﺮس ﻏﺎﻟﺒﺎ اﻟﺤﻘﻮل اﻟﺘﻲ ﻻ ﺗﺤﺘﻮي ﻋﻠﻰ ﻗﻴﻢ ﻓﺮﻳﺪة -5
ﻧﻔﻬﺮس اﻟﺤﻘﻮل اﻟﺘﻲ ﺗﻌﺘﺒﺮ ﺣﻘﻮل راﺑﻄﻪ ﺑﻴﻦ ﺟﺪول واﺧﺮ -6
ﺣﺬف اﻟﻔﻬﺮﺳﺔ
ﻣﺜﺎل
اﻟﻌﺮوض
اﻟﻌﺮض ﻋﺒﺎرة ﻋﻦ اﺳﺘﻌﻼم ﻣﻦ ﺟﺪول واﺣﺪ أو اآﺜﺮ ﺣﻴﺚ ﻳﻌﺘﺒﺮ ﺟﺪول وهﻤﻲ ﻳﺤﺘﻮي
ﻋﻠﻰ اﻟﺒﻴﺎﻧﺎت اﻟﺘﻲ ﻳﺄﺧﺬهﺎ ﻣﻦ ﺟﻤﻠﺔ SELECTوﻟﻜﻦ ﺣﻘﻴﻘﺔ ان هﺬا اﻟﺠﺪول ﻏﻴﺮ ﻣﻮﺟﻮد
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
ﺣﻴﺚ أن
ﻣﺜﺎل
;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
راﺑﻌﺎ
ﻓﻲ هﺬﻩ اﻟﺨﻄﻮة واﻟﺘﻲ ﺗﻠﻴﻬﺎ ﺳﻨﻘﻮم ﺑﺈﺿﺎﻓﺔ ﺣﻘﻞ ﻻﺳﻢ ﻣﺴﺘﺨﺪم ﺣﻴﺚ اﺳﻢ اﻟﻤﺴﺘﺨﺪم ﺳﻴﻜﻮن ﻋﺒﺎرة
ﻋﻦ اول ﺣﺮف ﻣﻦ اﻻﺳﻢ اﻷول ﻟﻠﻤﻮﻇﻒ ﺑﺎﻻﺿﺎﻓﺔ اﻟﻰ اﺳﻤﻪ اﻻﺧﻴﺮ
ﺧﺎﻣﺴﺎ
update S_EMP
|| )set username = substr(first_name,1,1
;last_name
ﺳﺎدﺳﺎ
userﺗﻌﺔد ﺑﺎﺳﻢ اﻟﻤﺴﺘﺨﺪم ﻟﻘﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اﻟﺤﺎﻟﻲ ﻟﺬﻟﻚ ﻗﻴﻤﺔ هﺬا اﻟﻤﺘﻐﻴﺴﺮ ﺗﻌﺘﻤﺪ ﻋﻠﻰ اﻟﻤﺴﺘﺨﺪم
اﻟﺤﺎﻟﻲ ﻟﻠﻘﺎﻋﺪة ﺣﻴﺚ ﻗﻤﻨﺎ ﺑﻌﻤﻞ ﻋﻤﻠﻴﺔ رﺑﻂ ﺧﺎرﺟﻲ outer-joinﺷﺮﻃﻬﺎ أﻧﻪ اذا آﺎن اﻟﻤﺴﺘﺨﺪم
اﻟﺤﺎﻟﻲ ﻟﻘﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت اﺳﻤﻪ ﻣﻮﺟﻮد ﻓﻲ ﺣﻘﻞ اﺳﻤﺎء اﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﻓﻲ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ ﻓﺎﻧﻪ ﻳﻌﻮد
ﺑﻘﻴﻤﺔ ﻓﻲ ﺣﻘﻞ Managerاﻣﺎ Yاو Nآﻤﺎ ﻗﻠﻨﺎ ﺣﺴﺐ رﻗﻢ اﻟﻤﻮﻇﻒ واﻟﺪاﻟﺔ Decodeﺗﻘﻮم
ﻣﺸﺎهﺪة ﻗﻴﻤﺔ Managerاذا آﺎﻧﺖ Yﻓﺈن اﻟﻤﺴﺘﺨﺪم ﻣﺪﻳﺮ وﺑﺘﻢ ﻋﺮض ﺣﻘﻞ اﻟﻤﺮﺗﺐ واذا آﺎﻧﺖ N
ﻻ ﻳﺘﻢ ﻋﺮض ﺣﻘﻞ اﻟﻤﺮﺗﺐ
99 http://www.boosla.com ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
select *
from Re_Salary;
ﺗﻌﺪﻳﻞ اﻟﻌﺮض
ﻣﺜﺎل
ﻣﺜﺎل
ﺣﺬف ﻋﺮض
ﻣﻠﺨﺺ اﻟﻔﺼﻞ
ﺗﻨﺎوﻟﻨﺎ ﻓﻲ هﺬا اﻟﻔﺼﻞ آﻴﻔﻴﺔ ﺗﻜﻮﻳﻦ اﻟﻤﺘﺴﻠﺴﻼت وﻧﻌﺪﺑﻠﻬﺎ وﻃﺮﻳﻘﺔ ﺣﺬﻓﻬﺎ ﺛﻢ ﺗﻄﺮﻗﻨﺎ اﻟﻰ اﻟﻔﻬﺮﺳﺔ
وﻓﻮاﺋﺪهﺎ واﻧﻮاﻋﻬﺎ وآﻴﻔﻴﺔ ﻋﻤﻠﻬﺎ وﺗﻌﺪﻳﻠﻬﺎ وآﺬﻟﻚ اﻟﻐﺎﺋﻬﺎ وﻓﻲ اﺧﺮ اﻟﻔﺼﻞ ﺗﻄﺮﻗﻨﺎ اﻟﻰ اﻟﻌﺮوض
ﻣﻔﻬﻮﻣﻬﺎ وﻓﻮاﺋﺪهﺎ واﻓﻜﺎرهﺎ وآﻴﻔﻴﺔ ﺗﻌﺪﻳﻠﻬﺎ واﻟﻐﺎﺋﻬﺎ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 101 http://www.boosla.com
ﻧﺒﺬﻩ pl/sql
أهﺪاف اﻟﻔﺼﻞ.
-1اﻟﺘﻌﺮف ﻋﻠﻰ PL/SQL
-2اﺳﺘﺨﺪام ﻗﺎﻋﺪة IF.
-3اﺳﺘﺨﺪام اﻟﺘﻜﺮار
-4
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 102 http://www.boosla.com
ﺑﺮاﻣﺞ pl/sqlﺗﺘﻢ آﺘﺎﺑﺘﻬﺎ ﻓﻲ آﺘﻞ ﻣﻦ اواﻣﺮ اﻟﺒﺮﻣﺠﺔ ﺗﺤﺘﻮي ﻋﻠﻰ ﻣﻘﺎﻃﻊ ﻣﻨﻔﺼﻠﺔ ﻟﻼﻋﻼن ﻋﻦ
اﻟﻤﺘﻐﻴﺮات واواﻣﺮ اﻟﺒﺮاﻣﺞ وﻣﻌﺎﻟﺠﺔ اﻻﺳﺘﺜﻨﺎءت)اﻻﺧﻄﺎء( .
وﻣﻦ اﻟﻤﻤﻜﻦ ﺗﺨﺰﺑﻦ اﻻﺟﺮاء ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت آﺒﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﻟﻪ اﺳﻢ ﻣﺤﺪد او آﺘﺎﺑﺘﻬﺎ ﻣﺒﺎﺷﺮة
ﻓﻲ sql * plusآﻜﺘﻠﻪ ﻣﺠﻬﻮﻟﺔ.
DECLARE
هﻨﺎ ﺗﻮﺟﺪ ﺗﻌﺮﻳﻔﺎت اﳌﺘﻐﲑات واﳌﻮﺷﺮات
BEGIN
ﺟﺴﻢ اﻟﱪﻧﺎﻣﺞ
EXCEPTION
رﻣﻮز ﻣﻌﺎﳉﺔ اﻻﺧﻄﺎء
END:
اي اذا آﺎن ﻻﻳﻮﺟﺪ ﻟﺪﻳﻚ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮات ﻻﺗﺴﺘﺨﺪم declareواذا آﻨﺖ ﻻن ﺗﺘﻌﺎﻣﻞ ﻣﻊ اﻻﺧﻄﺎء
ﻻﺗﺴﺘﺨﺪم exception
واﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ ﻟﺘﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮات ﻓﻲ declare
;)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وﻣﻦ اﻧﻮاع اﻟﻤﺘﻐﻴﺮات اﻟﺘﻲ ﺗﺪﻋﻤﻬﺎ
NATURAL -3
POSITIVE -4
وﺗﺸﻤﻞ اﻻرﻗﺎم اﻟﻤﻮﺟﺒﺔ ﻓﻘﻂ ﻣﻦ 1اﻟﻰ 2.147.483.647
BOOLEAN -3
%TYPE-4
ﺻﻤﻢ هﺬا اﻟﻤﺘﻐﻴﺮ ﻟﻴﺤﻤﻞ ﻧﻔﺲ ﺗﻮع اﻟﺒﻴﺎﻧﺎت اﻟﺘﻲ ﻳﺤﻤﻠﻬﺎ ﺣﻘﻞ ﻣﻌﻴﻦ
%ROWTYPE -4
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 104 http://www.boosla.com
ﺻﻤﻢ هﺬا اﻟﻤﺘﻐﻴﺮ ﻟﻴﻜﻮن ﻣﺘﻐﻴﺮ ﻣﺮآﺐ ﻳﺤﻤﻞ ﻧﻔﺲ ﺗﻮع اﻟﺒﻴﺎﻧﺎت اﻟﺘﻲ ﻳﺤﻤﻠﻬﺎ ﺻﻒ ﻣﻌﻴﻦ
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
variable-name ;table-name.column-name%TYPE
ﻣﺜﺎل
v_last_name ;s_emp.last_name%TYPE
أﻧﻪ ﻣﻦ ﻧﻔﺲ ﻧﻮع اﻟﺤﻘﻞ v_last_nameﻓﻲ هﺬا اﻟﺴﻄﺮ ﻧﻘﻮم ﺑﺘﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮ
last_nameﻓﻲ ﺟﺪول S_EMPوﻳﺤﺘﻮي ﻋﻠﻰ ﻧﻔﺲ اﻟﻘﻴﻢ
اﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ
variable-name ;table-name%ROWTYPE
ﻣﺜﺎل
emp_record ;s_emp%ROWTYPE
اﻟﺬي ﻳﺤﻤﻞ ﻗﻴﻤﺔ ﺻﻒ ﻣﻦ ﺻﻔﻮف اﻟﺠﺪول emp_recordﻗﻤﻨﺎ ﺑﺘﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮ اﻟﻤﺮآﺐ
s_emp
ﻃﺮق اﻻﺳﻨﺎد
;i:=5
)DBMS_OUTPUT.PUT_LINE(massege
ﺣﻴﺚ
ﺗﻢ ﺷﺮح هﺬا اﻻﻣﺮ ﻟﻜﻲ ﻧﺒﺪأ ﺑﻪ وﻧﺴﺘﺨﺪﻣﻪ ﻟﻔﻬﻢ اواﻣﺮ ال pl/sqlﻟﻜﻦ ﻓﻲ اﻟﻤﺴﺘﻘﺒﻞ ﺳﻮف ﺗﻌﺮف
ان هﺬا اﻻﻣﺮ ﻻﻳﻬﻤﻚ آﺜﻴﺮا
.ﻣﺜﺎل :
ﻧﺮﻳﺪ ﻃﺒﺎﻋﺔ " "hi allﻋﻠﻰ اﻟﺸﺎﺷﺔ sql * plusﻳﺘﻢ ذﻟﻚ آﻤﺎﻳﻠﻲ:
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﻌﺒﺎرة ﻣﺜﻞ اي اﻟﻌﺒﺎرت اﻟﺸﺮﻃﻴﺔ ﻓﻲ ﻟﻐﺔ ﺳﻲ او ﺳﻲ ++او ﻓﻴﺠﻮال ﺑﻴﺴﻚ وﻏﻴﺮهﺎ ,
وﻟﻬﺎ اﺳﺘﺨﺪﻣﺎت ﻋﺪﻳﺪة وﺳﻮف ﻧﻌﺮف آﻴﻒ ﻧﺴ ﺘﺨﺪﻣﻬﺎ ﻣﻘ ﺪﻣﺎ ﻣ ﻊ ﺣﻘ ﻮل ﻗﻮاﻋ ﺪ اﻟﺒﻴﺎﻧ ﺎت وذﻟ ﻚ ﺑﻌ ﺪ
اﺧﺬ اﻟﻤﺆﺷﺮات
ﺣﻴﺚ أن
ﻣﻼﺣﻈﺔ
• 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
اﻟﺸﺮح
i =1
i =2
i =3
i =4
i =5
i =6
i =7
i =8
i =9
i =10
Declare
i number(5);
BEGIN
i:=1;
LOOP
EXIT WHEN i>10;
DBMS_OUTPUT.PUT_LINE('i =' || i);
i:=i+1;
End loop;
END;
/
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ﻓﻲ اي ﻟﻐﺔ
ﺑﺮﻣﺠﺔ
واﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﻪ ﻟﻬﺎ هﻲ ﻋﻠﻰ اﻻﺗﻲ
ﻣﺜـــﺎل:
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
ﺣﻴﺚ أن
ﻣﺜﺎل
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
/
اﻟﺘﻌﻠﻴﻘﺎت
ﻣﺜﺎل
ﻣﺜﺎل
*** DON’T FORGET MY NAME ***
ﻣﺜﺎل
/* DON’T FORGET MY NAME */
وﻟﻜﻦ ﻣﻊ وﺟﻮد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;
/
اﻟﻤﺆﺷﺮات
اهﺪاف اﻟﻔﺼﻞ
ﺍﻟﻤﺅﺸﺭﺍﺕ CURSORS
ﻳﺘﻢ ﺗﻌﺮﻳﻒ هﺬا اﻟﻨﻮع ﻣﻦ اﻟﻤﺆﺷﺮات آﺠﺰء ﻣﻦ اﻻﻋﻼن declareوﻳﺠﺐ ان ﺗﺸﺘﻤﻞ ﻋﺒﺎرة sql
اﻟﻤﻌﺮﻓﻪ ﻋﻠﻰ ﻋﺒﺎرة اﻟﺘﺤﺪﻳﺪ selectﻓﻘﻂ ﺣﻴﺚ ﻻﻳﻤﻜﻦ اﺳﺘﺨﺪام اﻟﻜﻠﻤﺎت اﻻﺳﺎﺳﻴﺔ
insert,update,delete
وﻋﻨﺪ اﺳﺘﺨﺪام اﻟﻤﺆﺷﺮات اﻟﺼﺮﻳﺤﻪ داﺋﻤﺎ ﻣﺎﺳﺘﻜﺘﺐ ارﺑﻌﺔ ﻣﻜﻮﻧﺎت آﻤﺎﻳﻠﻲ:
-1ﻳﺘﻢ ﺗﻌﺮﻳﻒ اﻟﻤﺆﺷﺮ ﻓﻲ اﻟﺠﺰء declare
-2ﻳﺘﻢ ﻓﺘﺢ اﻟﻤﺆﺷﺮ ﺑﻌﺪ ﻋﺒﺎرة begin
DECLARE
IS اﺳﻢ اﳌﺆﺷﺮ CURSOR
اﻻﺳﺘﻌﻼم
وﻟﻜﻲ ﺗﻘﻮم ﺑﻔﺘﺢ هﺬا اﻟﻤﺆﺷﺮ وﺗﺴﺘﺨﺪﻣﻪ ﻧﻘﻮم ﺑﻔﺘﺤﻪ ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ openآﻤﺎﻳﻠﻲ:
وﺑﻌﺪ ﻓﺘﺢ اﻟﻤﺆﺷﺮ ﺗﻘﻮم ﺑﺎﺳﺘﺮﺟﺎع او ﺗﺤﻤﻴﻞ اﻟﺒﻴﺎﻧﺎت ﺳﻄﺮ)ﺳﺠﻞ( واﺣﺪ ﻣﻦ اﻟﻤﺆﺷﺮ اﻟﺬي ﺗﻢ
ﺗﻌﺮﻳﻔﻪ ﺑﺎﺳﺘﺨﺪام اﻻﻣﺮ FETCHآﻤﺎﻳﻠﻲ:
وﻣﻌﻨﻰ هﺬا اي ﻗﻢ ﺑﺎﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﻦ اﻟﻤﺆﺷﺮ اﻟﻤﻌﻄﻰ اﺳﻤﻪ وﺣﻤﻠﻬﺎ intoاﻟﻰ اﻟﻤﺘﻐﻴﺮات آﻊ
ﻣﻼﺣﻈﺔ ان ﻋﺪد اﻟﻤﺘﻐﻴﺮات ﻳﺴﺎوي ﻋﺪد اﻟﺤﻘﻮل اﻟﻤﻮﺟﻮدة ﻓﻲ اﺳﺘﻌﻼم اﻟﻤﺆﺷﺮ.
وﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ اﺟﺮاء اﻟﻌﻤﻠﻴﺎت ﻋﻠﻰ اﻟﻤﺆﺷﺮ ﻳﺠﺐ ﻋﻠﻴﻚ اﻏﻼﻗﻪ وﻳﺘﻢ اﻏﻼﻗﻪ آﻤﺎﻳﻠﻲ:
close cursor_name
115 http://www.boosla.com ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
age name no
23 mohammed 111
22 talal 222
24 majed 333
mohammed
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 116 http://www.boosla.com
ﻻﺣﻈﻨﺎ ﻓﻲ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ان اﻻﺳﺘﻌﻼم ﻓﻲ cursorﺳﻮف ﻳﻌﻮد ﺑﺴﺠﻞ واﺣﺪ ﻟﻜﻦ ﻣﺎذا ﻳﺤﺪث ﻟﻮ
اﻋﺎد اﻟﻤﺆﺷﺮ اآﺜﺮ ﻣﻦ ﺳﺠﻞ واردﻧﺎ اﻟﻤﺮور ﻋﻠﻰ آﺎﻓﺔ اﻟﺴﺠﻼت ؟
ﻟﺤﻞ اﻟﺴﺆال اﻟﺴﺎﺑﻖ ﻻﺑﺪ ﻣﻦ اﺳﺘﺨﺪام ﺣﻠﻘﺔ ﺑﻬﺎ ﺷﺮط وهﺬا هﻮ هﻞ ﺳﺠﻼت اﻟﻤﺆﺷﺮ اﻧﺘﻬﺖ ام ﻻ
وﻧﻌﺮف ذﻟﻚ ﻣﻦ ﺧﻼل ﺧﺎﺻﻴﺔ foundﻟﻠﻤﺆﺷﺮ آﻤﺎﻳﻠﻲ:
found%mycur
ﺣﻴﺚ :
ﻣﺜﺎل :
ﻧﺮﻳﺪ اﻧﺸﺎء اﺟﺮاء ﻳﻘﻮم ﺑﺎﻟﻤﺮور ﻋﻠﻰ اﻟﺠﺪول وﻳﻨﻈﺮ اﻟﻰ درﺟﺔ اﻟﻄﺎﻟﺐ اذا آﺎن ﻧﺎﺟﺢ ﻓﻲ اﻟﻤﻘﺮر
ام ﻻ ﻓﺎذا آﺎن markاآﺒﺮ او ﻳﺴﺎوي 50ﺿﻊ ﻗﻴﻤﺔ trueﻓﻲ ﺣﻘﻞ resultواﻻ ﺿﻊ ﻗﻴﻤﺔ false
ﻓﻲ ﺣﻘﻞ result
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ﺗﻢ ﺗﻌﺮﻳﻔﻪ
ﻋﻠﻰ اﻧﻪ ﻣﻦ ﻧﻮع numberوﺗﻢ ﺗﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮ noﻓﻲ اﻻﺟﺮاء ﻋﻠﻰ اﻧﻪ numberاﻳﻀﺎ ﻟﻜﻲ
ﻳﺘﻢ وﺿﻊ رﻗﻢ اﻟﻄﺎﻟﺐ ﻓﻴﻪ ﻟﻜﻦ ﻻﺣﻆ ﻟﻮ ﺗﻢ ﺗﻐﻴﺮ ﻧﻮع اﻟﺤﻘﻞ ﻓﻲ اﻟﺠﺪول ﻣﻦ numberاﻟﻰ
varchar2ﻓﺎﻧﻪ ﻳﺠﺐ ﻋﻠﻴﻚ ﺗﻐﻴﺮ ﻧﻮع اﻟﻤﺘﻐﻴﺮ noﻓﻲ اﻻﺟﺮاء اﻳﻀﺎ ﻟﻜﻦ هﻨﺎك ﻃﺮﻳﻘﻪ ﺗﺠﻌﻠﻚ
ﻻﺗﻌﺪل اﻻﺟﺮاء آﻞ ﻣﺮة وهﻲ اﺳﺘﺨﺪام اﻻﻣﺮ اﻟﺘﺎﻟﻲ ﻟﺘﻌﺮﻳﻒ اﻟﻤﺘﻐﻴﺮ noﻓﻲ اﻻﺟﺮاء
type%no_stu.stu_study NO
ﺣﻴﺚ :
: stu_studyاﺳﻢ اﻟﺠﺪول
وﻣﻌﻨﻰ ﻣﺎﺳﺒﻖ ﻗﻢ ﺑﺘﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ اﺳﻤﻪ 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ودرﺳﻨﺎ اﻟﻨﻮع اﻻول ﻣﻨﻬﺎ وﻓﻲ هﺬا اﻟﻔﺼﻞ ﻋﻨﺪﻧﺎ
ﻧﻮع اﺧﺮ وهﻮ اﻟﻤﺆﺷﺮات اﻟﻀﻤﻨﻴﺔ وهﻲ اﺳﻬﻞ ﻣﻦ اﻟﻤﺆﺷﺮات اﻟﺼﺮﻳﺤﻪ
FROM table_name
وﻣﻌﻨﻰ هﺬا ﻗﻢ ﺑﺎﺧﺘﻴﺎر اﻟﺤﻘﻞ 1و اﻟﺤﻘﻞ 2وﺿﻌﻬﺎ ﻓﻲ اﻟﻤﺘﻐﻴﺮات ﻣﻨﻐﻴﺮ 1و ﻣﺘﻐﻴﺮ 2ﻣﻦ اﻟﺠﺪول
table_name
ﺳﻮف ﻧﺄﺧﺬ ﻣﺜﺎل ﻋﻠﻰ ذﻟﻚ وﺳﻮف ﻧﺴﺘﺨﺪم اﻟﺠﺪول اﻟﺬي اﻧﺸﺌﻨﺎﻩ ﺳﺎﺑﻖ ﻓﻲ اﻟﺪرس اﻟﺜﺎﻧﻲ ﻋﻨﺪﻣﺎ
ﺗﻌﺎﻣﻠﻨﺎ ﻣﻊ اﻟﻤﺆﺷﺮات اﻟﺼﺮﻳﺤﺔ وآﺎن اﺳﻢ اﻟﺠﺪول stud
واردﻧﺎ ﻣﺜﻼ آﺘﺎﺑﺔ اﺟﺮاء ﻳﻘﻮم ﺑﺤﺴﺎب ﻣﺘﻮﺳﻂ اﻋﻤﺎر اﻟﻄﻼب ) ﻗﺪ ﻳﻘﻮل اﻟﺒﻌﺾ اﻧﻪ ﻻﻳﺤﺘﺎج ذﻟﻚ
اﻟﻰ اﺟﺮاء ﻓﻤﺠﺮد اﺳﺘﺨﺪام ﺟﻤﻠﺔ selectﻧﺴﺘﻄﻴﻊ ﻋﻤﻞ ذﻟﻚ اﻧﺎ اﻗﻮل ﻧﻌﻢ هﺬا ﺻﺤﻴﺢ ﻟﻜﻦ اﺣﺐ
اﺳﺘﺨﺪام اﻻﺟﺮاء ﻓﻲ هﺬا اﻟﻤﺜﺎل ﻟﻜﻲ ﻧﺮى ﻃﺮﻳﻘﺔ ﻋﻤﻞ اﻟﻤﺆﺷﺮ اﻟﻀﻤﻨﻲ وﻟﻜﻦ ﺳﻮف ﻧﺮى ﺑﻌﺪ
ﻗﻠﻴﻞ ﻣﺜﺎل ﺷﺎﻣﻞ ﻳﺘﻢ ﻓﻴﻪ اﺳﺘﺨﺪام اﻟﻤﻮﺷﺮات اﻟﺼﺮﻳﺤﻪ واﻟﻀﻤﻨﻴﺔ ﻓﻲ ﻧﻔﺲ اﻟﻮﻗﺖ( واﻻن ﻧﻘﻮم
ﺑﻜﺘﺎﺑﺔ اﻻﺟﺮاء آﻤﺎﻳﻠﻲ :
121 http://www.boosla.com ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
:( )اﻟﻤﻘﺮراتcourses اﻟﺠﺪول اﻻول اﺳﻤﻪ: ﻟﻨﻔﺮض اﻧﻪ ﻟﺪﻳﻨﺎ اﻟﺠﺪوﻟﻴﻦ اﻟﺘﺎﻟﻴﻴﻦ
ﻋﺪد
اﺳﻢ اﻟﻄﺎﻟﺐ آﻮد اﻟﻤﻘﺮر اﻟﺪرﺟﺔ
اﻟﻨﻘﺎط
NO_STU COURSE_CODE MARK POINT
111 216CS 88
222 225CS 75
333 225CS 40
111 225CS 90
222 216CS 78
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
ﻋﺪد اﻟﻨﻘﺎط ﻓﻲ اي ﻣﻘﺮر = ﻣﻌﺪل اﻟﻤﺎدة )وﻟﻴﺲ اﻟﺪرﺟﺔ آﻤﺎﻓﻲ اﻟﺠﺪول اﻟﺴﺎﺑﻖ( * ﻋﺪد ﺳﺎﻋﺎت
اﻟﻤﻘﺮر
ﻧﻼﺣﻆ ﻣﻦ ﺟﺪول 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 ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
ﻻﺣﻆ هﻨﺎ اﻧﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ اﻟﻤﺆﺷﺮات اﻟﺼﺮﻳﺤﺔ واﻟﻤﺆﺷﺮات اﻟﻀﻤﻨﻴﻪ واﻟﺼﺮﻳﺤﺔ اﺳﺘﺨﺪﻣﻨﺎﻩ ﻟﻜﻲ
واﻟﻤﺆﺷﺮ اﻟﻀﻤﻨﻠﻲ اﺳﺘﺨﺪﻣﻨﺎ ﻟﻜﻲ ﻳﻌﻮد ﺑﻌﺪد اﻟﺴﺎﻋﺎت ﻓﻲ آﻞstudys ﺗﻘﻮم ﺑﻔﺘﺢ ﺳﺠﻼت اﻟﺠﺪول
.ﻣﺮة ﻳﺪور ﺑﺎﻟﺤﻠﻘﺔ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 125 http://www.boosla.com
ﻓﻲ اﻟﺘﻌﺮﻳﻔﺎت اﺗﻮﻗﻊ اﻧﻪ ﻻﺗﻮﺟﺪ هﻨﺎك ﻣﺸﻜﻠﺔ ﻟﺪﻳﻜﻢ ,اﻣﺎ ﺟﺴﻢ اﻟﺒﺮﻧﺎﻣﺞ اﺑﺘﺪًأ ﻣﻦ beginﻓﻬﻮ
آﻤﺎﻳﻠﻲ :
اوﻻ ﻳﻔﺘﺢ اﻟﻤﺆﺷﺮ اﻟﺼﺮﻳﺢ واﻟﺬي ﻳﺤﺘﻮي ﻋﻠﻰ ﺟﻤﻴﻊ ﺳﺠﻼت اﻟﺠﺪول studysﺛﻢ ﻳﻜﻮن ﺣﻠﻘﺔ
دوراﻧﻴﺔ ﻟﻜﻲ ﻳﻤﺮ ﻋﻠﻰ ﺟﻤﻴﻊ ﺳﺠﻼت اﻟﻄﻼب اﻟﻤﻮﺟﻮدة ﻓﻲ اﻟﻤﺆﺷﺮ اﻟﺼﺮﻳﺢ وﻃﺒﻌﺎ ﺷﺮط اﻻﻧﻬﺎء
ﻟﻬﺬﻩ اﻟﺤﻠﻘﺔ هﻮ اﻟﻮﺻﻮل اﻟﻰ اﺧﺮ ﺳﺠﻞ .ﺛﻢ ﻳﻘﻮم ﺑﻌﻤﻠﻴﺔ ﺗﺤﺪﻳﺚ ﺳﺠﻼت اﻟﻄﺎﻟﺐ اﻻوﻟﻰ ﻓﻲ
اﻟﻤﺘﻐﻴﺮات آﻤﺎﻳﻠﻲ:
وﻃﺒﻌﺎ اﻟﻤﺘﻐﻴﺮات هﻲ رﻗﻢ اﻟﻄﺎﻟﺐ ورﻗﻢ اﻟﻤﻘﺮر واﻟﺪرﺟﺔ ﻓﻲ اﻟﻤﻘﺮر وﻟﻨﻔﺮض اﻻن ﻧﺤﻦ اﻻن ﻋﻨﺪ
اﻟﺴﺠﻞ اﻻول ووهﻮ اﻟﻄﺎﻟﺐ اﻟﺬي رﻗﻤﻪ 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
ﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ هﺬا اﻟﻤﺜﺎل ﻧﻜﻮن اﻧﻬﻴﻨﺎ اﻟﻤﺆﺷﺮات ﺑﻨﻮﻋﻴﻬﺎ ﺑﺸﻜﻞ ﺗﺎم وﺑﺎﻣﺜﻠﻪ واﻗﻌﻴﻪ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 127 http://www.boosla.com
اﻟﺠـﺪاول ﻓﻲ ) pl/sqlاﻟﻤﺼﻔﻮﻓﺎت(
ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺠﺪاول )اﻟﻤﺼﻔﻮﻓﺎت( ﻣﺜﻞ اﻟﻤﺼﻔﻮﻓﺎت ﻓﻲ هﻲ ﻟﻐﺔ ﻣﻦ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﻣﺜﻞ ﻟﻮ آﺎﻧﺖ
ﻟﺪﻳﻚ ﺳﻠﺴﻠﺔ ﻣﻦ اﻻرﻗﺎم وﺗﺮﻳﺪ ﺗﺨﺰﻳﻨﻬﺎ ﻓﺎﻧﻚ ﺗﺴﺘﺨﺪم هﺬﻩ اﻟﺠﺪاول ﻟﻠﺘﺨﺰﻳﻦ وﻳﺘﻢ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻣﻦ
هﺬا اﻟﻨﻮع آﻤﺎﻳﻠﻲ اوﻻ ﻳﺘﻢ ﺗﻌﺮﻳﻒ هﺬا اﻟﻨﻮع :
DECLARE
TYPE num_array IS TABLE OF number(4) INDEX BY
;BINARY_INTEGER
;num num_array
BEGIN
........
........
;END
ﻻﺣﻆ اوﻻ ﺗﻢ ﺗﻌﺮﻳﻒ ﻧﻮع واﺳﻤﺎﻩ , num_arrayﺛﻢ ﻗﺎم ﺑﺘﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ numواﻋﻄﺎﻩ ﻧﻮع
num_arrayوهﻮ اﻟﻨﻮع اﻟﺠﺪﻳﺪ اﻟﺬي ﻗﻤﻨﺎ ﺑﺎﻧﺸﺎءﻩ.
ووﻳﻜﻮن ﻋﻤﻞ هﺬا اﻻﺟﺮاء آﻤﺎﻳﻠﻲ :اﻟﺤﻠﻘﺔ اﻻوﻟﻰ ﺗﻘﻮم ﺑﻀﺮب اﻟﻌﺪد 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ﻟﻜﻲ اﺣﺼﻞ ﻋﻠﻰ اﻟﻨﺘﺎﺋﺞ ﻟﻜﻦ ﻣﺎهﻮ رأﻳﻚ ﻟﻮ ﻧﻘﻮم ﺑﺘﺨﺰﻳﻦ هﺬا
اﻻﺟﺮاء ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وﻧﻌﻄﻴﺔ اﺳﻢ وﺣﻴﻨﻤﺎ ﻧﺤﺘﺎﺟﻪ ﻧﺴﺘﺪﻋﻴﺔ ﺑﺎﺳﻤﻪ وهﺬا ﻳﻮﻓﺮ ﻋﻠﻴﻨﺎ اﻟﺸﻲء
اﻟﻜﺜﻴﺮ ﻟﺬﻟﻚ ﻓﺼﻠﻨﺎ هﻮ اﻻﺟﺮاﺋﻴﺎت اﻟﻤﺨﺰﻧﺔ.
ﺣﻴﺚ أن
اﻣﺎ ﻋﻦ اﻟﻤﻐﻴﺮات اﻟﺘﻲ ﺑﻴﻦ اﻟﻘﻮﺳﻴﻦ ﻓﻬﻲ اﻣﺎ ﻣﺘﻐﻴﺮات ﻣﺪﺧﻠﻪ ﻣﺜﻞ اذا آﺎن ﻟﺪﻳﻚ اﺟﺮاء ﺣﺴﺎب
ﻣﻌﺪل ﻃﺎﻟﺐ وﺗﺮﻳﺪ ﺗﻤﺮﻳﺮ رﻗﻢ اﻟﻄﺎﻟﺐ اﻟﺬي ﺗﺮﻳﺪ ﺣﺴﺎب ﻣﻌﺪﻟﻪ ﻓﻬﺬﻩ هﻲ ﺗﻌﺘﺒﺮ آﻤﺪﺧﻼت
وﻟﺘﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﺑﻬﺬا اﻟﺸﻜﻞ ﻳﻜﻮن آﻤﺎﻳﻠﻲ :
ﻻﺣﻆ اﺳﻢ اﻟﻤﺘﻐﻴﺮ هﻮ student_idﺛﻢ ﺑﻌﺪﻩ وﺿﻌﻨﺎ اﻟﻜﻠﻤﺔ inوﻣﻌﻨﻰ ان هﺬا اﻟﻤﺘﻐﻴﺮ ﻳﻌﺘﺒﺮ
آﻤﺪﺧﻞ
اﻣﺎ ﻟﺘﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻳﻌﻮد ﺑﻘﻴﻤﺔ ﻣﻦ اﻻﺟﺮاء ﻣﺜﻼ ﻟﻮ اردﻧﺎ ﺗﻌﺮف ﻣﺘﻐﺒﺮ ﻳﺮﺟﻊ ﺑﻤﻌﺪل اﻟﻄﺎﻟﺐ ﻳﺘﻢ
اﻟﺘﻌﺮﻳﻒ آﻤﺎﻳﻠﻲ :
ﺑﻌﺪ ﺗﻨﻔﻴﺬ اﻻﺟﺮاء ﻳﻜﻮن هﺬا اﻟﻤﺘﻐﻴﺮ ﻳﺤﺘﻮي ﻋﻠﻰ ﻣﻌﺪل اﻟﻄﺎﻟﺐ اﻟﺬي ﺗﻢ ﺗﻤﺮﻳﺮ رﻗﻤﻪ ﻣﺜﻼ.
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 131 http://www.boosla.com
ﻣﻊ اﻟﻌﻠﻢ اﻧﻪ ﻳﻤﻜﻦ ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮ ﻟﻠﻤﺪﺧﻼت واﻟﻤﺨﺮﺟﺎت ﺣﻴﺚ ﺗﻤﺮر ﺑﻪ اﻟﻘﻴﻤﻪ اوﻻ وﺑﻌﺪ ﺗﻨﻔﻴﺬ
اﻻﺟﺮاء ﻳﺘﻢ وﺿﻊ اﻟﻘﻴﻤﻪ ﻓﻲ ﻧﻔﺲ اﻟﻤﺘﻐﻴﺮ وﺗﺘﻢ آﻤﺎﻳﻠﻲ :
ﻣــــﺜﺎل :
ﻓﻲ اﻟﺠﺪول اﻟﺬي ﻗﻤﻨﺎ ﺑﺪراﺳﺘﻪ ﻓﻲ اﻟﻔﺼﻮل اﻟﺴﺎﺑﻘﺔ وآﺎن ﺑﺄﺳﻢ studys
ﻟﻮ اردﻧﺎ ﺗﺼﻤﻴﻢ اﺟﺮاء ﻣﺨﺰن ﻟﻜﻲ ﻳﻘﻮم ﺑﻄﺒﺎﻋﺔ درﺟﺔ اﻟﻄﺎﻟﺐ ﺑﻌﺪ ﺗﻤﺮﻳﺮ رﻗﻢ اﻟﻄﺎﻟﺐ ورﻗﻢ
اﻟﻤﻘﺮر.
ﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ﺗﻨﻔﻴﺬ اﻻﺟﺮاء ﻳﻜﻮن اﻻﺟﺮاء ﻣﺨﺰن ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وﻟﻜﻲ ﻧﻘﻮم ﺑﺎﺳﺘﺪﻋﺎءﻩ ﻧﻘﻮم
ﺑﻤﺎﻳﻠﻲ
begin
;)'stu_mark(111,'216CS
;end
/
ﻻﺣﻆ آﻴﻒ ﺗﻢ اﺳﺘﺪﻋﺎء اﻻﺟﺮاء اﻟﺴﺎﺑﻖ ﻣﻦ ﺧﻼل اﺳﻢ اﻻﺟﺮاء وﺑﺬﻟﻚ ﺳﻮف ﻳﻜﻮن اﻟﻨﺎﺗﺞ ﻋﻠﻰ
اﻟﺸﺎﺷﺔ آﻤﺎﻳﻠﻲ 88وهﻲ ﺻﺤﻴﺤﺔ ﺑﻌﺪ ﺗﻤﺮﻳﺮ رﻗﻢ اﻟﻄﺎﻟﺐ 111وﻣﻘﺮر 216CS
ﻟﻜﻦ ﻻﺣﻆ اﻧﻨﺎ ﻟﻢ ﻧﺴﺘﺨﺪم ﻣﺘﻐﻴﺮات اﺧﺮاج ﻟﻜﻦ ﻣﺄراﻳﻚ ان ﻧﺼﻤﻢ اﺟﺮاء اﺧﺮ ﻳﻘﻮم ﺑﻨﻔﺲ اﻟﻮﻇﻴﻔﺔ
اﻟﺘﻲ ﻳﻘﻮم ﺑﻬﺎ اﻻﺟﺮاء اﻟﺴﺎﺑﻖ ﻟﻜﻦ ﻋﻤﻠﻴﺔ اﻟﻄﺒﺎﻋﺔ ﺗﻜﻮن ﺑﻌﺪ اﻻﺳﺘﺪﻋﺎء ﻟﻜﻲ ﻧﺠﻌﻞ اﻻﺟﺮاء ﻳﻘﻮم
ﺑﺎرﺟﺎع درﺟﺔ اﻟﻄﺎﻟﺐ ﺑﻤﺘﻐﻴﺮ ﻟﺬﻟﻚ ﻓﺎن اﻻﺟﺮاء آﻤﺎﻳﻠﻲ :
ﺑﻌﺪ ذﻟﻚ ﻧﻘﻮم ﺑﺎﺳﺘﺪﻋﺎء اﻻﺟﺮاء وﻣﻦ ﺛﻢ ﻃﺒﺎﻋﺔ اﻟﺪرﺟﺔ ﻻن ﻟﻮ ﻻﺣﻈﺖ اﻻﺟﺮاء ﻻﻳﻘﻮم ﺑﺎﻟﻄﺒﺎﻋﺔ
وﻻﺣﻆ اﻳﻀﺎ ان اﻟﺪرﺟﺔ ﺗﻢ وﺿﻌﻬﺎ ﻓﻲ اﻟﻤﺘﻐﻴﺮ maraوﻟﺬﻟﻚ ﺳﻮف ﻳﻌﻮد ﺑﻬﺬﻩ اﻟﻘﻴﻤﺔ وﺳﻮف
ﻳﻜﻮن اﻻﺳﺘﺪﻋﺎء آﻤﺎﻳﻠﻲ :
declare
;m studys.mark%type
begin
;)stu_mark1(111,'225CS',m
;)DBMS_OUTPUT.PUT_Line(m
;end
/
اﻟﻮﻇﺎﺋﻒ اﻟﻤﺨﺰﻧﺔ
آﺎن درﺳﺎ اﻟﺴﺎﺑﻖ ﻋﻦ اﻻﺟﺮاءات اﻟﻤﺨﺰﻧﺔ واﻟﻴﻮم ﻟﺪﻳﻨﺎ درس ﻣﺸﺎﺑﻪ ﻟﻪ وهﻮ اﻟﻮﻇﺎﺋﻒ اﻟﻤﺨﺰﻧﺔ
ﻟﻜﻦ اﻟﻔﺮق ان اﻟﻮﻇﺎﺋﻒ ﻻﺑﺪ ان ﺗﻌﻴﺪ ﻗﻴﻤﺔ
ﺣﻴﺚ أن
اﻣﺎ ﻋﻦ اﻟﻤﻐﻴﺮات اﻟﺘﻲ ﺑﻴﻦ اﻟﻘﻮﺳﻴﻦ ﻓﻬﻲ اﻣﺎ ﻣﺘﻐﻴﺮات ﻣﺪﺧﻠﻪ ﻣﺜﻞ اذا آﺎن ﻟﺪﻳﻚ اﺟﺮاء ﺣﺴﺎب
ﻣﻌﺪل ﻃﺎﻟﺐ وﺗﺮﻳﺪ ﺗﻤﺮﻳﺮ رﻗﻢ اﻟﻄﺎﻟﺐ اﻟﺬي ﺗﺮﻳﺪ ﺣﺴﺎب ﻣﻌﺪﻟﻪ ﻓﻬﺬﻩ هﻲ ﺗﻌﺘﺒﺮ آﻤﺪﺧﻼت ,وهﻲ
ﺑﻨﻔﺲ اﻟﻄﺮﻳﻘﺔ اﻟﺘﻲ ﺗﻌﺎﻣﻠﻨﺎ ﺑﻬﺎ ﻣﻊ اﻻﺟﺮاءت اﻟﻤﺨﺰﻧﺔ ﻻﺗﻐﻴﺮ ﻋﻠﻰ اﻟﻤﺘﻐﻴﺮات وﻃﺮق ﺗﻌﺮﻳﻔﻬﺎ.اﻣﺎ
datatype RETURNﻓﻬﻲ ﺗﺪل ﻋﻠﻰ ﻧﻮع اﻟﻘﻴﻤﺔ اﻟﻤﻌﺎدة ﻣﻦ اﻟﻮﻇﻴﻔﺔ .
ﻣﺜــــــــﺎل :ﻓﻲ اﻟﺠﺪول اﻟﺬي ﻗﻤﻨﺎ ﺑﺪراﺳﺘﻪ ﻓﻲ اﻟﺪرس اﻟﺮاﺑﻊ وآﺎن ﺑﺄﺳﻢ studysوآﺎن آﻤﺎﻳﻠﻲ
:
ﻟﻮ اردﻧﺎ ﺗﺼﻤﻴﻢ وﻇﻴﻔﺔ ﺗﺮﺟﻊ ﺑﻤﻌﺪل اﻟﻄﺎﻟﺐ اﻟﻔﺼﻞ اي ﻳﺘﻢ ﺗﻤﺮﻳﺮ رﻗﻢ اﻟﻄﺎﻟﺐ اﻟﻰ اﻟﻮﻇﻴﻔﺔ ﺛﻢ ﻳﺘﻢ
ﺣﺴﺎب اﻟﻤﻌﺪل اﻟﻔﺼﻠﻲ ﻟﻠﻄﺎﻟﺐ
134 http://www.boosla.com ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
وﻳﺘﻢ ﺣﺴﺎب اﻟﻤﻌﺪل اﻟﻔﺼﻞ ﻟﻠﻄﺎﻟﺐ آﻤﺎﻳﻠﻲ =ﻣﺠﻤﻮع اﻟﻨﻘﺎط ÷ ﻣﺠﻤﻮع ﻋﺪد اﻟﺴﺎﻋﺎت ﻟﻤﻘﺮرات
: اﻟﺸﺮح
اﻻن ﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ﺷﺮح ﻃﺮﻳﻘﺔ ﺗﺼﻤﻴﻢ اﻟﻮﻇﻴﻔﺔ ﺟﺎء دور ﻃﺮﻳﻘﺔ اﻻﺳﺘﺪﻋﺎء :
ﻟﻜﻦ ﻗﺒﻞ اﻻﺳﺘﺪﻋﺎء ﻟﻨﺤﺴﺐ ﻳﺪوﻳﺎ ﻣﻌﺪل اﻟﻄﺎﻟﺐ اﻟﺬي رﻗﻤﻪ 111ﻣﺜﻞ ﻟﻜﻲ ﻧﻘﺎرﻧﻪ ﺑﺎﻟﻨﺘﺎﺋﺞ ﺑﻌﺪ
اﻻﺳﺘﻌﻼم :
ﻣﺠﻤﻮع ﻋﺪد اﻟﺴﺎﻋﺎت = )ﻋﺪد ﺳﺎﻋﺎت اﻟﻤﻘﺮر ) + ( CS216ﻋﺪد ﺳﺎﻋﺎت اﻟﻤﻘﺮر CS )225
=6=3+3
)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
اﻟﺤﺰم اﻟﺒﺮﻣﺠﻴﺔ
ﺗﻌﻠﻤﻨﺎ ﺳﺎﺑﻘﺎ آﻴﻔﻴﺔ اﻧﺸﺎء اﻻﺟﺮاءت واﻟﻮﻇﺎﺋﻒ اﻟﻤﺨﺰﻧﺔ .ﻟﻜﻦ ﻣﺎرأﻳﻚ ﻟﻮ وﺟﺪ ﻟﺪﻳﻨﺎ ﻗﺎﻋﺪة ﺑﻴﺎﻧﺎت
آﺒﻴﺮة ﺟﺪا وﻟﻨﻀﺮب ﻣﺜﺎل اﻧﻬﺎ ﺗﺤﺘﻮي ﻋﻠﻰ 50اﺟﺮاء او وﻇﻴﻔﺔ وﻇﻴﻔﺔ او اﺟﺮاء ﻟﻬﺎ ﻋﻤﻞ ﺧﺎص
وﻟﻨﻔﺮض ان هﺬﻩ اﻟﻘﺎﻋﺪة هﻲ ﻟﻤﺤﻞ ﺗﺠﺎري ﺿﺨﻢ ﻳﺤﺘﻮي ﻋﻠﻰ ﺑﻴﺎﻧﺎت اﻟﻌﻤﻼء وﺑﻴﺎﻧﺎت اﻟﻤﻮﻇﻔﻴﻦ
وﺑﻴﺎﻧﺎت اﻻﺻﻨﺎف اﻟﺘﺠﺎرﻳﺔ وﺑﻴﺎﻧﺎت اﻟﻤﺨﺰون وﻏﻴﺮهﺎ ﻣﻦ ﺑﻴﺎﻧﺎت ,وﻟﺬﻟﻚ ﻓﺎن ﺑﻌﺾ هﺬﻩ
اﻻﺟﺮاﺋﻴﺎت واﻟﻮﻇﺎﺋﻒ اﻟﻤﺨﺰﻧﺔ ﻣﺨﺘﺺ ﺑﺎﻟﻌﻤﻼء ﻣﺜﻼ وﺟﻮد اﺟﺮاء ﻟﺤﺴﺎب اﺟﻤﺎﻟﻲ ﻋﻤﻴﻞ
وﻏﻴﺮهﺎ ﻣﻦ اﻻﺟﺮاﺋﻴﺎت ,وﻣﺜﻞ وﺟﻮد اﺟﺮﺋﻴﺎت ﺧﺎﺻﺔ ﺑﺎﻟﻤﻮﻇﻔﻴﻦ ﻣﺜﻼ اﺟﺮاﺋﻴﺔ ﺧﺎﺻﺔ ﺑﺤﺴﺎب
راﺗﺐ اﻟﻤﻮﻇﻒ ﺑﻌﺪ ﺣﺬف اﻟﺤﺴﻮﻣﺎت واﺿﺎﻓﺔ اﻟﻌﻼوات وﻏﻴﺮهﺎ اﻳﻀﺎ ,ﻟﻜﻦ وﺿﻌﻬﺎ ﻓﻲ هﺬا
اﻟﺸﻜﻞ ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت ﻗﺪ ﻳﺴﺴﺐ ﻟﻚ ﺑﻌﺾ اﻻرﺑﺎك ﻟﺬﻟﻚ ﻣﺎرأﻳﻚ ﺑﺎن ﺗﺠﻤﻊ آﻞ اﻟﻮﻇﺎﺋﻒ
واﻻﺟﺮاﺋﻴﺎت اﻟﺨﺎﺻﺔ ﺑﻜﻞ ﻗﺴﻢ ﻓﻲ ﻣﺠﻤﻮﻋﺔ ﻟﻮﺣﺪهﺎ وهﺬﻩ اﻟﻤﺠﻤﻮﻋﺔ ﺗﺪﻋﻲ اﻟﺤﺰﻣﻪ package
ﻣﺜﻼ ﻧﺠﻤﻊ آﻞ اﺟﺮاﺋﻴﺎت واﻟﻮﻇﺎﺋﻒ اﻟﺨﺎﺻﺔ ﺑﺎﻟﻌﻤﻼء ﻓﻲ ﺣﺰﻣﺔ ﺧﺎﺻﺔ
ﻣﻜﻮﻧﺎت اﻟﺤﺰم
ﺗﺘﻜﻮن اﻟﺤﺰﻣﺔ ﻣﻦ ﺟﺰءﻳﻦ اﻻول وهﻮ اﻟﻮﺻﻒ specificationوﻳﺤﺘﻮي ﻋﻠﻰ اﻟﺘﻌﺎرﻳﻒ ﻣﺜﻞ
ﻣﺘﻐﻴﺮات او ﻣﺆﺷﺮات او اﺳﻤﺎء اﻻﺟﺮاءت وﻣﺘﺤﻮﻟﺘﻬﺎ.
اﻣﺎ اﻟﺠﺰ اﻟﺜﺎﻧﻲ ﻓﻬﻮ ﺟﺴﻢ اﻟﺤﺰﻣﺔ وﻳﺤﺘﻮي ﻋﻠﻰ ﺗﻔﺎﺻﻴﻞ اﻻﺟﺮاءت واﻟﻌﻤﻠﻴﺎت وﻏﻴﺮهﺎ
واﻟﺼﻴﻐﺔ اﻟﻌﺎﻣﺔ ﻻﻧﺸﺎء اﻟﺠﺰء اﻻول آﻤﺎﻳﻠﻲ :
ﻟﻜﻦ ﻳﺠﺐ ان ﻳﻜﻮن اﺳﻢ اﻟﺤﺰﻣﺔ ﻓﻲ اﻟﺠﺰء اﻻول هﻮ ﻧﻔﺲ اﺳﻢ اﻟﺤﺰﻣﺔ ﻓﻲ اﻟﺠﺰء اﻟﺜﺎﻧﻲ.
139 http://www.boosla.com ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
: ﻣــﺜﺎل
ﻟﻨﻘﻢ ﺑﺎﻧﺸﺎء ﺣﺰﻣﺔ ﺗﺤﺘﻮي ﻋﻠﻰ وﻇﻴﻔﺔ ﻟﺤﺴﺎب ﻣﻌﺪل ﻃﺎﻟﺐ واﺟﺮاء ﻟﻄﺒﺎﻋﺔ اﻟﻤﻌﺪل
stu_avea وﻟﺬﻟﻚ ﺳﻮف ﻧﺴﺘﺨﺪم ﻧﻔﺲ اﻟﻮﻇﻴﻔﺔ اﻟﺘﻲ اﻧﺸﻨﺎهﺎ ﻓﻲ اﻟﺪرس اﻟﺴﺎدس واﻟﺘﻲ اﺳﻤﻬﺎ
اﻟﺠﺰء اﻻول ﻣﻦ اﻟﺤﺰﻣﺔ. واﻟﺘﻲ ﺗﻘﻮم ﺑﺤﺴﺎب ﻣﻌﺪل اﻟﻄﺎﻟﺐ واﻻن ﻧﺒﺪاء ﺑﺎﻧﺸﺎء اﻟﺤﺰﻣﺔ
: آﻤﺎﻳﻠﻲspecification
;close sumpoint
;avrage:=total_Point/sum_hours
;return avrage
;end
وﻳﺤﺘﻮي ﺟﺴﻢ اﻟﺤﺰﻣﺔ آﻤﺎﻧﻼﺣﻆ ﻋﻠﻰ ﻣﻜﻮﻧﺎت اﻟﻮﻇﻴﻔﺔ واﻻﺟﺮاء اﻟﺬي ﺗﻢ ﺗﻌﺮﻳﻔﻬﻤﺎ ﻓﻲ وﺻﻒ
اﻟﺤﺰﻣﺔ ﺣﻴﺚ ان اﻟﻮﻇﻴﻔﺔ ﻟﺤﺴﺎب اﻟﻤﻌﺪل واﻻﺟﺮاء ﻟﻄﺒﺎﻋﺔ اﻟﻤﻌﺪل.
pack_name.func_proc_name
اي اﺳﻢ اﻟﺤﺰﻣﺔ اوﻻ ﺛﻢ ﻧﻘﻄﺔ ﺛﻢ اﺳﻢ اﻻﺟﺮاء او اﻟﻮﻇﻴﻔﺔ ﻣـــــــﺜﺎل :
وﺑﻌﺪ اﻟﺘﻔﻴﺬ ﻳﻜﻮن اﻟﻨﺎﺗﺞ هﻮ ﻣﻌﺪل اﻟﻄﺎﻟﺐ اﻟﺬي رﻗﻤﻪ 111ﻻﺣﻆ اول ﺷﻲ اﺳﺘﺪﻋﻴﻨﺎ داﻟﻪ ﺣﺴﺎب
اﻟﻤﻌﺪل ووﺿﻌﻨﺎهﺎ ﻓﻲ اﻟﻤﺘﻐﻴﺮ aaﺛﻢ اﺳﺘﺪﻋﻴﻨﺎ اﺟﺮاء اﻟﻄﺒﺎﻋﺔ ﻟﻴﺘﻢ ﻃﺒﻌﺔ ﻋﻠﻰ اﻟﺸﺎﺷﺔ.
واﻻن و ﺑﻌﺪ ان ﺗﻌﺮﻓﺖ ﻋﻠﻰ ﻓﺎﺋﺪة اﻟﺤﺰم ﻣﺎرأﻳﻚ ﻣﻦ اﻻن ﻓﺼﺎﻋﺪ ان ﺗﺴﺘﺨﺪم اﻟﺤﺰم ﻓﻲ آﺘﺎﺑﺔ
اﻻﺟﺮاﺋﻴﺎت واﻟﻮﻇﺎﺋﻒ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 141 http://www.boosla.com
اﻟﺰﻧﺎدات TRRIGERs
ﺗﺘﺸﺎﺑﻪ اﻟﺰﻧﺎدات ﻣﻊ اﻟﺒﺮاﻣﺞ اﻟﻔﺮﻋﻴﺔ اﻻ ﻓﻲ اﻟﻄﺮق اﻟﺘﺎﻟﻴﺔ :
* ﻳﺘﻢ ﺗﻨﻔﻴﺬ اﻟﺰﻧﺎدات ﺿﻤﻨﻴﺎ,ﻋﻨﺪﻣﺎ ﻳﻌﺪل اﻟﺠﺪول ﺑﺎﻟﺮﻏﻢ ﻣﻦ ﻋﻤﻞ اﻟﻤﺴﺘﺨﺪم او اﻟﺘﻄﺒﻴﻘﺎت ﻋﻠﻰ
اﻟﺠﺪول .
ﺗﻌﺪ اﻟﺰﻧﺎدات هﺎﻣﺔ ﺟﺪا ﻓﻲ ﺗﻄﻮﻳﺮ ﻧﻈﻢ اﻟﺒﻴﺎﻧﺎت اﻟﻤﻮﺟﻬﺔ اﻟﺨﺎﺻﺔ ﺑﺎﻻﻧﺘﺎج .
آﻤﺎهﻮ ﻣﻊ اﻻﺟﺮاءات اﻟﻤﺨﺰﻧﺔ اﻣﻜﺎﻧﻴﺔ اﺳﺘﺨﺪام replaceﻟﻜﻲ ﺗﻘﻮم ﺑﺎﻟﺘﻌﺪﻳﻞ ﻋﻠﻰ اﻟﺰﻧﺎد اذا آﺎن
ﻣﻮﺟﻮد وﻻﺗﻘﻮم ﺑﺎﻧﺸﺎءﻩ ﻣﻦ ﺟﺪﻳﺪ.
ﻳﻨﻔﺬ اﻟﺘﻮﻗﻴﺖ اﻟﺨﺎص ﺑﺎﻟﺰﻧﺎد ﺳﻮاء ﻧﻔﺬ اﻟﺰﻧﺎد ﻗﺒﻞ او ﺑﻌﺪ اﻏﻼق اﻟﺰﻧﺎد ﺑﻮاﺳﻄﺔ اﻟﺨﻴﺎرﻳﻦ before
و , afterﻟﻜﻦ ﺧﻴﺎر afterاآﺜﺮ آﻔﺎءة ﻻن ﻗﻄﻊ اﻟﺒﻴﺎﻧﺎت اﻟﻤﺆﺛﺮة ﻳﺠﺐ ان ﺗﻘﺮاء ﻣﻨﻄﻘﻴﺎ ﻣﺮة
ﻟﻠﺰﻧﺎد وﻣﺮة ﻟﻌﺒﺎرة trigger
ﻣﻼﺣﻈﺔ /ان ﺣﺪث اﻃﻼق اﻟﺰﻧﺎد هﻮ ﺟﻤﻠﺔ sqlاﻟﺘﻲ ﺗﺠﻌﻞ اﻟﺰﻧﺎد وﺣﺪث اﻻﻃﻼق اﻣﺎ updateاو
deleteاو insertاو ﺑﻜﻠﻴﻬﻤﺎ..
وﻳﻮﺟﺪ ارﺑﻌﺔ اﻧﻮاع ﻣﻦ اﻟﺰﻧﺎدات:
-1ﺻﻒ after.
-2ﺟﻤﻠﺔ after.
-3ﺻﻒ before.
-4ﺟﻤﻠﺔ before.
وآﻞ زﻧﺎد ﻣﻦ اﺟﻞ ﺟﻤﻠﺔ updateاو insertاو deleteآﻞ زﻧﺎد ﻳﻌﺪ ﻧﻮع واﺣﺪ ﻣﻦ ) instead
(of , after,beforeوﻳﻤﻜﻦ ﺗﻌﺮﻳﻒ ﺗﺴﻊ زﻧﺎدات ﻟﻠﺠﺪول اﻟﻮاﺣﺪ..
ﻗﻴﺪ اﻟﺰﻧﺎد
ﻳﺤﺪد هﺬا اﻟﻘﻴﺪ ﺗﻌﺒﻴﺮ ﻣﻨﻄﻘﻲ ﻳﺠﺐ ان ﻳﻜﻮن ﺻﺤﻴﺢ آﻲ ﻳﻄﻠﻖ اﻟﺰﻧﺎد.
ﻋﻠﻰ ﺳﺒﻴﻞ اﻟﻤﺜﺎل اﻟﺰﻧﺎد اﻟﺘﺎﻟﻲ stduent_triggerﻻ ﻳﺘﻢ ﺣﺪوﺛﺔ اﻻ اذا آﺎن رﻗﻢ اﻟﻄﺎﻟﺐ
student_idاﻗﻞ ﻣﻦ 100
-1ﻳﻤﻜﻦ ﻟﻠﻨﺺ ان ﻳﺤﺘﻮي ﻋﻠﻰ ﺟﻤﻞ dml sqlﻟﻜﻦ ﺟﻤﻞ selectﻳﺠﺐ ان ﺗﻜﻮن ﺟﻤﻞ select
into
-2ﻻﻳﺴﻤﺢ ﺑﺠﻤﻞ اﻟﺘﺤﻜﻢ )( commit,savepoint,rollback
-3ﻻﻳﻤﻜﻦ ﻟﺒﺮﻧﺎﻣﺞ ﻓﺮﻋﻲ ﻣﺨﺰن ان ﻳﺘﻀﻤﻦ ﺟﻤﻞ اﻟﺘﺤﻜﻢ اﻟﺴﺎﺑﻘﺔ اذا ﺗﻢ اﺳﺘﺪﻋﺎﺋﻪ ﺑﻮاﺳﻄﺔ اﻟﺰﻧﺎد.
ﻣـــــــــــــــــﺜﺎل :
اﻻول :هﻮ ﺟﺪول playerﺑﻴﺎﻧﺎت ﺟﻤﻴﻊ اﻟﻼﻋﺒﻴﻦ ﻓﻲ اﻟﻨﺎدي ﺳﻮاء درﺟﺔ ﺷﺒﺎب او درﺟﺔ ﻣﻤﺘﺎز :
ﺣﻴﺚ levelﺗﻤﺜﻞ اﻟﺪرﺟﺔ اﻟﺘﻲ ﻳﻠﻌﺐ ﺑﻬﺎ اﻟﻼﻋﺐ ﺣﻴﺚ 1ﺗﻤﺜﻞ اﻟﺪرﺟﺔ اﻻوﻟﻰ اﻟﻤﻤﺘﺎز -و 2ﺗﻤﺜﻞ
اﻟﺸﺒﺎب .
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 143 http://www.boosla.com
اﻟﺜﺎﻧﻲ :هﻮ ﺟﺪول اﻟﻼﻋﺒﻴﻦ ﻓﻲ درﺟﺔ اﻟﻤﻤﺘﺎز وهﻮ ﺧﺎص ﺑﺎﻟﺮواﺗﺐ واﺳﻢ اﻟﺠﺪول larg_player
اﻟﺜﺎﻟﺚ :هﻮ ﺟﺪول اﻟﻼﻋﺒﻴﻦ ﻓﻲ درﺟﺔ اﻟﺸﺒﺎب وهﻮ ﺧﺎص ﺑﺎﻟﺮواﺗﺐ واﺳﻢ اﻟﺠﺪول youth
اﻻن ﻧﺮﻳﺪ ﻋﻤﻞ زﻧﺎد ﺑﺤﻴﺚ ﺣﻴﻨﻤﺎ ﻳﻘﻮم اﻟﻤﺴﺘﺨﺪم ﺑﺎدﺧﺎل اﺳﻢ ﻻﻋﺐ ﺟﺪﻳﺪ وﺗﺤﺪﻳﺪ ﻣﺴﺘﻮاﻩ )ﺷﺒﺎب
او ﻣﻤﺘﺎز( ﻳﻘﻮم اﻟﺰﻧﺎد ﺑﺎﺧﺘﺒﺎر اﻟﻤﺴﺘﻮى ﻓﺎذا آﺎن ﺷﺒﺎب اﺿﺎف رﻗﻢ اﻟﻼﻋﺐ ﻓﻲ ﺟﺪول اﻟﺸﺒﺎب
وآﺬﻟﻚ ﻟﻮآﺎن ﻣﺴﺘﻮاﻩ درﺟﺔ اوﻟﻰ اﻟﻤﻤﺘﺎز ﻓﺎﻧﻪ ﻳﻀﻴﻒ رﻗﻢ اﻟﻼﻋﺐ ﻓﻲ ﺟﺪول larg_player
وﺑﺬﻟﻚ ﻳﻜﻮن اﻟﺰﻧﺎد آﻤﺎﻳﻠﻲ :
144 http://www.boosla.com ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
ﺑﻌﺪ ذﻟﻚ اذهﺐ وﻗﻤﺎ ﺑﺎﻻﺳﺘﻌﻼم ﻓﻲ ﺟﺪولplayer ﻻﺣﻆ ان اﻟﻤﺪﺧﻼت ﺗﻤﺖ ﻋﻠﻰ ﺟﺪول
. ﺳﻮف ﺗﺠﺪ اﻧﻪ اﺿﺎف رﻗﻢ اﻟﻼﻋﺐ هﻨﺎكlarg_player
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 145 http://www.boosla.com
اﻟﺘﺠﻤﻴﻌﺎت
اﻧﻮاع اﻟﺘﺠﻤﻴﻌﺎت ﻓﻲ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت:
اﻟﺘﺠﻤﻴﻌﺔ هﻲ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻌﻨﺎﺻﺮ ﻣﻦ ﻧﻔﺲ اﻟﻨﻮع
• اﻟﺘﺠﻤﻴﻌﺔ varray
وهﻲ آﻤﺼﻔﻮﻓﺔ ﻣﺘﻐﻴﺮة وﻣﺸﺎﺑﻬﺔ ﻟﻠﻤﺼﻔﻮﻓﺎت ﻓﻲ اي ﻟﻐﺔ ﻣﻦ ﻟﻐﺎت اﻟﺒﺮﻣﺠﺔ ﻣﺜﻞ cو c++وﺗﺘﻢ
اﻻﺷﺎرة اﻟﻰ اي ﻋﻨﺼﺮ ﻓﻲ هﺬﻩ اﻟﺘﺠﻤﻴﻌﺔ ﺑﺎﺳﺘﺨﺪام اﻻرﻗﺎم اﻟﺴﻔﻠﻴﺔ وﻳﺘﻢ اﻟﺘﺨﺰﻳﻦ ﻓﻲ هﺬﻩ
اﻟﺘﺠﻤﻴﻌﺔ ﺑﺼﻮرة ﺧﻄﻴﺔ inline
ﺗﻌﺘﺒﺮ آﺠﺪول ﻣﻮﺟﻮد ﻓﻲ ﻗﺎﻋﺔ اﻟﺒﻴﺎﻧﺎت واﻻﺷﺎرة اﻟﻰ اي ﻋﻨﺼﺮ ﻓﻲ هﺬﻩ اﻟﺘﺠﻤﻴﻌﺔ اﻳﻀﺎ
ﺑﺎﺳﺘﺨﺪام اﻻرﻗﺎم اﻟﺴﻔﻠﻴﺔ وﻳﺘﻢ ﺗﺨﺰﻳﻦ اﻟﺒﻴﺎﻧﺎت ﻓﻲ ﺟﺪول ﺗﺨﺰﻳﻦ ﻣﻨﻔﺼﻞ.
ﻣﺜﺎل /ﻧﻔﺮض اﻧﻚ ﺗﺮﻳﺪ اﻧﺸﺎء ﺟﺪول اﻻﻗﺴﺎم ﻓﻲ ﻣﺴﺘﺸﻔﻰ واﻟﺬي ﺳﻮف ﻳﺤﺘﻮي ﻋﻠﻰ رﻗﻢ اﻟﻘﺴﻢ
,اﺳﻢ اﻟﻘﺴﻢ ,واﺳﻢ اﻟﻘﺴﻢ ,وﻣﻦ ﺛﻢ اﺳﻤﺎء ﻣﻮﻇﻔﻴﻦ اﻟﻘﺴﻢ .ﻣﻊ اﻟﻌﻠﻢ ان اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﺳﻮف
ﺗﻜﻮن ﻓﻲ ﺗﺠﻤﻴﻌﺔ. varray
/
-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وهﻮ ﻣﻦ
ﻳﺴﺘﺨﺪم آﻌﺪاد.
ﻳﻘﻮم هﻨﺎ ﺑﺎﺳﺘﺨﺮاج اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﻟﻠﻘﺴﻢ 10وﺗﺨﺰﻳﻦ ﻧﺎﺗﺞ اﻻﺳﺘﻌﻼم ﻓﻲ اﻟﻤﺘﻐﻴﺮ
editnameواﻟﺬي هﻮ ﻣﻦ ﻧﻔﺲ ﻧﻮع اﻟﺘﺠﻤﻴﻌﺔ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 147 http://www.boosla.com
ﺛﻢ ﻳﺒﺪأ ﺣﻠﻘﺔ وﻣﻦ ﺛﻢ ﻳﺨﺘﺒﺮ هﻞ Iوﺻﻠﺖ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ اذا آﺎن ﻧﻌﻢ ﻗﺎم ﺑﺎﻧﻬﺎء اﻻﺟﺮاء
واذا ﻟﻢ ﻳﺼﻞ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ ﻳﺨﺘﺒﺮ ﻋﻨﺼﺮ اﻟﺘﺠﻤﻴﻌﺔ اﻟﺤﺎﻟﻲ هﻞ هﻮ ﻳﺴﺎوي samiام ﻻ
اذا آﺎن ﻳﺴﺎوي samiﻳﻘﻮم ﺑﺘﻐﻴﺮ هﺬﻩ اﻟﻘﻴﻤﺔ اﻟﻰ mohammedوﻣﻦ ﺛﻢ ﻳﺰﻳﺪ اﻟﻌﺪاد ﺑﻮاﺣﺪ
وﻣﻦ ﺛﻢ ﻳﻌﻮد ﻣﻦ ﺟﺪﻳﺪ اﻟﻰ ان ﻳﺼﻞ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ وﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ﺟﻤﻴﻊ اﻟﻌﻨﺎﺻﺮ ﻳﻘﻮم
ﺑﻌﻤﻞ اﻟﺘﺤﺪﻳﺚ ﻟﻠﺠﺪول
ﻣﺜﺎل:
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
/
أﻟﻢ ﻳﺘﺒﺎدر اﻟﻰ ذهﻨﻚ آﻴﻒ ﻧﻀﻴﻒ ﻣﺰﻳﺪا ﻣﻦ اﻟﻤﻮﻇﻔﻴﻦ اﻟﻰ اﻟﻘﺴﻢ 10ﻳﻤﻜﻦ ان ﺗﻘﻮل ﻧﺴﺘﺨﺪم اﻻﻣﺮ
insertﻟﻜﻦ هﺬا ﻏﻴﺮ ﺻﺤﻴﺢ ﻻﻧﻨﺎ ﻋﻨﺪﻣﺎ ﻧﺴﺘﺨﺪم اﻻﻣﺮ insertوﻧﺪﺧﻞ رﻗﻢ اﻟﻘﺴﻢ 10ﻳﻈﻬﺮ ﻟﻨﺎ
ﺧﻄﺎء ﻻن ﺣﻘﻞ رﻗﻢ اﻟﻘﺴﻢ ﻣﻔﺘﺎح رﺋﺴﻲ
ﻟﺬﻟﻚ اذا اردﻧﺎ اﺿﺎﻓﺔ اﻟﻤﺰﻳﺪ ﻣﻦ اﻟﻤﻮﻇﻔﻴﻦ اوﻻ ﻧﻘﻮم ﺑﻌﻤﻞ ﺗﻮﺳﻊ extendﻟﻠﺘﺠﻤﻴﻌﺔ ﻟﻜﻲ ﺗﺴﻤﺢ
ﻟﻨﺎ ﺑﺎﺿﺎﻓﺔ ﻋﻨﺼﺮ ﺟﺪﻳﺪ .وﻧﺴﺘﺨﺪم اﻻﺟﺮاء ﻟﺬﻟﻚ
Declare
;Newname namev
Begin
148 http://www.boosla.com ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
: ﻣﺜﺎل ذﻟﻚ
ﻟﻮ اردﻧﺎ اﻧﺸﺎء ﺟﺪول ﻳﺤﺘﻮي ﻋﻠﻰ ﻣﺴﻤﻰ اﻟﻮﻇﻴﻔﺔ وﻓﻲ ﺣﻘﻞ اﺧﺮ ﻧﻜّﻮن ﺗﺠﻤﻴﻌﺔ ﺗﺤﺘﻮي ﻋﻠﻰ
اﺳﻢ اﻟﻤﻮﻇﻒ وراﺗﺒﺔ ﻟﺠﻤﻴﻊ ﻣﻮﻇﻔﻴﻦ هﺬﻩ اﻟﻮﻇﻴﻔﺔ
JOB_NAME EMPLOYEE
manager (ali,5000),(sami,6000),(fahad,4000)
Analysis (laui,7500),(mohammed,7500)
Programming (fady,8000),(saed,6000)
اﻟﺬي اﻧﺸﺌﻨﺎﻩ وﻟﺬﻟﻚ ﺳﻤﻲ هﺬا اﻟﻨﻮع ﺑﻬﺬا اﻻﺳﻢobject ﻻﺣﻆ اﻟﻔﺮق اﻧﻨﺎ اﺳﺘﺨﺪﻣﻨﺎ
وﺑﻌﺪ اﻧﺸﺎء اﻟﺠﺪول ﺳﻮف ﻧﺘﻌﺮف اﻻن ﻋﻠﻰ آﻴﻔﻴﺔ اﻟﺘﻌﺎﻣﻞ ﻣﻊ هﺬا اﻟﺠﺪول ﻣﻦ ﺧﻼل * sql
plus
-1اﻻﺿﺎﻓﺔ :
( ('manager',employeeobj
empobj('ali',5000),
empobj('sami',6000),
;)))empobj('fahad',4000
JOB_NAME
---------------------------------------------------
)EMPLOYEEobj(NAMEEMP, SALARY
-------------------------------------------------------------
manager
-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';
ﻣﻦ اﻟﻨﻮع اﻟﺒﺴﻴﻂ واﻟﺘﻲ ﻧﻘﻮم ﺑﺘﻌﺮﻳﻔﻬﺎ ﺑﻮاﺳﻄﺔ اﺣﺪvarray ﺗﻌﺘﺒﺮ هﺬﻩ اﻟﺘﺠﻤﻴﻌﺔ ﻧﻔﺲ اﻟﺘﺠﻤﻴﻌﺔ
وﺳﻮف ﻧﺴﺘﺨﺪم هﻨﺎ ﻧﻔﺲ اﻟﻤﺜﺎل اﻟﺬيvarchar2 وnumber اﻧﻮاع اﻟﺒﻴﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻣﺜﻞ
. ﻣﻦ اﻟﻨﻮع اﻟﺸﻴﺊvarray اﺳﺘﺨﺪﻣﻨﺎﻩ ﻓﻲ اﻟﺘﺠﻤﻴﻌﺔ
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 151 http://www.boosla.com
ﻣﺜﺎل /ﻧﻔﺮض اﻧﻚ ﺗﺮﻳﺪ اﻧﺸﺎء ﺟﺪول اﻻﻗﺴﺎم ﻓﻲ ﻣﺴﺘﺸﻔﻰ واﻟﺬي ﺳﻮف ﻳﺤﺘﻮي ﻋﻠﻰ رﻗﻢ اﻟﻘﺴﻢ ,
اﺳﻢ اﻟﻘﺴﻢ ,واﺳﻢ اﻟﻘﺴﻢ ,وﻣﻦ ﺛﻢ اﺳﻤﺎء ﻣﻮﻇﻔﻴﻦ اﻟﻘﺴﻢ .ﻣﻊ اﻟﻌﻠﻢ ان اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﺳﻮف ﺗﻜﻮن
ﻓﻲ ﺗﺠﻤﻴﻌﺔnested table
/
ﻓﻴﺠﺐ داﺋﻢ وﺿﻌﻪ اذا اﺳﺘﺨﺪﻣﻨﺎ nested tableﻣﻊ ﺗﻐﻴﺮ اﻟﻤﻜﺘﻮب ﺑﺎﻟﻠﻮن اﻻﺣﻤﺮ واﻟﺬي ﻳﻤﺜﻞ
اﺳﻢ اﻟﺤﻘﻞ اﻟﺬي هﻮ ﻣﻦ اﻟﻨﻮع .nested table
-1اﻻﺿﺎﻓﺔ :
-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وهﻮ ﻳﺴﺘﺨﺪم
آﻌﺪاد.
ﻳﻘﻮم هﻨﺎ ﺑﺎﺳﺘﺨﺮاج اﺳﻤﺎء اﻟﻤﻮﻇﻔﻴﻦ ﻟﻠﻘﺴﻢ 1وﺗﺨﺰﻳﻦ ﻧﺎﺗﺞ اﻻﺳﺘﻌﻼم ﻓﻲ اﻟﻤﺘﻐﻴﺮ editname
واﻟﺬي هﻮ ﻣﻦ ﻧﻔﺲ ﻧﻮع اﻟﺘﺠﻤﻴﻌﺔ
ﺛﻢ ﻳﺒﺪأ ﺣﻠﻘﺔ وﻣﻦ ﺛﻢ ﻳﺨﺘﺒﺮ هﻞ Iوﺻﻠﺖ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ اذا آﺎن ﻧﻌﻢ ﻗﺎم ﺑﺎﻧﻬﺎء اﻻﺟﺮاء
واذا ﻟﻢ ﻳﺼﻞ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ ﻳﺨﺘﺒﺮ ﻋﻨﺼﺮ اﻟﺘﺠﻤﻴﻌﺔ اﻟﺤﺎﻟﻲ هﻞ هﻮ ﻳﺴﺎوي samiام ﻻ
اذا آﺎن ﻳﺴﺎوي samiﻳﻘﻮم ﺑﺘﻐﻴﺮ هﺬﻩ اﻟﻘﻴﻤﺔ اﻟﻰ mohammedوﻣﻦ ﺛﻢ ﻳﺰﻳﺪ اﻟﻌﺪاد ﺑﻮاﺣﺪ
وﻣﻦ ﺛﻢ ﻳﻌﻮد ﻣﻦ ﺟﺪﻳﺪ اﻟﻰ ان ﻳﺼﻞ اﻟﻰ ﻧﻬﺎﻳﺔ اﻟﺘﺠﻤﻴﻌﺔ وﺑﻌﺪ اﻻﻧﺘﻬﺎء ﻣﻦ ﺟﻤﻴﻊ اﻟﻌﻨﺎﺻﺮ ﻳﻘﻮم
ﺑﻌﻤﻞ اﻟﺘﺤﺪﻳﺚ ﻟﻠﺠﺪول
اذا اردﻧﺎ اﺿﺎﻓﺔ اﻟﻤﺰﻳﺪ ﻣﻦ اﻟﻤﻮﻇﻔﻴﻦ اوﻻ ﻧﻘﻮم ﺑﻌﻤﻞ ﺗﻮﺳﻊ 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
/
ﺳﻮف ﻧﺴﺘﺨﺪم ﻟﺸﺮح هﺬا اﻟﻤﺜﺎل ﻧﻔﺲ اﻟﻤﺜﺎل اﻟﺬي اﺳﺘﺨﺪﻣﻨﺎﻩ ﻓﻲ varrayﻣﻦ اﻟﻨﻮع object
ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ 155 http://www.boosla.com
ﻟﻮ اردﻧﺎ اﻧﺸﺎء ﺟﺪول ﻳﺤﺘﻮي ﻋﻠﻰ ﻣﺴﻤﻰ اﻟﻮﻇﻴﻔﺔ وﻓﻲ ﺣﻘﻞ اﺧﺮ ﻧﻜّﻮن ﺗﺠﻤﻴﻌﺔ ﺗﺤﺘﻮي ﻋﻠﻰ
اﺳﻤﺎء اﻟﻤﻮﻇﻒ وراﺗﺒﺔ ﻟﺠﻤﻴﻊ ﻣﻮﻇﻔﻴﻦ هﺬﻩ اﻟﻮﻇﻴﻔﺔ
اول ﺧﻄﻮة هﻲ اﻧﺸﺎء اﻟﺸﻲء empobjواﻟﺬي ﺗﻢ اﻧﺸﺎءﻩ ﺳﺎﺑﻖ ﻋﻨﺪﻣﺎ ﻗﻤﻨﺎ ﺑﺸﺮح vaaray
ﻣﻦ اﻟﻨﻮع اﻟﺸﻲء واذا آﻨﺖ ﻟﻢ ﺗﻘﻢ ﺑﺎﻧﺸﺎءﻩ ﻓﻬﺬا اﻟﻜﻮد :
/
: اﻻﺿﺎﻓﺔ-1
: اﻟﺘﺤﺪﻳﺚ -1
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 ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
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 ﺗﻢ ﺗﺤﻤﻴﻞ هﺬا اﻟﻜﺘﺎب ﻣﻦ ﻣﻮﻗﻊ اﻟﺒﻮﺻﻠﺔ اﻟﺘﻘﻨﻴﺔ
اﻟﻤﺮاﺟﻊ