Slik løser du ora-00942-feilen

Noen ganger ser du en ora-00942-feil når du kjører en SQL-setning. Det har noen årsaker, og som vanlig er feilsyntaxen ikke den mest beskrivende. Hvis du kommer opp mot dette og vil vite hvordan du løser ora-00942-feilen, les videre.

Så vidt jeg vet, er det tre hovedårsaker til ora-00942-feilen:

  1. Utilstrekkelige brukerrettigheter
  2. Tabellen eller visningen eksisterer ikke egentlig
  3. Tabellen eller visningen er i et annet skjema

Jeg skal vise deg hvordan du skal adressere hverandre.

Løs feilen ora-00942

Først av, en liten ansvarsfraskrivelse. Jeg er ingen DBA, jeg er en Windows administrator og desktop og server hardware tech. Jeg vet hvordan jeg kjører SQL, men ikke til noen grad av ekspertise og absolutt ikke til det nivået som kan feilsøke problemer. Jeg måtte spørre en Oracle DBA kompis av meg for hjelp, så mens jeg skrev dette stykket, er de smarte biterne alle hans.

Denne listen over tre årsaker til feilen ora-00942 er ikke uttømmende. Det er tilsynelatende andre tilfeldige årsaker til det, men disse tre er tilsynelatende de vanligste.

Utilstrekkelige brukerrettigheter

En viktig årsak til feilen ora-00942 er at brukeren ikke har tilstrekkelige privilegier for å få tilgang til det aktuelle bordet. Du kan sjekke dette ved å kjøre to spørringer.

 - oppgi systemrettigheter for brukeren eller rollen SELECT * FROM dba_sys_privs WHERE grantee IN (& user_role, 'PUBLIC'); 

- oppgi objektrettigheter for brukeren eller rollen

 SELECT grantee, eier || '.' || table_name objekt, privilegium, bevilgbar FRA dba_tab_privs HVOR bidragsmottaker IN (& user_role) ORDER BY grantee, eier || '.' || table_name, privilege; 

Disse to vil fortelle deg om brukeren har de riktige rettighetene til å kjøre kommandoen. Hvis brukeren har de riktige rettighetene, gå videre til neste. Hvis brukeren ikke har de riktige rettighetene, gi dem dem eller spør DB Admin for å gjøre det.

Ora-00942-feilen kan også oppstå hvis brukeren av skjemaet du bruker har INSERT-privilegier, men ikke SELECT-privilegier. Igjen, kontroller privilegienivået og legg til VELG på listen eller spør en DB-administrator for å gjøre det. Tilsynelatende må det spesifikke SELECT-privilegiet gis til hvert skjema ellers vil du fortsatt se ora-00942-feilen.

Tabellen eller visningen eksisterer ikke egentlig

Denne årsaken til feilen ora-00942 kan skyldes feil setningssyntax, eller hvis tabellen ikke eksisterer. Selv om dette ser ut som det logiske første stedet å starte, er jeg pålitelig sikker på at brukerrettighetene er den første årsaken til feilen. Tabellen er ikke der, eller feil tabellsyntax brukes som andre.

For å sjekke om tabellen eksisterer, må du først sjekke syntaksen til spørringen. Hvis syntaksen er riktig, kjør denne spørringen.

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

På den siste linjen, sett inn det faktiske tabellnavnet der du ser "YOUR_TABLE_NAME". Dette bør fortælle deg definitivt om tabellen du prøver å spørre eksisterer eller ikke. Hvis den returnerer uten bord, eksisterer ikke tabellen du spør om i skjemaet eller databasen.

Hvis systemet du bruker har en Tabell-meny, kan du manuelt sjekke for bordet hvis du foretrekker det, men ovennevnte spørring får jobben gjort.

Tabellen eller visningen er i et annet skjema

Hvis brukeren har privilegier og tabellen eksisterer, og du fortsatt ser ora-00942-feilen, er det sannsynligvis ned til skjemaet. Hvis du administrerer flere skjemaer, er det enkelt å kjøre en forespørsel mot et skjema som ikke er ditt. Når du er opptatt og opp imot det, er det en enkel feil å gjøre.

Kontroller skjemaet manuelt hvis du kan eller legger til skjemanavnet i FRA-linjen i spørringen. Hvis du ikke har de riktige rettighetene til det nye skjemaet, vil du se ora-00942-feilen en gang til. Gå tilbake til det første brukerrettighetsrettet og sjekk det tilsvarende skjemaet eller få DBA til å gjøre det for deg.

Som nevnt ovenfor, konsulterte jeg en Oracle DBA kompis av meg for dette stykket, så alle æren til ham for det harde arbeidet. Hvis du finner noen feil eller utelatelser her inne, er de mine alene. Gi meg beskjed i kommentarfeltet hvis jeg savnet noe eller tok feil, og jeg vil rette det.

Hvis du vet om en annen måte å fikse feilen på ora-00942, fortell oss om det nedenfor!

Se Også