sql >> Databáze >  >> RDS >> Oracle

Při vytváření pohledu se generuje chyba ORA-00942

Prvním krokem při diagnostikování problému při vytváření pohledu je vyzkoušet select část sama o sobě. V tomto případě byste stále dostali chybu ORA-00942, ale problém je nyní pouze problém s dotazem a přístupem a nesouvisí konkrétně se zobrazením.

Když získáte ORA-00942:tabulka nebo pohled neexistuje , je to proto, že buď:

  1. Název tabulky nebo zobrazení, který jste zadali, skutečně neexistuje.

    • Zkontrolujte pravopis – možná je tam překlep.

    • Jste připojeni k databázi, kde existuje? Možná používáte testovací systém, který jej nemá.

    • Dotaz dba_objects zjistit, zda tabulka existuje v jiném schématu. (Pokud nemáte oprávnění k dotazování dba_objects, all_objects uvádí vše, co máte oprávnění prohlížet, což může být pomoc.)

  2. Opravdu existuje, ale je v jiném schématu.
    V takovém případě existují dva možné problémy:

    • Nemáte oprávnění jej dotazovat. Vlastník tabulky musí grant read on xyz (nahraďte skutečný název tabulky za xyz ) buď

      • vy

      • public (pokud chcete, aby data mohl vidět každý, není to vždy vhodné)

      • role které máte (ale role nepoužívají uložené PL/SQL nebo zobrazení , takže je možné, že se můžete dotazovat na tabulku v jiném schématu díky roli, kterou máte, ale přesto nebudete moci vytvořit pohled nebo proceduru, která je používá.)

    • Musíte zadat schéma. Řekněme, že chcete dotazovat REGIONS tabulky v HR ale jste připojeni jako SCOTT . Pokud jen select * from regions bude hledat SCOTT.REGIONS , který neexistuje. Chcete-li to opravit, proveďte jednu z následujících akcí:

      • použijte hr.regions explicitně ve vašem dotazu.

      • ve schématu create or replace synonym regions for hr.regions;
        Nyní, kdykoli se podíváte na regions , databáze se automaticky přesměruje na hr.regions .

      • v libovolném schématu s oprávněním vytvářet veřejná synonyma:
        create or replace public synonym regions for hr.regions;
        Nyní bude mít každý, kdo se připojí k databázi, jakékoli odkazy na regions přesměrováno na hr.regions , což není vždy dobrý nápad, ale každopádně je to jedna z možností.

      • alter session set current_schema = hr;
        Nyní je výchozí schéma pro překlad názvů objektů HR a ne ten, ke kterému jste se přihlásili. Pro aplikace, které se vždy přihlašují jako jiný uživatel než ten, který vlastní tabulky, můžete vytvořit po spuštění přihlášení takže toto je vždy nastaveno. Poté mohou odkazovat pouze na regions atd., aniž byste museli specifikovat jakékoli schéma a bez jakýchkoli synonym.



  1. Oracle kopíruje řádky do stejné tabulky s různými daty

  2. MySQL Vyberte:WHERE (teď) =BETWEEN tablevalue AND tablevalue

  3. Jak spustit MySQL s --skip-grant-tables?

  4. GROUP BY a agregovat sekvenční číselné hodnoty