Βίντεο: Week 9 2024
Όταν προσπαθείτε να προσδιορίσετε την πηγή ενός σφάλματος SQL και το SQLSTATE υποδεικνύει μια εξαίρεση συνθήκη διατηρώντας μια τιμή διαφορετική από 00000, 00001 ή 00002, μπορεί να θέλετε να χειριστείτε την κατάσταση σε ένα από τους ακόλουθους τρόπους:
-
Επιστρέψτε τον έλεγχο στη γονική διαδικασία που κάλεσε την υποδιαίρεση που έθεσε την εξαίρεση.
-
Χρησιμοποιήστε μια ρήτρα WHENEVER για την υποκατάστασή της σε ρουτίνα χειρισμού εξαιρέσεων ή για να εκτελέσετε κάποια άλλη ενέργεια.
-
Χειριστείτε την εξαίρεση επί τόπου με μια εντολή compound SQL. Μια σύνθετη εντολή SQL αποτελείται από μία ή περισσότερες απλές εντολές SQL, οι οποίες παρεμβάλλονται μεταξύ των BEGIN και των END λέξεων-κλειδιών.
Το ακόλουθο είναι ένα παράδειγμα ενός χειριστή εξαιρέσεων της σύνθετης εντολής:
BEGIN DECLARE ValueOutOfRange EXCEPTION FOR SQLSTATE'73003 '; ΕΙΣΑΓΩΓΗ ΣΕ ΤΡΟΦΙΜΑ (θερμίδες) ΑΞΙΕΣ (: cal); SIGNAL ValueOutOfRange; MESSAGE 'Επεξεργαστείτε μια νέα τιμή θερμίδων. 'ΕΚΤΟΣ ΑΠΟ ΤΟ ValueOutOfRange THEN MESSAGE' Χειρισμός του σφάλματος εύρους θερμίδων '. ΟΤΑΝ ΟΙ ΑΛΛΟΥΣ ΑΚΟΛΟΥΘΟΥΝ ΣΤΗ ΣΗΜΑΙΑ END
Με μία ή περισσότερες δηλώσεις DECLARE, μπορείτε να δώσετε ονόματα σε συγκεκριμένες τιμές SQLSTATE που υποπτεύεστε ότι μπορεί να προκύψουν. Η δήλωση INSERT είναι αυτή που μπορεί να προκαλέσει μια εξαίρεση. Εάν η τιμή: cal υπερβαίνει τη μέγιστη τιμή για ένα στοιχείο δεδομένων SMALLINT, το SQLSTATE έχει οριστεί σε "73003". Η δήλωση SIGNAL σηματοδοτεί μία προϋπόθεση εξαίρεσης. Καθαρίζει την κορυφαία περιοχή διάγνωσης.
Ορίζει το πεδίο RETURNED_SQLSTATE της περιοχής διαγνωστικών στο SQLSTATE για την εξαίρεση που ονομάζεται. Αν δεν έχει συμβεί καμία εξαίρεση, εκτελείται η σειρά δηλώσεων που αναπαριστάται από τη δήλωση MESSAGE 'Διαδικασία μιας νέας θερμιδικής αξίας'. Ωστόσο, αν έχει υπάρξει εξαίρεση, αυτή η σειρά των δηλώσεων παραλείπεται και εκτελείται η εντολή EXCEPTION.
Αν η εξαίρεση ήταν μια εξαίρεση ValueOutOfRange, τότε εκτελείται μια σειρά από δηλώσεις που αναπαριστά η εντολή MESSAGE «Διαχείριση εσφαλμένου εύρους τιμών θερμίδων». Η εντολή RESIGNAL εκτελείται αν η εξαίρεση δεν είναι εξαίρεση ValueOutOfRange.
RESIGNAL απλώς περνά τον έλεγχο της εκτέλεσης στη διαδικασία γονικής κλήσης. Αυτή η διαδικασία μπορεί να έχει πρόσθετο κώδικα χειρισμού σφαλμάτων για να αντιμετωπίσει εξαιρέσεις διαφορετικές από το αναμενόμενο σφάλμα εκτός της εμβέλειας.