Anonim

Pri spustení príkazu SQL sa občas zobrazuje chyba ora-00942. Má niekoľko príčin a ako zvyčajne nie je syntax chyby najpopisnejšia. Ak ste proti tomu a chcete vedieť, ako opraviť chybu ora-00942, čítajte ďalej.

Pokiaľ viem, existujú tri hlavné príčiny chyby ora-00942:

  1. Nedostatočné užívateľské oprávnenia
  2. Tabuľka alebo pohľad v skutočnosti neexistujú
  3. Tabuľka alebo pohľad je v inej schéme

Ukážem vám, ako osloviť každú z nich.

Opravte chybu ora-00942

Po prvé, trochu vylúčenia zodpovednosti. Nie som DBA, som administrátor Windows a hardvérová technika pre desktop a server. Viem, ako spúšťať SQL, ale nie do akejkoľvek miery odbornosti a určite nie na úroveň, ktorá môže riešiť problémy. Musel som požiadať o pomoc môjho kamaráta Oracle DBA, takže zatiaľ čo som písal tento kus, chytré kúsky sú jeho všetky.

Tento zoznam troch príčin chyby ora-00942 nie je úplný. Existujú zjavne ďalšie náhodné príčiny, ale tieto tri sú zjavne najbežnejšie.

Nedostatočné užívateľské oprávnenia

Jednou z hlavných príčin chyby ora-00942 je to, že používateľ nemá dostatočné privilégiá na prístup k príslušnej tabuľke. Môžete to skontrolovať spustením dvoch dopytov.

- zoznam systémových privilégií pre používateľa alebo rolu SELECT * FROM dba_sys_privs WHERE grantee IN (& user_role, 'PUBLIC');

- zoznam oprávnení objektu pre používateľa alebo rolu

VYBRAŤ príjemcu grantu, vlastníka || '.' || objekt table_name, privilégium, ktoré je možné udeliť Z dba_tab_privs WHERE grantee IN (& user_role) ORDER BY grantee, owner || '.' || table_name, privilege;

Tieto dve vám povedia, či má daný používateľ správne oprávnenie na vykonanie príkazu. Ak má používateľ správne privilégiá, prejdite na ďalšie. Ak používateľ nemá správne privilégiá, pridelte mu ich alebo požiadajte administrátora DB, aby to urobil.

Chyba ora-00942 sa môže vyskytnúť aj v prípade, že používateľ používanej schémy má oprávnenie INSERT, ale nie oprávnenie SELECT. Opäť skontrolujte úroveň privilégií a pridajte SELECT do zoznamu alebo požiadajte administrátora DB, aby to urobil. Zdá sa, že konkrétne privilégium SELECT musí byť pridelené každej schéme, inak sa stále zobrazí chyba ora-00942.

Tabuľka alebo pohľad v skutočnosti neexistujú

Táto príčina chyby ora-00942 môže byť spôsobená nesprávnou syntaxou dotazu alebo ak tabuľka neexistuje. Aj keď by sa to zdalo ako prvé logické miesto na začiatku, som presvedčený, že používateľské privilégium je príčinou chyby číslo jedna. Druhá tabuľka neexistuje, alebo sa používa nesprávna syntax tabuľky.

Ak chcete skontrolovať, či tabuľka existuje, najprv skontrolujte syntax dotazu. Ak je syntax správna, spustite tento dotaz.

VYBERTE vlastníka, názov_objektu, typ_objektu Z VŠETKÝCHobjektov, KDE JE objekt_typ IN ('TABLE', 'VIEW') A object_name = 'YOUR_TABLE_NAME';

Na posledný riadok zadajte skutočný názov tabuľky, kde uvidíte „YOUR_TABLE_NAME“. Toto by vám malo určite povedať, či tabuľka, ktorú sa snažíte vyhľadať, existuje alebo nie. Ak sa vráti bez tabuľky, tabuľka, ktorú hľadáte, neexistuje v schéme alebo databáze.

Ak systém, ktorý používate, má ponuku Tabuľky, môžete tabuľku manuálne skontrolovať, ak uprednostňujete, ale vyššie uvedený dotaz vykoná úlohu.

Tabuľka alebo pohľad je v inej schéme

Ak má užívateľ privilégiá a tabuľka existuje a stále sa zobrazuje chyba ora-00942, je to pravdepodobne až do schémy. Ak spravujete viac schém, je ľahké spustiť dotaz na schému, ktorá nie je vaša. Ak ste zaneprázdnení a ste proti tomu, je to jednoduchá chyba.

Skontrolujte schému manuálne, ak môžete alebo pridajte názov schémy do riadku FROM dotazu. Ak nemáte nové privilégiá pre novú schému, znova sa zobrazí chyba ora-00942. Vráťte sa k prvému oprávneniu oprávnenia používateľa a skontrolujte príslušnú schému alebo požiadajte DBA, aby to urobila za vás.

Ako už bolo spomenuté vyššie, pre tento kus som konzultoval môj kamarát z Oracle DBA, takže mu všetku prácu pripisujem za tvrdú prácu. Ak tu nájdete nejaké chyby alebo opomenutia, sú moje. Dajte mi vedieť v sekcii komentárov, ak mi niečo uniklo alebo sa to stalo zle a opravím to.

Ak viete o nejakom inom spôsobe opravy chyby ora-00942, povedzte nám o tom nižšie!

Ako opraviť chybu ora-00942