fbpx

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

פונקציות על הערך NULL

 

שם הפונקציה

תפקיד הפונקציה

דוגמא

NVL

ממירה ערך NULL לערך ממשי

 NVL(NULL, 'Hello') returns Hello

NVL2

מקבלת 3 ארגומנטים

1. ערך ראשון – ערך רגיל

2. ערך שני – ערך להצגה במידה והערך לא NULL

3. ערך שלישי – ערך להצגה   במידה והערך NULL

 NVL2('Real Value', 'Not Null', 'Null!') returns 'Real Value'
 NVL2(NULL, 'Not Null', 'Null!') returns 'Null!'

 

NULLIF

מקבלת 2 ערכים

v     אם הערכים שווים היא מחזירה NULL

v     אם הערכים שונים היא מחזירה את הערך הראשון

 NULLIF('hello' , 'hello') returns NULL
 NULLIF('hello' , 'goodbye') returns 'hello'

COALESCE

מקבלת רשימת ערכים, מחזירה את הראשון מבינהם שאינו NULL

 COALESCE(NULL, 'Hello', 'World') returns 'Hello'

 

פונקציות תנאי

מאפשרות לנו להחזיר תוצאות ספציפיות לכל שדה ושדה לפי ערכו.

 

פונקציית CASE

CASE   WHENא  תנאי THEN 'תוצאה א'

       WHENב   תנאיTHEN 'תוצאה ב'

       WHENג  תנאי THEN 'תוצאה ג'

       ELSE 'תוצאה ד'   

END

 

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

SELECT last_name , salary , 

       CASE WHEN salary BETWEEN 0     AND 5000  THEN ‘Grade_A’

            WHEN salary BETWEEN 5001  AND 10000THEN ‘Grade_B’

            WHEN salary BETWEEN 10001 AND 17000 THEN ‘Grade_C’

            ELSE ‘Grade ‘D’     

       END AS “SALARY_GRADES”

FROM employees 

 

v     כל משפט CASE מוגדר כעמודה בפני עצמה.

v     התנאי לאחר משפט WHEN יכול להיות כל תנאי שניתן לכתוב לאחר משפט WHERE.

v     ניתן לחזור על חלק THEN WHEN לפי הצורך.

v     חלק  ELSE הוא רשות.

v     חלק END הוא חובה.

v     לא חובה להגדיר כינוי לכל עמודת  CASE לאחר END אך מאוד רצוי.

 

פונקציית DECODE

DECODE(עמודה   , ערך 1 ,   תוצאה 1

               , ערך 2  , תוצאה 2

               , ערך 3  , תוצאה 3

               , ערך דיפולטיבי)

 

בדוגמא זו אנו מציגים את שם משפחתו של העובד, מספר מחלקתו, ועמודה חדשה – מבוססת על DECODE אשר מציגה ערכים שונים בהתאם למספר מחלקתו של העובד:

SELECT last_name , department_id ,

       DECODE(department_id   , 80  , 'DEP_80'

                             , 90  , 'DEP_90'

                             , 110 , 'DEP_110'

                           , 'Some Other DEP') AS "DEP"

FROM employees

v     כל משפט DECODE מוגדר כעמודה בפני עצמה.

v     הערכים שנכתבים בתוך DECODE חייבים להיות מושווים לעמודה.

v     ניתן לכתוב את חלק ה'ערך-תוצאה' לפי הצורך.

v     הערך הדיפולטיבי הוא רשות.

v     לא חובה להגדיר כינוי לכל עמודת DECODE, אך מאוד רצוי לעשות כן.