PL/SQL
PL/SQL (באנגלית: Procedural Language/Structured Query Language) היא שפת תכנות פרוצדורלית קניינית של חברת אורקל ונעשה בה שימוש בעיקר בבסיס הנתונים אורקל. שפת התכנות משלבת את שפת SQL בצורה טבעית ומאפשרת עיבוד נתונים על שרת בסיס הנתונים וללא תחלופה של מידע בינו ובין תחנת לקוח.
כללי
מכוון ששפת SQL היא שפה דקלרטיבית, היא אינה מאפשרת עיבוד מידע בצורה נוחה - לדוגמה, לא ניתן לבצע בה לולאות. כדי לענות על הצורך של שפה פרוצדורלית, הוציאה חברת אורקל בשנת 1989 תמיכה ראשונה בשפה שכזו כחלק מבסיס הנתונים (גרסה 6). שפת PL/SQL תומכת במשתנים, תנאים, מערכים וניהול שגיאות. בגרסתה הנוכחית, תומכת השפה גם ביצור והפעלה קוד דינמי בזמן הריצה כל ידי הפקודה "Execute immediate". אפשרות זו מאפשרת שימוש חדש ב-PL/SQL: ביצוע של פקודות DDL אשר לא התאפשרו עד אז.
השימוש הנפוץ בשפת PL/SQL הוא בשימוש בפרוצדורות ופונקציות המאוכסנות בתוך בסיס הנתונים. שימוש נפוץ נוסף הוא כתיבת קטעי קוד אשר יופעלו באופן אוטומטי כאשר המשתמש יבצע פקודות DML. קטע קוד שכזה נקרא "trigger".
תחביר
מבנה הקוד
קוד PL/SQL נכתב בתבנית זהה. הוא מתחיל במילה DECLARE ומתחתיה הגדרת משתנים, פונקציות ופרוצדורות פנימיות לקטע הקוד שמתחתיה. התחלת הקוד הביצועי מסומן במילה BEGIN. מתחת לשורה זו ניתן לכתוב פקודות PL/SQL שונות כמו גם יצירה של בלוקים נוספים שבהם יוגדרו משתנים נוספים וכן הלאה. כל פקודה בPL/SQL צריכה להסתיים בסימן ;.
כדי לטפל בשגיאות העלולות להתעורר בתוכנה, ניתן להוסיף בלוק של תפיסת שגיאות: EXCEPTION ובו התניה לאיזה שגיאות על הבלוק הזה לתפוס. כל קטע קוד של PL/SQL מסתיים בשורה ;END.
דוגמה לתוכנית PL/SQL בסיסית:
- DECLARE
- v VARCHAR2(100); /* הגדרת משתנה מסוג VARCHAR2) */
- BEGIN
- v := 'Hello world'; /* השמת ערך למשתנה */
- EXCEPTION
- when OTHERS then
- NULL; /* התעלמות מכל השגיאות */
- when OTHERS then
- END;
לPL/SQL ישנם מספר סוגים של משתנים:
- משתנים מספרים: BINARY_DOUBLE, BINARY_FLOAT, BINARY_INTEGER, DEC, DECIMAL, DOUBLE PRECISION, FLOAT, INT, INTEGER, NATURAL, NATURALN, NUMBER, NUMERIC, PLS_INTEGER, POSITIVE, POSITIVEN, REAL, SIGNTYPE, SMALLINT.
- משתנים טקסטואלים: CHAR, CHARACTER, LONG, LONG RAW, NCHAR, NVARCHAR2, RAW, ROWID, STRING, UROWID, VARCHAR, VARCHAR2
- משתנים בוליאניים: BOOLEAN
- משתנים תאריכיים: DATE, TIMESTAMP, TIMESTAMP WITH TIMEZONE, TIMESTAMP WITH LOCAL TIMEZONE, INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND
- משתנה צמוד-טבלה: ניתן להגדיר משתנה יחיד אשר יקבל תמיד את הסוג של עמודה בטבלה על ידי השימוש במילת הבקרה TYPE%.
- מבנה נתונים צמוד-טבלה: ניתן להגדיר משתנה יחיד אשר יתנהג כמבנה ובו רשימת העמודות של הטבלה על ידי שימוש במילה המקרה ROWTYPE%.
- משתנה בגודל בלתי מוגבל: LOB - משתנים מסוג אובייקט היכול להכיל כמות תווים בלתי מוגבלת. משמש בעיקר לשמירה של קבצים בינאריים (BLOB) או של קבצים טקסטואלים (CLOB) בתוך בסיס הנתונים.
- משתנה מסוג XML - משתנה מסוג אובייקט XML מכיל בתוכו מסמך XML. למשתנה מסוג זה ישנן מתודות לניהול מסמך ה-XML המאוכסן בו.
- משתנים מסוג Cursor יכולים לשמור בתוכם שאילתות ובאמצעות לולאות ניתן לעבור על המידע שמחזירה השאילתא.
מעבר לסוגים בסיסים אלה, ניתן להגדיר בשפה מערכים (המכונים Collection).
תנאים
שגיאות פרמטריות בתבנית:להשלים
פרמטרי חובה [ נושא ] חסרים
- IF- תנאי לביצוע פעולה על הרשומה הנוכחית או הצגת הודעת שגיאה מתאימה.
לדוג'
IF :NEW.FieldName is null THEN NEW.FieldName :=Value: END IF
- ELSIF
- CASE WHEN
לולאות
שגיאות פרמטריות בתבנית:להשלים
פרמטרי חובה [ נושא ] חסרים
- LOOP
- FOR LOOP
- WHILE LOOP
- CURSOR FOR LOOP