Λίστα όλων των πινάκων στην Oracle;

Πώς μπορώ να κάνω ερώτημα σε μια βάση δεδομένων 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 συνδυάζει πίνακες και συνώνυμα και δεν σας λέει σε ποιον ανήκει το αντικείμενο.

Σχόλια (6)

Η αναζήτηση των user_tables και dba_tables δεν λειτούργησε.
Αυτό εδώ έπιασε:

select table_name from all_tables  
Σχόλια (1)

Δοκιμάστε να επιλέξετε από το user_tables, το οποίο απαριθμεί τους πίνακες που ανήκουν στον τρέχοντα χρήστη.

Σχόλια (0)