במדריך זה נכיר שני סוגים של פונקציות – פונקציות תנאי ועל הערך 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 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(עמודה , ערך 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, אך מאוד רצוי לעשות כן.