Noen ganger ser du en ora-00942 feil når du kjører en SQL-setning. Det har noen få årsaker, og som vanlig er feilsyntaxen ikke den mest beskrivende. Hvis du kommer mot dette og vil vite hvordan du løser ora-00942-feilen, kan du lese videre.
Så vidt jeg vet er det tre hovedårsaker til feilen ora-00942:
- Utilstrekkelige brukerrettigheter
- Tabellen eller visningen eksisterer faktisk ikke
- Tabellen eller utsikten er i et annet skjema
Jeg viser deg hvordan du adresserer hver enkelt.
Løs feilen ora-00942
For det første, en liten ansvarsfraskrivelse. Jeg er ingen DBA, jeg er Windows-administrator og teknisk desktop og server hardware. Jeg vet hvordan jeg kjører SQL, men ikke til noen grad av kompetanse og absolutt ikke til nivået som kan feilsøke problemer. Jeg måtte be en Oracle DBA kompis av meg om hjelp, så mens jeg skrev dette stykket, er de smarte bitene 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 til å få tilgang til tabellen det gjelder. Du kan sjekke dette ved å kjøre to spørsmål.
- liste systemrettigheter for brukeren eller rollen VELG * FRA dba_sys_privs WHERE-mottaker IN (& user_role, 'PUBLIC');
- liste objektprivilegier for brukeren eller rollen
VELG bevilgning, eier || '.' || tabellnavnnavn, rettighet, tildeles FRA dba_tab_privs HVOR stipendiat IN (& bruker_rolle) BESTILL AV mottaker, eier || '.' || tabellnavn, privilegium;
Disse to vil fortelle deg om den aktuelle 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, kan du gi dem dem eller be DB-administratoren om å gjøre det.
Feilen ora-00942 kan også oppstå hvis brukeren av skjemaet du bruker har INSERT-privilegier, men ikke VELG privilegier. Igjen, sjekk rettighetsnivået og legg SELECT til listen eller be en DB-administrator om å gjøre det. Tilsynelatende må det spesifikke SELECT-privilegiet gis til hvert skjema, ellers vil du fortsatt se feilen ora-00942.
Tabellen eller visningen eksisterer faktisk ikke
Denne årsaken til feilen ora-00942 kan være forårsaket av feil syntaks eller hvis tabellen ikke eksisterer. Selv om dette ser ut som det logiske første stedet jeg starter, er jeg pålitelig trygg på at brukerrettighet er den viktigste årsaken til feilen. Tabellen som ikke er der, eller feil tabellsyntaks som blir brukt er andre.
For å sjekke om tabellen eksisterer, sjekk først syntaks for spørringen. Hvis syntaks er riktig, kjør denne spørringen.
VELG eier, objektnavn, objektype FRA alle_objekter HVOR objekt_type IN ('TABEL', 'VISNING') OG objekt_navn = 'YOUR_TABLE_NAME';
Sett inn det faktiske tabellenavnet på den siste linjen der du ser 'YOUR_TABLE_NAME'. Dette skulle absolutt fortelle deg om tabellen du prøver å spørre, eksisterer eller ikke. Hvis den returnerer uten tabell, eksisterer ikke tabellen du spør om i skjemaet eller databasen.
Hvis systemet du bruker har en tabeller-meny, kan du manuelt se etter tabellen hvis du foretrekker det, men spørsmålet ovenfor får jobben gjort.
Tabellen eller utsikten er i et annet skjema
Hvis brukeren har rettigheter og tabellen eksisterer og du fremdeles ser feilen ora-00942, er det sannsynligvis ned til skjemaet. Hvis du administrerer flere skjemaer, er det enkelt å kjøre en spørring mot et skjema som ikke er ditt. Når du er opptatt og opp mot det, er det en enkel feil å gjøre.
Sjekk skjemaet manuelt hvis du kan eller legge til skjemanavnet i FRA-linjen i spørringen. Hvis du ikke har de riktige rettighetene for det nye skjemaet, vil du se ora-00942-feilen en gang til. Gå tilbake til den første brukerrettighetsfiksen og sjekk det tilhørende 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 takker ham for det harde arbeidet. Hvis du finner feil eller mangler her inne, er de alene. Gi meg beskjed i kommentarfeltet om jeg savnet noe eller gjorde det galt, og jeg vil rette det.
Hvis du vet om noen annen måte å fikse ora-00942 feilen, fortell oss om den nedenfor!