Du kan lejlighedsvist se en ora-00942 fejl, når du kører en SQL-sætning. Det har nogle få årsager, og som sædvanlig er fejlsyntaxen ikke den mest beskrivende. Hvis du kommer imod dette og vil vide, hvordan du løser fejlen ora-00942, skal du læse videre.
Så vidt jeg ved, er der tre hovedårsager til fejlen ora-00942:
- Utilstrækkelige brugerrettigheder
- Tabellen eller visningen findes faktisk ikke
- Tabellen eller visningen er i et andet skema
Jeg viser dig, hvordan du adresserer hver enkelt.

Rettelse af fejlen ora-00942
Først ud, en lille ansvarsfraskrivelse. Jeg er ingen DBA, jeg er Windows-administrator og desktop- og serverhardwareteknologi. Jeg ved, hvordan man kører SQL, men ikke i nogen grad af ekspertise og bestemt ikke til det niveau, der kan løse problemer. Jeg var nødt til at bede en Oracle DBA-kompis af mig om hjælp, så mens jeg skrev dette stykke, er de smarte bits alle hans.
Denne liste over tre årsager til fejlen ora-00942 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 privilegier til at få adgang til den pågældende tabel. Du kan kontrollere dette ved at køre to forespørgsler.
- listes systemrettigheder for brugeren eller rollen VÆLG * FRA dba_sys_privs WHERE-modtager (& user_role, 'PUBLIC');
- liste objekter privilegier for brugeren eller rollen
VÆLG modtager, ejer || '.' || tabel_navn-objekt, privilegium, tildeles FRA dba_tab_privs HVOR modtager i (& bruger_rolle) BESTILLING AF modtager, ejer || '.' || tabel_navn, privilegium;
Disse to fortæller dig, om den pågældende bruger har de rigtige privilegier til at køre kommandoen. Hvis brugeren har de korrekte privilegier, skal du gå videre til det næste. Hvis brugeren ikke har de korrekte privilegier, skal du give dem dem eller bede din DB-administrator om at gøre det.
Fejlen ora-00942 kan også opstå, hvis brugeren af det skema, du bruger, har INSERT-privilegier, men ikke VÆLG privilegier. Kontroller igen privilegiumniveauet og tilføj SELECT til listen eller bede en DB-administrator om at gøre det. Tilsyneladende skal det specifikke SELECT-privilegium tildeles hvert skema, ellers ser du stadig fejlen ora-00942.

Tabellen eller visningen findes faktisk ikke
Denne årsag til ora-00942 fejlen kan være forårsaget af forkert forespørgselssyntaks, eller hvis tabellen ikke findes. Selvom dette ser ud til at være det logiske første sted at starte, er jeg pålideligt sikker på, at brugerrettigheder er den største årsag til fejlen. Tabellen, der ikke er der, eller den forkerte tabelsyntaks, der bruges, er anden.
For at kontrollere, om tabellen findes, skal du først kontrollere forespørgslens syntaks. Hvis syntaks er korrekt, skal du køre denne forespørgsel.
VÆLG ejer, objektnavn, objekt_FRA FRA alle_objekter HVOR objekt_type IN ('TABEL', 'VISNING') OG objekt_navn = 'YOUR_TABLE_NAME';
På den sidste linje skal du indsætte det faktiske tabelnavn, hvor du ser 'YOUR_TABLE_NAME'. Dette skulle helt klart fortælle dig, om den tabel, du forsøger at spørge, findes eller ej. Hvis den vender tilbage uden nogen tabel, findes den tabel, du forespørger om, ikke i skemaet eller databasen.
Hvis det system, du bruger, har en Tables-menu, kan du manuelt tjekke for tabellen, hvis du foretrækker det, men ovenstående forespørgsel får jobbet gjort.
Tabellen eller visningen er i et andet skema
Hvis brugeren har privilegier, og tabellen findes, og du stadig ser fejlen ora-00942, er det sandsynligvis ned til skemaet. Hvis du administrerer flere skemaer, er det let at køre en forespørgsel mod et skema, der ikke er dit. Når du har travlt og er imod det, er det en simpel fejl at lave.
Kontroller skemaet manuelt, hvis du kan eller tilføje skemanavnet i FRA-linjen i din forespørgsel. Hvis du ikke har de korrekte privilegier til det nye skema, vil du se fejlen ora-00942 endnu en gang. Vend 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 Oracle DBA-kompis af mig for dette stykke, så alle gav æren for ham for det hårde arbejde. Hvis du finder fejl eller mangler her, er de mine alene. Fortæl mig det i kommentarfeltet, hvis jeg gik glip af noget eller begik det forkert, og jeg vil rette det.
Hvis du kender til nogen anden måde at løse ora-00942 fejlen, fortæl os om den nedenfor!






