PracticU

Stored Procedure vs Function

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

Stored Procedure vs Function
בסרטון מוסבר ההבדל בין stored procedure לבין פונקציה ב-SQL Server: מה כל אחד יכול לעשות, איפה אפשר להשתמש בו, ומה אסור לו.
השלבים העיקריים
1. ההבדל המרכזי: פונקציה לא יכולה לשנות נתונים בטבלאות. ניסיון לכתוב UPDATE בתוך פונקציה נדחה עם השגיאה Invalid use. Stored procedure יכולה לעדכן נתונים.
2. פונקציה לחישוב: מגדירים פונקציה שמקבלת פרמטר ומחזירה ערך, למשל הפרמטר כפול 10. הפונקציה מחזירה ערך אחד, בשם הפונקציה.
3. שימוש בתוך SELECT: פונקציה אפשר להפעיל בתוך פקודת SELECT, ואפשר גם להשתמש בה בתנאי WHERE. בהדגמה מוצגת טבלת העובדים עם עמודה מחושבת, ותנאי שמסנן לפי ערך שמחזירה הפונקציה.
4. Stored procedure: פרוצדורה יכולה לעדכן טבלה, להחזיר נתונים כטבלה, ולקבל פרמטרים. אי אפשר להפעיל אותה בתוך SELECT.
5. טרנזקציות: בתוך Stored procedure אפשר להשתמש בטרנזקציות, ובתוך פונקציה לא.
איך זה עובד
פונקציה נועדה לחישובים קטנים שמשולבים בשאילתה, ולכן יש לה מגבלות. פרוצדורה היא כלי חזק יותר שמבצע פעולות, ולכן היא לא יכולה להיות חלק משאילתה.
טעויות נפוצות
- ניסיון לשנות נתונים בתוך פונקציה נכשל.
- ניסיון להפעיל פרוצדורה בתוך SELECT נכשל.
- פונקציה חייבת להחזיר ערך, ולא מחזירה שום דבר אם לא הוגדר כך.
שימו לב
כשצריך לחשב ערך בתוך שאילתה משתמשים בפונקציה, וכשצריך לשנות נתונים משתמשים בפרוצדורה.
השיעור הבא בקורס: פונקציה Scalar - ללא פרמטרים

פרקי ההרצאה: Stored Procedure vs Function

  1. 00:00

    הבדל מרכזי: פונקציה לא משנה נתונים

  2. 00:53

    יצירת פונקציה עם פרמטר והחזרת ערך

  3. 02:11

    למה פונקציה לא יכולה לעשות UPDATE

  4. 03:26

    שימוש בפונקציה בתוך SELECT

  5. 05:03

    יצירת Stored Procedure לעומת הפונקציה

  6. 06:24

    הפעלת Stored Procedure עם EXEC

  7. 06:56

    Stored Procedure יכולה לעדכן נתונים

תמלול ההרצאה: Stored Procedure vs Function

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

  1. 00:02

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

  2. 00:15

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

  3. 00:34

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

  4. 00:56

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

  5. 01:25

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

  6. 01:37

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

  7. 01:52

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

  8. 02:06

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

  9. 02:21

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

  10. 02:32

    הכל עובד. מה אני לא יכול לעשות? זה update. שימו לב מה קורה כשאני עושה update. אני עושה update, נניח טבלת employees, עושה set, לא יודע מה, first name שווה aaa, פר אימפלואי איי-די שווה נניח אחד בוא רק נראה שיש לנו באמת אימפלואי איי-די אחד יש לנו אימפלואי איי-די אחד

  11. 02:57

    אז יופי תסתכלו מה קורה כשאני רוצה לעשות בתוך הפונקציה update מה הוא כותב לי invalid use אסור לעשות update אסור לעשות update בתוך הפונקציה זאת אומרת פונקציה נועדה רק לאסוף כמה חישובים קטנים ולתת את זה למי שקרא לה זה יותר קטן כזה לעומת זאת לעומת זאת סטורט פרוסיג'ר כן יכול לעשות את זה. עוד מעט תהפוך את זה לסטורט פרוסיג'ר ותראו

  12. 03:26

    שהוא כן יכול לעשות את זה. אז איך אני משתמש בפונקציה? איך אני משתמש בפונקציה? אני עושה דבר כזה, נניח אני רוצה להשתמש ב-MyTest Function.

  13. 03:39

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

  14. 03:53

    זהו, עד הגו. עכשיו אני עושה סלקט לדוגמה כוכבית From Employees, אוקיי? עשיתי כוכבית Employees, יש לי תוצאות. העמודה הראשונה, אני יכול להגיד לה שזה MyTest Function, ולתת לה בסוגריים נניח 8, פסיק, כל העמודות מתוך ה-Employee.

  15. 04:15

    אתם רואים? זאת אומרת, אני יכול להשתמש בה תוך כדי משהו. ואז הוא אומר שהוא לא רואה אותה. למה הוא לא רואה אותה? הנה, הוא רואה אותה. צריך לרשום לו גם את היוזר שיצר אותה, את הסכמה.

  16. 04:30

    הנה, אתם רואים? כי הוא קרא, החזיר במקום 8, 800. כי עשינו פה פער רם כפול 8. לדוגמה, אנחנו יכולים לעשות לו as celery, אוקיי?

  17. 04:43

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

  18. 04:55

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

  19. 05:12

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

  20. 05:40

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

  21. 06:15

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

  22. 06:43

    עובד? עובד. יכלתי גם לעשות שטרודל, פראם 1 שווה 8. כמובן שאתם נותנים פרמטרים בעלי משמעות, אוקיי?

  23. 06:54

    הלאה, מה עוד אני יכול לעשות? אני יכול לעשות פה Update, אני יכול פה לשנות, זה היתרון של Store Procedure.

  24. 07:01

    עוד פרוציג'ר הרבה יותר קזת update last name last last name שנייה from update employees שנייה קודם כל update employees set last name שווה נעשה first name first name שווה yoni where employee id שווה 1 נכון יופי שימו לב הדבר הזה כן עובד עכשיו הוא לא נותן לי בגלל שזה כבר נוצר אלתר אלתר זה לשנות יופי נותן לי עכשיו אני מריץ את הפרוצדורה, שימו לב, היא

  25. 07:49

    לא יכולה להיות בתוך סלקט. והשם הראשון שיש לנו,

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

ההרצאה הקודמת: cast sql

ההרצאה הבאה: פונקציה Scalar - ללא פרמטרים

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

  • קריאה ל-Stored Procedure
  • שימוש ב-Stored Procedure - על-ידי DTO
  • What is a Function
  • פונקציה - Function

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

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