Anonim

U ziet af en toe een ora-00942-fout bij het uitvoeren van een SQL-instructie. Het heeft een paar oorzaken en zoals gewoonlijk is de foutsyntaxis niet de meest beschrijvende. Als u dit tegenkomt en wilt weten hoe u de ora-00942-fout kunt oplossen, lees dan verder.

Voor zover ik weet, zijn er drie hoofdoorzaken van de ora-00942-fout:

  1. Onvoldoende gebruikersrechten
  2. De tabel of weergave bestaat eigenlijk niet
  3. De tabel of weergave bevindt zich in een ander schema

Ik zal je laten zien hoe je iedereen kunt aanspreken.

Los de fout ora-00942 op

Allereerst een kleine disclaimer. Ik ben geen DBA, ik ben een Windows-beheerder en hardware voor desktop- en serverhardware. Ik weet hoe ik SQL moet uitvoeren, maar niet tot op zekere hoogte en zeker niet op het niveau dat problemen kan oplossen. Ik moest een Oracle DBA-buddy van mij om hulp vragen, dus terwijl ik dit stuk schreef, zijn de slimme stukjes allemaal van hem.

Deze lijst met drie oorzaken van de fout ora-00942 is niet volledig. Er zijn blijkbaar andere willekeurige oorzaken ervan, maar deze drie zijn blijkbaar de meest voorkomende.

Onvoldoende gebruikersrechten

Een belangrijke oorzaak van de fout ora-00942 is dat de gebruiker onvoldoende rechten heeft om toegang te krijgen tot de betreffende tabel. U kunt dit controleren door twee query's uit te voeren.

- lijst systeemrechten voor de gebruiker of rol SELECT * FROM dba_sys_privs WHERE grantee IN (& user_role, 'PUBLIC');

- lijst objectrechten voor de gebruiker of rol

SELECT-begunstigde, eigenaar || '.' || tabelnaam object, privilege, toewijsbaar FROM dba_tab_privs WAAR begunstigde IN (& user_role) BESTELLEN DOOR begunstigde, eigenaar || '.' || tabelnaam, privilege;

Deze twee zullen u vertellen of de gebruiker in kwestie de juiste rechten heeft om de opdracht uit te voeren. Als de gebruiker de juiste rechten heeft, gaat u naar de volgende. Als de gebruiker niet de juiste rechten heeft, verleent u deze of vraagt ​​u uw DB-beheerder om dit te doen.

De ora-00942-fout kan ook optreden als de gebruiker van het schema dat u gebruikt INSERT-rechten heeft maar geen SELECT-rechten. Controleer nogmaals het bevoegdheidsniveau en voeg SELECT toe aan de lijst of vraag een DB-beheerder om dit te doen. Blijkbaar moet het specifieke SELECT-privilege aan elk schema worden toegekend, anders ziet u nog steeds de ora-00942-fout.

De tabel of weergave bestaat eigenlijk niet

Deze oorzaak van de ora-00942-fout kan worden veroorzaakt door een onjuiste query-syntaxis of als de tabel niet bestaat. Hoewel dit de logische eerste plaats lijkt om te beginnen, ben ik er zeker van dat gebruikersrechten de belangrijkste oorzaak van de fout zijn. De tabel die er niet is of de verkeerde syntaxis van de tabel die wordt gebruikt, is de tweede.

Controleer eerst de syntaxis van de query om te controleren of de tabel bestaat. Voer deze query uit als de syntaxis correct is.

SELECT-eigenaar, objectnaam, objecttype VAN all_objects WHERE object_type IN ('TABLE', 'VIEW') AND object_name = 'YOUR_TABLE_NAME';

Voer op die laatste regel de werkelijke tabelnaam in waar u 'YOUR_TABLE_NAME' ziet. Dit zou u zeker moeten vertellen of de tabel die u probeert op te vragen bestaat of niet. Als deze zonder tabel wordt geretourneerd, bestaat de door u gevraagde tabel niet in het schema of de database.

Als het systeem dat u gebruikt een menu Tabellen heeft, kunt u handmatig de tabel controleren als u dat wilt, maar met de bovenstaande query is de taak voltooid.

De tabel of weergave bevindt zich in een ander schema

Als de gebruiker rechten heeft en de tabel bestaat en u nog steeds de ora-00942-fout ziet, ligt dit waarschijnlijk aan het schema. Als u meerdere schema's beheert, kunt u eenvoudig een query uitvoeren op een schema dat niet van u is. Als je het druk hebt en ertegen staat, is het een simpele fout om te maken.

Controleer het schema handmatig als u kunt of voeg de schemanaam toe aan de VAN-regel van uw zoekopdracht. Als u niet over de juiste rechten voor het nieuwe schema beschikt, ziet u nogmaals de fout ora-00942. Ga terug naar de eerste correctie voor gebruikersrechten en controleer het bijbehorende schema of vraag uw DBA om het voor u te doen.

Zoals hierboven vermeld, heb ik een Oracle DBA-buddy van mij geraadpleegd voor dit stuk, dus alle lof voor hem voor het harde werk. Als u hier fouten of weglatingen vindt, zijn deze alleen van mij. Laat het me weten in het commentaargedeelte als ik iets heb gemist of verkeerd heb gedaan en ik zal het corrigeren.

Als u een andere manier kent om de ora-00942-fout op te lossen, laat het ons dan hieronder weten!

Hoe de ora-00942 fout te herstellen