Menu
עברית Русский
מכללת פרקטיקיו
- מתחילים ללמוד חינם -
קורסי תכנות / סייבר / ניהול רשת

יצירת טריגר Trigger for / after

קורסים למנהלי רשת מסלול מנהלי רשת
עם התמחות בשרתי מיקרוסופט
מסלול סייבר והאקינג - Hacking מסלול תקשורת ואבטחת מידע
Cisco CCNA & FortiGate & Checkpoint
מומחה ווירטואליזציה
VMware & Hyper-V
מסלול לינוקס ו-DevOps מומחה ענן של אמזון - AWS מומחה ענן של מיקרוסופט - Azure מומחה ענן של גוגל - GCP מומחה שרתי SCCM - System Center
של מיקרוסופט לארגונים גדולים
קורסי תכנות מסלול Full Stack דוט-נט
יסודות התכנות
מסלול Full Stack דוט-נט
צד שרת - Backend
מסלול Full Stack דוט-נט
צד לקוח - Frontend
מסלול Full Stack Node.JS קורסי תכנות נוספים
Java / Python / PHP
מפתח אפליקציות - אנדרואיד - אייפון מפתח משחקי מחשב - Unity מפתח תוכנות לוונדוס - WinForms מסלול DBA - דטה אנליסט
התמחות במסדי נתונים – SQL
בדיקות תוכנה - QA בדיקות תוכנה - QA - אוטומציה בדיקות תוכנה - QA - בדיקות ידניות בדיקות תוכנה - QA - קורסים נוספים המלצות תלמידים על PracticU
סיכום על יצירת טריגר Trigger for / after

בשיעור זה לומדים מהו טריגר וכיצד יוצרים אותו: יוצרים טריגר שניצת אחרי פעולת עדכון על טבלת Categories ומדפיס את השעה, בודקים אותו בפעולה, משדרגים אותו בעזרת ALTER TRIGGER כך שיתעד בטבלת ביקורת את הזמן, שם המשתמש ושם המחשב עבור עדכון, הוספה ומחיקה, יוצרים טריגר מחיקה שמשתמש בטבלה הווירטואלית deleted כדי לסמן את המוצרים של הקטגוריה שנמחקה, יוצרים טריגר הוספה על טבלת פרטי ההזמנות שמוריד את המלאי של המוצרים שהוזמנו, יוצרים טריגר עדכון שחוסם עדכון של עמודה מסוימת בעזרת Raiserror ו rollback, ומכירים טריגר instead of insert שמתערב בפעולת ההוספה עצמה ומשלים אותה. נזכיר שקיימים גם סוגי טריגרים נוספים כמו DDL Trigger ו LogOn Trigger, אבל השיעור מתמקד בטריגרים של DML.

