Anonim

Při spuštění příkazu SQL se občas zobrazí chyba ora-00942. Má několik příčin a jako obvykle není syntaxe chyb nejpopisnější. Pokud se s tím setkáváte a chcete vědět, jak opravit chybu ora-00942, přečtěte si dále.

Pokud vím, existují tři hlavní příčiny chyby ora-00942:

  1. Nedostatečná uživatelská oprávnění
  2. Tabulka nebo pohled ve skutečnosti neexistují
  3. Tabulka nebo pohled je v jiném schématu

Ukážu vám, jak oslovit každého z nich.

Opravte chybu ora-00942

Za prvé, trochu vyloučení odpovědnosti. Nejsem DBA, jsem administrátor Windows a hardwarová technika desktop a server. Vím, jak spouštět SQL, ale ne do jakéhokoli stupně odbornosti a rozhodně ne na úroveň, která může řešit problémy. Musel jsem požádat o pomoc kamaráda Oracle DBA, takže zatímco jsem psal tento kus, chytré bity jsou všechny jeho.

Tento seznam tří příčin chyby ora-00942 není vyčerpávající. Existují zjevně další náhodné příčiny, ale tyto tři jsou zřejmě nejčastější.

Nedostatečná uživatelská oprávnění

Jednou z klíčových příčin chyby ora-00942 je to, že uživatel nemá dostatečná oprávnění pro přístup k dotyčné tabulce. Můžete to zkontrolovat spuštěním dvou dotazů.

- seznam systémových oprávnění pro uživatele nebo roli SELECT * FROM dba_sys_privs WHERE grantee IN (& user_role, 'PUBLIC');

- seznam oprávnění objektů pro uživatele nebo roli

SELECT grantee, vlastník || '.' || název_tabulky, oprávnění, udělitelné Z dba_tab_priv WHERE grantee IN (& user_role) ORDER BY grantee, owner || '.' || table_name, privilege;

Tito dva vám řeknou, zda má dotyčný uživatel správná oprávnění ke spuštění příkazu. Pokud má uživatel správná oprávnění, přejděte k dalšímu. Pokud uživatel nemá správná oprávnění, udělte jim je nebo požádejte administrátora DB, aby to udělal.

K chybě ora-00942 může také dojít, pokud uživatel používaného schématu má oprávnění INSERT, ale nikoli oprávnění SELECT. Znovu zkontrolujte úroveň oprávnění a přidejte SELECT do seznamu nebo požádejte administrátora DB, aby to udělal. Je zřejmé, že konkrétní oprávnění SELECT musí být uděleno každému schématu, jinak se stále zobrazí chyba ora-00942.

Tabulka nebo pohled ve skutečnosti neexistují

Tato příčina chyby ora-00942 může být způsobena nesprávnou syntaxí dotazu nebo pokud tabulka neexistuje. I když by to vypadalo jako první logické první místo, jsem si spolehlivě jistý, že uživatelské oprávnění je příčinou chyby číslo jedna. Tabulka tam není nebo je použita nesprávná syntaxe tabulky, je druhá.

Chcete-li zkontrolovat, zda tabulka existuje, nejprve zkontrolujte syntaxi dotazu. Pokud je syntaxe správná, spusťte tento dotaz.

VYBRAJTE vlastníka, jméno_objektu, typ_objektu ZE všech_objektů, KDE JE objekt_objektu IN ('TABLE', 'VIEW') AND object_name = 'YOUR_TABLE_NAME';

Na posledním řádku zadejte skutečný název tabulky, kde uvidíte „YOUR_TABLE_NAME“. To by vám mělo určitě říci, zda tabulka, kterou se pokoušíte dotazovat, existuje nebo ne. Pokud se vrátí bez tabulky, tabulka, ve které se dotazujete, ve schématu nebo databázi neexistuje.

Pokud systém, který používáte, má nabídku Tabulky, můžete tabulku ručně zkontrolovat, pokud dáváte přednost, ale výše uvedený dotaz provede úlohu.

Tabulka nebo pohled je v jiném schématu

Pokud má uživatel oprávnění a tabulka existuje a stále se zobrazuje chyba ora-00942, je to pravděpodobně až do schématu. Pokud spravujete více schémat, je snadné spustit dotaz proti schématu, které není vaše. Když jste zaneprázdněni a jste proti tomu, je to jednoduchá chyba.

Zkontrolujte schéma ručně, pokud můžete nebo přidejte název schématu do řádku FROM dotazu. Pokud nemáte nová oprávnění pro nové schéma, znovu se zobrazí chyba ora-00942. Vraťte se k první opravě uživatelských oprávnění a zkontrolujte odpovídající schéma nebo si nechte DBA, aby to pro vás udělal.

Jak bylo zmíněno výše, konzultoval jsem s tímto kusem svého kamaráda Oracle DBA, takže mu všem připisuji zásluhu na tvrdé práci. Pokud zde najdete nějaké chyby nebo opomenutí, jsou moje. Dejte mi vědět v sekci komentářů, pokud mi něco uniklo nebo se mi stalo špatně a opravím to.

Pokud víte o jakémkoli jiném způsobu, jak opravit chybu ora-00942, napište nám o ní níže!

Jak opravit chybu ora-00942