למד כיצד לטפל בחריגים ב- PL / SQL

מאמר זה הוא מדריך מקיף לביצוע טיפול בחריגים ב- PL / SQL על ידי דיון בסוגי החריגים השונים המוצעים ב- PL / SQL.

אם אתה מתכנת, ייתכן שאתה מכיר את הרעיון של טיפול בחריגים הוא חלק בלתי נפרד מכל אחד מהם . מכיוון שטעויות הן בלתי נמנעות ואפילו החכמות מאיתנו יכולות לטעות בזמן כתיבת קוד, עלינו להכיר כיצד לטפל בהן. במאמר זה נלמד במיוחד על הטיפול בחריגים ב- PL / SQL.

טיפול בחריגות SQL ב- PL / SQL-Edurekaלהלן הנושאים המכוסים במאמר זה:





מה זה חריג?

כל מצב או אירוע חריג שמפריע לזרימה הרגילה של הוראות התוכנית שלנו בזמן הריצה או במילים פשוטות חריג הוא שגיאה.

תחביר של טיפול בחריגים ב- PL / SQL

להכריז על חריגה מתחילה כאשר יוצא מן הכלל 1 אז חריג 1-הצהרות-טיפול כאשר חריג 2 אז חריג 2-הצהרות-טיפול כאשר חריג 3 אז חריג-הצהרות-טיפול ........ כאשר אחרים ואז חריגה 3-הצהרות-טיפול

כאן אנו יכולים לרשום כמה חריגים שאנחנו רוצים לטפל בהם. חריג ברירת המחדל יטופל באמצעות 'מתי אחרים אז'



דוגמה לטיפול בחריגים ב- PL / SQL

התוכנית שלהלן מציגה את שמו וכתובתו של סטודנט שתעודת הזהות שלו ניתנת. מכיוון שבמסד הנתונים שלנו אין סטודנט עם ערך מזהה 8, התוכנית מעלה את החריג בזמן הריצה NO_DATA_FOUND, שנלכד בגוש EXCEPTION.

DECLARE s_id studentS.id% type: = 8 s_name studentS.Name% type s_loc studentS.loc% type BEGIN SELECT name, loation INTO s_name, s_loc FROM students WHERE id = s_id DBMS_OUTPUT.PUT_LINE ('שם:' || שם_ שם) DBMS_OUTPUT .PUT_LINE ('מיקום:' || s_loc) יוצא מן הכלל מתי no_data_found THEN dbms_output.put_line ('אין תלמיד כזה!') כאשר אחרים ואז dbms_output.put_line ('אופס, שגיאה!') END

תְפוּקָה

אין תלמיד כזה! הליך PL / SQL הושלם בהצלחה.

כאן אנו יכולים לרשום כמה חריגים שאנחנו רוצים לטפל בהם. חריג ברירת המחדל יטופל באמצעות ' כאשר אחרים ואז '

מהי שיטת javascript

סוגי חריגים ב- PL / SQL

  • מערכת מוגדרת
  • המשתמש התריס

הבא במאמר זה בנושא טיפול בחריגים ב PL / SQL , בואו נדון בפירוט על שני הסוגים הללו.



מערכת מוגדרת

מוגדרים ומתוחזקים באופן מרומז על ידי שרת Oracle, חריגים אלה מוגדרים בעיקר בחבילה הרגילה של Oracle. בכל פעם שמתרחש חריג בתוך התוכנית, שרת אורקל תואם ומזהה את החריג המתאים ממכלול החריגים הזמין הקיים בחבילה הסטנדרטית של אורקל. בעיקרון, חריגים אלה מוגדרים מראש PL / SQL שמתגבר כאשר מופר כלל מסד נתונים מסוים .

ה חריגים שהוגדרו על ידי המערכת מחולקים עוד לשתי קטגוריות:

  • נקראים חריגים למערכת
  • חריגים ללא שם של המערכת

חריגות מערכת בשם

החריגים הנקראים PL / SQL הם נקרא בחבילה הסטנדרטית של PL / SQL מכאן שהמפתח לא צריך להגדיר את החריגים של PL / SQL בקוד שלהם. PL / SQL מספק חריגים בעלי שם מוגדרים מראש, אשר מבוצעים כאשר כלל מסדי נתונים מופר על ידי תוכנית. הטבלה הבאה מפרטת כמה מהחרגים והמינוס החשובים שהוגדרו מראש