נושאי הסיכום המוצגים בשיעור:
1. טריגר ראשון עם הדפסת שעה: טריגר הוא קוד שנשמר במסד הנתונים ומופעל אוטומטית כשמתבצעת פעולת DML מסוימת על טבלה. כותבים "CREATE TRIGGER Categories_Update_Audit", אחריו "ON dbo.Categories" ואז "For update", ובגוף הטריגר פקודת "Print ' The Time is '" שמחוברת לתאריך ולשעה הנוכחיים בעזרת datepart על Getdate. מריצים, והטריגר נוצר בהצלחה.
2. בדיקת הטריגר: מריצים "update Categories" עם "set CategoryName = 'Condiments-Test'" ועם "where CategoryName = 'Condiments'", ומיד אחרי העדכון מופיע בחלון ההודעות הפלט של הטריגר עם השעה הנוכחית, ולצידו הודעה על שורה אחת שעודכנה. כלומר הטריגר ניצת מעצמו בכל פעולת עדכון על הטבלה, בלי שצריך לקרוא לו במפורש.
3. עריכת הטריגר בעזרת ALTER TRIGGER: לוקחים את הטריגר לחלון סקריפט חדש במצב ALTER, ומתקבל "ALTER TRIGGER [dbo].[Categories_Update_Audit]". משדרגים את ההדפסה כך שתכלול גם את שם המשתמש בעזרת suser_name וגם את שם המחשב בעזרת HOST_NAME, ומוסיפים בדיקה נוספת של הוספת קטגוריה חדשה לטבלה.
4. טבלת ביקורת MyCategoryAudit: משנים את הטריגר כך שיגיב גם לעדכון, גם להוספה וגם למחיקה, משביתים את שורות ההדפסה בהערות, ובמקומן מוסיפים "insert Into MyCategoryAudit" עם "values (getdate() , suser_name() , HOST_NAME())", כלומר בכל פעולת DML על הטבלה נכנסת לטבלת הביקורת שורה עם הזמן הנוכחי, שם המשתמש שביצע את הפעולה ושם המחשב שממנו בוצעה. בעזרת "select * from MyCategoryAudit" רואים בטבלה עמודות Date1, Ename ו Hostname, ושורת ביקורת שנרשמה אוטומטית בזמן העדכון.
5. טריגר מחיקה עם הטבלה הווירטואלית deleted: כדי שיהיה אפשר למחוק קטגוריה שיש לה מוצרים, משביתים זמנית את מפתח הזר בעזרת "alter table products" ואז "nocheck constraint FK_Products_Categories". כותבים בהערה "-- Trigger for delete row from categories table" ואז "create trigger CategoryDelete", "on categories", "for delete", ובגוף הטריגר "update p" עם "set discontinued = 1", ואז "from products p inner join deleted d" ואז "on p.categoryid = d.CategoryID". כלומר הטריגר מצטרף את טבלת המוצרים אל הטבלה הווירטואלית deleted, שמכילה את השורות שנמחקו זה עתה, ומסמן את כל המוצרים של הקטגוריה שנמחקה. מריצים "delete from Categories" עם "Where CategoryID = 6", ומתקבלות הודעות על שש שורות ועל שורה אחת, ובדיקה של המוצרים מראה שהדגל שלהם אכן עודכן. עוד מוחקים בשיעור קטגוריות נוספות כדי להדגים שההתנהגות חוזרת על כל מחיקה.
6. הטבלאות הווירטואליות Inserted ו Deleted: מוצג שקף שמסביר את הטבלאות הווירטואליות של הטריגרים: בפעולת insert זמינה הטבלה Inserted ובה השורות שהוספו זה עתה, בפעולת delete זמינה הטבלה Deleted ובה השורות שנמחקו, ובפעולת update זמינות שתיהן, כאשר Inserted מכילה את השורות אחרי השינוי ו Deleted מכילה את השורות המקוריות לפני השינוי.
7. טריגר הוספה על פרטי ההזמנה שמוריד מלאי: כותבים בהערה "--Insert Trigger" ואז "create trigger OD_Insert", "on [order details]", "for insert", ובגוף הטריגר פקודת עדכון שמורידה מהמלאי של המוצר את הכמות שהוזמנה, בעזרת "from Products p inner join inserted as I" ואז "on p.ProductID = i.ProductID", כלומר הטריגר מצטרף את טבלת המוצרים אל הטבלה הווירטואלית inserted לפי מזהה המוצר. בניסיון הראשון של הזנת ההזמנה משתמשים בתבנית עם סוגריים מסולסלים במקום ערכים, ומקבלים שגיאת תחביר Msg 102 על התו הבעייתי, מתקנים את הערכים ומריצים שוב, ההזמנה נכנסת בהצלחה, ובדיקה של המוצר שהוזמן מראה שהמלאי שלו ירד בהתאם ומציג כעת 10.
8. טריגר שחוסם עדכון של עמודה: יוצרים טריגר על טבלת העובדים שניצת בעדכון: "create trigger EmpUpdate", "on Employees", ובגוף הטריגר בדיקה "if UPDATE(firstname)" שמזהה שעדכנו את עמודת השם הפרטי, ואז "begin transaction", העלאת הודעת שגיאה בעזרת "Raiserror ('This column cannot be updated',10,1", ואז "rollback transaction" שמבטל את העדכון. מנסים לעדכן את עמודת השם הפרטי של עובד, ומקבלים בחלון ההודעות את "This column cannot be updated", אחריו "Msg 3609, Level 16, State 1, Line 3" ואז "The transaction ended in the trigger. The batch has been aborted.", כלומר העדכון בוטל לגמרי והעמודה מוגנת מפני עדכון.
9. טריגר instead of insert: מנסים להוסיף עובד עם שם פרטי ושם משפחה וההוספה מצליחה, אבל ניסיון להוסיף עובד עם שם פרטי בלבד נכשל בשגיאה "Msg 515, Level 16, State 1, Line 1" שאומרת שאי אפשר להכניס ערך NULL לעמודת שם המשפחה, שמוגדרת כעמודת חובה שאינה מקבלת ערכים ריקים. הפתרון הוא טריגר instead of: כותבים בהערה "-- Instead of Trigger" ואז "create trigger EmpInsertANull", "on Employees", "instead of insert", ובגוף הטריגר "insert into Employees(FirstName , LastName)" עם "select FirstName , 'FromDefault'" ואז "from inserted". כלומר הטריגר לא מבצע את ההוספה המקורית אלא מחליף אותה בהוספה משלו שמשלימה אוטומטית ערך ברירת מחדל לשם המשפחה. מריצים שוב את ההוספה שנכשלה קודם, והפעם היא מצליחה, ובדיקה של הטבלה מראה את העובד החדש עם ערך ברירת המחדל בשם המשפחה.

