סמן מפורש לעומת סמן מרומז
כשזה מגיע לבסיסי נתונים, סמן הוא מבנה בקרה המאפשר מעבר בין הרשומות במסד נתונים. סמן מספק מנגנון להקצאת שם להצהרת SQL select ולאחר מכן ניתן להשתמש בו כדי לתפעל את המידע בתוך הצהרת SQL זו. סמנים מרומזים נוצרים באופן אוטומטי ונעשה בהם שימוש בכל פעם שהונפקה הצהרת Select ב-PL/SQL, כאשר אין סמן מוגדר במפורש. סמנים מפורשים, כפי שהשם מרמז, מוגדרים במפורש על ידי המפתח. ב-PL/SQL סמן מפורש הוא למעשה שאילתה בשם המוגדרת באמצעות סמן מילת המפתח.
מהו סמן מרומז?
סמנים מרומזים נוצרים באופן אוטומטי ומשמשים את Oracle בכל פעם שהונפקה הצהרת בחירה. אם נעשה שימוש בסמן מרומז, מערכת ניהול מסדי הנתונים (DBMS) תבצע את פעולות הפתיחה, האחזור והסגירה באופן אוטומטי. יש להשתמש בסמנים מרומזים רק עם הצהרות SQL המחזירות שורה בודדת. אם משפט SQL מחזיר יותר משורה אחת, שימוש בסמן מרומז יציג שגיאה. סמן מרומז משויך אוטומטית לכל הצהרות Data Manipulation Language (DML), כלומר INSERT, UPDATE ו-DELETE. כמו כן, נעשה שימוש בסמן מרומז לעיבוד הצהרות SELECT INTO. בעת שליפת נתונים באמצעות סמנים מרומזים, ניתן להעלות חריג NO_DATA_FOUND כאשר משפט SQL אינו מחזיר נתונים. יתר על כן, סמנים מרומזים יכולים להעלות TOO_MANY_ROWS חריגים כאשר משפט SQL מחזיר יותר משורה אחת.
מהו סמן מפורש?
כפי שהוזכר קודם לכן, סמנים מפורשים הם שאילתות המוגדרות באמצעות שם.ניתן לחשוב על סמן מפורש כמצביע לקבוצת רשומות וניתן להזיז את המצביע קדימה בתוך קבוצת הרשומות. סמנים מפורשים מספקים למשתמש את השליטה המלאה על פתיחה, סגירה ושליפה של נתונים. כמו כן, ניתן להביא מספר שורות באמצעות סמן מפורש. סמנים מפורשים יכולים גם לקחת פרמטרים בדיוק כמו כל פונקציה או פרוצדורה, כך שניתן לשנות את המשתנים בסמן בכל פעם שהוא מבוצע. בנוסף, סמנים מפורשים מאפשרים לך להביא שורה שלמה למשתנה רשומת PL/SQL. בעת שימוש בסמן מפורש, ראשית יש להכריז עליו באמצעות שם. ניתן לגשת לתכונות הסמן באמצעות השם שניתן לסמן. לאחר ההכרזה, יש לפתוח תחילה את הסמן. לאחר מכן ניתן להתחיל באחזור. אם צריך להביא מספר שורות, פעולת השליפה צריכה להיעשות בתוך לולאה. לבסוף, יש לסגור את הסמן.
הבדל בין סמן מפורש לסמן מרומז
ההבדל העיקרי בין הסמן המרומז לסמן המפורש הוא שסמן מפורש צריך להיות מוגדר במפורש על ידי מתן שם בעוד שסמנים מרומזים נוצרים אוטומטית כאשר אתה מנפיק משפט select.יתר על כן, ניתן להביא מספר שורות באמצעות סמנים מפורשים בעוד שסמנים מרומזים יכולים להביא רק שורה אחת. כמו כן, NO_DATA_FOUND ו-TOO_MANY_ROWS חריגים אינם מועלים בעת שימוש בסמנים מפורשים, בניגוד לסמנים מרומזים. למעשה, סמנים מרומזים פגיעים יותר לשגיאות נתונים ומספקים פחות שליטה פרוגרמטית מאשר סמנים מפורשים. כמו כן, סמנים מרומזים נחשבים פחות יעילים מסמנים מפורשים.