יוצא מן הכלל שגיאת אורקל SQLCODE תיאור
ACCESS_INTO_NULL06530-6530הוא מוגבה כאשר לאובייקט null מוקצה אוטומטית ערך.
CASE_NOT_FOUND06592-6592הוא הועלה כאשר אף אחת מהבחירות בסעיף WHEN של א הצהרת מקרה נבחר ואין סעיף ELSE.
COLLECTION_IS_NULL06531-6531היא מוגדלת כאשר תוכנית מנסה ליישם שיטות איסוף שאינן EXISTS על טבלה או ורד מקוננים לא מאוחדים, או שהתוכנית מנסה להקצות ערכים לאלמנטים של טבלה או ורד מקוננים לא מאוחדים.
DUP_VAL_ON_INDEX00001-אחדהיא מוגברת כאשר מנסים לאחסן ערכים כפולים בעמודה עם אינדקס ייחודי.
INVALID_CURSOR01001-1001הוא מועלה כאשר נעשים ניסיונות לבצע פעולת סמן שאינה מותרת, כגון סגירת סמן שלא נפתח.
מספר לא תקין01722-1722הוא מוגדל כאשר ההמרה של מחרוזת תווים למספר נכשלת מכיוון שהמחרוזת אינה מייצגת מספר חוקי.
LOGIN_DENIED01017-1017היא מוגברת כאשר תוכנית מנסה להתחבר למסד הנתונים עם שם משתמש או סיסמה לא חוקיים.
לא נמצאו נתונים01403+100היא מוגדלת כאשר משפט SELECT INTO לא מחזיר שורות.
NOT_LOGGED_ON01012-1012היא מוגברת כאשר יוצאת שיחת מסד נתונים מבלי שהיא מחוברת למסד הנתונים.
PROGRAM_ERROR06501-6501היא מוגברת כאשר ל- PL / SQL יש בעיה פנימית.
ROWTYPE_MISMATCH06504-6504הוא מוגבה כאשר סמן מביא ערך במשתנה בעל סוג נתונים לא תואם.
SELF_IS_NULL30625-30625היא מוגברת כאשר מופעלת שיטת חבר, אך המופע של סוג האובייקט לא אותחל.
STORAGE_ERROR06500-6500הוא הועלה כאשר נגמר הזיכרון ל- PL / SQL או שהזיכרון פגום.
TOO_MANY_ROWS01422-1422היא מוגברת כאשר משפט SELECT INTO מחזיר יותר משורה אחת.
VALUE_ERROR06502-6502הוא מוגדל כאשר מתרחשת שגיאת חשבון, המרה, קטיעה או אילוץ גודל.
ZERO_DIVIDE014761476הוא מועלה כאשר מנסים לחלק מספר באפס.

דוגמא

צור או החלף נוהל add_new_student (תלמיד _id_in במספר, תלמיד _name_in ב- VARCHAR2) הוא התחל להכניס לתלמיד (תלמיד _id, סטודנט _name) ערכים (תלמיד _id_in, תלמיד _name_in) למעט כאשר DUP_VAL_ON_INDEX מעלה_דומם_כישל_השגיאה ) כאשר אחרים העלו_אפליקציה_שגיאה (-20002, 'אירעה שגיאה'.) END

בהמשך למאמר זה על טיפול בחריגים ב- PL / SQL, הבה נבין מהם חריגים מערכתיים ללא שם.

חריגים ללא שם של המערכת

יוצאי הדופן של המערכת שאורקל אין להם שם נקראים חריגים מערכתיים ללא שם. חריגים אלה אינם מופיעים לעיתים קרובות ונכתבים עם קוד ומסר משויך.

ישנן בעצם שתי דרכים להתמודד עם חריגות מערכת ללא שם:

1. שימוש במטפל החריגים WHEN OTHERS

2. שיוך קוד החריג לשם ושימוש בו כחריג בשם.

כמה מהשלבים שבוצעו למעט חריגים ללא שם של המערכת הם:

  • העלו אותם במרומז.
  • במקרה שהם לא מטופלים ב'כאשר אחרים 'אזי, יש לטפל בהם במפורש.
  • כדי לטפל במפורש בחריג, ניתן להכריז עליהם באמצעות Pragma EXCEPTION_INIT ולטפל בהם על ידי הפניה לשם החריג המוגדר על ידי המשתמש בסעיף החריג.