בסיום השיעור למדנו מהו טריגר DML וכיצד יוצרים טריגר שניצת אחרי פעולת עדכון, הוספה או מחיקה, להשתמש בטבלאות הווירטואליות inserted ו deleted כדי לפעול על השורות שהשתנו, לתעד פעולות בטבלת ביקורת עם getdate, suser_name ו HOST_NAME, לחסום עדכונים אסורים בעזרת UPDATE, Raiserror ו rollback, ולהחליף את פעולת ההוספה בעזרת טריגר instead of insert. השיעור הבא עוסק ביצירת טריגר Trigger instead of.SR926TRG
סקר שוק נכון לתאריך – 01/09/2011

הסבר קצר על שיטת הלימוד אונליין

צילמנו בסרטונים את כל ההרצאות של הקורס, כי ללמוד בכיתה לא נוח וגם יקר.
קורס בכיתה עולה מעל מ-17 אלף ₪ ואצלנו בסרטונים רק 350 ש"ח לחודש.
אם משהו לא ברור בסרטון תמיד אפשר להתקשר למרצה ולדבר איתו ישירות בטלפון.
המרצה זמין גם בווטסאפ וגם בצ'אט באתר המכללה.


חשוב לציין שבסוף כל התלמידים, מכל המכללות, כולם ביחד ניגשים לאותה בחינה חיצונית של סיסקו / מיקרוסופט / לינוקס ומקבלים בדיוק אותה תעודה.
את החברות הגדולות האלו בכלל לא מעניין איפה ואיך למדת וכמה שילמת על הלימודים.
יש מבחן אחיד לכולם, המתבצע במרכז בחינות מורשה של חברת Pearson VUE. הם עושים את הבחינות בפועל עבור החברות הגדולות בשוק.
כל שבוע יש מבחן ומי שעובר אותו מקבל תעודת הסמכה בינלאומית.

לסיכום: יש מרכז בחינות מורשה בתל-אביב, שכולם מגיעים אליו מכל הארץ ועושים שם מבחני הסמכה הבינלאומיים ומי שעובר את המבחן מקבל את התעודה ולא חשוב להם איפה ואיך למדת.


מה לעשות אם לא מבינים משהו בסרט?

פשוט מאוד, מתקשרים למכללה ומדברים ישירות עם המרצה. אפשר גם להתכתב עם המרצה במייל או בווטסאפ או בצ'אט באתר.


האם יש לכם כיתות לימוד רגילות?

להשכיר כיתה + לשלם משכורת למרצה = 17 אלף ש"ח עלות הקורס לתלמיד.
אצלנו בסרטונים מקבלים אותו חומר לימוד
ואפילו יותר, כי אין מגבלה של זמן למרצה (כמו שיש בכיתה),
בנוסף מקבלים בדיוק אותה תעודה בינלאומית,
כי מבחן הוא מבחן אחיד לכולם המתבצע במרכז בחינות מורשה
והכי חשוב שמקבלים את אותם המרצים, שמלמדים בכיתה רגילה,
רק שצילמנו אותם בסרטונים
והמחיר בסרטונים רק 350 ש"ח ולא 17 אלף כמו בכיתה רגילה.



קיימים במכללה שני מסלולי לימוד:
  1. מסלול לימוד חופשי, בלי תעודה, להעשרת ידע כללי.
    מסלול לימוד חופשי, מתאים בעיקר למי שעובד בתחום וכבר יש לו תעודות והוא לא רוצה עוד מבחנים ותעודות.

  2. מסלול עם תעודה - מתאים בעיקר לתלמידים חדשים המעוניינים בקורס מסודר,
    הכולל הגשת עבודות ופרוייקט גמר. מסלול זה מעניק בסיומו תעודת מקצוע בינלאומית.
    למעשה ההבדל היחיד בין שני המסלולים זה פרויקט גמר בסוף.
    אם מגישים את פרויקט גמר - מקבלים תעודה.
    בדיקת פרויקט גמר והנפקת תעודה כרוכים בתשלום נוסף, כפי שכתוב בדף ההרשמה.

בסיום קורס ניתן לקבל תעודות הבאות:
1. תעודה של המכללה - מותנה בהגשת פרוייקט גמר בסוף הקורס
2. תעודת הסמכה בינלאומית של מיקרוסופט העולמית - מותנה במעבר מוצלח של מבחן הסמכה חיצוני של מיקרוסופט (מבחן זה מתבצע כל שבוע במרכז בחינות מורשה בתל-אביב)


מידע כללי:
1. חומר הלימוד מורכב ממאגר עצום ומסודר מאוד של סרטים מקצועיים, הניתנים לצפיה מהבית. מאגר זה כולל הרצאות מוקלטות בעברית בצורה מסודרת ע"י המרצים הטובים ביותר. רשימת הסרטים המלאה נמצאת בתפריט בצד ימין.
2. כל סטודנט במכללה מקבל שם וסיסמה לצורך גישה לשרת הקבצים שלנו.
השרת מכיל את כל התוכנות הדרושות ללימוד וכן חומר עזר
3. הקורסים מועברים בהתאם לסילבוסים של החברות המובילות: Microsoft, Cisco