PracticU

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

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

יצירה ושימוש בפונקציות ב-SQL
פונקציה ב-SQL Server דומה ל-Stored Procedure בכך שהיא מקומפלת ומהירה, אבל היא תמיד מחזירה מידע. ההרצאה מסבירה את ההבדל ובונה פונקציה סקלרית שמוסיפה סימן דולר למחיר.
ההבדל מפרוצדורה
1. Stored Procedure: מריצים אותה כיחידה נפרדת, והיא יכולה לבצע select, insert, update ו-delete. היא לא חייבת להחזיר מידע (בעת insert לא חוזר דבר).
2. פונקציה: תמיד מחזירה מידע, ובדרך כלל שאילתה אחרת משתמשת בו לעיבוד נוסף. גם אפליקציה יכולה לקרוא לה.
הדוגמה: מחיר עם דולר
1. הניסיון בלי פונקציה: Select ProductName, '$' + UnitPrice לא עובד, כי שרשור עם + מתאים בין מחרוזת למחרוזת, ולא בין מחרוזת למספר. הפתרון הוא Concat('$', UnitPrice), שמקבלת כל סוג נתונים, וצריך לתת לעמודה כינוי כמו UnitPrice.
2. יצירת הפונקציה: Create Function FormattedPrice (@Price money) Returns nvarchar(20) As Begin Return Concat('$', @Price) End. סוג הפרמטר הוא money, כמו הסוג של UnitPrice בטבלה (נבדק ב-Design), וצריך שיהיה אותו סוג.
3. Returns ו-Return: Returns מגדיר איזה סוג נתונים הפונקציה מחזירה, ו-Return בגוף מחזיר את הערך עצמו.
4. איפה היא נשמרת: ב-Programmability ← Functions. זו פונקציה סקלרית (Scalar-valued) שנוצרה על ידי המשתמש, שונה מהפונקציות המובנות. יש גם פונקציות שמחזירות טבלה, אבל זה מעבר לתחום ההרצאה.
5. שימוש: Select ProductName, dbo.FormattedPrice(UnitPrice) From Products. המרצה מציין שנדרש לכתוב dbo. לפני השם, אחרת הפונקציה לא נמצאת, ושלא ידוע לו למה. כך אין צורך לחזור על החישוב בכל שאילתה.
שימו לב
- חשוב לשים go בין פקודות שאין קשר ביניהן.
- שם של פונקציה בשימוש חייב ללוות ב-dbo.
אפשר עכשיו ליצור פונקציה סקלרית משלכם ולקרוא לה מתוך שאילתות במקום לחזור על אותה לוגיקה.

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

  1. 00:00

    ההבדל בין Function ל-Stored Procedure

  2. 00:39

    פונקציה תמיד מחזירה מידע

  3. 02:08

    בעיית שרשור מחרוזת ומספר

  4. 02:47

    שרשור עם פונקציית CONCAT

  5. 03:21

    בניית פונקציה סקלרית

  6. 04:16

    הגדרת RETURNS וגוף הפונקציה

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

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

  1. 00:02

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

  2. 00:16

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

  3. 00:26

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

  4. 00:33

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

  5. 00:59

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

  6. 01:09

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

  7. 01:17

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

  8. 01:31

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

  9. 01:44

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

  10. 01:53

    נניח יש לנו פה שאילתה שאני רוצה to select product name unit price from products go. בואו נריץ את זה, נקבל שם של מוצר ומחיר. ואני מוצא את עצמי נניח הרבה פעמים אומר אני רוצה רגע להחזיר את זה למשתמש אבל אני רוצה להחזיר כאן את הסימן דולר כאן.

  11. 02:16

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

  12. 02:32

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

  13. 02:47

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

  14. 03:02

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

  15. 03:16

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

  16. 03:24

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

  17. 03:51

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

  18. 04:04

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

  19. 04:19

    return זה תחזיר, return זה מה היא מחזירה, זה דקלרטיבי. אני בעצם מגדיר מה הפונקציה מחזירה, איזה סוג נתונים היא מחזירה. והיא מחזירה מחוזת n var char, בואו נניח בגודל 20. רושם פה s וכאן רושם בגיד ו-end ובאמצע את הקוד של הפונקציה והקוד של הפונקציה זה מה היא פשוט מחזירה.

  20. 04:45

    הפונקציה מחזירה return ואני רוצה לבצע את הפעולה הזאת שתמיד הייתי עושה במקום לעשות

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

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

ההרצאה הבאה: איך נראה מסד נתונים תקין ?

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

  • יצירה ושימוש ב-Stored Procedure - המתאימות למחלקת Model
  • הגדרה ושימוש ב-Suite Setup
  • LINQ ל- SQL
  • התקנה של SQL

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

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