דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. עזרה בsql בנושא פונקציות (סקלריות וטבלאיות)

עזרה בsql בנושא פונקציות (סקלריות וטבלאיות)

מתוזמן נעוץ נעול הועבר תכנות
5 פוסטים 4 כותבים 614 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • Sara RivkaS מנותק
    Sara RivkaS מנותק
    Sara Rivka
    כתב ב נערך לאחרונה על ידי
    #1

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

    צבי-שצ תגובה 1 תגובה אחרונה
    0
    • צבי-שצ מחובר
      צבי-שצ מחובר
      צבי-ש
      השיב לSara Rivka ב נערך לאחרונה על ידי
      #2

      @Sara-Rivka כתב בעזרה בsql בנושא פונקציות (סקלריות וטבלאיות):

      א. האם פונקציה חייבת להחזיר משתנה/ טבלה?

      delete לא מחזיר כלום

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

      מה זאת אומרת איך משתמשים? את מגישה שאילתה, ומקבלת תגובה עם הנתונים שביקשת
      למשל

      SELECT * FROM tablename
      

      תחזיר את כל הנתונים שבטבלה tablename

      אבל

      SELECT * FROM users
      WHERE name='admin';
      

      יחזיר לך רק את הנתונים של היוזר admin מתוך טבלת users

      כיף לגלות דברים חדשים.
      חוק ה-50-50-90: בכל פעם שיש סיכוי של 50-50 שמשהו יעבוד, יש סיכוי של 90 אחוז שהוא לא. מקור

      תגובה 1 תגובה אחרונה
      3
      • dovidD מחובר
        dovidD מחובר
        dovid ניהול
        כתב ב נערך לאחרונה על ידי dovid
        #3

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

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        Sara RivkaS תגובה 1 תגובה אחרונה
        3
        • OdedDvirO מנותק
          OdedDvirO מנותק
          OdedDvir
          כתב ב נערך לאחרונה על ידי
          #4

          @Sara-Rivka ב-SQLServer יש שני סוגים עיקריים של פונקציות:

          1. פונקציה סקלרית - מחזירה ערך בודד, למשל INT,BIT, VARCHAR(64) וכו'
          2. פונקציה טבלאית - מחזירה טבלה. כלומר תוצאה של 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
          

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

          תגובה 1 תגובה אחרונה
          4
          • Sara RivkaS מנותק
            Sara RivkaS מנותק
            Sara Rivka
            השיב לdovid ב נערך לאחרונה על ידי
            #5

            @dovid כתב בעזרה בsql בנושא פונקציות (סקלריות וטבלאיות):

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

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

            @OdedDvir כתב בעזרה בsql בנושא פונקציות (סקלריות וטבלאיות):

            @Sara-Rivka ב-SQLServer יש שני סוגים עיקריים של פונקציות:

            1. פונקציה סקלרית - מחזירה ערך בודד, למשל INT,BIT, VARCHAR(64) וכו'
            2. פונקציה טבלאית - מחזירה טבלה. כלומר תוצאה של 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
            

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

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

            תודה לכולם!

            תגובה 1 תגובה אחרונה
            0

            בא תתחבר לדף היומי!
            • התחברות

            • אין לך חשבון עדיין? הרשמה

            • התחברו או הירשמו כדי לחפש.
            • פוסט ראשון
              פוסט אחרון
            0
            • דף הבית
            • קטגוריות
            • פוסטים אחרונים
            • משתמשים
            • חיפוש
            • חוקי הפורום