Problemi quando si interroga il database Oracle per l'elenco delle tabelle: “tabella o vista non esiste”

StackOverflow https://stackoverflow.com/questions/3777760

Domanda

Nel mio programma ho bisogno di accedere allo schema di database di Oracle 11g. Ho cercato di ottenere un elenco di tabelle utilizzando una query come questa:

SELECT t.TABLE_NAME, t.OWNER
FROM ALL_TABLES t
WHERE t.DROPPED = 'NO'
ORDER BY t.TABLE_NAME

La query funziona e io tornare un elenco di tabelle. Purtroppo quando si interroga alcune delle tabelle utilizzando il nome della tabella restituita ottengo il seguente errore:

  

ORA-00942: tabella o vista non esiste

Che cosa potrebbe causare questo errore? Potrebbe essere giù ai privilegi?

In una questione a parte io sono anche un po 'confuso circa se ci potrebbero potenzialmente essere due o tabelle con lo stesso nome e come avrei potuto distinguere tra i due. Ho bisogno di guardare fuori per questo?

Sto usando il provider Oracle.DataAccess in .NET per la connessione al database. Si tratta di un server remoto e l'accesso purtroppo ho molto limitata ad esso.

È stato utile?

Soluzione

Potrebbe essere giù ai privilegi. Ma potrebbe essere giù al tavolo di essere in uno schema diverso, e non ci sia un sinonimo di esso. Funziona se si qualificano il nome della tabella con il proprietario? cioè selezionare [proprietario]. [nome_tabella] invece?

Altri suggerimenti

Solo perché si ha accesso alla visualizzazione ALL_TABLES non significa che si può effettivamente selezionare le tabelle di recuperare tramite questo punto di vista. È necessario la concessione appropriata selezionare sui tavoli per selezionarli.

2 tabelle possono avere lo stesso nome purché appartengono a uno schema diverso (il campo di applicazione è in realtà più ampia che solo le tabelle, uno schema non può avere due oggetti (tabella, vista ...) che hanno lo stesso nome)

Sì, è una caratteristica di sicurezza - se non hai il permesso di selezionare da un tavolo, Oracle normalmente nemmeno riconoscere a voi che esiste (un utente ordinario non sarebbe in grado di vedere le cose a selezionare dalla ALL_ a meno che è stato concesso dal DBA).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top