Първата стъпка в диагностицирането на проблем при създаване на изглед е да опитате select
част сама по себе си. В този случай пак ще получите грешката ORA-00942, но проблемът сега е само въпрос на заявка и достъп и не е свързан конкретно с изгледа.
Когато получите ORA-00942:таблица или изглед не съществува , това е защото:
-
Името на таблицата или изгледа, което сте въвели, наистина не съществува.
-
Проверете правописа - може би има правописна грешка.
-
Свързани ли сте с база данни, където тя съществува? Може би сте на тестова система, която го няма.
-
Заявка
dba_objects
за да видите дали таблицата съществува в друга схема. (Ако нямате права да правите заявки към dba_objects,all_objects
изброява всичко, за което имате разрешение да преглеждате, което може да е от полза.)
-
-
Наистина съществува, но е в друга схема.
В такъв случай има два възможни проблема:-
Нямате разрешение да го правите. Собственикът на таблицата трябва да
grant read on xyz
(заменете действителното име на таблицата сxyz
) към едно от двете-
ти
-
public
(ако искате всеки да може да вижда данните, не винаги е препоръчително) -
роля които имате (но ролите не се използват от съхранен PL/SQL или изгледи , така че е възможно да можете да заявите таблица в друга схема благодарение на ролята, която имате, но все пак да не можете да създадете изглед или процедура, която го използва.)
-
-
Трябва да посочите схемата. Кажете, че искате да направите заявка за
REGIONS
таблица вHR
но сте свързани катоSCOTT
. Ако простоselect * from regions
ще търсиSCOTT.REGIONS
, който не съществува. За да коригирате това, направете едно от следните:-
използвайте
hr.regions
изрично във вашата заявка. -
във вашата схема
create or replace synonym regions for hr.regions;
Сега всеки път, когато се позовавате наregions
, базата данни автоматично ще пренасочи къмhr.regions
. -
във всяка схема с разрешение за създаване на публични синоними:
create or replace public synonym regions for hr.regions;
Сега всеки, който се свързва с базата данни, ще има препратки къмregions
пренасочен къмhr.regions
, което не винаги е добра идея, но все пак е една от възможностите. -
alter session set current_schema = hr;
Сега схемата по подразбиране за разрешаване на имена на обекти еHR
а не тази, в която сте влезли. За приложения, които винаги влизат като потребител, различен от този, който притежава таблиците, можете да създадете след тригер за влизане така че това винаги е зададено. Тогава те могат просто да се позовават наregions
и т.н., без да е необходимо да се указва каквато и да е схема и без синоними.
-
-