Περιστασιακά βλέπετε ένα σφάλμα ώρας-00942 κατά την εκτέλεση μιας δήλωσης SQL. Έχει μερικές αιτίες και ως συνήθως η σύνταξη σφάλματος δεν είναι η πιο περιγραφική. Εάν αντιμετωπίζετε κάτι τέτοιο και θέλετε να μάθετε πώς να διορθώσετε το λάθος ora-00942, διαβάστε το παρακάτω.
Εξ όσων γνωρίζω, υπάρχουν τρεις κύριες αιτίες του σφάλματος ora-00942:
- Ανεπαρκής προνόμια χρήστη
- Ο πίνακας ή η προβολή δεν υπάρχουν στην πραγματικότητα
- Ο πίνακας ή η προβολή βρίσκεται σε διαφορετικό σχήμα
Θα σας δείξω πώς να απευθυνθείτε σε καθένα.
Διορθώστε το σφάλμα ώρας-00942
Πρώτα απ 'όλα, μια μικρή αποποίηση ευθυνών. Δεν είμαι DBA, είμαι διαχειριστής των Windows και τεχνολογία desktop και server hardware. Ξέρω πώς να τρέχω SQL, αλλά όχι σε οποιοδήποτε βαθμό εμπειρογνωμοσύνης και σίγουρα όχι στο επίπεδο που μπορεί να αντιμετωπίσει προβλήματα. Έπρεπε να ρωτήσω έναν φίλο του Oracle DBA για βοήθεια, οπότε ενώ έγραψα αυτό το κομμάτι, τα έξυπνα κομμάτια είναι όλα του.
Αυτός ο κατάλογος των τριών αιτιών του λάθους Ora-00942 δεν είναι εξαντλητικός. Υπάρχουν προφανώς και άλλες τυχαίες αιτίες, αλλά αυτές οι τρεις είναι προφανώς οι πιο συχνές.
Ανεπαρκής προνόμια χρήστη
Μια βασική αιτία του σφάλματος ora-00942 είναι ότι ο χρήστης δεν έχει επαρκή προνόμια για να αποκτήσει πρόσβαση στον εν λόγω πίνακα. Μπορείτε να ελέγξετε αυτό χρησιμοποιώντας δύο ερωτήματα.
- λίστα προνομίων συστήματος για το χρήστη ή τον ρόλο SELECT * FROM dba_sys_privs ΠΟΥ ΕΓΓΡΑΦΕΙ το IN (& user_role, 'PUBLIC');
- λίστα δικαιωμάτων προφίλ για το χρήστη ή το ρόλο
SELECT δικαιούχος, ιδιοκτήτης || '.' || table_name αντικείμενο, προνόμιο, grantable ΑΠΟ dba_tab_privs WHERE δικαιούχος IN (& user_role) ΠΑΡΑΓΓΕΛΙΑ από κατόχους, ιδιοκτήτη || '.' || table_name, privilege;
Αυτά τα δύο θα σας πουν εάν ο εν λόγω χρήστης έχει τα σωστά προνόμια για να εκτελέσει την εντολή. Αν ο χρήστης έχει τα σωστά προνόμια, προχωρήστε στο επόμενο. Εάν ο χρήστης δεν έχει τα σωστά δικαιώματα, παραχωρήστε τα σε αυτά ή ζητήστε από το DB Admin να το κάνει.
Το σφάλμα ora-00942 μπορεί επίσης να προκύψει εάν ο χρήστης του σχήματος που χρησιμοποιείτε έχει δικαιώματα INSERT αλλά όχι δικαιώματα SELECT. Πάλι, ελέγξτε το επίπεδο προνομίων και προσθέστε το στοιχείο SELECT στη λίστα ή ζητήστε από έναν διαχειριστή DB να το κάνει. Προφανώς, το συγκεκριμένο προνόμιο SELECT πρέπει να παραχωρηθεί σε κάθε σχήμα, διαφορετικά θα δείτε το σφάλμα ώρας-00942.
Ο πίνακας ή η προβολή δεν υπάρχουν στην πραγματικότητα
Αυτή η αιτία του σφάλματος ora-00942 μπορεί να προκληθεί από εσφαλμένη σύνταξη ερωτήματος ή αν ο πίνακας δεν υπάρχει. Ενώ αυτό φαίνεται να είναι το λογικό πρώτο μέρος για να ξεκινήσει, είμαι αξιόπιστα διαβεβαίωσε ότι το προνόμιο χρήστη είναι η πρώτη αιτία του σφάλματος. Ο πίνακας που δεν υπάρχει ή η λανθασμένη σύνταξη πίνακα είναι δεύτερη.
Για να ελέγξετε αν υπάρχει ο πίνακας, ελέγξτε πρώτα τη σύνταξη του ερωτήματος. Εάν η σύνταξη είναι σωστή, εκτελέστε αυτό το ερώτημα.
SELECT κάτοχος, όνομα_αντικειμένου, object_type FROM all_objects WHERE object_type IN ('TABLE', 'VIEW') και object_name = 'YOUR_TABLE_NAME'.
Στην τελευταία γραμμή, εισαγάγετε το πραγματικό όνομα πίνακα όπου βλέπετε το στοιχείο "YOUR_TABLE_NAME". Αυτό θα πρέπει να σας πει σίγουρα αν ο πίνακας που προσπαθείτε να κάνετε ερώτηση υπάρχει ή όχι. Εάν επιστρέφει χωρίς πίνακα, ο πίνακας στον οποίο κάνετε ερώτηση δεν υπάρχει στο σχήμα ή στη βάση δεδομένων.
Εάν το σύστημα που χρησιμοποιείτε έχει ένα μενού Tables, μπορείτε να ελέγξετε με μη αυτόματο τρόπο τον πίνακα αν προτιμάτε, αλλά το παραπάνω ερώτημα ολοκληρώνει τη δουλειά.
Ο πίνακας ή η προβολή βρίσκεται σε διαφορετικό σχήμα
Αν ο χρήστης έχει προνόμια και ο πίνακας υπάρχει και εξακολουθείτε να βλέπετε το λάθος ora-00942, πιθανόν να είναι κάτω από το σχήμα. Εάν διαχειρίζεστε πολλά σχήματα, είναι εύκολο να εκτελέσετε ένα ερώτημα σε ένα σχήμα που δεν είναι το δικό σας. Όταν είστε απασχολημένοι και αντίθετοι, είναι ένα απλό σφάλμα.
Ελέγξτε το σχήμα χειροκίνητα αν μπορείτε ή να προσθέσετε το όνομα σχήματος στη γραμμή FROM του ερωτήματος σας. Αν δεν έχετε τα σωστά δικαιώματα για το νέο σχήμα, θα δείτε ξανά το λάθος ora-00942. Επιστρέψτε στην επιδιόρθωση του πρώτου προνόμου χρήστη και ελέγξτε το αντίστοιχο σχήμα ή πάρετε το DBA για να το κάνετε για εσάς.
Όπως αναφέρθηκε παραπάνω, συμβουλεύτηκα έναν φίλο της Oracle DBA μου για αυτό το κομμάτι, έτσι ώστε όλα να τον πιστέψουν για τη σκληρή δουλειά. Αν βρείτε τυχόν σφάλματα ή παραλείψεις εδώ, είναι μόνοι μου. Επιτρέψτε μου να γνωρίζω στην ενότητα σχολίων αν μου χάσει τίποτα ή το έκανα λάθος και θα το διορθώσω.
Αν γνωρίζετε κάποιον άλλο τρόπο για να διορθώσετε το λάθος ora-00942, πείτε μας το παρακάτω!
