Sådan løser du ora-00942-fejlen

Du ser lejlighedsvis en ora-00942-fejl, når du kører en SQL-sætning. Det har nogle årsager, og som normalt er fejlsyntaxen ikke den mest beskrivende. Hvis du kommer op imod dette og vil vide, hvordan du løser ora-00942-fejlen, læs videre.

Så vidt jeg ved, er der tre hovedårsager til ora-00942 fejlen:

  1. Utilstrækkelige brugerrettigheder
  2. Tabellen eller visningen eksisterer faktisk ikke
  3. Tabellen eller visningen er i et andet skema

Jeg vil vise dig, hvordan man adresserer hver enkelt.

Løs ora-00942 fejlen

Først og fremmest, en lille ansvarsfraskrivelse. Jeg er ingen DBA, jeg er en Windows-administrator og desktop og server hardware tech. Jeg ved, hvordan man kører SQL, men ikke til nogen grad af ekspertise og bestemt ikke til det niveau, der kan fejlsøge problemer. Jeg var nødt til at spørge min Oracle DBA-kompis for hjælp, så mens jeg skrev dette stykke, er de kloge bits alle hans.

Denne liste over tre årsager til ora-00942 fejlen er ikke udtømmende. Der er tilsyneladende andre tilfældige årsager til det, men disse tre er tilsyneladende de mest almindelige.

Utilstrækkelige brugerrettigheder

En vigtig årsag til fejlen ora-00942 er, at brugeren ikke har tilstrækkelige rettigheder til at få adgang til den pågældende tabel. Du kan tjekke dette ved at køre to forespørgsler.

 - liste system privilegier for brugeren eller rollen SELECT * FRA dba_sys_privs hvor indlærer IN (& user_role, 'offentlig'); 

- lister objektprivilegier for brugeren eller rollen

 SELECT bidragsmodtager, ejer || '.' || table_name objekt, privilegium, tilskud FRA dba_tab_privs HVOR tilskudsmodtager IN (& user_role) BESTIL BY modtager, ejer || '.' || table_name, privilege; 

Disse to vil fortælle dig, om den pågældende bruger har de rette privilegier til at køre kommandoen. Hvis brugeren har de rigtige rettigheder, skal du fortsætte til næste. Hvis brugeren ikke har de rette privilegier, giver dem dem eller spørg din DB Admin om at gøre det.

Ora-00942-fejlen kan også opstå, hvis brugeren af ​​det skema, du bruger, har INSERT-privilegier, men ikke SELECT-privilegier. Igen skal du kontrollere privilegiumniveauet og tilføje VÆLG til listen eller spørg en DB-administrator for at gøre det. Tilsyneladende skal det specifikke SELECT-privilegium ydes til hvert skema ellers vil du stadig se ora-00942 fejlen.

Tabellen eller visningen eksisterer faktisk ikke

Denne årsag til fejlen ora-00942 kan skyldes forkert søgeordsyntax, eller hvis tabellen ikke findes. Selvom dette synes at være det logiske første sted at starte, er jeg pålideligt sikker på at brugerrettigheder er den første årsag til fejlen. Tabellen er ikke der, eller hvis den forkerte tabelsyntax bruges, er den anden.

For at kontrollere, om tabellen eksisterer, skal du først kontrollere syntaxen for forespørgslen. Hvis syntaksen er korrekt, skal du køre denne forespørgsel.

 SELECT ejer, object_name, object_type FRA all_objects WHERE object_type IN ('TABLE', 'VIS') og object_name = 'YOUR_TABLE_NAME'; 

På den sidste linje indsætter du det faktiske tabelnavn, hvor du ser 'YOUR_TABLE_NAME'. Dette skal helt sikkert fortælle dig, om tabellen du forsøger at søge eksisterer eller ej. Hvis det vender tilbage uden bord, eksisterer det ikke bordet, du spørger, i skemaet eller databasen.

Hvis det system, du bruger, har en tabelmenu, kan du manuelt tjekke for bordet, hvis du foretrækker det, men ovenstående forespørgsel får jobbet færdigt.

Tabellen eller visningen er i et andet skema

Hvis brugeren har privilegier, og tabellen findes, og du stadig ser ora-00942-fejlen, er det sandsynligvis nede på skemaet. Hvis du styrer flere skemaer, er det nemt at køre en forespørgsel imod et skema, der ikke er dit. Når du har travlt og op imod det, er det en simpel fejl at lave.

Kontroller skemaet manuelt, hvis du kan eller tilføjer skemanavnet i din Fra forespørgsel FRA. Hvis du ikke har de rigtige rettigheder til det nye skema, vil du igen se ora-00942 fejlen. Gå tilbage til den første brugerrettighedsrettelse og kontroller det tilsvarende skema eller få din DBA til at gøre det for dig.

Som nævnt ovenfor konsulterede jeg en min Oracle DBA-kompis for dette stykke, så alle ærger ham for det hårde arbejde. Hvis du finder fejl eller udeladelser herinde, er de mine alene. Lad mig vide i kommentarfeltet, hvis jeg savnede noget eller har det galt, og jeg vil rette det.

Hvis du ved om en anden måde at løse ora-00942 fejlen, fortæl os om det nedenfor!

Se Også