דוגמה לטיפול בחריגים ללא שם באמצעות Pragma EXCEPTION_INIT מובאת בהמשך המאמר. בהמשך במאמר זה על טיפול בחריגים ב- PL / SQL, הבה נבין את התרגילים שהוגדרו על ידי המשתמש.

משתמש הוגדר

כמו כל שפות התכנות האחרות, אורקל מאפשרת לך גם להכריז על יישום החריגים שלך. בניגוד לחריגים שהוגדרו על ידי מערכת, חריגים אלה מוגדרים במפורש בבלוק PL / SQL.

צעדים להכריז על חריגים שהוגדרו על ידי המשתמש במסד הנתונים של Oracle

אנו יכולים להגדיר חריגים שהוגדרו על ידי המשתמש במסד הנתונים של Oracle בשלוש הדרכים הבאות:

  • באמצעות משתנה מסוג EXCEPTION

כאן נוכל להכריז על חריג שהוגדר על ידי המשתמש על ידי הכרזה על משתנה של EXCEPTION סוג מידע בקוד שלנו והעלו אותו במפורש בתוכנית שלנו באמצעות הצהרת RAISE.

  • משתמש בפונקציה PRAGMA EXCEPTION_INIT

אנו יכולים להגדיר מספר שגיאה שאינו מוגדר מראש עם המשתנה מסוג EXCEPTION

  • בשיטת RAISE_APPLICATION_ERROR

באמצעות שיטה זו, אנו יכולים להכריז על חריג המוגדר על ידי המשתמש עם מספר השגיאה וההודעה המותאמים אישית שלנו.

עד עכשיו אולי יש לך מושג גס על הדרכים בהן אנו יכולים להעלות חריגים שהוגדרו על ידי המשתמש ב- PL / SQL. נלמד על כל אחת מהשיטות הנ'ל עם דוגמאות בהמשך מאמר זה בנושא טיפול בחריגים ב- PL / SQL.

בהמשך במאמר זה, בואו נמשיך בהדגמות הטיפול בחריגות שהוגדר על ידי המשתמש.

הדגמת חריגים שהוגדרו על ידי המשתמש

בהמשך למאמר זה בנושא טיפול בחריגים ב- PL / SQL, הבה נבין כיצד להשתמש במשתנה מסוג EXCEPTION.

באמצעות משתנה מסוג EXCEPTION

תהליך הכרזת החריג המוגדר על ידי המשתמש מחולק לשלושה חלקים ושלושת החלקים הללו הם:

מה עושה .פורמט עושה בפייתון
  • הכריז על סוג נתונים חריג משתנה
  • העלו את החריג
  • לטפל בחריגה

בואו נכתוב קוד כדי להדגים בפירוט את השלבים לעיל.

מה ההבדל בין מעמד מופשט וממשק
DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

בבלוק ההצהרה שלעיל, יש לנו ארבעה משתנים, ביניהם שלושת הראשונים הם משתני סוג נתונים נורמליים והרביעי שהוא ex_DivZero הוא משתנה סוג החריג המיוחד. הרביעי הוא החריג המוגדר על ידי המשתמש שלנו.

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION

חלק הביצוע שלמעלה מחסימה אנונימית זו, ייכנס לפעולה רק כאשר המחלק הוא 0. אם המחלק הוא אפס כפי שהוא במקרה שלנו, השגיאה תועלה והשליטה בתוכנית תדלג על כל השלבים הבאים ו יחפש מטפל חריג תואם. במקרה בו הוא מוצא פעולה אחרת, הוא יבצע את הפעולה בהתאם, אחרת הוא יפסיק את התוכנית או יבקש מאיתנו שגיאה שהוגדרה על ידי המערכת שלא טופלה.

חריג מתי ex_DivZero ואז DBMS_OUTPUT.PUT_LINE ('שגיאה, המחלק לא יכול להיות אפס')

זה המטפל בחריגים. ברגע שהמשתמש יכנס למחלק כ- 0, תתבקש מחרוזת ההודעה לעיל.

קוד סופי:

DECLARE var_dividend NUMBER: = 10 var_divisor NUMBER: = 0 var_result NUMBER ex-DivZero EXCEPTION BEGIN IF var_divisor = 0 THEN RAISE ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('result_' = result = B =) = 0 ואז מעלה ex-DivZero END IF Var_result: = var_dividend / var_divisor DBMS_OUTPUT.PUT_LINE ('Result =' || var_result) END

בהמשך למאמר זה על טיפול בחריגים ב- PL / SQL, הבה נבין כיצד להשתמש בשיטת PRAGMA_EXCEPTION_INIT.

