Anonim

Ob izvajanju stavka SQL občasno opazite napako ora-00942. Ima nekaj vzrokov in kot ponavadi sintaksa napak ni najbolj opisna. Če se soočate s tem in želite vedeti, kako odpraviti napako ora-00942, preberite dalje.

Kolikor vem, obstajajo trije glavni vzroki napake ora-00942:

  1. Premalo uporabniških privilegijev
  2. Tabela ali pogled dejansko ne obstaja
  3. Tabela ali pogled je v drugačni shemi

Pokazal vam bom, kako se lotiti vsakega posebej.

Odpravite napako ora-00942

Najprej malo odpovedi. Nisem DBA, sem skrbnik sistema Windows in tehnične opreme za namizje in strežnike. Vem, kako zagnati SQL, vendar ne do katere koli stopnje strokovnosti in zagotovo ne na ravni, ki lahko odpravlja težave. Moral sem prositi mojega prijatelja Oracle DBA za pomoč, tako da, ko sem napisal ta del, so pametni delčki vsi njegovi.

Seznam treh vzrokov napake ora-00942 ni izčrpen. Očitno obstajajo drugi naključni vzroki, vendar so ti trije najpogostejši.

Premalo uporabniških privilegijev

Ključni vzrok napake ora-00942 je, da uporabnik nima dovolj privilegijev za dostop do zadevne tabele. To lahko preverite tako, da zaženete dve poizvedbi.

- seznam sistemskih privilegijev za uporabnika ali vlogo IZBERI * IZ dba_sys_privs KJE je bil podeljen uporabnik (& user_role, 'PUBLIC');

- seznam privilegijev predmeta za uporabnika ali vlogo

IZBIRA štipendista, lastnika || '.' || tabela_ime predmeta, privilegij, ki ga je mogoče odobriti IZ dba_tab_privs KJE je prejemnik v (in uporabniški_role) NAROČI PO štipendistu, lastniku || '.' || tabela_ime, privilegij;

Ta dva vam bosta povedala, ali ima zadevni uporabnik pravilne privilegije za izvajanje ukaza. Če ima uporabnik pravilne privilegije, nadaljujte na naslednjo. Če uporabnik nima ustreznih privilegijev, mu jih dodelite ali prosite svojega skrbnika DB, da to stori.

Napaka ora-00942 se lahko pojavi tudi, če ima uporabnik sheme, ki jo uporabljate, privilegije INSERT, vendar ne SELECT. Ponovno preverite raven privilegijev in dodajte SELECT na seznam ali prosite skrbnika DB, da to stori. Očitno je treba vsaki shemi dodeliti poseben privilegij SELECT, sicer boste še vedno videli napako ora-00942.

Tabela ali pogled dejansko ne obstaja

Ta vzrok napake ora-00942 je lahko posledica napačne sintakse poizvedb ali če tabela ne obstaja. Čeprav se to zdi logično prvo mesto za začetek, sem zanesljivo prepričan, da je privilegij uporabnika prvi vzrok napake. Tabela, ki ni tam ali je uporabljena napačna sintaksa tabele, je druga.

Če želite preveriti, ali tabela obstaja, najprej preverite sintakso poizvedbe. Če je sintaksa pravilna, zaženite to poizvedbo.

IZBERI lastnika, ime_ objekta, vrsto predmeta IZ vseh_objektov, KJE VKLJUČNOST_IZIKA IN ('TABELA', 'POGLED') IN ime_ objekta = 'YOUR_TABLE_NAME';

V tej zadnji vrstici vstavite dejansko ime tabele, kjer vidite »YOUR_TABLE_NAME«. To bi vam moralo zagotovo povedati, ali tabela, ki jo poskušate poizvedovati, obstaja ali ne. Če se vrne brez tabele, tabela, ki jo iščete, ne obstaja v shemi ali zbirki podatkov.

Če ima sistem, ki ga uporabljate, meni Tabele, lahko ročno preverite tabelo, če želite, vendar zgornje poizvedbo opravi.

Tabela ali pogled je v drugačni shemi

Če ima uporabnik privilegije in tabela obstaja in še vedno vidite napako ora-00942, se verjetno spušča na shemo. Če upravljate več shem, je enostavno izvesti poizvedbo proti shemi, ki ni vaša. Ko ste zasedeni in se zoperstavite temu, je napaka preprosta.

Ročno preverite shemo, če lahko v vrstico IZ poizvedbe dodate ali dodate ime sheme. Če za novo shemo nimate pravilnih pravic, boste še enkrat videli napako ora-00942. Vrnite se do prvega popravka privilegijev za uporabnike in preverite ustrezno shemo ali pridobite DBA, da to stori namesto vas.

Kot že omenjeno, sem se za ta del posvetoval z mojim prijateljem Oracle DBA, tako da sem mu bil zaslužen za trdo delo. Če tukaj najdete kakršne koli napake ali opustitve, so le moje. Sporočite mi v razdelku s komentarji, če sem kaj pogrešal ali napačno razumel in ga bom popravil.

Če poznate kakršen koli drug način, kako odpraviti napako ora-00942, nam o tem povejte spodaj!

Kako odpraviti napako ora-00942