סוגי הפונקציות שנכיר במדריך זה הן :
v פונקציות מחרוזתיות – פונקציות אשר עובדות על מחרוזות.
v פונקציות מספריות – פונקציות אשר עובדות על מספרים.
v פונקציות תאריכיות – פונקציות אשר עובדות על תאריכים.
קצרה יריעת הפוסט מלהקיף את כל הפונקציות הקיימות, בכל נושא נתמקד בפונקציות היותר שכיחות, כאשר מטרתנו העיקרית היא ללמוד כיצד לעבוד עם פונקציות השורה.
אפשר לדמות את פונקציות השורה למעין "מכונות" אשר מקבלות ערך בצד אחד ומוציאות אותו מהצד השני בצורה אחרת. לצורך הדגמת הרעיון, נכיר פונקציה בסיסית אשר נחזור אליה בהמשך : פונקציית UPPER – מקבלת מילה ומחזירה אותה באותיות גדולות :
SELECT UPPER(first_name) FROM employees
הפונקציה מקבלת את ערכי העמודה first_name ומשנה את אותיותיהם לאותיות גדולות
תצוגת ערכי העמודה לפני השינוי: תצוגת ערכי העמודה אחרי השינוי:
First_name |
|
First_name |
Moshe |
ß |
MOSHE |
Yossi |
ß |
YOSSI |
David |
ß |
DAVID |
כפי שניתן לראות, פונקציות אלו עובדות על הערכים שבכל שורה ושורה, ולכן נקראות פונקציות שורה.
! הערכים אשר נכתבים בתוך הסוגריים של הפונקציה נקראים ארגומנטים (Arguments). פונקציה יכולה להכיל ארגומנט אחד או ארגומנטים רבים כאשר פסיק (,) מפריד בינהם.
טבלת DUAL היא טבלה אשר נוצרת בעת התקנת אורקל, היא מורכבת מעמודה אחת (אשר נקראת DUMMY) ומרשומה אחת אשר באופן דיפולטיבי מכילה את הערך X.
טבלת DUAL היא טבלת מערכת מיוחדת אשר מטרתה לאפשר לנו לבצע חישובים שונים מתוך ה- SQL בעת הצורך. ננסה לעשות חישוב פשוט 1+1 מתוך משפט SELECT :
SELECT 1+1
פקודה שכזו תחזיר שגיאה משום שחסרה פקודת FROM.
כדי שנוכל להציג את התוצאה של חישוב מסוג זה, אנו נשתמש בטבלת DUAL :
SELECT 1+1 FROM dual
למידת פונקציות חדשות ע"י שימוש בטבלת DUAL
פונקציות שורה אמורות לעבוד על ערכים של עמודות, כאשר אנו לומדים פונקציה חדשה לעיתים נרצה לנסות אותה על עמודה מסויימת כדי לראות מה בדיוק היא עושה.
אולם, בעולם האמיתי לכל עמודה יש ערכים רבים, ולהריץ את הפונקציה על עמודות שכאלו לשם הלמידה הוא לא מצב אידיאלי.
לכן, לדוגמא, אם התוודענו לפונקצית UPPER לראשונה ועתה אנו רוצים לבדוק כיצד היא עובדת, יהיה פשוט יותר אם נריץ אותה על טבלת DUAL כאשר בתוך הסוגריים נכתוב ערך ולא עמודה :
SELECT UPPER('hello') FROM dual
פונקציות מחרוזתיות – מניפולציה על גודל אות
שם הפונקציה |
תפקיד הפונקציה |
דוגמא |
UPPER |
ממירה טקסט לאותיות גדולות |
UPPER('hello') returns HELLO |
LOWER |
ממירה טקסט לאותיות קטנות |
LOWER('HELLO') returns hello |
INITCAP |
ממירה טקסט לאות ראשונה גדולה והשאר אותיות קטנות |
INITCAP('hello') returns Hello |
פונקציות מחרוזתיות – מניפולציות על טקסט
שם הפונקציה |
תפקיד הפונקציה |
דוגמא |
SUBSTR |
מחזירה רצף תווים מתוך מחרוזת |
SUBSTR('HELLO',1,3) returns HEL |
LENGTH |
מחזירה את אורך הטקסט |
LENGTH('HELLO') returns 5 |
REPLACE |
מחליפה ערכים בתוך המחרוזת |
REPLACE('Hello Oracle', 'Oracle', 'World') returns Hello World |
שם הפונקציה |
תפקיד הפונקציה |
דוגמא |
ROUND |
מעגלת מספר עשרוני (0-4 כלפי מטה, 5-9 כלפי מעלה) |
ROUND(4.4) returns 4 ROUND(4.6) returns 5 |
TRUNC |
מעגלת מספר עשרוני (תמיד כלפי מטה) |
TRUNC(5.9) returns 5 |
הפעולה |
תיאור |
סוג התוצאה |
תאריך + מספר |
הוספת ימים לתאריך |
תאריך |
תאריך – מספר |
חיסור ימים מהתאריך |
תאריך |
תאריך – תאריך |
חיסור תאריך מתאריך (תוצאה בימים) |
מספר |
תאריך + תאריך24 |
הוספת שעות לתאריך |
תאריך |
תאריך – תאריך24 |
חיסור שעות מתאריך |
תאריך |
הפעולה |
תיאור |
סוג התוצאה |
מספר – תאריך |
חיסור תאריך ממספר |
שגיאה |
מספר * תאריך |
הכפלת תאריך במספר |
שגיאה |
תאריך מספר מספר תאריך |
חילוק תאריך במספר חילוק מספר בתאריך |
שגיאה שגיאה |
תאריך + תאריך |
חיבור תאריך לתאריך אחר |
שגיאה |
שם הפונקציה |
תפקיד הפונקציה |
דוגמא |
SYSDATE |
הצגת התאריך העכשווי |
SELECT SYSDATE FROM DUAL |
MONTHS_BETWEEN |
הצגת הפרש בחודשים בין שני תאריכים |
MONTHS_BETWEEN('01-SEP-2000', '01-JAN-2000') returns 8 |
ADD_MONTHS |
הוספת חודשים לתאריך |
ADD_MONTHS('01-JAN-2000') returns 01-SEP-2000 |
NEXT_DAY |
מתי היום הבא יחסית לתאריך מסויים |
בהנחה ש- SYSDATE הוא יום שישי 25.03.2011 NEXT_DAY(SYSDATE, 'SUNDAY') returns 27-MAR-2011 |