Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

‫اﻟﻔﺼﻞ اﻟﺤﺎدى ﻋﺸﺮ‬

‫‪Creating Views‬‬
‫إﻧﺸﺎء ) ‪(Views‬‬

‫اﻷهﺪاف‬
‫ﺑﻌﺪ إآﻤﺎل هﺬا اﻟﺪرس ‪ ،‬ﻳﺠﺐ أن ﺗﻜﻮن ﻗﺎدر إن ﺷﺎء اﷲ ﻋﻠﻲ ﻋﻤﻞ اﻟﺘﺎﻟﻲ ‪:‬‬
‫‪ -‬اﻣﻜﺎﻧﻴﺔ ﺗﻌﺮﻳﻒ) ‪.( view‬‬
‫‪ -‬اﻟﻘﺪرة ﻋﻠﻰ إﻧﺸﺎء وﺗﻌﺪﻳﻞ )‪. (View‬‬
‫‪ -‬اﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت ﻣﻦ ال )‪.(View‬‬
‫‪ -‬إدﺧﺎل وﺣﺬف وﺗﻌﺪﻳﻞ اﻟﺒﻴﺎﻧﺎت ﻓﻰ )‪.(View‬‬
‫‪ -‬اﻣﻜﺎﻧﻴﺔ اﺳﺘﺨﺪام )‪.(Inline View‬‬
‫‪ -‬اﻣﻜﺎﻧﻴﺔ اﺳﺘﺨﺪام ) ‪.( TOP-N‬‬

‫‪Data Base Object‬‬


‫اﻟﻮﺻﻒ‬ ‫‪OBJECT‬‬
‫هﻮ وﺣﺪة أﺳﺎﺳﻴﺔ ﻟﺘﺨﺰﻳﻦ اﻟﺒﻴﺎﻧﺎت‪ ،‬ﻣﻜﻮن ﻣﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ‬ ‫)‪(Table‬‬
‫اﻟﺼﻔﻮف واﻷﻋﻤﺪة‪.‬‬
‫ﻣﺠﻤﻮﻋﺔ ﻓﺮﻋﻴﺔ ﻟﻠﺒﻴﺎﻧﺎت ﻣﻦ ﺟﺪول واﺣﺪ أو أآﺜﺮ ﻣﻦ ﺟﺪول‪.‬‬ ‫)‪(View‬‬
‫ﺑﻤﻌﻨﻰ ﻋﺪاد ﻳﻤﻜﻦ اﺳﺘﺨﺪاﻣﺔ ﻓﻰ ﻋﻤﻮد ‪Primary Key‬‬ ‫)‪(Sequence‬‬
‫ﻳﺤﺴﻦ اﻷداء ﻓﻰ ﺑﻌﺾ اﻻﺳﺘﻌﻼﻣﺎت ‪.‬‬ ‫)‪(Index‬‬
‫)‪ (Synonym‬أﺳﻢ ﺑﺪﻳﻞ ﻟﻞ ‪. Object‬‬

‫‪ View‬هــﻰ ﻋﺒــﺎرة ﻋــﻦ ﻧﺎﻓــﺬة ﺗﻄــﻞ ﻋﻠــﻲ ﺟــﺰء ﻣﺤــﺪد ﻣــﻦ اﻟﺠــﺪول دون ﺑﻘﻴــﺔ ﺑﻴﺎﻧــﺎت‬
‫اﻟﺠﺪول‪ View ) .‬ﻓﻰ اﻟﺮﺳﻤﺔ اﻟﺴﺎﺑﻘﺔ هﻲ اﻟﺒﺎرزة ﻣﻦ اﻟﺠﺪول(‪.‬‬
‫ﺣﻴــﺚ ﺗــﺴﻤﺢ ﺑﺎﺳــﺘﺮﺟﺎع ﺟــﺰء ﻣﻌــﻴﻦ ﻣــﻦ اﻟﺠــﺪول ﻳــﺘﻢ ﺗﺤﺪﻳــﺪﻩ ﻋﻨــﺪ إﻧــﺸﺎء ‪View‬‬
‫وﺗﺴﺘﺨﺪم‬
‫ﻟﻜﻲ ﻳﺘﻢ ﻣﻨﻊ ﺑﻌﺾ اﻟﻤﺴﺘﺨﺪﻣﻴﻦ ﻣﻦ اﻟﺘﻌﺮف ﻋﻠﻲ آﻞ ﺑﻴﺎﻧﺎت اﻟﺠﺪول‪.‬‬
‫آﻤﺎ ﺗﺴﺘﺨﺪم ﻟﻌﻤﻞ ‪ View‬ﻣﻦ أآﺜﺮ ﻣﻦ ﺟﺪول ﻳﺘﻢ اﺳـﺘﺨﺪاﻣﻬﺎ ﻟﺘـﺴﻬﻴﻞ اﻻﺳـﺘﻌﻼﻣﺎت‬
‫اﻟﻤﻌﻘﺪة‪.‬‬
‫هﻨﺎك ﻧﻮﻋﺎن ﻣﻦ ‪: View‬‬

‫‪Simple Views and Complex Views‬‬


‫‪Complex View‬‬ ‫‪Simple View‬‬ ‫اﻟﻤﻴﺰة‬
‫واﺣﺪ أو أآﺜﺮ ﻣﻦ واﺣﺪ‬ ‫واﺣﺪ‬ ‫ﻋﺪد اﻟﺠﺪوال‬
‫ﻧﻌﻢ‬ ‫ﻻ‬ ‫ﻳﺤﺘﻮي ﻋﻠﻲ ‪Function‬‬
‫ﻳﺤﺘﻮي ﻋﻠﻲ ﺗﺠﻤﻴﻊ‬
‫ﻧﻌﻢ‬ ‫ﻻ‬ ‫ﺑﻴﺎﻧﺎت ﻣﺜﻞ‬
‫اﺳﺘﺨﺪام)…‪(Sum,Avg,‬‬
‫ﻟﻴﺲ داﺋﻤﺎ‬ ‫ﻣﻤﻜﻦ‬ ‫ﻋﻤﻠﻴﺎت ‪DML‬‬

‫اﻻﺧﺘﻼف اﻷﺳﺎﺳﻲ ﺑﻴﻨﻬﻢ ﻣﺮﺗﺒﻂ ﺑﻌﻤﻠﻴﺎت ‪( INSERT , UPDATE, DELETE ) DML‬‬

‫*‪: Simple View‬‬


‫• ﺗﺎﺧﺬ اﻟﺒﻴﺎﻧﺎت ﻣﻦ ﺟﺪول واﺣﺪ ﻓﻘﻂ‪.‬‬
‫• ﻻ ﺗﺤﺘﻮي ﻋﻠﻲ ‪ function‬أو ﻓﻘﺮة ‪. Group by‬‬
‫• ﻳﻤﻜﻦ أن ﻳﺆدي ﺑﻬﺎ ﻋﻤﻠﻴﺎت ‪. DML‬‬

‫*‪: Complex View‬‬


‫• ﺗﺎﺧﺬ اﻟﺒﻴﺎﻧﺎت ﻣﻦ اآﺜﺮ ﻣﻦ ﺟﺪول‪.‬‬
‫• ﺗﺤﺘﻮي ﻋﻠﻲ ‪ function‬أو ﻓﻘﺮة ‪.Group by‬‬
‫• ﻋﺎدة ﻻ ﺗﺴﻤﺢ ﺑﻌﻤﻠﻴﺎت ‪. DML‬‬

‫اﻧﺸﺎء ‪View‬‬

‫اﻟﺸﻜﻞ اﻻﺳﺎﺳﻰ ﻻﻧﺸﺎء ‪: View‬‬

‫‪ : Replace‬ﺗﻘﻮم ﺑﺎﻧﺸﺎء ‪ View‬ﺣﺘﻰ اذا آﺎﻧﺖ ﻣﻮﺟﻮدة ﻣﻦ ﻗﺒﻞ ﻓﻰ ﻗﺎﻋﺪة‬


‫اﻟﺒﻴﺎﻧﺎت‪.‬وﺗﺴﺘﺨﺪم ﻟﺘﻌﺪﻳﻞ ‪ View‬اﻟﻘﺪﻳﻤﺔ ﺑﺪون اﻟﺤﺎﺟﺔ اﻟﻰ ازاﻟﺘﻬﺎ‬
‫ﺛﻢ اﻧﺸﺎﺋﻬﺎ ﻣﻦ ﺟﺪﻳﺪ‪.‬‬
‫‪ :‬ﺗﺴﺘﺨﺪم ﻻﻧﺸﺎء ‪ View‬ﻟﻴﺴﺖ ﻗﺎﺋﻤﺔ ﻋﻠﻰ ﺟﺪول ﻣﻮﺟﻮد ﻓﻰ ﻗﺎﻋﺪة‬ ‫‪Force‬‬
‫اﻟﺒﻴﺎﻧﺎت‪.‬‬
‫‪ : Noforce‬ﻳﻨﺸﺊ ‪ View‬ﻓﻘﻂ إذا آﺎن اﻟﺠﺪول ﻣﻮﺟﻮد ﻓﻰ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت‪.‬‬
‫) وهﺬا هﻮ اﻻﺧﺘﻴﺎر اﻻﻓﺘﺮاﺿﻰ ﻟﻠﻮراآﻞ ‪.( Default‬‬
‫‪ :‬اﺳﻢ ‪. View‬‬ ‫‪View‬‬
‫‪ :‬ﻻﻣﻜﺎﻧﻴﺔ ﺗﺤﺪﻳﺪ اﺳﻤﺎء اﻻﻋﻤﺪة ﻓﻰ ‪. View‬‬ ‫‪Alias‬‬
‫‪ :SubQuery‬هﻰ اﻟﺘﻰ ﺗﻘﻮم ﺑﺘﺤﺪﻳﺪ اﻻﻋﻤﺪة ﺑﺪاﺧﻞ ‪. View‬‬
‫‪ :With check Option‬ﺗﺴﺘﺨﺪم آﻘﻴﺪ ﻋﻠﻰ ﻋﻤﻮد ﻣﻌﻴﻦ ﻓﻰ ‪. View‬‬
‫‪ :Constraint‬أﺳﻢ ‪. Constraint‬‬
‫‪ :With Read Only‬ﺗﺴﺘﺨﺪم آﻘﻴﺪ ﻋﻨﺪ اﻟﺮﻏﺒﺔ ﻓﻰ ﻋﺪم اﺟﺮاء اى ‪ DML‬ﻋﻠﻰ ‪. VIEW‬‬
‫ﻳﺘﻢ اﻧﺸﺎء ‪ view‬ﺑﺎﺳﺘﺨﺪام الأﻣﺮ ‪ CREATE VIEW‬ﻳﻠﻴﻪ أﺳﻢ ‪ View‬اﻟﻤﺮاد إﻧﺸﺎﺋﻬﺎ‪,‬‬
‫ﺛﻢ ﻳﺘﻢ ﺗﺤﺪﻳﺪ اﻷﻋﻤﺪة اﻟﺨﺎﺻﺔ ﺑﺎل ‪ View‬ﺑﺎﺳﺘﺨﺪام ‪. subquery‬‬
‫اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻳﻤﻜﻦ أن ﻳﺤﺘﻮي ﻋﻠﻲ ﺟﻤﻠﺔ ‪ SELECT‬ﻣﻌﻘﺪة اﻟﺘﺮآﻴﺐ‪.‬‬
‫ﻣﺜﺎل‪:‬‬

‫وﻟﻮﺻﻒ ال ‪ View‬ﻳﺘﻢ اﺳﺘﺨﺪام اﻷﻣﺮ ‪ DESCRIBE‬او ‪. Desc‬‬

‫ﻓﺎﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻳﺤﺘﻮي ﻋﻠﻲ رﻗﻢ اﻟﻤﻮﻇﻒ ‪ ،‬اﻻﺳﻢ ‪ ،‬اﻟﻤﺮﺗﺐ ‪ ،‬ﻟﻜﻞ‬


‫اﻟﻤﻮﻇﻔﻴﻦ ﻓﻲ اﻟﻘﺴﻢ رﻗﻢ ‪.80‬‬
‫وﻟﻜﻰ ﺗﺘﻤﻜﻦ ﻣﻦ وﺻﻒ ال ‪ View‬ﻳﺘﻢ ذﻟﻚ ﺑﺎﺳﺘﺨﺪام اﻷﻣﺮ ‪ DESCRIBE‬او ‪. Desc‬‬

‫;‪Describe empvu80‬‬

‫ﻣﻼﺣﻈﺎت‪:‬‬
‫• اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ﻳﻤﻜﻦ أن ﻳﺤﺘﻮي ﻋﻠﻲ ﺟﻤﻠﺔ ‪ SELECT‬ﻣﻌﻘﺪة وﻳﻤﻜﻦ ان‬
‫ﺗﺘﻀﻤﻦ رﺑﻂ ﺑﻴﻦ ﺟﺪوﻟﻴﻦ او اﺳﺘﺨﺪام ‪. Group Function‬‬
‫• اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ‪ SubQuery‬ﻻ ﻳﻤﻜﻦ أن ﻳﺤﺘﻮي ﻋﻠﻲ ﻓﻘﺮة ‪ORDER BY‬‬
‫اﻻ ﻓﻰ ﺣﺎﻟﺔ واﺣﺪة وهﻰ ‪. TOP_TEN‬‬
‫• إذا ﻟﻢ ﺗﺤﺪد أﺳﻢ ‪ Constraint‬ﻟﻞ‪ View‬ﻣﻊ ‪ ، WITH CHECK OPTION‬ﻳﻘﻮم‬
‫اﻻوراآﻞ ﺑﺎﻋﻄﺎﺋﺔ اﺳﻢ اﻓﺘﺮاﺿﻰ ﺑﺼﻴﻐﺔ ‪.sys-cn‬‬
‫• ﻳﻤﻜﻨﻚ اﺳﺘﺨﺪام ﻓﻘﺮة ‪ OR REPLACE‬آﻲ ﻳﺘﻢ ﺗﻐﻴﻴﺮال ‪ View‬ﺑﺪون ﺣﺬﻓﻬﺎ‪،‬‬
‫وﺑﻬﺬة اﻟﻔﻘﺮة ﻳﺘﻢ إﻋﺎدة إﻧﺸﺎء ال ‪. View‬‬

‫إﻧﺸﺎء ال‪ View‬ﺑﺎﺳﺘﺨﺪام اﺳﻢ اﻟﻌﻤﻮد اﻟﻤﺴﺘﻌﺎر‬


‫وهﻨﺎك ﻃﺮﻳﻘﺘﺎن ﻟﺬﻟﻚ‬
‫ﻣﺜﺎل ﻋﻠﻰ اﻟﻄﺮﻳﻘﺔ اﻻوﻟﻰ‪:‬‬

‫وﻓﻰ هﺬة اﻟﻄﺮﻳﻘﺔ ﻧﻘﻮم ﺑﺎﻋﻄﺎء اﻻﺳﻢ اﻟﻤﺴﺘﻌﺎر ) ‪ ( Alias‬آﻤﺎ ﺗﻌﻠﻤﻨﺎ ﻣﻦ‬
‫ﻗﺒﻞ وذﻟﻚ ﻋﻦ ﻃﺮﻳﻖ آﺘﺎﺑﺔ اﻻﺳﻢ اﻟﻤﺴﺘﻌﺎر ﺑﻌﺪ اﺳﻢ اﻟﻌﻤﻮد ‪.‬‬
‫اﻟﻤﺜﺎل ﻳﺤﺘﻮي ﻋﻠﻲ رﻗﻢ اﻟﻤﻮﻇﻒ )‪ (EMPLOYEE_ID‬ﺑﺎﺳﻢ ﻣﺴﺘﻌﺎر ‪، ID_NUMBER‬‬
‫اﻻﺳﻢ )‪ (LAST_NAME‬ﺑﺎﺳﻢ ﻣﺴﺘﻌﺎر ‪ ، NAME‬واﻟﺮاﺗﺐ اﻟﺴﻨﻮي )‪ (SALARY‬ﺑﺎﺳﻢ‬
‫ﻣﺴﺘﻌﺎر ‪. ANN_SALARY‬‬
‫ﻣﺜﺎل ﻋﻠﻰ اﻟﻄﺮﻳﻘﺔ اﻟﺜﺎﻧﻴﺔ‪:‬‬

‫ﻓﻰ اﻟﻄﺮﻳﻘﺔ اﻟﺜﺎﻧﻴﺔ ﻳﻤﻜﻨﻚ اﺳﺘﺨﺪام اﻻﺳﻢ اﻟﻤﺴﺘﻌﺎر ﺑﻌﺪ أﻣﺮ ‪ CREATE‬وﻗﺒﻞ‬
‫اﻻﺳﺘﻌﻼم اﻟﻔﺮﻋﻲ ‪. SubQuery‬وﻻﺣﻆ ان ﻋﺪد اﻻﺳﻤﺎء اﻟﻤﺴﺘﻌﺎرة ﻻﺑﺪ ان ﻳﻜﻮن‬
‫ﻣﺴﺎوى ﻟﻌﺪد اﻻﻋﻤﺪة ﻓﻰ ‪. SubQuery‬‬

‫آﻴﻔﻴﺔ اﺳﺘﺨﻼص اﻟﺒﻴﺎﻧﺎت ﻣﻦ ال‪View‬‬

‫ﻻﺳﺘﺮﺟﺎع اﻟﺒﻴﺎﻧﺎت اﻟﻤﻮﺟﻮدة ﻓﻲ ‪ View‬ﺳﻮف ﻧﺴﺘﺨﺪم أﻣﺮ ‪ SELECT‬آﻤﺎ ﻳﻤﻜﻦ‬


‫أن ﻧﺴﺘﺨﺪم ﺟﻤﻴﻊ أواﻣﺮ ‪ DML‬ﻣﻊ ) ‪ ( Simple VIEW‬ﺣﻴﺚ ﻳﻤﻜﻦ إدﺧﺎل أو ﺣﺬف‬
‫أو ﺗﻌﺪﻳﻞ ﺑﻴﺎﻧﺎت ﻓﻲ اﻟﺠﺪول اﻟﺮﺋﻴﺴﻲ اﻟﺘﻲ ﺗﻢ ﺑﻨﺎء ال ‪ View‬ﻋﻠﻴﻪ‪.‬‬
‫اﻟﺮﺳﻢ اﻟﺴﺎﺑﻖ ﻳﻮﺿﺢ آﻴﻔﻴﺔ ﺗﻌﺎﻣﻞ اﻻوراآﻞ ﻣﻊ اﻻﺳﺘﻌﻼم اﻟﺨﺎص ﺑﺎل‪. View‬‬
‫ﻳﺘﻢ اﺳﺘﺮﺟﺎع اﺳﻢ وﻣﻜﻮﻧﺎت ال ‪ View‬ﻣﻦ ﺟﺪول ‪. USER_VIEWS‬‬

‫‪Modifying a View‬‬
‫ﺗﻌﺪﻳﻞ ال‪View‬‬

‫* ﻳﻤﻜﻦ ﺗﻌﺪﻳﻞ اﻻﻋﻤﺪة ﺑﺎل ‪ View‬ﺑﺎﺳﺘﺨﺪام اﻟﻔﻘﺮة ‪. Create or Replace View‬‬


‫ﻣﺜﺎل‪:‬‬

‫ﻣﻊ اﻟﻔﻘﺮة ‪ OR REPLACE‬ﻳﺘﻢ اﻧﺸﺎء ال ‪ View‬ﺣﺘﻰ إذا آﺎﻧﺖ ﻣﻮﺟﻮدة‪.‬وﺑﺬﻟﻚ ﻳﺘﻢ‬ ‫•‬
‫ﺗﺒﺪﻳﻞ ال ‪ View‬اﻟﻘﺪﻳﻤﺔ ﺑﺎﻟﺠﺪﻳﺪة‪ .‬وهﺬا ﻳﻌﻨﻲ اﻣﻜﺎﻧﻴﺔ ﺗﻌﺪﻳﻞ ‪ View‬ﺑﺪون ﺣﺬﻓﻬﺎ‬
‫ﺛﻢ اﻧﺸﺎﺋﻬﺎ ﻣﻦ ﺟﺪﻳﺪ ‪.‬‬

‫ﻣﻠﺤﻮﻇﺔ ‪:‬‬
‫ﻋﻨﺪ ﺗﺨﺼﻴﺺ اﻷﺳﻤﺎء اﻟﻤﺴﺘﻌﺎرة ﻓﻲ ﻓﻘﺮة ‪ CREATE VIEW‬ﺗﺬآﺮ أن‬
‫اﻷﺳﻤﺎء اﻟﻤﺴﺘﻌﺎرة ﺗﻜﻮن ﺑﻨﻔﺲ اﻟﻌﺪد واﻟﺘﺮﺗﻴﺐ ﻓﻲ ‪. SubQuery‬‬

‫‪Complex View‬‬
‫إﻧﺸﺎء ‪ View‬ﻣﻌﻘﺪة‬
‫ﻣﺜﺎل‪:‬‬

‫ﻳﻘﻮم اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﺑﺎﻧﺸﺎء ‪ View‬ﺗﺤﺘﻮى ﻋﻠﻰ آﻼ ﻣﻦ اﺳﻢ اﻻدارة ﻣﻦ ﺟﺪول‬


‫اﻻﻗﺴﺎم وأﻗﻞ وأآﺒﺮ ﻣﺮﺗﺐ واﻟﻤﺘﻮﺳﻂ اﻟﺤﺴﺎﺑﻰ ﻟﻠﻤﺮﺗﺒﺎت وذﻟﻚ ﻣﻦ ﺟﺪول‬
‫اﻟﻤﻮﻇﻔﻴﻦ‪.‬وﺗﻢ اﻋﻄﺎء اﺳﻤﺎء ﻣﺴﺘﻌﺎرة ﻟﺘﻠﻚ اﻻﻋﻤﺪة‪.‬‬

‫ﻻﺣﻆ ان ‪ SubQuery‬ﺗﺤﺘﻮى ﻋﻠﻰ‪:‬‬


‫‪-2‬اﺳﺘﺨﺪام ‪. Group Function‬‬ ‫‪-1‬رﺑﻂ ﺑﻴﻦ ﺟﺪوﻟﻴﻦ‪.‬‬
‫ﺷﺮوط اﻟﻘﻴﺎم ﺑﻌﻤﻠﻴﺎت ‪ DML‬ﻋﻠﻰ ‪View‬‬

‫ﻻﻳﻤﻜﻨﻚ ﺣﺬف اى ﺻﻒ ﺑﺎل ‪ View‬اذا ﺗﻀﻤﻨﺖ ال‪: View‬‬


‫‪ .1‬ﻓﻘﺮة ‪. GROUP BY‬‬
‫‪ .2‬آﻠﻤﺔ ‪.DISTINCT‬‬
‫‪ .3‬آﻠﻤﺔ ‪.ROWNUM‬‬
‫‪.Group Function .4‬‬

‫ﻻﻳﻤﻜﻨﻚ ﺗﻌﺪﻳﻞ اى ﺑﻴﺎﻧﺎت ﺑﺎل ‪ View‬اذا ﺗﻀﻤﻨﺖ ال‪: View‬‬


‫‪ .1‬ﻓﻘﺮة ‪. GROUP BY‬‬
‫‪ .2‬آﻠﻤﺔ ‪.DISTINCT‬‬
‫‪ .3‬آﻠﻤﺔ ‪.ROWNUM‬‬
‫‪. Group Function .4‬‬
‫‪ Column Expression .5‬اى ﻋﻤﻮد ﺗﻢ اﺟﺮاء ﻋﻠﻴﺔ ﻋﻤﻠﻴﺔ ﺣﺴﺎﺑﻴﺔ‬
‫ﻣﺜﻼ اﻟﻤﺮﺗﺐ اﻟﺴﻨﻮى= )‪. (Salary*12‬‬

‫ﻻﻳﻤﻜﻨﻚ اﺿﺎﻓﺔ اى ﺑﻴﺎﻧﺎت ﺑﺎل ‪ View‬اذا ﺗﻀﻤﻨﺖ ال‪: View‬‬


‫‪ .1‬ﻓﻘﺮة ‪. GROUP BY‬‬
‫‪ .2‬آﻠﻤﺔ ‪.DISTINCT‬‬
‫‪ .3‬آﻠﻤﺔ ‪.ROWNUM‬‬
‫‪. Group Function .4‬‬
‫‪. Column Expression .5‬‬
‫‪ .6‬ان ﺗﻜﻮن ال ‪ View‬ﻏﻴﺮ ﻣﺘﻀﻤﻨﺔ ﻋﻤﻮد ﺑﺎﻟﺠﺪول ﻋﻠﻴﺔ ﻗﻴﺪ ‪. Not Null‬‬

‫اﺳﺘﺨﺪام اﻟﻔﻘﺮة ‪WITH CHEK OPTION‬‬

‫ﻋﻨﺪ اﺳﺘﺨﺪام اﻟﻘﻴﺪ ‪ With Check Option‬ﻓﺄي ﻣﺤﺎوﻟﺔ ﻟﺘﻐﻴﻴﺮ رﻗﻢ اﻟﻘﺴﻢ ﻷي‬ ‫•‬
‫ﺻﻒ ﻓﻲ ال ‪ View‬ﺳﻮف ﺗﻔﺸﻞ ﻷن اﻟﻘﻴﺪ ﺳﻮف ﻳﻨﺘﻬﻚ‪.‬‬
‫واﻟﻤﺜﺎل اﻟﺘﺎﻟﻰ ﻳﺤﺎول ﺗﻐﻴﺮ رﻗﻢ اﻻدارة ﻣﻦ ‪ 20‬اﻟﻰ رﻗﻢ ‪10‬‬

‫اﻳﻘﺎف ﻋﻤﻠﻴﺎت ‪DML‬‬

‫ﻳﻤﻜﻨﻚ اﻟﺘﺄآﺪ ﻣﻦ أن ﻋﻤﻠﻴﺎت ‪ DML‬ﻟﻦ ﺗﺤﺪث وذﻟﻚ ﻋﻦ ﻃﺮﻳﻖ اﺿﺎﻓﺔ ﻓﻘﺮة‬ ‫•‬
‫‪ WITH READ ONLY‬ﻟﻞ‪. View‬‬
‫أي ﻣﺤﺎوﻟﺔ ﻻﺟﺮاء اى ﻋﻤﻠﻴﺔ ‪ DML‬ﻋﻠﻲ أي ﺻﻒ ﺑﺎل ‪ View‬ﺳﻮف ﻳﻨﺘﺞ‬ ‫•‬
‫ﻋﻨﻬﺎ ‪ Error‬وذﻟﻚ ﻋﻨﺪ اﺳﺘﺨﺪام ﻓﻘﺮة ‪. WITH READ ONLY‬‬

‫اﻟﻤﺜﺎل اﻟﺘﺎﻟﻰ ﻳﻌﺪل ‪ EMPVU10‬ﺑﺤﻴﺚ ﻳﻤﻨﻊ ﻋﻤﻠﻴﺎت ‪ DML‬ﻋﻠﻲ ال‪. View‬‬


‫إذا ﻟﻢ ﻳﻘﻢ اﻟﻤﺴﺘﺨﺪم ﺑﺎﻋﻄﺎء اﺳﻢ ﻟﻠﻘﻴﺪ ﻓﺎﻻوراآﻞ ﺳﻮف ﻳﺨﺼﺺ اﺳﻢ‬
‫ﻟﺔ ﺑﺎﻟﺼﻴﻐﺔ ‪SYS_CN‬‬

‫وﺑﺬﻟﻚ ﺗﻜﻮن ال‪ View‬اﻟﺴﺎﺑﻘﺔ ﻟﻠﻘﺮاءة ﻓﻘﻂ وﻻﻳﻤﻜﻦ اﺟﺮاء اى ﻋﻤﻠﻴﺔ‬


‫‪. (Insert , Update , Delete) DML‬‬
‫ﻓﺄي ﻣﺤﺎوﻟﺔ ﻹزاﻟﺔ ﺻﻔﻮف ﻣﻦ ال ‪ View‬ﻣﻊ ﻓﻘﺮة ‪With Read Only‬‬
‫ﺗﻜﻮن اﻟﻨﺘﻴﺠﺔ ‪. Error‬آﻤﺎ ﻓﻰ اﻟﻤﺜﺎل اﻟﺘﺎﻟﻰ‪:‬‬

‫ﺣﺬف ال‪View‬‬

‫ﻟﺤﺬف ال ‪ View‬ﻳﺘﻢ اﺳﺘﺨﺪام اﻷﻣﺮ ‪ DROP VIEW‬وﻳﻠﻴﻪ أﺳﻢ ال‪View‬‬


‫اﻟﻤﺮاد ﺣﺬﻓﻪ‪.‬وﻋﻨﺪ إزاﻟﺔ ال ‪ View‬ﻻ ﻳﺘﻢ ﻓﻘﺪ اﻟﺒﻴﺎﻧﺎت وذﻟﻚ ﻷن ال ‪View‬‬
‫ﻣﻌﺘﻤﺪة ﻋﻠﻰ ﺟﺪاول أﺳﺎﺳﻴﺔ ﻓﻲ ﻗﻮاﻋﺪ اﻟﺒﻴﺎﻧﺎت ‪.‬‬
‫ﻳﺘﻢ اﺳﺘﺨﺪام ‪ Inline View‬ﻟﺤﻞ ﺑﻌﺾ ﺟﻤﻞ ‪ Select‬اﻟﻤﻌﻘﺪة ﺟﺪا‪.‬‬
‫ﻣﺜﺎل‪:‬‬

‫ﻓﻔﻰ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﻳﺮﻳﺪ ﻋﺮض اﺳﻢ اﻟﻤﻮﻇﻒ و ﻣﺮﺗﺒﺔ و رﻗﻢ ﻗﺴﻤﺔ واﻋﻠﻰ ﻣﺮﺗﺐ‬
‫ﺑﻜﻞ ﻗﺴﻢ‪.‬‬
‫*ﻳﺘﻢ اﺳﺘﺨﻼص آﻼ ﻣﻦ اﺳﻢ اﻟﻤﻮﻇﻒ و ﻣﺮﺗﺒﺔ و رﻗﻢ اﻟﻘﺴﻢ ﻣﻦ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ‬
‫وﺗﻢ اﻋﻄﺎء ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ اﺳﻢ ﻣﺴﺘﻌﺎر ) ‪. ( a‬‬

‫*ﻳﺘﻢ اﺳﺘﺨﻼص اآﺒﺮ ﻣﺮﺗﺐ ﻓﻰ آﻞ ﻗﺴﻢ ﻣﻦ ﺟﻤﻠﺔ ‪ Select‬ﺑﺪاﺧﻞ ﻓﻘﺮة ‪From‬‬


‫ﺣﻴﺚ ان ﺟﻤﻠﺔ ‪ Select‬اﻟﺜﺎﻧﻴﺔ ﺗﺘﻴﺢ ﻟﻚ اﻟﻘﺪرة ﻋﻠﻰ اﺳﺘﺨﻼص اآﺒﺮ ﻣﺮﺗﺐ ﺑﻜﻞ ﻗﺴﻢ‪.‬‬

‫ﻻﺣﻆ ﻻﺑﺪ اﻋﻄﺎء اﺳﻢ ﻣﺴﺘﻌﺎر ﻟﺠﻤﻠﺔ ‪ Select‬اﻟﺼﻐﻴﺮة ﺣﻴﺚ ﻳﺘﻢ اﻋﺘﺒﺎرهﺎ آﺠﺪول‬
‫ﻳﺘﻢ اﺳﺘﺨﻼص اﻻﻋﻤﺪة ﻣﻨﺔ ﻟﺘﺨﺪم ﺟﻤﻠﺔ ‪ Select‬اﻟﻜﺒﻴﺮة‪.‬‬
‫وﻻﺑﺪ ﻣﻦ اﻋﻄﺎء اﺳﻢ ﻣﺴﺘﻌﺎر ﻟﻼﻋﻤﺪة ﺑﺠﻤﻠﺔ ‪ Select‬اﻟﺼﻐﻴﺮة ﺣﺘﻰ ﺗﺘﻤﻜﻦ ﻣﻦ‬
‫اﺳﺘﺨﺪام ﺗﻠﻚ اﻟﻌﻤﻮد ﻓﻰ ﺟﻤﻠﺔ ‪ Select‬اﻟﻜﺒﻴﺮة‪.‬‬

‫وآﺎﻧﺖ ﻓﻰ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﺑﺎﻟﺸﻜﻞ اﻟﺘﺎﻟﻰ‪:‬‬


‫‪ B‬ﺗﻌﺒﺮ ﻋﻦ ﺟﻤﻠﺔ ‪ Select‬اﻟﺼﻐﻴﺮة ﺣﻴﺚ ﻳﺘﻢ اﻋﺘﺒﺎرهﺎ آﺠﺪول‪.‬‬
‫‪ Maxsal‬هﻰ اﻻﺳﻢ اﻟﻤﺴﺘﻌﺎر ﻟﻌﻤﻮد)اآﺒﺮ ﻣﺮﺗﺐ( ﺑﻜﻞ ﻗﺴﻢ ذﻟﻚ ﻓﻰ ﺟﻤﻠﺔ‬
‫‪ Select‬اﻟﺼﻐﻴﺮة اﻳﻀﺎ‪.‬وﺑﺬﻟﻚ ﺗﻢ اﻟﺘﻌﺎﻣﻞ ﻣﻊ ﺗﻠﻚ اﻟﻌﻤﻮد ﺑﺪاﺧﻞ ﺟﻤﻠﺔ ‪Select‬‬
‫اﻟﻜﺒﻴﺮة ﻋﻦ ﻃﺮﻳﻖ ‪ b.maxsal‬آﻤﺎ ﻓﻰ اﻟﻤﺜﺎل‪.‬‬
‫اﺳﺘﺨﺪام ‪TOP_N‬‬

‫ﻳﺴﺎﻋﺪ اﺳﺘﺨﺪام ‪ Top_n‬ﻣﺜﻼ ﻓﻰ‪:‬‬


‫• ﻣﻌﺮﻓﺔ أﺣﺴﻦ ﻋﺸﺮ ﻣﻨﺘﺠﺎت رواﺟﺎ‪.‬‬
‫• ﻣﻌﺮﻓﺔ أﺳﻮأ ﻋﺸﺮ ﻣﻨﺘﺠﺎت ﻓﻲ اﻟﺒﻴﻊ‪.‬‬
‫• ﻣﻌﺮﻓﺔ اﻋﻠﻰ ﻋﺸﺮ ﻣﺮﺗﺒﺎت ﺑﺎﻟﺸﺮآﺔ‪.‬‬

‫اﻟﺼﻴﻐﺔ اﻟﺮﺋﻴﺴﻴﺔ ﻻﺳﺘﺨﺪام ‪: Top_n‬‬

‫ﻻﺣﻆ ان ﻋﻤﻮد ‪ Rownum‬ﻟﻴﺲ ﺧﺎص ﺑﺠﺪول ﻣﻌﻴﻦ ﻓﻰ ﻗﺎﻋﺪة اﻟﺒﻴﺎﻧﺎت وﻟﻜﻨﺔ ﺧﺎص‬
‫ﺑﺎﻻوراآﻞ وﻳﺴﺘﺨﺪم ﻟﺘﺮﺗﻴﺐ اﻟﺼﻔﻮف اﻟﻈﺎهﺮة ﺑﺎﻻرﻗﺎم‪.‬‬
‫اﻟﻬﺪف ﻣﻦ اﺳﺘﺨﺪام ‪ Top_n‬اﺳﺘﺨﻼص ﺑﻴﺎﻧﺎت ﻣﺮﺗﺒﺔ ﻣﻦ ‪ SubQuery‬ﻟﻜﻰ ﻳﻤﻜﻦ‬
‫اﺳﺘﺨﺪاﻣﻬﺎ ﺑﺸﺮط ﻣﻌﻴﻦ ﻓﻰ ‪. OuterQuery‬‬

‫ﻣﺜﺎل ﻋﻠﻲ ‪: TOP-N‬‬


‫ﻟﻜﻲ ﻧﻌﺮض أﺳﻤﺎء اآﺒﺮ ﺛﻼث ﻣﻮﻇﻔﻴﻦ ﻳﺘﻘﺎﺿﻮن ﻣﺮﺗﺐ ﻓﻰ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ ‪:‬‬

‫ﻻﺣﻆ ان ﻓﻰ ‪ SubQuery‬ﺗﻢ اﺳﺘﺨﻼص اﻻﺳﻢ واﻟﻤﺮﺗﺐ وﺗﻢ ﺗﺮﺗﻴﺒﻬﻢ ﺗﻨﺎزﻟﻴﺎ‬


‫ﺣﺴﺐ اﻟﻤﺮﺗﺐ اﻟﺬى ﻳﺘﻘﺎﺿﺎة آﻞ ﻣﻮﻇﻒ‪.‬‬
‫وﻓﻰ ‪ OuterQuery‬ﺗﻢ اﺳﺘﺨﻼص ﻧﻔﺲ اﻋﻤﺪة ‪ SubQuery‬وﻟﻜﻦ ﺑﺎﺿﺎﻓﺔ ﺷﺮط‬
‫وهﻮ ان ﻳﻜﻮن ﻋﻤﻮد ‪ Rownum‬اﻗﻞ او ﻳﺴﺎوى ‪ 3‬ﺣﺘﻰ ﻳﺘﻢ اﺳﺘﺨﻼص اول ﺛﻼﺛﺔ‬
‫ﻓﻘﻂ‪.‬‬
‫ﻣﻠﺤﻮﻇﺔ‪:‬اﻏﻔﺎل او ادراج اﻟﻌﻤﻮد ‪ Rownum‬ﻓﻰ ‪ OuterQuery‬ﻻ ﻳﺴﺒﺐ ‪. Error‬‬
‫وﻓﻰ اﻟﻤﺜﺎل ﺗﻢ ادراج ‪ Rownum‬ﺣﺘﻰ ﻳﻌﻄﻰ ارﻗﺎم ﻟﻠﻤﻮﻇﻔﻴﻦ وﻓﻘﺎ ﻟﺘﺮﺗﻴﺒﻬﻢ‪.‬‬
‫ﻣﺜﺎل‪:‬‬
‫اذا اردﻧﺎ ﻣﻌﺮﻓﺔ اﻗﺪم ارﺑﻊ ﻣﻮﻇﻔﻴﻦ ﻓﻰ ﺟﺪول اﻟﻤﻮﻇﻔﻴﻦ‪.‬‬
‫ﻻﺣﻆ ﻓﻰ ‪ SubQuery‬ﺗﻢ اﺳﺘﺨﻼص اﻻﺳﻢ وﺗﺎرﻳﺦ ﺗﻌﻴﻦ اﻟﻤﻮﻇﻒ و ﺗﺮﺗﻴﺒﻬﻢ ﺗﻨﺎزﻟﻴﺎ‬
‫ﺣﺴﺐ ﺗﺎرﻳﺦ ﺗﻌﻴﻦ اﻟﻤﻮﻇﻒ‪.‬‬
‫وﻓﻰ ‪ OuterQuery‬ﺗﻢ اﺳﺘﺨﻼص ﻧﻔﺲ اﻋﻤﺪة ‪ SubQuery‬وﻟﻜﻦ ﺑﺎﺿﺎﻓﺔ ﺷﺮط‬
‫وهﻮ ان ﻳﻜﻮن ﻋﻤﻮد ‪ Rownum‬اﻗﻞ او ﻳﺴﺎوى ‪ 4‬ﺣﺘﻰ ﻳﺴﺘﺨﻠﺺ اول ارﺑﻌﺔ ﻓﻘﻂ‪.‬‬
‫ﻻﺣﻆ اﺳﺘﺨﺪام اﺳﻢ ﻣﺴﺘﻌﺎر ﻟﻞ ‪. SubQuery‬‬

‫وﻳﻤﻜﻦ اﺳﺘﺨﺪام ‪ Rownum‬ﺑﺪون اﺳﺘﺨﺪام ‪. SubQuery‬‬


‫ﻣﺜﺎل‪:‬‬
‫‪Select ename , sal from emp‬‬
‫;‪Where rownum<5‬‬

‫وﻓﻰ اﻟﻤﺜﺎل اﻟﺴﺎﺑﻖ ﺗﻢ ﻋﺮض اﻻﺳﻢ واﻟﻤﺮﺗﺐ ﻟﻠﻤﻮﻇﻔﻴﻦ وﻟﻜﻦ ﺑﺪون اﻣﻜﺎﻧﻴﺔ ﻣﻌﺮﻓﺔ‬
‫اآﺒﺮ ارﺑﻊ ﻣﺮﺗﺒﺎت‪.‬ﺣﻴﺚ اﻧﺔ ﻳﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﺮﺗﻴﺐ اﻻﻓﺘﺮاﺿﻰ وهﻮ ﺗﺮﺗﻴﺐ اﻟﺒﻴﺎﻧﺎت ﺗﻨﺎزﻟﻰ‪.‬‬

You might also like