Πίνακας περιεχομένων:
- Δηλώσεις χειριστή
- Εάν συμβαίνει μια συνθήκη που καλεί χειριστή, εκτελείται η ενέργεια που καθορίζεται από το χειριστή. Αυτή η ενέργεια είναι μια δήλωση SQL, η οποία μπορεί να είναι μια σύνθετη δήλωση. Αν η ενέργεια χειριστή ολοκληρωθεί με επιτυχία, τότε εκτελείται το εφέ χειρισμού.Ακολουθεί μια λίστα με τα τρία πιθανά αποτελέσματα χειριστή:
Βίντεο: Week 9 2024
Μπορείτε να δείτε το πρόγραμμά σας στο SQLSTATE μετά την εκτέλεση κάθε εντολής SQL. Υπάρχουν αρκετές δυνατότητες για όσα μπορεί να θέλετε να κάνετε στη συνέχεια. Τι κάνεις με τη γνώση που κερδίζεις;
-
Αν βρείτε κωδικό κατηγορίας 00 , πιθανότατα δεν θέλετε να κάνετε τίποτα. Θέλετε να εκτελεστεί η εκτέλεση όπως σχεδιάσατε αρχικά.
-
Αν βρείτε κωδικό κατηγορίας 01 ή 02 , ίσως θέλετε να κάνετε ειδικές ενέργειες. Αν αναμενόταν η ένδειξη "Προειδοποίηση" ή "Δεν βρέθηκε", πιθανότατα θέλετε να αφήσετε την εκτέλεση να συνεχιστεί. Εάν δεν περιμένατε κανένα από αυτούς τους κωδικούς τάξης, πιθανώς θέλετε να έχετε κλάδο εκτέλεσης σε μια διαδικασία που έχει σχεδιαστεί ειδικά για να χειριστεί το απροσδόκητο, αλλά όχι εντελώς απροσδόκητο, προειδοποιητικό ή δεν βρέθηκε αποτέλεσμα.
-
Αν λάβετε κάποιο άλλο κωδικό τάξης, κάτι είναι λάθος. Θα πρέπει να υποκαταστήσετε μια διαδικασία χειρισμού εξαιρέσεων. Ποια διαδικασία επιλέγετε να υποκαταστήσετε εξαρτάται από το περιεχόμενο των τριών χαρακτήρων υποκλάσης, καθώς και από τους δύο χαρακτήρες κλάσης του SQLSTATE. Εάν είναι δυνατές πολλές διαφορετικές εξαιρέσεις, θα πρέπει να υπάρχει μια διαδικασία αντιμετώπισης των εξαιρέσεων για κάθε μία, επειδή οι διαφορετικές εξαιρέσεις απαιτούν συχνά διαφορετικές απαντήσεις.
Μπορεί να διορθώσετε κάποια λάθη ή να βρείτε λύσεις. Άλλα σφάλματα μπορεί να είναι θανατηφόρα. κανείς δεν θα πεθάνει, αλλά μπορεί να καταλήξετε να τερματίσετε την εφαρμογή.
Δηλώσεις χειριστή
Μπορείτε να βάλετε ένα χειριστή κατάστασης μέσα σε μια σύνθετη δήλωση. Για να δημιουργήσετε ένα πρόγραμμα χειρισμού συνθηκών, πρέπει πρώτα να δηλώσετε την κατάσταση που θα χειριστεί. Η κατάσταση που δηλώνεται μπορεί να είναι κάποιου είδους εξαίρεση ή μπορεί να είναι κάτι που είναι αλήθεια. Εδώ είναι μερικές πιθανές συνθήκες.
'xxyyy'
BEGIN DECLARE constraint_violation ΣΥΝΘΕΣΗ ΓΙΑ SQLSTATE VALUE '23000'; ΤΕΛΟΣ;
Αυτό το παράδειγμα δεν είναι ρεαλιστικό, γιατί τυπικά η εντολή SQL που μπορεί να προκαλέσει την εμφάνιση της κατάστασης - καθώς και ο χειριστής που θα μπορούσε να χρησιμοποιηθεί σε περίπτωση εμφάνισης της κατάστασης - θα περικλείεται επίσης στη δομή BEGIN … END.
Ενέργειες χειριστή και εφέ χειριστή
Εάν συμβαίνει μια συνθήκη που καλεί χειριστή, εκτελείται η ενέργεια που καθορίζεται από το χειριστή. Αυτή η ενέργεια είναι μια δήλωση SQL, η οποία μπορεί να είναι μια σύνθετη δήλωση. Αν η ενέργεια χειριστή ολοκληρωθεί με επιτυχία, τότε εκτελείται το εφέ χειρισμού.Ακολουθεί μια λίστα με τα τρία πιθανά αποτελέσματα χειριστή:
ΣΥΝΕΧΕΙΑ: Συνεχίστε την εκτέλεση αμέσως μετά τη δήλωση που προκάλεσε την κλήση του χειριστή.
-
-
UNDO: Αναίρεση της εργασίας των προηγούμενων δηλώσεων στη σύνθετη δήλωση και, στη συνέχεια, συνέχιση της εκτέλεσης μετά από τη δήλωση που περιέχει το χειριστή.
-
Εάν ο χειριστής μπορεί να διορθώσει οποιοδήποτε πρόβλημα προκαλείται από τον χειριστή, τότε μπορεί να είναι κατάλληλο το φαινόμενο CONTINUE. Το αποτέλεσμα EXIT μπορεί να είναι κατάλληλο αν ο χειριστής δεν επιλύσει το πρόβλημα, αλλά οι αλλαγές που έγιναν στη σύνθετη δήλωση δεν χρειάζεται να ακυρωθούν. Το αποτέλεσμα UNDO είναι κατάλληλο αν θέλετε να επαναφέρετε τη βάση δεδομένων στην κατάσταση στην οποία βρισκόταν πριν από την εκτέλεση της σύνθετης δήλωσης.
BEGIN ATOMIC DECLARE constraint_violation ΣΥΝΘΕΣΗ ΓΙΑ SQLSTATE VALUE '23000'; ΔΗΛΩΣΗ ΧΕΙΡΙΣΤΗ UNDO ΓΙΑ παραβίαση constraint_ RESIGNAL; ΕΙΣΑΓΩΓΗ ΣΕ ΦΟΙΤΗΤΕΣ (StudentID, Fname, Lname) VALUES (: sid,: sfname,: slname); ΕΙΣΑΓΩΓΗ ΣΕ ΡΟΛΟ (ΤΑΞΗ, ΤΑΞΗ, Φοιτητική ID) ΤΙΜΕΣ (: cid,: cname,: sid); ΤΕΛΟΣ;
Αν οποιαδήποτε από τις εντολές INSERT προκαλεί παραβίαση περιορισμών, όπως η προσπάθεια προσθήκης μιας εγγραφής με ένα πρωτεύον κλειδί που διπλασιάζει ένα πρωτεύον κλειδί που υπάρχει ήδη στον πίνακα, το SQLSTATE παίρνει μια τιμή "23000", ορίζοντας έτσι την κατάσταση constraint_violation μια πραγματική τιμή.
Αν και οι δύο εντολές INSERT εκτελούνται με επιτυχία, η εκτέλεση συνεχίζεται με τη δήλωση που ακολουθεί τη λέξη-κλειδί END.
Η λέξη-κλειδί ATOMIC είναι υποχρεωτική όποτε το αποτέλεσμα του χειριστή είναι UNDO. Αυτό δεν συμβαίνει για τους χειριστές των οποίων το αποτέλεσμα είναι είτε CONTINUE είτε EXIT.