Anonim

Occasionalmente viene visualizzato un errore ora-00942 durante l'esecuzione di un'istruzione SQL. Ha alcune cause e, come al solito, la sintassi dell'errore non è la più descrittiva. Se stai affrontando questo e vuoi sapere come correggere l'errore ora-00942, continua a leggere.

Per quanto ne so, ci sono tre cause principali dell'errore ora-00942:

  1. Privilegi utente insufficienti
  2. La tabella o vista in realtà non esiste
  3. La tabella o vista si trova in uno schema diverso

Ti mostrerò come affrontare ognuno.

Correggi l'errore ora-00942

Prima di tutto, un piccolo disclaimer. Non sono un DBA, sono un amministratore di Windows e tecnologia hardware desktop e server. So come eseguire SQL ma non per qualsiasi grado di esperienza e certamente non al livello che può risolvere i problemi. Ho dovuto chiedere aiuto a un mio amico Oracle DBA, quindi mentre scrivo questo pezzo, i pezzi intelligenti sono tutti suoi.

Questo elenco di tre cause dell'errore ora-00942 non è esaustivo. Apparentemente ci sono altre cause casuali, ma queste tre sono apparentemente le più comuni.

Privilegi utente insufficienti

Una delle cause principali dell'errore ora-00942 è che l'utente non dispone di privilegi sufficienti per accedere alla tabella in questione. Puoi verificarlo eseguendo due query.

- elenca i privilegi di sistema per l'utente o il ruolo SELEZIONA * DA dba_sys_privs DOVE concediti IN (& user_role, 'PUBLIC');

- elenca i privilegi degli oggetti per l'utente o il ruolo

SELEZIONA utente autorizzato, proprietario || '.' || nome_tabella oggetto, privilegio, assegnabile DA dba_tab_privs DOVE utente autorizzato IN (& user_role) ORDINA PER utente autorizzato, proprietario || '.' || nome_tabella, privilegio;

Questi due ti diranno se l'utente in questione ha i privilegi corretti per eseguire il comando. Se l'utente ha i privilegi corretti, passa al successivo. Se l'utente non dispone dei privilegi corretti, concederglielo o chiedere al proprio amministratore DB di farlo.

L'errore ora-00942 può verificarsi anche se l'utente dello schema in uso dispone dei privilegi INSERT ma non dei privilegi SELECT. Ancora una volta, controlla il livello di privilegio e aggiungi SELEZIONA all'elenco o chiedi a un amministratore DB di farlo. Apparentemente, il privilegio SELECT specifico deve essere concesso a ciascuno schema, altrimenti vedrai ancora l'errore ora-00942.

La tabella o vista in realtà non esiste

Questa causa dell'errore ora-00942 può essere causata da una sintassi della query errata o se la tabella non esiste. Mentre questo sembrerebbe il primo logico punto di partenza, sono certo che il privilegio dell'utente è la causa numero uno dell'errore. La tabella non presente o la sintassi della tabella errata utilizzata è la seconda.

Per verificare l'esistenza della tabella, verificare innanzitutto la sintassi della query. Se la sintassi è corretta, eseguire questa query.

SELEZIONA proprietario, nome_oggetto, tipo_oggetto DA tutti_oggetto DOVE tipo_oggetto IN ('TABELLA', 'VISUALIZZA') E nome_oggetto = 'YOUR_TABLE_NAME';

Nell'ultima riga, inserisci il nome effettivo della tabella in cui vedi "YOUR_TABLE_NAME". Questo dovrebbe dirti definitivamente se la tabella che stai cercando di interrogare esiste o meno. Se restituisce senza tabella, la tabella di cui si sta eseguendo la query non esiste nello schema o nel database.

Se il sistema in uso dispone di un menu Tabelle, è possibile verificare manualmente la tabella, se si preferisce, ma la query precedente esegue il lavoro.

La tabella o vista si trova in uno schema diverso

Se l'utente ha i privilegi e la tabella esiste e stai ancora vedendo l'errore ora-00942, è probabilmente dovuto allo schema. Se gestisci più schemi, è facile eseguire una query su uno schema che non è tuo. Quando sei occupato e ci sei, è un semplice errore da fare.

Controllare manualmente lo schema se è possibile o aggiungere il nome dello schema nella riga FROM della query. Se non si dispone dei privilegi corretti per il nuovo schema, verrà visualizzato nuovamente l'errore ora-00942. Torna alla prima correzione dei privilegi dell'utente e controlla lo schema corrispondente o fai in modo che il tuo DBA lo faccia per te.

Come accennato in precedenza, ho consultato un mio amico Oracle DBA per questo pezzo, quindi tutto merito a lui per il duro lavoro. Se trovi errori o omissioni qui, sono solo miei. Fammi sapere nella sezione commenti se ho perso qualcosa o ho sbagliato e lo correggerò.

Se conosci un altro modo per correggere l'errore ora-00942, parlaci di seguito!

Come correggere l'errore ora-00942