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 syntaxis van de fout niet de meest beschrijvende. Als je hier tegenaan loopt en wilt weten hoe je de ora-00942-fout kunt herstellen, lees dan verder.
Voor zover ik weet, zijn er drie hoofdoorzaken van de ora-00942-fout:
- Onvoldoende gebruikersrechten
- De tabel of weergave bestaat niet echt
- De tabel of weergave bevindt zich in een ander schema
Ik zal je laten zien hoe je ze allemaal moet aanpakken.
Verhelp de ora-00942-fout
Allereerst een kleine disclaimer. Ik ben geen DBA, ik ben een Windows-beheerder en desktop- en serverhardwaretechnologie. Ik weet hoe ik SQL moet uitvoeren, maar niet naar enige mate van expertise en zeker niet naar 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 ora-00942-fout is niet volledig. Er zijn blijkbaar andere willekeurige oorzaken, maar deze drie zijn blijkbaar de meest voorkomende.
Onvoldoende gebruikersrechten
Een belangrijke oorzaak van de ora-00942-fout is dat de gebruiker niet over voldoende rechten beschikt 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 grantee, owner || '.' || table_name object, privilege, grantable FROM dba_tab_privs WHERE grantee IN (& user_role) ORDER BY grantee, owner || '.' || table_name, privilege;
Deze twee zullen u vertellen of de betreffende gebruiker de juiste rechten heeft om de opdracht uit te voeren. Als de gebruiker de juiste rechten heeft, gaat u verder met 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 maar geen SELECT-rechten heeft. Nogmaals, controleer het privilegeniveau en voeg SELECT toe aan de lijst of vraag een DB Admin om dit te doen. Blijkbaar moet het specifieke privilege SELECT aan elk schema worden toegekend, anders krijg je nog steeds de ora-00942-fout.
De tabel of weergave bestaat niet echt
Deze oorzaak van de ora-00942-fout kan worden veroorzaakt door onjuiste querysyntaxis of als de tabel niet bestaat. Hoewel dit de logische eerste plaats lijkt om te beginnen, ben ik er zeker van dat gebruikersprivilege de grootste oorzaak van de fout is. De tabel die er niet is of de verkeerde tabelsyntaxis die wordt gebruikt, is de tweede.
Als u wilt controleren of de tabel bestaat, controleert u eerst de syntaxis van de query. Als de syntaxis correct is, voert u deze query uit.
SELECT owner, object_name, object_type FROM all_objects WHERE_object_type IN ('TABLE', 'VIEW') EN object_name = 'YOUR_TABLE_NAME';
Op die laatste regel voegt u de werkelijke tabelnaam in waar u 'YOUR_TABLE_NAME' ziet. Dit zou u zeker moeten vertellen of de tabel die u probeert te bevragen bestaat of niet. Als de tabel zonder tabel wordt geretourneerd, bestaat de query niet in het schema of de database.
Als het systeem dat u gebruikt een Tables-menu heeft, kunt u handmatig naar de tabel zoeken als u dat wilt, maar met de bovenstaande query is de klus geklaard.
De tabel of weergave bevindt zich in een ander schema
Als de gebruiker over privileges beschikt en de tabel bestaat en u de ora-00942-fout nog steeds ziet, valt deze waarschijnlijk binnen 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 dit kunt of voeg de schemanaam toe in de FROM-regel van uw query. Als u niet beschikt over de juiste rechten voor het nieuwe schema, ziet u de ora-00942-fout nogmaals. Keer terug naar de eerste fix voor gebruikersrechten en controleer het bijbehorende schema of laat uw DBA het voor u doen.
Zoals hierboven vermeld, heb ik een Oracle DBA buddy van mij geraadpleegd voor dit stuk, dus alle eer aan hem voor het harde werk. Als je hierin fouten of omissies aantreft, zijn ze alleen van mij. Laat het me weten in de comments sectie als ik iets gemist heb of het verkeerd heb en ik zal het corrigeren.
Als je een andere manier weet om de ora-00942-fout op te lossen, vertel het ons hieronder!