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ď:
-
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.)
-
-
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 zaxyz
) 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 vHR
ale jste připojeni jakoSCOTT
. Pokud jenselect * from regions
bude hledatSCOTT.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 naregions
, databáze se automaticky přesměruje nahr.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 naregions
přesměrováno nahr.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 naregions
atd., aniž byste museli specifikovat jakékoli schéma a bez jakýchkoli synonym.
-
-