לדלג לתוכן

PL/SQL

מתוך ויקיפדיה, האנציקלופדיה החופשית

PL/SQL (באנגלית: Procedural Language/Structured Query Language) היא שפת תכנות פרוצדורלית קניינית של חברת אורקל ונעשה בה שימוש בעיקר בבסיס הנתונים אורקל. שפת התכנות משלבת את שפת SQL בצורה טבעית ומאפשרת עיבוד נתונים על שרת בסיס הנתונים וללא תחלופה של מידע בינו ובין תחנת לקוח.

כללי

מכיוון ששפת SQL היא שפה דקלרטיבית, היא אינה מאפשרת עיבוד מידע בצורה נוחה - לדוגמה, לא ניתן לבצע בה לולאות. כדי לענות על הצורך בשפה פרוצדורלית, הוציאה חברת אורקל בשנת 1989 תמיכה ראשונה בשפה שכזו כחלק מבסיס הנתונים (גרסה 6). שפת PL/SQL תומכת במשתנים, תנאים, מערכים וניהול שגיאות. החל מגירסה 9, תומכת השפה גם ביצור והפעלה קוד דינמי בזמן הריצה כל ידי הפקודה "Execute immediate". אפשרות זו מאפשרת שימוש חדש ב-PL/SQL: ביצוע של פקודות DDL אשר לא התאפשרו עד אז ללא שימוש במארזים מובנים.

שפת PL/SQL משמשת לשם כתיבת פרוצדורות, פונקציות, מארזים וטריגרים המאוכסנים בתוך בסיס-הנתונים. מארזים הם תוכניות המקבצות בתוכן פרוצדורות, פונקציות, וכן משתנים גלובליים פרטיים או פומביים. טריגרים (Triggers) הם קטעי קוד המופעלים באופן אוטומטי בעקבות ארועים מסוגים שונים שיכולים להתרחש בבסיס-הנתונים, כגון: פקודות DML, כניסה ויציאה (Logon/Logoff) או שגיאות בשרת בסיס-הנתונים.

שימוש נוסף ב-PL/SQL הוא לשם כתיבת בלוקים אנונימיים (Anonymous Blocks) שהם קטעי קוד שנשלחים לשם הרצה מיידית ולא נשמרים בבסיס-הנתונים לשם הרצה חוזרת. בנוסף, משמשת השפה לכתיבת קוד מבוסס ארועים בכלי פיתוח השייכים לחבילת Oracle Developer Suite.

תחביר

מבנה הקוד

קוד PL/SQL מזכיר במבנהו את שפת עדה (Ada). הוא מתחיל במילה DECLARE (עבור בלוק אנונימי) או בשורת הגדרה של תוכנית לא אנונימית (כגון פרוצדורה). לאחר מכן, ניתן להגדיר משתנים ופונקציות ופרוצדורות פנימיות. (בבלוק אנונימי ללא משתנים אין לכתוב 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; /* התעלמות מכל השגיאות */
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).

תנאים


שגיאות פרמטריות בתבנית:להשלים

פרמטרי חובה [ נושא ] חסרים

  1. IF- תנאי לביצוע פעולה על הרשומה הנוכחית או הצגת הודעת שגיאה מתאימה.

לדוג'

          IF :NEW.FieldName is null
                               THEN
             NEW.FieldName :=Value:
                             END IF
  1. ELSIF
  2. CASE WHEN

לולאות


שגיאות פרמטריות בתבנית:להשלים

פרמטרי חובה [ נושא ] חסרים

  1. LOOP
  2. FOR LOOP
  3. WHILE LOOP
  4. CURSOR FOR LOOP


תבנית:שפות תכנות