PracticU

איך לכתוב נכון Stored Procedure

בלי כתוביותעם כתוביות
PracticU › קורס DBA אפליקטיבי - שפת SQL למתחילים › איך לכתוב נכון Stored Procedure
מילון מושגים:
פרוצדורה מאוחסנת - קטע קוד SQL שמור במסד הנתונים שאפשר להפעיל לפי שם, לביצוע חוזר של פעולות על הנתונים.
רשומה - שורה בטבלת מסד נתונים שמרכזת את כל השדות של פריט אחד, למשל כל הפרטים של לקוח יחיד.
עמודה - שדה בטבלת מסד נתונים שמחזיק ערך מסוג מסוים עבור כל שורה, למשל שם או תאריך.
פרמטר - ערך שמועבר לפונקציה או לפקודה כקלט, ומשפיע על אופן פעולתן ועל התוצאה שהן מחזירות.

איך לכתוב נכון Stored Procedure
בשיעור מוצגות דרכים לכתוב Stored Procedure לעדכון רשומה, כך שאפשר לשנות כל עמודה בנפרד בלי לשלוח את כל הערכים.
השלבים העיקריים
1. הבעיה: אתר שרוצה לעדכן עמודה אחת בכל פעם לא צריך לשלוח עמודה נוספת כשהיא לא משתנה. הפתרון הוא פרוצדורה שבה כל הפרמטרים אופציונליים.
2. פרמטרים עם ברירת מחדל NULL: בהגדרת הפרוצדורה כל פרמטר מלבד מזהה העובד מקבל ערך ברירת מחדל NULL. מי שלא שולח ערך לא מעדכן את העמודה.
3. הטריק עם ISNULL: בפקודת UPDATE כותבים LastName = ISNULL(@LastName, LastName). אם הפרמטר ריק מחזירים את הערך הקיים בעמודה, ואם יש ערך מחזירים אותו.
4. עדכון לפי מזהה: בסוף הפקודה ב-WHERE מופיע מזהה העובד, כך שרק השורה הנכונה מתעדכנת.
5. הדגמה: מריצים את הפרוצדורה עם מזהה העובד ושם פרטי חדש בלבד. לפני ואחרי ההרצה מוצג שרק השם הפרטי השתנה.
6. עדכון כמה עמודות יחד: אותו מנגנון מאפשר לשנות גם תואר ושם משפחה באותה קריאה, או לשנות עמודה אחת בלבד.
פקודות והגדרות
- @LastName NVARCHAR(40) = NULL
- UPDATE Employees SET LastName = ISNULL(@LastName, LastName) WHERE EmployeeID = @EmployeeID
- EXEC employees @EmployeeID = 1, @FirstName = N'דוד'
טעויות נפוצות
- אם לא מגדירים ערך ברירת מחדל NULL, הפרמטר יהיה חובה ויחייב את הקורא לשלוח את כל הערכים.
- מי שמשתמש ב-ISNULL צריך לזכור שערך ריק שנשלח במכוון לא יתקבל כערך ריק, כי הוא יתעלם.
שימו לב
הדפוס הזה שומר על פרוצדורה אחת שמתאימה לכל מקרה עדכון, והקוד נשאר קל לתחזוקה.
השיעור הבא בקורס: cast sql

פרקי ההרצאה: איך לכתוב נכון Stored Procedure

  1. 00:00

    המלצות לכתיבת פרוצדורה נכונה

  2. 00:58

    יצירת פרוצדורה לעדכון employees

  3. 01:37

    פרמטרים חובה ופרמטרים אופציונליים

  4. 02:58

    הגדרת פרמטרים לכל העמודות

  5. 03:48

    עדכון עמודה רק כשנשלחה

  6. 04:31

    ISNULL: בחירת הערך הראשון שאינו ריק

  7. 05:06

    בדיקה של ISNULL עם משתנה

  8. 06:25

    שימוש ב-ISNULL לשמירת ערך קיים

תמלול ההרצאה: איך לכתוב נכון Stored Procedure

