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

יצירת טריגר Trigger instead of

קורסים למנהלי רשת מסלול מנהלי רשת
עם התמחות בשרתי מיקרוסופט
מסלול סייבר והאקינג - 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 instead of

בשיעור זה מעמיקים בטריגרים מסוג instead of: רואים הוספה שנכשלת בגלל עמודת חובה, יוצרים טריגר instead of Insert על טבלת העובדים שמשלים ערך ברירת מחדל והופך את ההוספה הכושלת להצלחה, בונים view משלוש טבלאות, מגלים שאי אפשר להוסיף אליו שורות בגלל השגיאה Msg 4405, ופותרים זאת בעזרת טריגר instead of insert על ה view עצמו שמפזר את השורה לטבלאות הבסיס, ובסוף לומדים לשלוט בסדר ההדלקה של כמה טריגרים על אותה פעולה בעזרת sp_settriggerorder.

נושאי הסיכום המוצגים בשיעור:
1. הוספה שנכשלת בגלל עמודת חובה: מנסים "insert into Employees(firstname)" עם "values('Avi')", כלומר להוסיף עובד עם שם פרטי בלבד ובלי שם משפחה, והפעולה נכשלת בשגיאה "Msg 515, Level 16, State 2, Line 1" שאומרת שאי אפשר להכניס ערך NULL לעמודת LastName בטבלת Employees, כי העמודה מוגדרת שלא לקבל ערכים ריקים, והשורה לא נכנסת.
2. טריגר instead of Insert על טבלת העובדים: כותבים "create trigger EmpInsertNull" על טבלת העובדים עם "instead of Insert", ובגוף הטריגר "insert into Employees (FirstName , LastName )" עם "select FirstName , 'DefaultValue'", כלומר הטריגר לוקח את השורות מהטבלה הווירטואלית inserted ומשלים בעצמו ערך ברירת מחדל לשם המשפחה. מריצים שוב את ההוספה שנכשלה קודם, והפעם היא מצליחה, ובדיקה של הטבלה מראה שורה חדשה שבה השם הפרטי Avi ושם המשפחה DefaultValue.
3. view משלוש טבלאות: בונים "create view vw_emp_trritory" שמחזיר לכל עובד את תיאור הטריטוריה שלו: "select e.FirstName , e.LastName , t.TerritoryDescription", אחריו "from Employees e , EmployeeTerritories empT , Territories t", ואז "where e.EmployeeID = empT.EmployeeID" ואז "and empT.TerritoryID = t.TerritoryID". כלומר ה view מחבר שלוש טבלאות: העובדים, טבלת הקישור בין עובדים לטריטוריות, והטריטוריות עצמן.
4. הוספה דרך ה view נכשלת: מנסים "insert into vw_emp_trritory" עם "values ('Test1', 'Test2' ,'Boston' )", והפעולה נכשלת בשגיאת Msg 4405 עם ההסבר "View or function 'vw_emp_trritory' is not updatable because the modification affects multiple base tables.", כלומר view שנבנה מכמה טבלאות בסיס אינו ניתן לעדכון ישירות.
5. טריגר instead of insert על ה view: הפתרון הוא טריגר מסוג instead of על ה view עצמו: "create trigger vwTriggerTrritoty", "on vw_emp_trritory", טריגר instead of להוספה. בגוף הטריגר מגדירים "declare @codeTrritory varchar(20)" ואז "set @codeTrritory = (select t.TerritoryID" עם "from Territories t , inserted i" ועם "where t.TerritoryDescription = i.TerritoryDescription", כלומר שולפים את מזהה הטריטוריה לפי התיאור שהגיע מההוספה. אחר כך "insert into Employees (FirstName , LastName )" עם "select i.FirstName , i.LastName from inserted i" מכניס את העובד לטבלת העובדים, ואז "insert into EmployeeTerritories(EmployeeID , TerritoryID)" עם "select @codeTrritory" מכניס לטבלת הקישור את מזהה העובד החדש יחד עם הטריטוריה. כך הוספה אחת דרך ה view מתפצלת אוטומטית לשלוש הטבלאות שלפנינו.
6. הטבלה הווירטואלית inserted קיימת רק בתוך טריגר: בזמן בניית הטריגר מריצים את שאילתת הברירה לבדה מחוץ לטריגר, ומקבלים את השגיאה "Msg 208, Level 16, State 1, Line 1" עם ההודעה "Invalid object name 'inserted'.", כלומר הטבלה הווירטואלית inserted אינה אובייקט אמיתי במסד הנתונים והיא זמינה רק בתוך גוף הטריגר בזמן שהוא ניצת.
7. שדרוג הטריגר עם set nocount on: מעדכנים את הטריגר בעזרת "alter trigger vwTriggerTrritoty" ומוסיפים בתחילת הגוף "set nocount on", שמונע את הדפסת הודעות ספירת השורות של הפקודות בתוך הטריגר. מריצים שוב את ההוספה ל view, והפעם היא מצליחה והשורות מתפזרות לטבלאות הבסיס.
8. סדר הדלקה של טריגרים, Trigger Firing Order: פותחים נושא חדש בהערה "--Trigger Firing Order" ובודקים את "sp_help sp_settriggerorder", שמציג שזו פרוצדורת מערכת שמקבלת בין השאר את הפרמטרים @triggername, @order, @stmttype ו @namespace. יוצרים "create table MyTable (id int identity not null)" ועליה שני טריגרים: "create trigger Table1" עם "on MyTable" על פעולת הוספה שמדפיס "print 'In Trigger Number 1'", ובדומה "create trigger Table2" שמדפיס "print 'In Trigger Number 2'". מריצים "insert into MyTable default values", ומגלים שברירת המחדל מדליקה רק את הטריגר הראשון שנוצר, ובחלון ההודעות מופיע רק In Trigger Number 1. בשלב מסוים מוחקים את הטריגר עם "drop trigger Table1" ויוצרים אותו מחדש כדי להמשיך להדגים.
9. קביעת סדר בעזרת sp_settriggerorder: מריצים "sp_settriggerorder @triggername = 'Table1', @order = 'First', @stmttype = 'insert'" כדי לקבוע את Table1 כטריגר שניצת ראשון, ואז "sp_settriggerorder @triggername = 'Table2', @order = 'Last', @stmttype = 'insert'" כדי לקבוע את Table2 כאחרון. אחרי ההגדרה, כל הוספה לטבלה מדליקה את שני הטריגרים לפי הסדר שנקבע, ובחלון ההודעות מופיע קודם In Trigger Number 1 ואז In Trigger Number 2. מנסים גם לקבוע טריגר שני כ First, ומקבלים את השגיאה "There is already a 'first' trigger for 'insert'.", כלומר לכל פעולה על הטבלה יכול להיות רק טריגר ראשון אחד ורק טריגר אחרון אחד. בסוף רואים שאפשר גם להגדיר טריגר עם הסדר None, שמחזיר אותו להתנהגות רגילה בלי סדר מיוחד.

בסיום השיעור למדנו להשתמש בטריגר instead of Insert כדי לתקן הוספות שנכשלות בגלל עמודות חובה, להכיר את הטבלה הווירטואלית inserted ואת כך שהיא זמינה רק בתוך טריגר, לבנות view משלוש טבלאות ולהפוך אותו לניתן להוספה בעזרת טריגר instead of insert שמפזר את השורה לטבלאות הבסיס, לשדרג טריגר עם alter trigger ו set nocount on, ולשלוט בסדר ההדלקה של כמה טריגרים על אותה פעולה בעזרת sp_settriggerorder עם הסדרים First, Last ו None. השיעור הבא עוסק בהכל על Stored Procedure.SR927VWTRG
סקר שוק נכון לתאריך – 01/09/2011

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

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


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

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


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

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


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

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



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

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

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


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