Πώς μπορώ να κάνω ερώτημα σε μια βάση δεδομένων Oracle για να εμφανίσω τα ονόματα όλων των πινάκων της;
SELECT owner, table_name
FROM dba_tables
Αυτό προϋποθέτει ότι έχετε πρόσβαση στην προβολή του λεξικού δεδομένων DBA_TABLES
. Εάν δεν έχετε αυτά τα δικαιώματα αλλά τα χρειάζεστε, μπορείτε να ζητήσετε από τον DBA να σας χορηγήσει ρητά δικαιώματα στον εν λόγω πίνακα ή, να σας χορηγήσει το δικαίωμα SELECT ANY DICTIONARY
ή το ρόλο SELECT_CATALOG_ROLE
(οποιοδήποτε από τα δύο θα σας επιτρέψει να κάνετε ερωτήσεις σε οποιονδήποτε πίνακα του λεξικού δεδομένων). Φυσικά, μπορεί να θέλετε να εξαιρέσετε ορισμένα σχήματα όπως τα SYS
και SYSTEM
τα οποία έχουν μεγάλο αριθμό πινάκων Oracle που πιθανώς δεν σας ενδιαφέρουν.
Εναλλακτικά, αν δεν έχετε πρόσβαση στο DBA_TABLES
, μπορείτε να δείτε όλους τους πίνακες στους οποίους έχει πρόσβαση ο λογαριασμός σας μέσω της προβολής ALL_TABLES
:
SELECT owner, table_name
FROM all_tables
Παρόλο που, αυτό μπορεί να είναι ένα υποσύνολο των πινάκων που είναι διαθέσιμοι στη βάση δεδομένων (η προβολή ALL_TABLES
σας δείχνει τις πληροφορίες για όλους τους πίνακες στους οποίους ο χρήστης σας έχει πρόσβαση).
Αν σας ενδιαφέρουν μόνο οι πίνακες που σας ανήκουν και όχι αυτοί στους οποίους έχετε πρόσβαση, μπορείτε να χρησιμοποιήσετε το USER_TABLES
:
SELECT table_name
FROM user_tables
Δεδομένου ότι η USER_TABLES
έχει πληροφορίες μόνο για τους πίνακες που σας ανήκουν, δεν έχει στήλη OWNER
- ο ιδιοκτήτης, εξ ορισμού, είστε εσείς.
Η Oracle διαθέτει επίσης έναν αριθμό παλαιών προβολών λεξικού δεδομένων - TAB
, DICT
, TABS
και CAT
για παράδειγμα - που θα μπορούσαν να χρησιμοποιηθούν. Σε γενικές γραμμές, δεν θα πρότεινα τη χρήση αυτών των παλαιών προβολών, εκτός αν πρέπει οπωσδήποτε να μεταφέρετε τα σενάριά σας στην Oracle 6. Η Oracle δεν έχει αλλάξει αυτές τις προβολές εδώ και πολύ καιρό, οπότε συχνά έχουν προβλήματα με νεότερους τύπους αντικειμένων. Για παράδειγμα, οι προβολές TAB
και CAT
δείχνουν και οι δύο πληροφορίες σχετικά με τους πίνακες που βρίσκονται στον κάδο ανακύκλωσης του χρήστη, ενώ οι προβολές [DBA|ALL|USER]_TABLES
τις φιλτράρουν όλες. Η CAT
εμφανίζει επίσης πληροφορίες σχετικά με τα αρχεία καταγραφής υλοποιημένων προβολών με TABLE_TYPE
"TABLE" που είναι απίθανο να είναι αυτό που πραγματικά θέλετε. Το DICT
συνδυάζει πίνακες και συνώνυμα και δεν σας λέει σε ποιον ανήκει το αντικείμενο.
Δοκιμάστε να επιλέξετε από το user_tables, το οποίο απαριθμεί τους πίνακες που ανήκουν στον τρέχοντα χρήστη.