עזרה בsql בנושא פונקציות (סקלריות וטבלאיות)
-
א. האם פונקציה חייבת להחזיר משתנה/ טבלה?
ב. איך משתמשים בפונקציה שמחזירה טבלה?
תודה -
@Sara-Rivka כתב בעזרה בsql בנושא פונקציות (סקלריות וטבלאיות):
א. האם פונקציה חייבת להחזיר משתנה/ טבלה?
delete לא מחזיר כלום
ב. איך משתמשים בפונקציה שמחזירה טבלה?
מה זאת אומרת איך משתמשים? את מגישה שאילתה, ומקבלת תגובה עם הנתונים שביקשת
למשלSELECT * FROM tablename
תחזיר את כל הנתונים שבטבלה tablename
אבל
SELECT * FROM users WHERE name='admin';
יחזיר לך רק את הנתונים של היוזר admin מתוך טבלת users
-
@Sara-Rivka ב-SQLServer יש שני סוגים עיקריים של פונקציות:
- פונקציה סקלרית - מחזירה ערך בודד, למשל INT,BIT, VARCHAR(64) וכו'
- פונקציה טבלאית - מחזירה טבלה. כלומר תוצאה של SELECT
הסוג הזה מתחלק ל-2 תתי-סוגי פונקציות:
2.1 Inline - פונקציה זו תמיד מכילה פקודה בודדת שמתחילה במילה השמורהRETURN
דוגמא:
CREATE FUNCTION fn_GetUserById(INT UserId) RETURNS TABLE AS RETURN ( SELECT * FROM Users WHERE Id = @UserId )
היתרון של סוג פונקציה כזה הוא שהוא יחסית יעיל, בהשוואה לסוג הבא.
2.2 פונקציה מרובת פקודות (Multi-Statement Function) - שמאפשרת לבצע כמה פקודות ברצף
התחביר שלה שונה בכמה אופנים:
א. נדרשת הגדרה מראש של מבנה הטבלה שיוחזר.
ב. הפקודות מוקפות בבלוקBEGIN
-END
ג. חובה לסיים את הפונקציה בפקודהRETURN
דוגמא:
CREATE FUNCTION fn_BestStudents(MinScore INT) RETURNS @ResultTable TABLE ( StudentId INT, AverageScore INT ) AS BEGIN SELECT Students.Id, Avg(Tests.Score) INTO @ResultTable FROM Students INNER JOIN Tests ON Students.Id = Tests.StudentId GROUP BY Students.Id RETURN END
הסוג הזה של פונקציות בעייתי מבחינת יעילות, ובאופן כללי יש להמנע משימוש בו.
-
@dovid כתב בעזרה בsql בנושא פונקציות (סקלריות וטבלאיות):
@צבי-ש נראה לי החמצת את עיקר השאלה, היא שואלת על פונקציה, מן הסתם של SQL SERVER.
לא הראית בדוגמה איך משתמשים בפונקציה של SQL שמחזירה טבלה, וגם פונקציה חייבת תמיד להחזיר ערך, אחרת משתמשים בפורצדורה.אכן, לכך התכוונתי.
פשוט המורה אמרה שכדאי להשתמש בפונקציה אבל אני רואה שזה לא מעשי...@OdedDvir כתב בעזרה בsql בנושא פונקציות (סקלריות וטבלאיות):
@Sara-Rivka ב-SQLServer יש שני סוגים עיקריים של פונקציות:
- פונקציה סקלרית - מחזירה ערך בודד, למשל INT,BIT, VARCHAR(64) וכו'
- פונקציה טבלאית - מחזירה טבלה. כלומר תוצאה של SELECT
הסוג הזה מתחלק ל-2 תתי-סוגי פונקציות:
2.1 Inline - פונקציה זו תמיד מכילה פקודה בודדת שמתחילה במילה השמורהRETURN
דוגמא:
CREATE FUNCTION fn_GetUserById(INT UserId) RETURNS TABLE AS RETURN ( SELECT * FROM Users WHERE Id = @UserId )
היתרון של סוג פונקציה כזה הוא שהוא יחסית יעיל, בהשוואה לסוג הבא.
2.2 פונקציה מרובת פקודות (Multi-Statement Function) - שמאפשרת לבצע כמה פקודות ברצף
התחביר שלה שונה בכמה אופנים:
א. נדרשת הגדרה מראש של מבנה הטבלה שיוחזר.
ב. הפקודות מוקפות בבלוקBEGIN
-END
ג. חובה לסיים את הפונקציה בפקודהRETURN
דוגמא:
CREATE FUNCTION fn_BestStudents(MinScore INT) RETURNS @ResultTable TABLE ( StudentId INT, AverageScore INT ) AS BEGIN SELECT Students.Id, Avg(Tests.Score) INTO @ResultTable FROM Students INNER JOIN Tests ON Students.Id = Tests.StudentId GROUP BY Students.Id RETURN END
הסוג הזה של פונקציות בעייתי מבחינת יעילות, ובאופן כללי יש להמנע משימוש בו.
תודה על התגובה המפורטת.
את כל מה שכתבת כאן, יש לי במחברת...
רציתי לשאול האם קיימת אופציה שהפונקציה לא תחזיר כלום או שאי אפשר, ודוד ענה לי ע"ז.תודה לכולם!