
Select ProductName, '$' + UnitPrice לא עובד, כי שרשור עם + מתאים בין מחרוזת למחרוזת, ולא בין מחרוזת למספר. הפתרון הוא Concat('$', UnitPrice), שמקבלת כל סוג נתונים, וצריך לתת לעמודה כינוי כמו UnitPrice.Create Function FormattedPrice (@Price money) Returns nvarchar(20) As Begin Return Concat('$', @Price) End. סוג הפרמטר הוא money, כמו הסוג של UnitPrice בטבלה (נבדק ב-Design), וצריך שיהיה אותו סוג.Returns ו-Return: Returns מגדיר איזה סוג נתונים הפונקציה מחזירה, ו-Return בגוף מחזיר את הערך עצמו.Select ProductName, dbo.FormattedPrice(UnitPrice) From Products. המרצה מציין שנדרש לכתוב dbo. לפני השם, אחרת הפונקציה לא נמצאת, ושלא ידוע לו למה. כך אין צורך לחזור על החישוב בכל שאילתה.go בין פקודות שאין קשר ביניהן.dbo.הטקסט המלא של הדקות הראשונות בהרצאה «יצירה ושימוש בפונקציות ב-SQL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שראינו מה זה סטורט פרוסיג'ר, בואו נראה מה זה פאנקשן ומה ההבדל ביניהם. סטורט פרוסיג'ר אנחנו יכולים לבצע סלקט, אינסרט, אפדייט, דיליט או המון דברים אחרים שאנחנו רוצים על הדטאבייס.
אפשר להריץ סטורט פרוסיג'ר מאפליקציה, אפשר להריץ סטורט פרוסיג'ר מכאן, מהקוד שלנו. כשאנחנו מריצים סטורט פרוסיג'ר אז אנחנו מריצים אותה בנפרד לגמרי.
כשבנינו מקודם איזושהי סטורט פרוסיג'ר שמחזירה את המוצרים לפי קטגוריה אז אנחנו פשוט מריצים את זה כיחידה נפרדת.
פונקציה זה משהו שמריצים והיא תמיד מחזירה מידע קודם כל סטורט פרוסיג'ר לא חייבת להחזיר לדוגמה אם אני מבצע בסטורט פרוסיג'ר אינסרט אז אני לא מחזיר מידע אני פשוט עושה אינסרט אבל פאנקשן תמיד תמיד מחזירה מידע ולרוב שאילתא אחרת משתמשת בפאנקשן בשביל להחזיר אליה מידע ולעשות מניפולציות נוספות על המידע הזה.
אבל גם אפליקציה יכולה לקרוא לפונקציה ולקבל ממנה את הנתונים. גם סטורט פרוסיג'ר וגם פונקציה מקומפלות ונשמרות בזיכרון כקוד מכונה, ולכן שתיהן מאוד מאוד מהירות.
אבל ההבדל, שוב, סטורט פרוסיג'ר זה קטע קוד שאני פשוט מריץ אותו, הוא יכול לעשות סלקט, הוא יכול לעשות אינסרטאפט ודלית.
פונקשן, משהו קצת אחר, הוא תמיד מחזיר לי מידע, שלרוב אני משתמש עם המידע הזה במקומות אחרים. בואו נייצר פונקציה, create function, שוב, אני תמיד אוהב לכתוב את המילים השמורות באותיות גדולות, לא חייבים כמובן.
אנחנו נניח מוצאים את עצמנו תמיד מתעסקים עם מחירים, ובואו נניח שהמחירים הם בדולרים, אבל אנחנו רוצים תמיד תמיד להציג דולר. אני רוצה להציג דולר ליד מחיר, כאשר אני בעצם מבצע את הבחירה.
האמת, אולי אפילו לפני שאני מתעסק עם הפונקציה ובונה אותה, בואו נראה איך הייתי עושה שאילתה כזאת בלי קשר.
נניח יש לנו פה שאילתה שאני רוצה to select product name unit price from products go. בואו נריץ את זה, נקבל שם של מוצר ומחיר. ואני מוצא את עצמי נניח הרבה פעמים אומר אני רוצה רגע להחזיר את זה למשתמש אבל אני רוצה להחזיר כאן את הסימן דולר כאן.
אתם יכולים להגיד טוב מה הבעיה? ניקח מחרוזת של הסימן דולר ותשרשר אותה עם פלוס כי למדנו ששרשור זה פלוס. בואו ניקח את זה ונריץ ואנחנו רואים שהוא לא עובד, אין לי פה דולר.
אני רואה שהוא לא מסתדר עם זה. האמת שהוא היה אמור לתת לי שגיאה מינימום אבל הוא גם לא נותן שגיאה. שרשור אתם יכולים לעשות רק בין מחרוזת למחרוזת ואם אתם מנסים לעשות שרשור בין מחרוזת למספר אז הדאטאבייס הספציפי הזה אומר לכם תשמעו אני לא מסתדר עם זה.
אם אתם רוצים בואו תבצעו שרשור עם פונקציה שנקראת con hat. זאת פונקציה שכן מסוגלת לקחת פרמטר ראשון, לקחת פרמטר שני, לא מעניין אותה מה סוגי הנתונים, ובאמת להצליח לשרשר.
אז אם אנחנו עכשיו מריצים את זה, אקסקיוט, אנחנו רואים שהוא וואלה, עובד. אנחנו כמובן צריכים לתת פה איזשהו שם לעמודה, לדוגמה בואו נקרא לה אותו דבר unit price.
נגדיר כי בגלל שהשתמשתי בפונקציה סקלרית אז אין לו אוטומטית שם והנה אנחנו רואים שהכל עובד. בואו נניח שאני מוצא את עצמי את זה עושה הרבה פעמים.
בואו נבנה פונקציה סקלרית במקום שנעשה את זה שוב ושוב ושוב בכל פעם מחדש. נקרא לה פונקציה for matted price ונגיד לה תשמעי הנה אני נותן לך שטרודל פרייס אמרנו כל המשתנים מתחילים בשטרודל הסוג שלו זה money כי פרייס גם בדאטאבייס מוגדר כמאני, אפשר לראות את זה גם אם אנחנו הולכים לפרודקטס
דיזיין, ואנחנו יכולים לראות שהיוניט פרייס הסוג שלו זה מאני, זה חשוב שהסוג יהיה אותו הדבר. ואנחנו קובעים כאן מה הפונקציה מחזירה. בואו רגע נעשה פה הפרדה.
האמת, בואו נשים את זה פה למעלה. זה היה ניסיון לעשות בלי פונקציה. עכשיו אנחנו רוצים להוסיף פונקציה. אז אני כותב פונקציה ש-returns עם s בסוף, שימו לב, יש גם return וגם returns.
return זה תחזיר, return זה מה היא מחזירה, זה דקלרטיבי. אני בעצם מגדיר מה הפונקציה מחזירה, איזה סוג נתונים היא מחזירה. והיא מחזירה מחוזת n var char, בואו נניח בגודל 20. רושם פה s וכאן רושם בגיד ו-end ובאמצע את הקוד של הפונקציה והקוד של הפונקציה זה מה היא פשוט מחזירה.
הפונקציה מחזירה return ואני רוצה לבצע את הפעולה הזאת שתמיד הייתי עושה במקום לעשות