Det første trin i at diagnosticere et problem, når du opretter en visning, er at prøve select
del for sig selv. I dette tilfælde vil du stadig få ORA-00942-fejlen, men problemet er nu kun et spørgsmål om forespørgsel og adgang og har ikke at gøre med visningen specifikt.
Når du får ORA-00942:tabel eller visning eksisterer ikke , det er fordi enten:
-
Tabel- eller visningsnavnet, som du har indtastet, eksisterer virkelig ikke.
-
Tjek stavningen - måske er der en tastefejl.
-
Er du forbundet til en database, hvor den findes? Måske er du på et testsystem, der ikke har det.
-
Forespørg
dba_objects
for at se, om tabellen findes i et andet skema. (Hvis du ikke har rettigheder til at forespørge dba_objects,all_objects
viser alt, hvad du har tilladelse til at se, hvilket kan være en hjælp.)
-
-
Det eksisterer virkelig, men det er i et andet skema.
I så fald er der to mulige problemer:-
Du har ikke tilladelse til at forespørge på det. Tabellens ejer skal
grant read on xyz
(erstat det faktiske tabelnavn medxyz
) til enten-
dig
-
public
(hvis du ønsker, at alle skal kunne se dataene, er det ikke altid tilrådeligt) -
en rolle som du har (men roller bruges ikke af lagret PL/SQL eller visninger , dog, så det er muligt, at du kan forespørge en tabel i et andet skema takket være en rolle, du har, men stadig ikke være i stand til at oprette en visning eller en procedure, der bruger den.)
-
-
Du skal angive skemaet. Lad os sige, at du vil forespørge på
REGIONS
tabel iHR
men du er forbundet somSCOTT
. Hvis du bareselect * from regions
den vil lede efterSCOTT.REGIONS
, som ikke eksisterer. For at rette det, skal du gøre et af følgende:-
brug
hr.regions
udtrykkeligt i din forespørgsel. -
i dit skema,
create or replace synonym regions for hr.regions;
Nu, når du henviser tilregions
, vil databasen automatisk omdirigere tilhr.regions
. -
i ethvert skema med tilladelse til at oprette offentlige synonymer:
create or replace public synonym regions for hr.regions;
Nu vil alle, der forbinder til databasen, have referencer tilregions
omdirigeret tilhr.regions
, hvilket ikke altid er en god idé, men det er alligevel én mulighed. -
alter session set current_schema = hr;
Nu er standardskemaet til løsning af navne på objekterHR
og ikke den du loggede ind på. For programmer, der altid logger ind som en anden bruger end den, der ejer tabellerne, kan du oprette en efter logon-trigger så dette er altid indstillet. Så kan de blot henvise tilregions
osv. uden at skulle angive noget skema og uden nogen synonymer.
-
-