Οι mavens βάσης δεδομένων θα αναγνωρίσουν το όνομα Oracle ως μονάδα παραγωγής ενέργειας στο σύστημα διαχείρισης σχεσιακών βάσεων δεδομένων (DBMS). Η Oracle έχει δημιουργήσει λύσεις DBMS πολύ υψηλής ισχύος για δεκαετίες και παραμένει ηγέτης στον τομέα. Πολλοί τελικοί χρήστες προϊόντων βάσης δεδομένων ενδέχεται να συγχέονται ή να διασκεδάζουν όταν χρησιμοποιούν μια προκαθορισμένη λύση και δημιουργούν ένα μήνυμα σφάλματος. Ένα κοινό μήνυμα λάθους που παράγεται από την Oracle είναι το σφάλμα ORA-06512.
Δείτε επίσης το άρθρο μας Πώς να διορθώσετε το λάθος ώρας-00942
Το Oracle είναι ένα σύστημα διαχείρισης βάσεων δεδομένων που έχει διαρκέσει σαράντα χρόνια με διάφορες μορφές. Αρχικά χρησιμοποίησε κάτι που ονομάζεται σχήμα SCOTT, το οποίο ονομάστηκε από έναν από τους αρχικούς υπαλλήλους της Oracle. Μπορείτε ακόμη και να συνδεθείτε στην Oracle για πρώτη φορά με το όνομα χρήστη 'scott' και τον κωδικό 'tiger' που ονομάζεται μετά την γάτα του Scott. Τώρα υπάρχουν διάφορα σχήματα που χρησιμοποιούνται ανάλογα με το τι χρησιμοποιείτε για την Oracle.
Εάν θέλετε να μάθετε περισσότερα για το Oracle από το έδαφος, αυτή η σελίδα είναι πολύ χρήσιμη.
Προσδιορισμός σφαλμάτων ORA-06512
Στην Oracle, ένα σφάλμα ORA-06512 είναι ένα γενικό σφάλμα εξαίρεσης που σας λέει πού συμβαίνει κάτι. Είναι ένα από τα λιγότερο συγκεκριμένα σφάλματα που παράγει η Oracle, καθώς σας λέει μόνο ότι υπάρχει κάποιο πρόβλημα, αλλά όχι τι συμβαίνει.
Για παράδειγμα, ένα τυπικό μήνυμα σφάλματος μπορεί να διαβάσει:
"ORA-01422: Το ακριβές fetch επιστρέφει περισσότερο από τον απαιτούμενο αριθμό γραμμών
ORA-06512: στη γραμμή "DATABASE_NAME", γραμμή 66
ORA-06512: στη γραμμή 1 "
Η πρώτη γραμμή σας λέει τι είδους σφάλμα συμβαίνει, στην περίπτωση αυτή, το ερώτημα επιστρέφει περισσότερα δεδομένα από ό, τι το ερώτημα αναμένει, έτσι δεν ξέρει πώς να το χειριστεί. Ο κωδικός 'ORA-01422' είναι ο πραγματικός κωδικός σφάλματος που πρέπει να εξετάσετε. Το ORA-06512 είναι μόνο ο γενικός κωδικός σφάλματος.
Η δεύτερη γραμμή σάς ενημερώνει για το πού συμβαίνει το σφάλμα. Το DATABASE_NAME πρόκειται να είναι οποιαδήποτε βάση δεδομένων εργάζεστε εκείνη τη στιγμή. Γραμμή 66 είναι η γραμμή όπου συμβαίνει το σφάλμα και είναι η γραμμή που πρέπει να ελέγξετε για να διορθώσετε το σφάλμα.
Η τρίτη γραμμή στη σύνταξη σφάλματος σας λέει από πού προέρχεται η κλήση. Ελέγξτε τη γραμμή ένα και θα δείτε μια κλήση στο DATABASE_NAME.
Για να διορθώσετε αυτό το συγκεκριμένο σφάλμα, πρέπει να διορθώσετε το πρόβλημα που προκαλείται από το ORA-01422, το οποίο είναι το "ακριβές fetch επιστρέφει περισσότερο από τον απαιτούμενο αριθμό γραμμών" ή πρέπει να προσθέσετε χειριστή εξαίρεσης για να πείτε στην Oracle να το αγνοήσει. Καθώς ο καθορισμός του βασικού ζητήματος είναι πάντα προτιμότερο, αυτός είναι ο τρόπος που πρέπει να προχωρήσουμε.
Υπάρχουν δύο πράγματα που μπορείτε να κάνετε. Αν αναμένετε ότι το ερώτημα θα επιστρέψει πάνω από μία μόνο σειρά, μπορείτε να το τροποποιήσετε ώστε να μην εκπλαγείτε. Αν περιμένετε μόνο το ερώτημα να επιστρέψει μια μόνο σειρά, μπορείτε να το τροποποιήσετε και για αυτό.
Αναμένοντας περισσότερες από μία γραμμές:
για το X in (επιλέξτε * από t όπου …)
βρόχος
- επεξεργαστείτε την εγγραφή X εδώ
end βρόχο?
Αυτό θα πρέπει να εξαλείψει το σφάλμα στα ερωτήματα βάσης δεδομένων όπου θα επιστραφούν περισσότερες από μία σειρές.
Αν περιμένετε να επιστραφεί μόνο μία γραμμή, θα μπορούσατε να δοκιμάσετε:
να αρχίσει
επιλέξτε * σε ….
από το t όπου ….
επεξεργάζομαι, διαδικασία….
εξαίρεση
όταν NO_DATA_FOUND στη συνέχεια
κώδικα χειρισμού σφαλμάτων όταν δεν υπάρχει εγγραφή
όταν TOO_MANY_ROWS τότε
κώδικα αντιμετώπισης σφαλμάτων όταν εντοπιστούν πάρα πολλά αρχεία
τέλος;
Αυτή η δεύτερη μέθοδος θα πρέπει να παραδώσει μόνο τη μία σειρά χωρίς να αναβοσβήνει το σφάλμα "ORA-01422: ακριβές fetch επιστρέφει περισσότερο από το απαιτούμενο αριθμό γραμμών" και επομένως το αρχικό σφάλμα ORA-06512.
Μπορείτε επίσης να τροποποιήσετε το ερώτημα έτσι ώστε να επιστρέφει μόνο την πρώτη σειρά μιας απάντησης πολλαπλών γραμμών. Αυτό μπορεί να λειτουργήσει εάν δεν έχετε πλήρη έλεγχο της βάσης δεδομένων ή δεν θέλετε να χάσετε τα πράγματα πάρα πολύ, αλλά χρειάζεστε ακόμα μια απάντηση.
δηλώνω
c1 για να επιλέξετε * από το t όπου …
να αρχίσει
ανοιχτό c1;
φέρω c1 σε ..
αν (c1% δεν υπάρχει) τότε
σφάλμα χειρισμού για κανένα αρχείο που βρέθηκε
τέλος εαν;
close c1;
τέλος;
(Εάν γνωρίζετε SQL, ίσως να είστε λίγο συγκεχυμένοι από αυτές τις γραμμές εντολών … Η Oracle δεν χρησιμοποιεί το Transact-SQL αλλά μάλλον είναι η δική της επέκταση της SQL, PL / SQL. Πολλά έξυπνα πράγματα και είναι ένα πολύ ισχυρό εργαλείο από μόνο του. Μπορεί να βρείτε αυτό το FAQ PL / SQL χρήσιμο όταν προσπαθείτε να μάθετε περισσότερα για την Oracle.)
Έτσι, το βασικό μάθημα εδώ είναι από ένα σφάλμα ORA-06512, και από μόνο του, δεν είναι κάτι που μπορείτε να διορθώσετε άμεσα. Αντ 'αυτού θα πρέπει να υπολογίσετε ποιο είναι το πραγματικό σφάλμα, το οποίο θα σας πει ο άλλος κωδικός σφάλματος και στη συνέχεια να αντιμετωπίσετε αυτά τα λάθη ένα προς ένα.
Έχετε οποιεσδήποτε συμβουλές ή κόλπα της Oracle για κοινή χρήση; Ενημερώστε μας για τα σχόλια!
