הליך מאוחסן לעומת פונקציה
פרוצדורות ופונקציות מאוחסנות הם שני סוגים של בלוקי תכנות. לשניהם חייבים להיות שמות קוראים. השמות הקוראים האלה משמשים כדי לקרוא להם בתוך בלוק תכנות אחר כמו פונקציות נהלים וחבילות או שאילתות SQL. שני סוגי האובייקטים הללו מקבלים פרמטרים ומבצעים את המשימה מאחורי אותם אובייקטים. זהו התחביר (ב-ORACLE) ליצירת פרוצדורה מאוחסנת, צור או החלף את שם ההליך (פרמטרים)
as
begin
statements;
exception
exception_handling
end;
והנה התחביר ליצירת פונקציה (ב-ORACLE), צור או החלף פונקציה function_name (פרמטרים)
return return_datatype
as
begin
statements;
return return_value/variable;
exception;
exception_handling;
end;
נהלים מאוחסנים
כפי שהוזכר לעיל נהלים מאוחסנים נקראים בלוקי תכנות. הם מקבלים פרמטרים כקלט משתמש ומעבד לפי ההיגיון מאחורי ההליך ונותנים את התוצאה (או מבצעים פעולה ספציפית). פרמטרים אלה יכולים להיות מסוג IN, OUT ו-INOUT. הצהרות משתנים, הקצאות משתנים, הצהרות בקרה, לולאות, שאילתות SQL וקריאות אחרות לפונקציות/פרוצדורות/חבילות יכולות להיות בתוך גוף הפרוצדורות.
פונקציות
פונקציות נקראות גם בלוקי תכנות, שחייבים להחזיר ערך באמצעות משפט RETURN, ולפני שהוא מחזיר ערך, הגוף שלו מבצע גם כמה פעולות (לפי ההיגיון הנתון). פונקציות גם מקבלות פרמטרים להפעלה. ניתן לקרוא לפונקציות בתוך השאילתות. כאשר פונקציה נקראת בתוך שאילתת SELECT, היא חלה על כל שורה בערכת התוצאות של שאילתת ה-SELECT. ישנן מספר קטגוריות של פונקציות ORACLE. הם,
פונקציות שורה אחת (מחזירה תוצאה בודדת עבור כל שורה ושורה של השאילתה)
יש קטגוריות משנה של פונקציות בשורה אחת.
- פונקציה מספרית (לדוגמה: ABS, SIN, COS)
- פונקציית תווים (לדוגמה: CONCAT, INITCAP)
- פונקציית תאריך שעה (לדוגמה: LAST_DAY, NEXT_DAY)
- פונקציות המרה (לדוגמה: TO_CHAR, TO_DATE)
- פונקציית אוסף (לדוגמה: CARDINALITY, SET)
- פונקציות צבירה (מחזיר שורה בודדת, בהתבסס על קבוצת שורות. לדוגמה: AVG, SUM, MAX)
- פונקציות אנליטיות
- פונקציות הפניה לאובייקט
- פונקציות הדגם
- פונקציות המוגדרות על ידי משתמש
מה ההבדל בין פונקציה לבין פרוצדורה מאוחסנת?
• כל הפונקציות חייבות להחזיר ערך באמצעות משפט RETURN. נהלים מאוחסנים אינם מחזירים ערכים באמצעות הצהרת RETURN. הצהרת RETURN בתוך פרוצדורה תחזיר את השליטה שלו לתוכנית המתקשרת. ניתן להשתמש בפרמטרי OUT כדי להחזיר ערכים מהליכים מאוחסנים.
• ניתן לקרוא לפונקציות בתוך השאילתות, אך לא ניתן להשתמש בהליכים מאוחסנים בתוך השאילתות.
• יש לכלול את סוג הנתונים RETURN כדי ליצור פונקציה, אבל בפרוצדורה מאוחסנת DDL, זה לא.