PracticU

יצירה של Stored Procedures ב-SQL

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

יצירה של Stored Procedures ב-SQL
Stored Procedure הוא קטע קוד שנשמר בתוך מסד הנתונים ומריצים אותו בנפרד, בדומה לפונקציה בתכנות. ההרצאה מסבירה במה הוא שונה מ-view, בונה דוגמה פשוטה ומפרטת למה משתמשים בו.
ההבדל מ-view ויצירת פרוצדורה
1. יותר מ-select: בפרוצדורה אפשר לכתוב גם Insert, Update ו-Delete, כמה שאילתות, ולקבל ארגומנטים. למשל פרוצדורה שמוסיפה מוצר חדש לפי ערכים שנשלחים אליה.
2. מהירות: view הוא שאילתה שהמערכת מעתיקה ומריצה כאילו נכתבה מחדש, ואילו פרוצדורה עוברת קומפילציה לקוד מכונה ונשמרת במסד. שאילתה שאפליקציה שולחת צריכה להיות מקומפלת בכל פעם, ופרוצדורה לא.
3. יצירה: Create Procedure ProductsByCategory @CategoryID int As Select * From Products Where CategoryID = @CategoryID. משתנה מתחיל ב-@, וחשוב לסיים ב-go כדי שפקודות אחרות לא ייכנסו לגוף הפרוצדורה.
4. T-SQL: זו ההרחבה של SQL ל-SQL Server (Transact SQL), שמאפשרת פרוצדורות, פונקציות, משתנים, תנאים ולולאות.
5. איפה היא נשמרת: ב-Object Explorer תחת Programmability ← Stored Procedures.
6. הרצה: Exec ProductsByCategory 2 (בלי סוגריים). אפליקציה יכולה להריץ אותה ולקבל את הטבלה, בלי לשלוח את השאילתה.
שימושים
- מודולריות ושימוש חוזר: הקוד כתוב פעם אחת ולא באפליקציה.
- ביצועים: מהירה יותר משאילתה ששולחת האפליקציה ומ-view.
- אבטחה: אפשר ליצור משתמש במסד שאין לו הרשאות קריאה או כתיבה לטבלאות, אלא רק להריץ פרוצדורות. כך אפליקציה לא יכולה לעקוף את הפרוצדורות ולפגוע במידע, והמסד מגן על עצמו בלי להסתמך על ההגנות של האפליקציה.
- טרנזקציות: סימון תחילת וסוף סדרת פקודות, ואם משהו נכשל באמצע, חוזרים למצב שלפני. הדוגמה: העברת כסף בין שני משתמשים בבנק, שבה הוספה ליוזר אחד והורדה מהשני צריכות להצליח יחד.
- פרמטרים: יותר מפרמטר אחד.
- בדיקת נתונים: למשל לבדוק שמחיר לא שלילי או מוגזם לפני הוספת מוצר.
- לוגיקה עסקית: למשל מחיקת מוצר שגם מעבירה אותו לטבלת היסטוריה ומעדכנת מקומות נוספים.
- פחות תעבורת רשת: כמה select קשורים (לקוח והזמנותיו) בקריאה אחת.
יש מערכות שעובדות רק דרך פרוצדורות ולא מאשרות גישה ישירה לטבלאות, כי זה מסוכן מדי.
אחרי ההרצאה אפשר לכתוב Stored Procedure עם פרמטר, להריץ אותה עם Exec ולהבין מתי כדאי לבחור בה במקום view או שאילתה מהאפליקציה.
השיעור הבא בקורס: יצירה ושימוש בפונקציות ב-SQL

פרקי ההרצאה: יצירה של Stored Procedures ב-SQL

  1. 00:00

    מהי Stored Procedure

  2. 00:55

    אפשרויות הקוד ב-Stored Procedure

  3. 01:30

    קומפילציה למהירות לעומת View

  4. 02:09

    יצירה עם CREATE PROCEDURE

  5. 02:48

    הגדרת משתנים ו-T-SQL

  6. 03:47

    גוף ה-Procedure עם פקודת SELECT

תמלול ההרצאה: יצירה של Stored Procedures ב-SQL

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

  1. 00:02

    הדבר הבא שאנחנו הולכים לראות טיפה מתקדם אבל חשוב חשוב לראות את זה ולראות דוגמה של הדבר הזה וזה Stored Procedures. Stored Procedure בעברית שגרות מאוחסנות שזה מונח שלא משתמשים איתו בעברית רק Stored Procedures באנגלית קוראים לזה.

  2. 00:21

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

  3. 00:43

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

  4. 01:00

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

  5. 01:12

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

  6. 01:24

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

  7. 01:42

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

  8. 01:56

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

  9. 02:09

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

  10. 02:24

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

  11. 02:38

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

  12. 03:15

    sql server נקראת tsql כלומר transact sql זה בעצם מעין שפת הרחבה כזאת לשפת sql שכוללת אפשרות לייצר stored procedure אפשרות לייצר functions אפשרות לייצר משתנים תנאים לולאות יש פה המון דברים שאפשר לעשות פה זה ממש שפת תכנות אז אנחנו יכולים לכתוב פה המון קוד שבעצם מבצע כל מיני פעולות הדרושות על ידי stored procedure הרבה פעמים סטורט פרסידג'ר הוא משהו שהוא די

  13. 03:44

    נרחב מבחינת קוד, מכיל הרבה שורות קוד. למרות שהסטורט פרסידג'ר שלנו מאוד מאוד פשוטה. כל מה שאנחנו רוצים לעשות זה פקודת סלאק. בוא נניח all from product where categoryid שווה לפרמטר strudel categoryid ששלחו לי לפונקציה.

  14. 04:05

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

  15. 04:14

    Good, אנחנו נמצאים בנורף ווינד,

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

ההרצאה הקודמת: יצירה ושימוש ב-SQL Views

ההרצאה הבאה: יצירה ושימוש בפונקציות ב-SQL

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

  • שימוש ב-Stored Procedures
  • מודל שכבות - Stored Procedures
  • יצירה ושימוש ב-Stored Procedure - המתאימות למחלקת Model
  • התקנה של SQL

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

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