משתמש בפונקציה PRAGMA EXCEPTION_INIT

בתוך ה פונקציה PRAGMA EXCEPTION_INIT, שם חריג משויך למספר שגיאה של Oracle. ניתן להשתמש בשם זה בעיצוב מטפל החריגים עבור השגיאה.עבור פרויקטים ענקיים עם שגיאות רבות המוגדרות על ידי המשתמש, PRAGMA EXCEPTION_INIT היא השיטה השימושית והמתאימה ביותר.

תחביר:

PRAGMA EXCEPTION_INIT (name_name, -Oracle_error_number)

דוגמא

DECLARE deadlock_detected EXCEPTION PRAGMA EXCEPTION_INIT (deadlock_detected, -60) BEGIN NULL - פעולה כלשהי שגורמת לשגיאת ORA-00060 חריגה כאשר deadlock_detected THAN NULL - לטפל בשגיאה END

PRAGMA EXCEPTION_INIT אומר למהדר לשייך שם חריג למספר שגיאה של Oracle כפי שהוזכר קודם. זה מאפשר לך להתייחס לכל חריג פנימי לפי שם ולכתוב מטפל ספציפי עבורו. כשאתה רואה ערימת שגיאה, או רצף של הודעות שגיאה, זה למעלה הוא זה שניתן ללכוד ולטפל בו.

בהמשך למאמר זה על טיפול בחריגים ב- PL / SQL, הבה נבין כיצד להשתמש בשיטת RAISE_APPLICATION_ERROR.

בשיטת RAISE_APPLICATION_ERROR

זה הליך שמגיע מובנה עם תוכנת האורקל. באמצעות הליך זה אנו יכולים לשייך מספר שגיאה להודעת שגיאה מותאמת אישית. בשילוב של מספר השגיאה והודעת השגיאה המותאמת אישית, ניתן להרכיב מחרוזת שגיאה שנראית דומה למחרוזות השגיאה המוגדרות כברירת מחדל המוצגות על ידי אורקל כאשר נתקלת בשגיאה. הליך RAISE_APPLICATION_ERROR נמצא בתוך חבילת DBMS_STANDARD

תחביר

העלאת_היישום_שגיאה (שגיאת מספר, הודעה [, TRUE])

דוגמא

/ * נוצר טריגר trg_emp_detail_chk. * / צור או החלף טריגר trg_emp_detail_chk / * תזמון ההדק מוכרז כ- UPDATE לפני כן בטבלת המועסקים. * / לפני UPDATE ON העובדים מכריזים על הרשאה מכחישה EXCEPTION BEGIN / * התחלה של מצב ה- IF בודקת האם יום זמן המערכת הוא יום שבת או יום ראשון או לא. * / IF לקצץ (TO_CHAR (sysdate, 'Day')) IN ('Saturday', 'Sunday') ואז raise_application_error (-20000, 'אינך מורשה לעשות כל שינוי בסופי שבוע !! ') / * ההליך raise_application_error נקרא עם ערך הפרמטר הראשון כ -20000 והפרמטר השני עם טקסט ברירת מחדל המציין כי המשתמש אינו מורשה לבצע כל שינוי בסופי השבוע. * / END IF END

בכך אנו מגיעים לסוף מאמר זה בנושא 'טיפול בחריגים ב- PL / SQL'. אני מקווה שנושא זה מובן היטב ועזר לך. נסה לכתוב קודים משלך ולשלב את השיטות המוסברות במאמר זה.

אם אתה רוצה להכשיר מאנשי מקצוע בתחום הטכנולוגיה הזו, אתה יכול לבחור בהכשרה מובנית מאדוריקה! בדוק זאת מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפזורים ברחבי העולם. קורס זה מאמן אותך על מושגי הליבה וכלים וטכניקות מתקדמים לניהול נתונים ולניהול מסד הנתונים של MySQL. זה כולל למידה מעשית על מושגים כמו MySQL Workbench, MySQL Server, Modelling Data, MySQL Connector, Design Database, MySQL Command Command, MySQL Functions וכו '. בסוף ההדרכה תוכלו ליצור ולנהל מסד נתונים MySQL משלכם ולנהל. נתונים.

יש לך שאלה עבורנו? אנא הזכיר זאת במקטע ההערות במאמר זה 'טיפול בחריגים ב- PL / SQL' ונחזור אליך בהקדם האפשרי.