Anonim

De vegades, veieu un error ora-00942 en executar una instrucció SQL. Té algunes causes i, com és habitual, la sintaxi d'error no és la més descriptiva. Si teniu aquesta opció i voleu saber com arreglar l'error ora-00942, llegiu-ne el text.

Fins on sé, hi ha tres causes principals de l'error ora-00942:

  1. Privilegis d'usuari insuficients
  2. La taula o la vista realment no existeixen
  3. La taula o vista es troba en un esquema diferent

Us ensenyaré com dirigir-vos a cadascú.

Corregiu l'error ora-00942

En primer lloc, una mica de renúncia. No sóc DBA, sóc administrador de Windows i tecnologia de maquinari d’escriptori i servidor. Sé executar SQL, però no amb qualsevol nivell d’expertesa i, certament, fins al nivell que pugui resoldre problemes. Vaig haver de demanar ajuda a un amic meu d’Oracle DBA, així que mentre escrivia aquesta obra, els bits intel·ligents són seus.

Aquesta llista de tres causes de l'error ora-00942 no és exhaustiva. Aparentment hi ha altres causes aleatòries, però aquestes tres són aparentment les més comunes.

Privilegis d'usuari insuficients

Una de les causes principals de l’error ora-00942 és que l’usuari no té privilegis suficients per accedir a la taula en qüestió. Podeu comprovar-ho executant dues consultes.

- llista dels privilegis del sistema per a l'usuari o el rol SELECCIONA * FROM dba_sys_privs WHERE grantee IN (& user_role, 'PUBLIC');

- Llista els privilegis d'objectes per a l'usuari o el rol

SELECTE adjudicatari, propietari || '.' || objecte_nom_tapa, privilegi, que es pot concedir a partir de dba_tab_privs ONDE ENTREIXA (& user_role) ORDRE PER adjudicatari, propietari || '.' || taula_nom, privilegi;

Aquests dos us indicaran si l’usuari en qüestió té els privilegis correctes per executar la comanda. Si l’usuari té els privilegis correctes, passa al següent. Si l’usuari no té els privilegis correctes, concediu-los o demaneu que el faci l’administrador del DB.

L'error ora-00942 també es pot produir si l'usuari de l'esquema que utilitzeu té privilegis INSERT però no SELECT. De nou, comproveu el nivell de privilegis i afegiu SELECT a la llista o demaneu que un administrador del DB ho faci. Aparentment, el privilegi específic SELECT s'ha de concedir a cada esquema, en cas contrari, encara veureu l'error ora-00942.

La taula o la vista realment no existeixen

Aquesta causa de l'error ora-00942 pot ser causada per una sintaxi de consulta incorrecta o si la taula no existeix. Tot i que això sembli el primer lloc lògic per començar, estic segur que el privilegi de l’usuari és la causa principal de l’error. La taula no hi és o la sintaxi de taula incorrecta que s’utilitza és la segona.

Per comprovar si existeix la taula, comproveu primer la sintaxi de la consulta. Si la sintaxi és correcta, executeu aquesta consulta.

SELECT propietari, nom_objecte, object_tip FROM all_objects WHERE object_type IN ("TAULA", "VEURE") I object_name = "YOUR_TABLE_NAME";

En aquesta darrera línia, inseriu el nom de la taula real on veieu "YOUR_TABLE_NAME". Això us hauria de dir definitivament si la taula que esteu intentant consultar existeix o no. Si es torna sense taula, la taula que estàs consultant no existeix a l'esquema ni a la base de dades.

Si el sistema que utilitzeu té un menú Taules, podeu buscar manualment la taula si ho preferiu, però la consulta anterior s'acaba de fer.

La taula o vista es troba en un esquema diferent

Si l'usuari té privilegis i la taula existeix i encara veieu l'error ora-00942, és probable que es baixi a l'esquema. Si gestiona diversos esquemes, és fàcil executar una consulta contra un esquema que no sigui el teu. Quan esteu ocupats i esteu en contra, és un error senzill.

Comproveu l'esquema manualment si podeu o afegiu el nom de l'esquema a la línia FROM de la vostra consulta. Si no teniu els privilegis correctes per al nou esquema, tornareu a veure l'error ora-00942. Torneu a la primera correcció de privilegis d'usuari i comproveu l'esquema corresponent o feu que el vostre DBA ho faci per vosaltres.

Com s'ha esmentat anteriorment, he consultat a un amic Oracle DBA meu per a aquesta peça, per la qual cosa li ha valgut tota la tasca. Si trobeu aquí errors o omissions, només són meus. Aviseu-me a la secció de comentaris si he perdut alguna cosa o ho he equivocat i ho corregiré.

Si coneixeu alguna altra manera d'arreglar l'error ora-00942, comenteu-ne el següent.

Com solucionar l'error ora-00942