נושאים במסדי נתונים ת – אווירי תעשייה 5 שיעור 1 שיעור : נושאי הלימוד לה

‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫שיעור ‪51‬‬
‫שיעור‬
‫נושאי הלימוד להיו‪:‬‬
‫‬
‫אופרטורי שמיועדי לשימוש ע קבוצות ותתי שאילתות‬
‫‬
‫פעולת ‪UNION‬‬
‫‬
‫טבלאות מסוג ‪VIEW‬‬
‫‬
‫‪PL/SQL‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪1‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫‪ – SUB QUERIES (10‬תתי שאילתות תזכורת‬
‫תזכורת‪ :‬תת שאילתא היא שאילתא הנמצאת בתו שאילתא אחרת‪ ,‬כ שתוצאת‬
‫השאילתא הפנימית משמשת להערכת‪/‬חישוב השאילתא החיצונית‪.‬‬
‫קיימי שני סוגי של תתי שאילתות‪:‬‬
‫‪ (1‬תתי שאילתות במשפטי ‪ WHERE‬ו ‪HAVING‬‬
‫א( תתי שאילתות המחזירות ער יחיד – למדנו בשיעור קוד‬
‫ב( תתי שאילתות המחזירות אוס& ערכי – למדנו בשיעור קוד‬
‫‪ (2‬תתי שאילתות במשפטי ‪.FROM‬‬
‫‪ (2‬תתי שאילתות במשפטי ‪:FROM‬‬
‫צורת השימוש‪:‬‬
‫‪SELECT ….‬‬
‫;‪FROM (Sub-Query) AS NewName‬‬
‫חובה לבצע את פעולת הכינוי‬
‫נחזור לדוגמא מתחילת השיעור‪ :‬שמות האנשי שגרי בעיר של ‪ Ben Levi‬הפע לא‬
‫כולל ‪ BEN‬עצמ'‪:‬‬
‫מתבצעת כא'‬
‫מכפלה קרטזית‬
‫‪SELECT Name‬‬
‫‪City‬‬
‫‪FROM Students S, ( SELECT‬‬
‫‪Students‬‬
‫‪FROM‬‬
‫‪Name = 'Ben Levi') AS ben‬‬
‫‪WHERE‬‬
‫;)'‪( S.City = ben.City ) AND (Name <> 'Ben Levi‬‬
‫‪WHERE‬‬
‫הסבר‪ :‬תת השאילתא תחזיר טבלה שתכיל ערכי‪ ,‬וע טבלה זו נבצע מכפלה קרטזית‬
‫לטבלת סטודנטי ועל המכפלה נפעיל את תנאי ה ‪.where‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪2‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫‪UNION (11‬‬
‫באלגברת היחסי למדנו על פקודת ‪ UNION‬כאשר רצינו לאחד תוצאות של טבלאות‬
‫בעלי סכמות זהות )תואמות איחוד( ‪ ,‬על אותו עיקרו' נראה אי נוכל להפעיל את‬
‫פקודת ‪ UNION‬על טבלאות ב ‪:SQL‬‬
‫דוגמא‪ :‬נניח שטבלת הסטודנטי הייתה קיימת לנו ג באוניברסיטת בר איל' וג‬
‫באוניברסיטת תלאביב ושר החינו היה רוצה לקבל את רשימת כל הסטודנטי בשני‬
‫המוסדות )ת‪.‬ז‪ + .‬ש( עבור סטודנטי שאינ גרי בירושלי‪:‬‬
‫סכמת הסטודנטי בבראיל ‪:‬‬
‫‪Department‬‬
‫‪MA‬‬
‫‪CS‬‬
‫‪StudentCity‬‬
‫‪RG‬‬
‫‪BB‬‬
‫‪StudentName‬‬
‫‪a‬‬
‫‪b‬‬
‫‪StudentID‬‬
‫‪1‬‬
‫‪2‬‬
‫סכמת הסטודנטי בתלאביב‪:‬‬
‫‪Age‬‬
‫‪22‬‬
‫‪24‬‬
‫‪City‬‬
‫‪TA‬‬
‫‪TA‬‬
‫‪Department‬‬
‫‪PH‬‬
‫‪MA‬‬
‫‪SName‬‬
‫‪c‬‬
‫‪d‬‬
‫‪Faculty‬‬
‫‪ES‬‬
‫‪ES‬‬
‫‪SID‬‬
‫‪3‬‬
‫‪4‬‬
‫הבעיה הנראית לעי' היא ששתי הסכמות כא' שונות ואילו על מנת לאחד נתוני נצטר‬
‫סכמות זהות ולכ' נצטר להפעיל את השאילתות הבאות‪:‬‬
‫‪StudentID AS ID , StudentName AS Name‬‬
‫‪SELECT‬‬
‫‪BarIlanStudents‬‬
‫‪FROM‬‬
‫;’‪StudentCity <> ‘Jerusalem‬‬
‫‪WHERE‬‬
‫‪UNION‬‬
‫‪Name‬‬
‫‪a‬‬
‫‪b‬‬
‫‪c‬‬
‫‪d‬‬
‫‪SID AS ID , SName AS Name‬‬
‫‪SELECT‬‬
‫‪TelAvivStudents‬‬
‫‪FROM‬‬
‫;’‪City <> ‘Jerusalem‬‬
‫‪WHERE‬‬
‫‪ID‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪3‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫נוכל לראות שפעולת ‪) UNION‬כנ"ל חיתו וחיסור( מתבצעת בצורה הבאה‪:‬‬
‫]‪[Query‬‬
‫‪INTERSECT‬‬
‫]‪[Query‬‬
‫]‪[Query‬‬
‫‪UNION‬‬
‫]‪[Query‬‬
‫]‪[Query‬‬
‫‪MINUS‬‬
‫]‪[Query‬‬
‫חשוב לציי' שקיימת פקודה נוספת הנקראת ‪ UNION ALL‬שמטרתה לאחד ‪ 2‬טבלאות מבלי להסיר את‬
‫הכפולי‪.‬‬
‫‪Distinct SName‬‬
‫‪SELECT‬‬
‫‪Students‬‬
‫‪FROM‬‬
‫‪UNION ALL‬‬
‫‪Distinct SName‬‬
‫‪SELECT‬‬
‫‪Students‬‬
‫‪FROM‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪4‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫‪ – VIEWS (12‬טבלאות מדומות‬
‫‪ VIEW‬הוא טבלה מדומה המגדירה שאילתת משתמש‪ ,‬זהו בעצ מבנה נוס& שעדיי' לא למדנו הנכנס תחת‬
‫הגדרת ‪ DDL‬ונקרא טבלה מדומה‪.‬‬
‫השוני של טבלה מדומה מטבלה רגילה‪:‬‬
‫‪ (1‬טבלה מדומה אינה מכילה ערכי בתוכה‪.‬‬
‫‪ VIEW (2‬הינה רק הגדרה במבנה של שאילתת ‪ SQL‬רגילה הנשמרת בבסיס הנתוני‪.‬‬
‫‪ (3‬הטבלה ממומשת ע"י הפעלת השאילתא רק בעת הצור‪.‬‬
‫יתרונות‪:‬‬
‫‪ (1‬יכולת הצגה פשוטה יותר של נתוני שוני למשתמשי שוני‪.‬‬
‫‪ (2‬רמה גבוהה של בקרה ואבטחת מידע‪ :‬מונע גישה לנתוני ולטבלאות עצמ' ומאפשר גישה‬
‫רק ל ‪) VIEW‬במקו למנוע גישה של אד מסוי מטבלאות מסוימות אפשר לאפשר לגשת‬
‫רק ל ‪ VIEW‬מסוימי(‪.‬‬
‫‪ (3‬נית' להתייחס ל ‪ VIEW‬ולפנות אליו כאילו היה טבלה אמיתית‪.‬‬
‫‪ (4‬אי' בזבוז של מקו כאשר משתמשי ב ‪ VIEW‬כי הרי ה ‪ DBMS‬שומר שאילתא ולא‬
‫נתוני‪.‬‬
‫‪ (5‬עדכו' של טבלאות לא מצרי לבצע עדכו' של ה ‪) VIEW‬יתבצע אוטומטית בעת הריצה(‪.‬‬
‫‪ (6‬מאפשר למעבד השאילתות רמה גבוהה יותר של אופטימיזציה‪.‬‬
‫חסרונות‪:‬‬
‫‪ (1‬מחושב בכל ריצה מחדש‪.‬‬
‫‪ (2‬א הטבלה עליה נשע' ה ‪ VIEW‬נמחקת‪ ,‬ה ‪ VIEW‬הול לאיבוד ג כ'‪.‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪5‬‬
‫רואי זרחיה‬
[email protected]
‫תעשייה אווירית – נושאי במסדי נתוני‬
:‫ שעליו נבצע את הדוגמאות עבור הפעולות לשיעור זה‬DB ‫נגדיר טבלאות חדשות ב‬
StudentID
1
2
3
4
5
6
7
StudentID
1
2
3
4
5
6
7
6
Students
Name
City
Avi Cohen
Ramat-Gan
Avi Levin
Ramat-Gan
Ben Levi
Tel-Aviv
Chen Levin
Tel-Aviv
Debi Dvir
Givatiim
Zvi Kaner
Givatiim
Haim Itzhak
Jerusalem
Grades
CourseID
TestGrade
281
82
281
67
281
75
281
84
281
94
281
82
281
90
Department
Computers
Math
Math
Computers
Math
Computers
Computers
ExeGrade
85
84
88
87
86
88
83
© ‫ כל הזכויות שמורות‬2009 ‫רואי זרחיה‬
•
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫דוגמא‪:‬‬
‫הצג את שמות הסטודנטי ואת עיר מגוריה עבור סטודנטי שלמדו במחלקה למדעי המחשב‪:‬‬
‫‪Name, City‬‬
‫‪Students S‬‬
‫;”‪S.Department = “computers‬‬
‫‪City‬‬
‫‪Ramat-Gan‬‬
‫‪Tel-Aviv‬‬
‫‪Givatiim‬‬
‫‪Jerusalem‬‬
‫‪SELECT‬‬
‫‪FROM‬‬
‫‪WHERE‬‬
‫‪Name‬‬
‫‪Avi Cohen‬‬
‫‪Chen Levin‬‬
‫‪Zvi Kaner‬‬
‫‪Haim Itzhak‬‬
‫זו הייתה שליפה פשוטה‪ ,‬א כעת בואו נניח שראש המחלקה למדעי המחשב מרי‪ /‬כל יו את אותה‬
‫השאילתא א לפעמי הוא רוצה להוסי& מספר תנאי על שאילתא זו – לש כ קיימת לנו אפשרות לשמור‬
‫טבלה זו כטבלה מדומה ז"א שנשמור את פקודת ה ‪ SQL‬תחת הש ‪ CompStudents‬בצורה הבאה‪:‬‬
‫‪CREATE VIEW CompStudents AS‬‬
‫{‬
‫‪SELECT‬‬
‫‪Name, City‬‬
‫‪FROM‬‬
‫‪Students S‬‬
‫‪WHERE‬‬
‫;”‪S.Department = “computers‬‬
‫}‬
‫כעת קיי לנו ‪ VIEW‬בש ‪ CompStudents‬שע"י כל הרצה שלו נקבל את רשימת הסטודנטי למדעי‬
‫המחשב‪.‬‬
‫כעת נניח שראש המחלקה רוצה לסנ' מתו רשימה זו רק את הסטודנטי שגרי בתל אביב‪ ,‬הוא יוכל‬
‫לבנות את השאילתא הבאה‪:‬‬
‫*‬
‫‪CompStudents‬‬
‫;”‪City = “Tel-Aviv‬‬
‫‪SELECT‬‬
‫‪FROM‬‬
‫‪WHERE‬‬
‫ובעקבות זאת )למרות שרשמנו * ב ‪ SELECT‬הראשי( תתקבל התוצאה הבאה‪:‬‬
‫‪City‬‬
‫‪Tel-Aviv‬‬
‫‪Name‬‬
‫‪Chen Levin‬‬
‫ יוצגו ‪ 2‬העמודות מה ‪ VIEW‬המתאימות לתנאי שהתווס&‪.‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪7‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫מאחורי הקלעי בעצ מתבצעת השאילתא הבאה‪:‬‬
‫*‬
‫‪CompStudents‬‬
‫‪SELECT‬‬
‫‪FROM‬‬
‫;”‪City = “Tel-Aviv‬‬
‫‪WHERE‬‬
‫‪Name, City‬‬
‫‪Students S‬‬
‫”‪S.Department = “computers‬‬
‫‪AND‬‬
‫;”‪City = “Tel-Aviv‬‬
‫‪SELECT‬‬
‫‪FROM‬‬
‫‪WHERE‬‬
‫מכא נוכל להבי את השלבי של בניית טבלה מדומה‪:‬‬
‫‪(1‬‬
‫הגדרת טבלה מדומה חדשה )הגדרת השאילתא ויצירתה ב ‪.(DB‬‬
‫‪(2‬‬
‫הפעלת שאילתא רגילה הפונה כחלק מהשליפה לטבלה המדומה‪.‬‬
‫‪(3‬‬
‫ה ‪ DBMS‬יוצר את השאילתא המשולבת )כמו שראינו בדוגמא האחרונה(‪.‬‬
‫‪(4‬‬
‫מופעלת השאילתא המשולבת ומוחזרת התוצאה‪.‬‬
‫הרכבת תצפיות‪:‬‬
‫נית' להגדיר הרכבה של תצפיות‪ ,‬ז"א נית' להגדיר תצפית הבנויה על בסיס תצפית אחרת‪:‬‬
‫‪CREATE VIEW BestTalmidim AS‬‬
‫(‬
‫* ‪Select‬‬
‫תצפית ‪From Talmidim‬‬
‫)‬
‫נוכל להשתמש בתצפית בביצוע ‪ JOIN‬כאילו היא הייתה טבלה רגילה‬
‫*‬
‫‪Talmidim T , Courses C‬‬
‫‪T.ID = C.ID‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪SELECT‬‬
‫‪FROM‬‬
‫‪WHERE‬‬
‫‪8‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫חוקי שיש לזכור בעבודה ע תצפיות‪:‬‬
‫‪ .1‬התצפית תפסיק לפעול א בוצעה מחיקה של הטבלה עלייה היא בנויה‪.‬‬
‫‪ .2‬התצפית תפסיק לפעול א שונו שמות העמודות בטבלה עלייה היא בנויה‪ .‬ז"א שהתצפית‬
‫מושפעת משינויי סכמה א איני מושפעת משינויי ‪.DATA‬‬
‫‪ .3‬נית' להוסי&‪/‬לעדכ'‪/‬למחוק שורות מתו תצפית קיימת בתנאי שהתצפית בנויה על טבלה‬
‫אחת בלבד )ז"א תצפית ללא פעולות צירו&‪ ,‬איחוד‪ ,‬חיתו וכד'(‪.‬‬
‫‪ .4‬הרעיו' העומד מאחורי תצפית טובה הוא שנית' לשלו& מידע רלוונטי באופ' מחזורי מבלי‬
‫להתייחס למורכבות בסיס הנתוני הקיי ומבלי צור לחזור ולכתוב את השאילתא בכל‬
‫פע שנרצה לשלו&‪.‬‬
‫‪ .5‬תמיד נית' להוסי& עוד תנאי לתצפית קיימת בכדי לקבל תשובה ספציפית יותר וע"י כ‬
‫בעצ נוכל להתאי תצפיות למנהלי שוני וללקוחות שוני וכ נוכל ליצור מידור ואבטחה‬
‫טובי יותר‪.‬‬
‫ביצועי שינוי ב טבלה דר" ‪:VIEW‬‬
‫‪ .1‬שינוי של ערכי דר ‪ VIEW‬יגרור שינויי של טבלאות הבסיס‪.‬‬
‫‪ .2‬הקו המנחה הוא שלא נית' לפנות לער בטבלה שלא מיוצג ע"י ‪.VIEW‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪9‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫שילוב של טבלאות משולבות ע תתשאילתא‪:‬‬
‫לדוגמא‪ :‬הגדר טבלה מדומה בש ‪ BestGrades‬שתציג את מס' הסטודנט והציו' שלו במבח' עבור כל‬
‫הסטודנטי שקיבלו במבח' הסופי ציו' גבוה מהציו' הגבוה ביותר שסטודנט כלשהוא קיבל בתרגיל בכיתה‪.‬‬
‫)‪Max(ExeGrade‬‬
‫;)‪Grades‬‬
‫‪CREATE VIEW BestGrades AS‬‬
‫‪SELECT‬‬
‫‪StudentID, TestGrade‬‬
‫‪FROM‬‬
‫‪Grades G‬‬
‫‪WHERE‬‬
‫‪TestGrade > ( SELECT‬‬
‫‪FROM‬‬
‫‪BestGrades‬‬
‫‪StudentID‬‬
‫‪TestGrade‬‬
‫‪5‬‬
‫‪94‬‬
‫‪7‬‬
‫‪90‬‬
‫על אותו משקל נוכל להשתמש בצירו& בטבלאות מדומות ובכ ליצור יתרו' עצו‪ :‬למשתמש נדמה כי הוא‬
‫עובד מול טבלה אחת בעוד שבפועל מאחורי הקלעי יכולות להתבצע פעולות צירו& חישובי והתניות על‬
‫מספר טבלאות שונות‪.‬‬
‫הגדרת סכמת ה ‪:VIEW‬‬
‫נוכל להגדיר את שמות העמודות של ה ‪ VIEW‬החדש שנרצה ליצור‪.‬‬
‫לדוגמא‪:‬‬
‫‪StudentsAvgGrade(Name, ID, AvgGrade) AS‬‬
‫‪S.StudentName, S.StudentID, (TestGrade + ExeGrade)/2‬‬
‫;‪Grades‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪CREATE VIEW‬‬
‫‪SELECT‬‬
‫‪FROM‬‬
‫‪10‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫‪PL/SQL (12‬‬
‫‪ PL/SQL‬מאפשר לנו להשתמש בכלי תכנות בשילוב ע פקודות ‪) SQL‬לולאות‪ ,‬תנאי‪ ,‬פונקציות וכד'(‬
‫בעבודה ע"ג ‪ ORACLE‬ובכ מפשט את העבודה למול בסיס הנתוני‪.‬‬
‫א( פקודת ‪ SELECT‬בשילוב משתני‬
‫‪DECLARE‬‬
‫‪v_sname‬‬
‫;)‪VARCHAR2(10‬‬
‫‪v_rating‬‬
‫;)‪NUMBER(3‬‬
‫‪BEGIN‬‬
‫‪SELECT sname, rating‬‬
‫‪INTO v_sname, v_rating‬‬
‫‪FROM‬‬
‫‪Sailors‬‬
‫‪WHERE‬‬
‫;'‪sid = '112‬‬
‫;‪END‬‬
‫נוכל לראות שע"י הרצת פקודת ‪ SELECT‬זו נוכל להרי‪ /‬שאילתא ולהכניס את תוצאותיה לתו משתני‪,‬‬
‫שמאוחר יותר נוכל לפנות ולהשתמש בערכי המאוחסני בה‪.‬‬
‫הערה‪ :‬שאילתא זו חייבת להחזיר שורה אחת בלבד כי הרי מטרתה היא לאחס' את המידע בתו המשתני‬
‫שהוגדרו ולא להחזיר טבלת תשובות‪) .‬א השאילתא תחזיר פחות‪/‬יותר משורה אחת תצא הודעת שגיאה(‪.‬‬
‫ב( פקודת ‪IF‬‬
‫>‪If <cond‬‬
‫>‪then <command‬‬
‫>‪elseif <cond2‬‬
‫>‪then <command2‬‬
‫‪else‬‬
‫>‪<command3‬‬
‫;‪end if‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪11‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫ג( פקודת ‪LOOP‬‬
‫‪DECLARE‬‬
‫‪i‬‬
‫;‪number := 1‬‬
‫‪BEGIN‬‬
‫‪FOR i IN 1..10 LOOP‬‬
‫;)‪INSERT INTO number VALUES(i‬‬
‫;‪END LOOP‬‬
‫;‪END‬‬
‫ד( יצירת והפעלת פונקציות ופרוצדורות‬
‫כשנרצה להרי‪ /‬אוס& פקודות או מספר שאילתות אחת אחרי השנייה‪ ,‬נוכל להשתמש באחד מהמנגנוני‬
‫היעלי הקיימי בשפת ‪ :SQL‬הכוונה היא לשימוש בפונקציות או פרוצדורות‪.‬‬
‫ע"י שימוש באחד מכלי אלו‪ ,‬אנו בעצ יוצרי רוטינה במסד הנתוני‪ ,‬שמרגע יצירתה ועד מחיקתה נוכל‬
‫להפעיל אותה בצורה פשוטה ע"י קריאה לרוטינה‪ ,‬כמו כ' נוכל להפעיל אותה מספר פעמי רב בכל זמ' שרק‬
‫נרצה‪.‬‬
‫יצירת פרוצדורה‬
‫‪CREATE [OR REPLACE] PROCEDURE procedure_name‬‬
‫])‪[(parameter1 [mode1] datatype1, parameter2 [mode2] datatype2, . . .‬‬
‫‪AS‬‬
‫{‬
‫;‪PL/SQL Block‬‬
‫}‬
‫זהו מבנה פשוט של פרוצדורה‪ ,‬נוכל לראות שמלבד הגדרת ש הפרוצדורה החדשה‪ ,‬נוכל ג להגדיר את‬
‫הפרמטרי החיצוניי שפרוצדורה זו יכולה לקבל מהאפליקציה העוטפת אותה )הכנסת משתני חיצוניי‬
‫לתו הפרוצדורה(‪ ,‬כאשר המש הקוד הינו בעצ אוס& פקודות )בלוק של פקודות( לביצוע‪.‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪12‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫יצירת פונקציה‬
‫פונקציה הינה כלי כמעט זהה לפרוצדורה ע הבדל אחד חשוב‪ ,‬הפונקציה מחזירה ער‪.‬‬
‫)‪CREATE [or replace] FUNCTION rating_message(rating IN NUMBER‬‬
‫‪RETURN VARCHAR2‬‬
‫‪AS‬‬
‫קלט לפונקציה = מספר‬
‫‪BEGIN‬‬
‫פלט הפונקציה = מחרוזת‬
‫{‬
‫‪IF rating > 7 THEN‬‬
‫;'‪return 'You are great‬‬
‫‪ELSIF rating >= 5 THEN‬‬
‫;'‪return 'Not bad‬‬
‫‪ELSE‬‬
‫;'‪return 'Pretty bad‬‬
‫;‪END IF‬‬
‫}‬
‫;‪END‬‬
‫ה( יצירת טריגרי‬
‫טריגר הוא פעולה שמסד הנתוני צרי לבצע כאשר בוצעה פעולה ששינתה ער או מבנה במסד הנתוני‬
‫עצמו‪ ,‬הטריגרי ה בעצ פרוצדורות מיוחדות שנרצה להפעיל כאשר מישהו ביצע פעולה שגררה שינוי‬
‫במסד הנתוני‪.‬‬
‫לדוגמא‪:‬‬
‫‪ (1‬נגדיר טריגר שיופעל כאשר תתבצע הכנסה של שורה חדשה לתו מסד הנתוני‪ ,‬כאשר‬
‫מטרת הטריגר הינה לבדוק הא הערכי המוכנסי תקיני‪.‬‬
‫‪ (2‬כאשר מוכנס סטודנט חדש לבסיס הנתוני‪ ,‬נבדוק את תארי הלידה שלו ואז א גילו‬
‫מעל ‪ 20‬נכניס אותו לטבלת סטודנטי וא גילו מתחת ל ‪ 20‬נכניס אותו לטבלת‬
‫צעירי‪.‬‬
‫גו& הטריגר בעצ מכיל אוס& פקודות )‪ (PL/SQL‬כאשר ישנ מספר סוגי רב של טריגרי‪ ,‬א הנפוצי‬
‫ה מסוג‪ :‬עדכו'‪ ,‬מחיקה והוספה‪.‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪13‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫עצמו‪ ,‬הטריגרי ה בעצ פרוצדורות מיוחדות שנרצה להפעיל כאשר מישהו ביצע פעולה שגררה שינוי‬
‫ו( יצירת אינדקסי‬
‫יצירת אינדקס בטבלה קיימת מאפשרת לנו לאתר שורות מידע במהירות וביעילות רבה יותר )לדוגמא‪:‬‬
‫כשנכתוב שאילתא ובתנאי ה ‪ Where‬נרצה להתייחס לעמודת ‪ Name‬שאינה מפתח בטבלה‪ ,‬כמות הזמ' שיקח‬
‫לעבור על עמודה זו יהיה נמו בהרבה א עמודת ‪ Name‬תוגדר כבעלת אינדקס(‪.‬‬
‫יצירת אינדקס‪:‬‬
‫ש האינדקס החדש‬
‫‪CREATE [ UNIQUE ] INDEX index_name‬‬
‫) ‪ON table_name ( col1, col2, …, colN‬‬
‫ש העמודה בטבלה‬
‫שעליה יתווס& האינדקס‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫ש הטבלה שעליה נרצה‬
‫להוסי& אינדקס חדש‬
‫‪14‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫מחיקת אינדקס‪:‬‬
‫‪DROP INDEX index_name‬‬
‫ נית' ליצור אינדקסי על עמודה אחת או מספר עמודות כאשר כל אינדקס מקבל ש ייחודי משלו‪,‬‬
‫מומל‪ /‬לשי אינדקסי על עמודות שכמות החיפושי עליה הינה גבוהה‪.‬‬
‫ המשתמש שירצה לבצע שליפה מבסיס הנתוני אינו רואה את האינדקס וזאת כי האינדקס נמצא‬
‫מאחורי הקלעי )‪ (DDL‬ומטרתו היא שיפור ביצועי השליפות )חשוב לדעת שביצוע פעולת ‪UPDATE‬‬
‫לטבלה הכוללת אינדקסי תיקח זמ' רב יותר מאשר טבלה ללא אינדקסי וזאת בשל העובדה שיש צור‬
‫לעדכ' ג את האינדקסי עצמ בעת עדכו' הטבלה(‪.‬‬
‫ אינדקס מסוג ‪ Unique Index‬הינו אינדקס על עמודה שבה לא יכולי להיות ‪ 2‬ערכי בעלי ער זהה‪.‬‬
‫לדוגמא‪ :‬נוכל ליצור אינדקס לטבלת ‪ Students‬עבור עמודת ‪ Name‬וזאת בכדי שנוכל לשלו& סטודנטי לפי‬
‫שמות בצורה מהירה ויעילה יותר‪:‬‬
‫‪CREATE INDEX StudentNameIndex‬‬
‫)‪ON Students (Name‬‬
‫א שמות הסטודנטי היו יושבי בשתי עמודות שונות )ש פרטי וש משפחה( היינו יכולי ליצור את‬
‫האינדקס כ‪:‬‬
‫‪CREATE INDEX StudentNameIndex‬‬
‫)‪ON Students (LastName, FirstName‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪15‬‬
‫רואי זרחיה‬
‫‪[email protected]‬‬
‫תעשייה אווירית – נושאי במסדי נתוני‬
‫ז( יצירת סמכויות – ‪:Authority‬‬
‫בהנחה ומספר אנשי עובדי ע"ג מסד הנתוני שלנו‪ ,‬נוכל להגדיר את שמות המשתמשי שאנו רוצי‬
‫לתת לה סמכויות לכניסה ולניהול בסיס הנתוני שלנו‪.‬‬
‫יצירת משתמש חדש‪:‬‬
‫נוכל ליצור משתמש חדש במערכת ולזהותו ע"י שימוש בסיסמא שתוגדר‬
‫} ‪CREATE USER user_name IDENTIFIED { by password‬‬
‫‪CREATE USER roei IDENTIFIED by 12345‬‬
‫סיסמת הכניסה של רואי ל ‪DB‬‬
‫מחיקת משתמש קיי‪:‬‬
‫‪DROP USER user_name‬‬
‫לאחר שהקצנו את האנשי שיכולי לעבוד על מסד הנתוני שלנו )מת' סמכויות( נוכל להגדיר את‬
‫ההרשאות או התפקידי של כל אחד מה‪ ,‬ז"א מה מותר ואסור לכל אחד מהאנשי לבצע‪.‬‬
‫הגדרת הרשאות )‪:(privilege‬‬
‫מת' הרשאה לביצוע פעולה או פעולות על מסד הנתוני עבור משתמש מסוי‪:‬‬
‫סוג ההרשאה‬
‫] ‪GRANT privilege TO user [ WITH ADMIN OPTION‬‬
‫‪GRANT connect TO roei‬‬
‫מת' הרשאת התחברות ל ‪ DB‬למשתמש רואי‬
‫‪REVOKE privilege FROM user‬‬
‫הגדרת תפקיד )‪:(role‬‬
‫תפקיד הינו אוס& של הרשאות בודדות תחת כובע אחד )הרשאות למתכנת‪ ,‬למנהל וכד'(‪:‬‬
‫הגדרת תפקיד בחברה מסוג "מתכנת"‬
‫והקצאת הרשאות ספציפיות עבור‬
‫מתכנת בחברה‬
‫סוג תפקיד‬
‫‪Create role programmer_role‬‬
‫‪Grant select, insert on customer to programmer_role‬‬
‫] ‪GRANT role TO { user | role } [ WITH ADMIN OPTION‬‬
‫מת' סט הרשאות של מתכנת למשתמש דני‬
‫‪GRANT programmer_role TO dani‬‬
‫} ‪REVOKE role FROM { user | role‬‬
‫רואי זרחיה ‪ 2009‬כל הזכויות שמורות ©‬
‫‪16‬‬