complete guide pl sql exception handling with examples
Αυτό το σεμινάριο εξηγεί το PL SQL Exception Handling και συναφείς έννοιες όπως τύπους εξαιρέσεων, εξαιρέσεις καθορισμένες από το χρήστη και καθορισμένες από το σύστημα, πώς να δημιουργήσετε μια εξαίρεση κ.λπ.
Σε Μορφή PL / SQL Datetime του Σειρά PL / SQL , μάθαμε για μερικές χρήσιμες λειτουργίες γύρω από το Datetime, Timestamp και Interval
Σε αυτό το άρθρο, θα συζητήσουμε τον χειρισμό εξαιρέσεων στο PL SQL. Επίσης, θα διερευνήσουμε τα πλεονεκτήματα των εξαιρέσεων και τον τρόπο αύξησής τους.
Ας ξεκινήσουμε με τα μαθήματα !!
Τι θα μάθετε:
Χειρισμός εξαίρεσης PL SQL
Ένα σφάλμα ή ένα συμβάν προειδοποίησης ονομάζεται εξαίρεση. Αντιμετωπίζεται κατά τη διάρκεια εκτέλεσης του προγράμματος PL / SQL. Το PL / SQL διαθέτει μηχανισμούς για τη διαχείριση αυτών των εξαιρετικών συνθηκών με τη βοήθεια του μπλοκ EXCEPTION του κώδικα όπου ορίζεται πώς να αντιμετωπίσει την κατάσταση σφάλματος.
Υπάρχουν δύο τύποι εξαιρέσεων. Παρατίθενται παρακάτω:
- Εξαιρέσεις που καθορίζονται από τον χρήστη.
- Εξαιρέσεις που καθορίζονται από το σύστημα.
Ορισμένες από τις δημοφιλείς εξαιρέσεις που ορίζονται από το Σύστημα είναι μη διαθέσιμη μνήμη και διαίρεση με το μηδέν, έχουν ονόματα όπως STORAGE_ERROR και ZERO_DIVIDE αντίστοιχα. Οι εξαιρέσεις που καθορίζονται από τον χρήστη δηλώνονται σε ένα πακέτο, υποπρόγραμμα ή στην ενότητα δήλωσης του μπλοκ κώδικα PL / SQL και θα πρέπει να έχουν ονόματα.
Μόλις εμφανιστεί μια εξαίρεση, η φυσική ροή εκτέλεσης σταματά και, στη συνέχεια, η εκτέλεση δείχνει την ενότητα εξαίρεσης του κώδικα PL / SQL. Ενώ οι καθορισμένες από το σύστημα εξαιρέσεις ρίχνονται από προεπιλογή, οι καθορισμένες από τον χρήστη πρέπει να απορρίπτονται ρητά από τη λέξη-κλειδί RAISE.
Έτσι, ο χειρισμός εξαιρέσεων βοηθά στην αντιμετώπιση των σφαλμάτων που συναντώνται κατά την εκτέλεση του χρόνου εκτέλεσης και όχι κατά την κατάρτιση του προγράμματος.
Πλεονεκτήματα του Χειρισμού Εξαίρεσης
Τα πλεονεκτήματα παρατίθενται παρακάτω:
- Εάν ο κώδικας μας δεν διαθέτει εξαίρεση, τότε κάθε φορά που εκτελούμε μια δήλωση, πρέπει να επαληθεύουμε σφάλματα κατά την εκτέλεση.
- Εάν αποφύγουμε τον χειρισμό εξαιρέσεων στον κώδικα μας, χάνονται τα πραγματικά σφάλματα που προκαλούν κάποια άλλα σφάλματα.
- Ο χειρισμός εξαιρέσεων επιτρέπει την παράλειψη πολλαπλών επαληθεύσεων στον κώδικα.
- Παρέχει καλύτερη αναγνωσιμότητα του κώδικα με την απομόνωση των χειριστών σφαλμάτων στον κώδικα.
Σύνταξη εξαίρεσης:
DECLARE <> BEGIN < > EXCEPTION <> WHEN excp1 THEN <> WHEN excp2 THEN <> ........ WHEN others THEN <> END;
Η προεπιλεγμένη εξαίρεση πραγματοποιείται με ΟΤΑΝ ΑΛΛΟ ΤΟ.
Ας εξετάσουμε έναν πίνακα που ονομάζεται ΠΟΛΙΤΗΣ .
SELECT * FROM CITIZEN;
Δημιουργήσαμε τον πίνακα CITIZEN με τη βοήθεια της δήλωσης SQL που δίνεται παρακάτω.
CREATE TABLE CITIZEN ( ID INT NOT NULL, NAME VARCHAR (15) NOT NULL, AGE INT NOT NULL, PRIMARY KEY (ID) );
Εισαγάγετε τιμές σε αυτόν τον πίνακα με τις δηλώσεις SQL που δίνονται παρακάτω:
INSERT INTO CITIZEN VALUES (1, 'ZAKS', 14); INSERT INTO CITIZEN VALUES (8, 'RANNY', 75); INSERT INTO CITIZEN VALUES (5, 'TOM', 37);
Εφαρμογή κωδικοποίησης με εξαίρεση χειρισμό:
DECLARE citizen_id citizen.id%type; citizen_name citizen.name%type; citizen_age citizen.age%type := 9; BEGIN SELECT id, name INTO citizen_id, citizen_name FROM citizen WHERE age = citizen_age; DBMS_OUTPUT.PUT_LINE ('Citizen id is: '|| citizen_id); DBMS_OUTPUT.PUT_LINE ('Citizen name is: '|| citizen_name); EXCEPTION WHEN no_data_found THEN dbms_output.put_line ('No citizen detail found'); WHEN others THEN dbms_output.put_line ('Errors'); END; /
Η έξοδος του παραπάνω κώδικα:
Στον παραπάνω κώδικα, καθώς δεν υπάρχουν πολίτες με ηλικία 9 ετών στον πίνακα CITIZEN, εμφανίζεται μια εξαίρεση χρόνου εκτέλεσης.
Αυξήστε την εξαίρεση σε PL / SQL
Μια εξαίρεση μπορεί να δημιουργηθεί ρητά από τους προγραμματιστές με τη βοήθεια της λέξης-κλειδιού RAISE.
ερωτήσεις και απαντήσεις σε συνέντευξη δοκιμής σεληνίου
Η σύνταξη για αύξηση εξαιρέσεων:
DECLARE exception_n EXCEPTION; BEGIN IF condition THEN RAISE exception_n; END IF; EXCEPTION WHEN exception_n THEN <>; END;
Εδώ, το exception_n είναι το όνομα της εξαίρεσης που δημιουργούμε. Με αυτόν τον τρόπο, μπορούμε να αυξήσουμε τις εξαιρέσεις που καθορίζονται από τον χρήστη και που καθορίζονται από το σύστημα.
Εξαίρεση καθοριζόμενη από τον χρήστη
Οι προγραμματιστές μπορούν να δημιουργήσουν τις δικές τους εξαιρέσεις και να τις χρησιμοποιήσουν για τον χειρισμό σφαλμάτων. Μπορούν να δημιουργηθούν στο τμήμα δήλωσης ενός υποπρογράμματος και να έχουν πρόσβαση μόνο μέσα σε αυτό το υποπρόγραμμα.
Μια εξαίρεση που δημιουργείται σε επίπεδο πακέτου μπορεί να χρησιμοποιηθεί όποτε υπάρχει πρόσβαση στο πακέτο. Μια εξαίρεση που καθορίζεται από τον χρήστη μπορεί να δημιουργηθεί χρησιμοποιώντας τη λέξη-κλειδί RAISE.
ηλεκτρονικό λογισμικό δημιουργίας αντιγράφων ασφαλείας για παρόχους υπηρεσιών
Η σύνταξη για ένα σφάλμα που καθορίζεται από τον χρήστη είναι:
DECLARE exception_n EXCEPTION;
Εδώ, το εξαίρεση_n είναι το όνομα της εξαίρεσης που θέτουμε. Έτσι μπορούμε να δηλώσουμε μια εξαίρεση δίνοντας ένα όνομα ακολουθούμενο από τη λέξη-κλειδί ΕΞΑΙΡΕΣΗ. Μια εξαίρεση μπορεί να δηλωθεί με παρόμοιο τρόπο όπως οι μεταβλητές δηλώνονται. Ωστόσο, μια εξαίρεση είναι μια μη αναμενόμενη κατάσταση και όχι ένα στοιχείο δεδομένων.
Πεδίο εξαίρεσης σε PL / SQL:
Οι κανόνες εφαρμογής για την εξαίρεση PL / SQL παρατίθενται παρακάτω:
- Δεν μπορεί να δηλωθεί εξαίρεση περισσότερες από μία φορές στο ίδιο μπλοκ κώδικα. Αλλά μπορούμε να δηλώσουμε την ίδια εξαίρεση σε δύο διαφορετικά τμήματα κώδικα.
- Μια εξαίρεση που δηλώνεται σε ένα μπλοκ κώδικα είναι τοπική σε αυτό το μπλοκ και καθολική σε κάθε υπο-μπλοκ.
- Εάν δηλώσουμε και πάλι μια παγκόσμια εξαίρεση μέσα σε ένα δευτερεύον μπλοκ, η τοπική δήλωση παρακάμπτει.
Ας εξετάσουμε πάλι έναν πίνακα που ονομάζεται CITIZEN.
Εφαρμογή κώδικα με εξαιρέσεις καθορισμένες από τον χρήστη:
DECLARE firstexception EXCEPTION; j NUMBER; BEGIN FOR j IN (SELECT * FROM CITIZEN) LOOP IF j.ID = 8 THEN RAISE firstexception; END IF; END LOOP; EXCEPTION WHEN firstexception THEN dbms_output.put_line ('Citizen with ID 8 already exist in table.'); END; /
Η έξοδος του παραπάνω κώδικα:
Προκαθορισμένη εξαίρεση
Κατά παράβαση των κανόνων της βάσης δεδομένων ή υπέρβαση του ορίου που εξαρτάται από το σύστημα, μια εσωτερική εξαίρεση δημιουργείται αυτόματα. Όλα αυτά τα σφάλματα έχουν έναν μοναδικό αριθμό και κάθε εξαίρεση ορίζεται ως όνομα. Για παράδειγμα, Το PL / SQL ρίχνει NO_DATA_FOUND προκαθορισμένη εξαίρεση όταν ένα ερώτημα SELECT δεν λαμβάνει σειρές.
Όλες οι προκαθορισμένες εξαιρέσεις του PL / SQL δηλώνονται στο πακέτο STANDARD που αφορά το περιβάλλον PL / SQL.
Εξαίρεση | Σφάλμα Oracle | ΚΩΔΙΚΟΣ SQL | Περιγραφή |
---|---|---|---|
INVALID_NUMBER | ΩΡΑ - 01722 | -1722 | Αυτή η εξαίρεση δημιουργείται εάν η μετατροπή σε συμβολοσειρά χαρακτήρων σε αριθμό δεν περάσει καθώς η συμβολοσειρά αντιπροσωπεύει μη έγκυρο αριθμό. |
ACCESS_INTO_NULL | ΤΩΡΑ - 06530 | -6530 | Αυτή η εξαίρεση δημιουργείται εάν ένα μηδενικό αντικείμενο έχει εκχωρηθεί φυσικά σε μια τιμή. |
CASE_NOT_FOUND | ΤΩΡΑ - 06592 | -6592 | Αυτή η εξαίρεση δημιουργείται εάν δεν έχει επιλεγεί καμία από τις επιλογές του όρου WHEN και δεν υπάρχει ρήτρα ELSE. |
COLLECTION_IS_NULL | ΤΩΡΑ - 06531 | -6531 | Αυτή η εξαίρεση προκύπτει όταν ο κώδικας προσπαθεί να εφαρμόσει μεθόδους συλλογής εκτός από EXISTS σε ένθετο πίνακα ή varray που δεν έχει αρχικοποιηθεί. Μπορεί επίσης να αυξηθεί εάν ο κώδικάς μας προσπαθήσει να αντιστοιχίσει τιμές σε έναν ένθετο πίνακα ή ένα varray που δεν έχει αρχικοποιηθεί. |
DUP_VAL_ON_INDEX | ΩΡΑ - 00001 | -1 | Αυτή η εξαίρεση δημιουργείται εάν οι διπλές τιμές προσπαθούν να αποθηκευτούν σε μια στήλη που περιορίζεται από ένα μοναδικό ευρετήριο. |
CURSOR_ALREADY_OPEN | ΤΩΡΑ - 06511 | -6511 | Αυτή η εξαίρεση δημιουργείται εάν ο κώδικάς μας προσπαθεί να ανοίξει έναν ήδη ανοιχτό δρομέα. |
INVALID_CURSOR | ΩΡΑ - 01001 | -1001 | Αυτή η εξαίρεση δημιουργείται αν προσπαθήσουμε να κάνουμε κάποιες λειτουργίες σε δρομείς που δεν επιτρέπονται. Για παράδειγμα, προσπαθώντας να κλείσετε έναν ήδη κλειστό δρομέα. |
LOGIN_DENIED | ΩΡΑ - 01017 | -1017 | Αυτή η εξαίρεση προκύπτει εάν το πρόγραμμα προσπάθησε να συνδεθεί στη βάση δεδομένων με ακατάλληλο όνομα χρήστη και κωδικό πρόσβασης. |
ΔΕ ΒΡΕΘΗΚΑΝ ΔΕΔΟΜΕΝΑ | ΩΡΑ - 01403 | 100 | Αυτή η εξαίρεση δημιουργείται εάν ένα ερώτημα SELECT δεν φέρει σειρές. |
NOT_LOGGED_ON | ΩΡΑ - 01012 | -1012 | Αυτή η εξαίρεση δημιουργείται εάν επιχειρήσουμε να κάνουμε μια λειτουργία βάσης δεδομένων χωρίς να συνδεθούμε σε αυτήν. |
PROGRAM_ERROR | ΩΡΑ - 06501 | -6501 | Αυτή η εξαίρεση προκύπτει εάν το πρόγραμμα PL / SQL αντιμετώπισε εσωτερικό σφάλμα. |
ROWTYPE_MISMATCH | ΩΡΑ - 06504 | -6504 | Αυτή η εξαίρεση δημιουργείται εάν ένας δρομέας προσπαθήσει να επιστρέψει τιμές σε μια μεταβλητή με ασύμβατο τύπο δεδομένων. |
SELF_IS_NULL | ΤΩΡΑ - 30625 | -30625 | Αυτή η εξαίρεση δημιουργείται εάν καλείται μέθοδος μέλους χωρίς να αρχικοποιηθεί ο τύπος αντικειμένου της. |
STORAGE_ERROR | ΤΩΡΑ - 06500 | -6500 | Αυτή η εξαίρεση προκύπτει εάν το πρόγραμμα PL / SQL εξαντλήθηκε η μνήμη ή η μνήμη του κατέστρεψε κατά την εκτέλεση. |
TOO_MANY_ROWS | ΩΡΑ - 01422 | -1422 | Αυτή η εξαίρεση δημιουργείται εάν ένα ερώτημα SELECT ανακτά πολλές σειρές. |
SUBSCRIPT_BEYOND_COUNT | ΤΩΡΑ - 06533 | -6533 | Αυτή η εξαίρεση δημιουργείται εάν ένας συνδρομητής είναι μεγαλύτερος από το συνολικό πλήθος του αριθμού των στοιχείων στη συλλογή. |
SUBSCRIPT_OUTSIDE_LIMIT | ΤΩΡΑ - 06532 | -6532 | Αυτή η εξαίρεση δημιουργείται εάν ένας συνδρομητής υπερβαίνει το όριο. |
SYS_INVALID_ROWID | ORA-01410 | -1410 | Αυτή η εξαίρεση δημιουργείται εάν η μετατροπή σε συμβολοσειρά χαρακτήρων σε καθολικό αναγνωριστικό γραμμής δεν περάσει καθώς η συμβολοσειρά χαρακτήρων αντιπροσωπεύει ένα μη έγκυρο αναγνωριστικό σειράς. |
TIMEOUT_ON_RESOURCE | ORA-00051 | -51 | Αυτή η εξαίρεση προκύπτει εάν η Oracle περιμένει έναν πόρο. |
VALUE_ERROR | ORA-06502 | -6502 | Αυτή η εξαίρεση προκύπτει εάν συμβεί μαθηματικό σφάλμα μετατροπής, περικοπής στο πρόγραμμά μας. |
ZERO_DIVIDE | ORA-01476 | -1476 | Αυτή η εξαίρεση δημιουργείται αν προσπαθήσουμε να διαιρέσουμε έναν αριθμό με 0. |
Συχνές Ερωτήσεις και Απαντήσεις
Q # 1) Τι είναι μια προκαθορισμένη εξαίρεση στο PL / SQL;
Απάντηση: Μια προκαθορισμένη εξαίρεση ρίχνεται αυτόματα από το PL / SQL εάν υπάρχει παραβίαση των κανόνων της βάσης δεδομένων από ένα πρόγραμμα.
Q # 2) Τι είναι ο χειρισμός εξαιρέσεων PL / SQL και γιατί απαιτείται;
Απάντηση: Ένα σφάλμα ή μη αναμενόμενο συμβάν στο πρόγραμμα ονομάζεται Εξαίρεση. Σταματά την κανονική ροή εκτέλεσης του προγράμματος. Στο PL / SQL, η εξαίρεση αντιμετωπίζεται εντός ενός μπλοκ EXCEPTION στον κώδικα και η κατάλληλη δράση κατά της εξαίρεσης περιγράφεται μέσα σε αυτό το μπλοκ.
Q # 3) Τι σημαίνει χειρισμός εξαιρέσεων;
Απάντηση: Είναι η μέθοδος απόκρισης σε απροσδόκητα συμβάντα που ενδέχεται να προκύψουν κατά την εκτέλεση του κώδικα.
Q # 4) Ποιες είναι οι δύο μορφές χειρισμού σφαλμάτων;
Απάντηση: Οι δύο μορφές χειρισμού σφαλμάτων περιλαμβάνουν σφάλμα χρόνου μεταγλώττισης και σφάλμα χρόνου εκτέλεσης . Το σφάλμα χρόνου εκτέλεσης συμβαίνει κατά την εκτέλεση του προγράμματος λόγω ακατάλληλων δεδομένων ή λογικής. Τα σφάλματα χρόνου μεταγλώττισης εντοπίζονται κατά τη σύνταξη του κώδικα μας.
Q # 5) Ποια είναι η διαφορά μεταξύ σφάλματος και εξαίρεσης;
Απάντηση: Εξαιρέσεις είναι περιστατικά που αντιμετωπίζονται με τη βοήθεια του μπλοκ δοκιμής / catch και μπορούν να αντιμετωπιστούν τόσο στον χρόνο μεταγλώττισης όσο και στον χρόνο εκτέλεσης της εκτέλεσης του προγράμματος. Τα σφάλματα, από την άλλη πλευρά, αντιμετωπίζονται μόνο κατά το χρόνο εκτέλεσης.
συμπέρασμα
Σε αυτό το σεμινάριο, έχουμε συζητήσει λεπτομερώς ορισμένες βασικές έννοιες του PL / SQL που είναι απαραίτητες για τη διαχείριση των εξαιρέσεων στα προγράμματά μας.
Έχουμε καλύψει τα ακόλουθα θέματα που αναφέρονται παρακάτω:
- Εξαιρέσεις.
- Τύποι εξαιρέσεων.
- Μερικές προκαθορισμένες εξαιρέσεις.
Στο επόμενο σεμινάριο, θα συζητήσουμε τις συναλλαγές PL / SQL, τις έννοιες OOPS και πολλά άλλα συνδεδεμένα θέματα.
Συνιστώμενη ανάγνωση
- C # Εκμάθηση χειρισμού εξαιρέσεων με παραδείγματα κώδικα
- Java Εξαιρέσεις και Χειρισμός Εξαιρέσεων με Παραδείγματα
- Πακέτο PL SQL: Οδηγός πακέτου Oracle PL / SQL με παραδείγματα
- Εξαίρεση χειρισμός σε C ++
- Εκμάθηση PL SQL για αρχάριους με παραδείγματα | Τι είναι το PL / SQL
- Εκμάθηση εγγραφών PL SQL με παραδείγματα