הטקסט המלא של הדקות הראשונות בהרצאה «איך לכתוב נכון Stored Procedure» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

    שלום לכולם, ברוכים הבאים להרצאה איך לכתוב נכון פרוצדורה. זאת המלצה, אבל המלצה מאוד חזקה. זה חבר'ה תותחים, הראו לי את הטריקים האלו, ואני רוצה לחלוק את הטריקים האלו איתכם.

  2. 00:16

    אז תחשבו שיש לי פה נניח טבלה כלשהי, employees, שיש בה פה הרבה עמודות כמו שאתם יכולים לראות, ואני רוצה שתהיה לי אפשרות לשנות את כל העמודות האלו דרך סטורט פרוציג'ר.

  3. 00:30

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

  4. 00:39

    איך אני אשנה כל פעם עמודה אחרת על ידי פרוצדורה אחת בצורה יפה, בלי לשלוח שם של עמודה כסטרינג או כל מיני דברים כאלו, אוקיי?

  5. 00:50

    איך כל פעם לשנות עמודה אחרת בפרוצדורה אחת? אז בואו תראו את הטריק. אני עושה סטורט פרוצדג'ר חדש וקורא לו נניח בשם employees, לקבוע ערכים של employees, עכשיו מגיעים הפרמטרים, איזה פרמטרים?

  6. 01:19

    רק תנו לי שנייה פה, סלקט, סתם נניח כוכבית from employees, אני רוצה פה פשוט להעתיק את השמות של העמודות, אלטף אחד לחצתי, השם של זה אלטף אחד, employee ID, טוב בואו נתחיל, אז אני עושה פה שטרודל, employee ID, שזה מגיע לי כפרמטר מסוג אינטג'ר,

  7. 01:41

    אוקיי, הפרמטר הזה הוא פרמטר חובה, הלאה, הפרמטר השני זה last name, אני קורא לו שטרודל last name ואומר לו שהוא nvarchar אני מעתיק מפה 40 אוקיי יפה מאוד עכשיו שימו לב מה אני מוסיף פה אם לא שלחו לי את ה last name אם אף אחד לא שלח לי את ה last name נניח לא רוצים לשנות אותו לא שלחו לי את הפרמטר הזה

  8. 02:10

    אני אומר שהוא לא חובה אני לבד הכניס אליו ערך ברירת מחדל שהוא נעל יפה מאוד first name first name אני עושה שטרודל first name שזה שם משתנה חדש אם לא שולחים לי את השם משתנה החדש הזה אז אני אעשה אותו nvarchar 20 יפה מאוד הלאה הבא טייטל אם שלחו לי טייטל

  9. 02:44

    מצוין מה זה nvarchar 60 כן הטריק הוא שאני לא מחייב לשלוח את הפרמטר אז nvarchar 60 וככה אני עובר על כל העמודות אוקיי תחשבו שיש לי פה את כל העמודות ככה אני כותב את כל העמודות ו-title שווה n var 9.50, יופי.

  10. 03:21

    birthday זה שווה ל-data time, והוא יכול להיות נ"ל. מה זה אומר? נ"ל זה אומר שלא שלחו לי את הפרמטר הזה. ו-hirdate יכול להיות נ"ל. טוב, הבנתם את הרעיון, כן?

  11. 03:40

    אני לא אעשה את כל העמודות, אבל הבנתם את הרעיון. אתם ככה ממשיכים עם כל העמודות, אוקיי? אתם ממשיכים עם כל העמודות. עכשיו, איך כותבים את הקוד?

  12. 03:50

    שימו לב את הטריק בכתיבת הקוד. זה אני לא צריך. update, update של employees set אני קובע שעמודה שקוראים לה last name עמודת last name שווה ושימו לב זה הטריק is null אם is null זאת פונקציה שמחזירה את הערך הראשון שנתנו לה אבל אם הערך הראשון הזה הוא null אז היא תחזיר את הערך

  13. 04:31

    השני נניח פה aaa זאת אומרת is null מחזירה לנו ערך כלשהו החוצה בואו נראה is null בנפרד לפני שאני אמשיך הלאה אחרת אתם לא תבינו מה אני רוצה, אני פותח שאילתה חדשה, פה New Query, אני עושה נניח דיקלר, אני מכריז על משתנה שנקרא Last Name,

  14. 04:58

    נותן לו ערך בי בי בי בי בי בי בי, ועושה לו סלקט או פרינט, תדפיס לי האם איזנה, על מה יקרה עכשיו? זה nvarchar, nvarchar 100, אוקיי? סט, אוקיי, הכרזתי על המשתנה Last Name כ-nvarchar 100, הכנסתי לו ערך בי בי בי ואז מה יקרה מה איזנאל

  15. 05:32

    תעשה מה פונקציית איזנאל תעשה אם הערך הראשון הוא נעל היא תדפיס את החלק הזה אם הוא לא נעל היא תדפיס את החלק את הלאסט ניים את הפרמטר הראשון שימו לב היא מדפיסה בי בי בי למה כי זה לא נעל אבל אם אני עושה את זה בהערה וזה הופך להיות נעל כי אין לו שום ערך היא מדפיסה איי איי איי למה היא מדפיסה איי איי כי

  16. 06:02

    כי החלק הזה הוא נעל, אם זה נעל, אז היא מדפיסה, הבנתם? אבל אם זה לא נעל, היא מדפיסה אותו. אז מה זה משנה לי? שימו לב, פה טריק.

  17. 06:13

    אני אומר, תקשיב, העמודה last name היא שווה למה? ל-isnal. אם יש לי last name חדש, אם העבירו לי last name חדש, והוא לא נעל, כי העבירו לי אותו פה, הוא לא נעל, אז היא תיכנס לפה.

  18. 06:33

    אם לא העבירו לי last name בפרמטרים, זה לא פרמטר חובה, ואז נכנס עליו נעל, אז last name שווה ל-last name ושום דבר לא השתנה.

  19. 06:43

    כאילו אני לא משנה כלום, מה שלא השתנה אני לא משנה. יפה. זאת אומרת שעכשיו, שימו לב, מה זה נותן לי? בשביל מה כל השטות הזאת טובה?

  20. 06:54

    אני יכול לעשות דבר כזה. בואו נעשה את זה ככה, first name שווה ל-first name, שטרודל first name.

  21. 07:13

    זאת אומרת, אני אומר כך, אם נתנו לי last name פה, אם נתנו לי פה last name, תכניס אותו ל-last name. אם לא נתנו לך last name והוא נעל, מה שהיה בעמודה הזאת, זה מה שיישאר בעמודה הזאת.

  22. 07:27

    first name אותו דבר.

לקורס המלא: קורס SQL ו‑DBA אפליקטיבי

ההרצאה הקודמת: הרשאות על Stored Procedure

ההרצאה הבאה: cast sql

הרצאות קשורות מקורסים אחרים

  • קריאה ל-Stored Procedure
  • שימוש ב-Stored Procedure - על-ידי DTO
  • איך ללמוד נכון בקורס אונליין
  • שימוש ב-Stored Procedures

קורסים נוספים במסלול

  • קורס NoSQL - MongoDB
  • קורס SSIS
  • קורס BI - ניתוח מסדי נתונים - Qlik Sense
  • קורס Power BI