Понякога виждате грешка ora-00942 при изпълнение на SQL оператор. Има няколко причини и както обикновено синтаксисът на грешки не е най-описателния. Ако стигате до това и искате да знаете как да поправите грешката ora-00942, прочетете нататък.
Доколкото знам, има три основни причини за грешката ora-00942:
- Недостатъчни потребителски права
- Таблицата или изгледът всъщност не съществуват
- Таблицата или изгледът са в друга схема
Ще ви покажа как да се обърнете към всеки един.
Поправете грешката ora-00942
Първо, малко отказ. Аз не съм DBA, аз съм администратор на Windows и хардуерен техник за десктоп и сървър. Знам как да стартирам SQL, но не до някаква степен на опит и със сигурност не до нивото, което може да отстрани проблеми. Трябваше да помоля моят приятел на Oracle DBA за помощ, така че докато писах това парче, умните битове са всички негови.
Този списък от три причини за грешката ora-00942 не е изчерпателен. Очевидно има и други случайни причини за това, но тези три са очевидно най-честите.
Недостатъчни потребителски права
Една от основните причини за грешката ora-00942 е, че потребителят няма достатъчно привилегии за достъп до въпросната таблица. Можете да проверите това, като стартирате две заявки.
- избройте системни привилегии за потребителя или роля SELECT * FROM dba_sys_privs WHERE грант IN (& user_role, 'PUBLIC');
- списък на привилегии за обект за потребителя или роля
ИЗБИРАЙ получател, собственик || '.' || таблица_именование обект, привилегия, подлежащ на поддръжка ОТ ДБА_tab_privs, КЪДЕТО получателят е (и потребител_рола) ПОРЪЧАЙ от получател, собственик || '.' || table_name, привилегия;
Тези двама ще ви кажат дали въпросният потребител има правилните привилегии за изпълнение на командата. Ако потребителят има правилните привилегии, преминете към следващия. Ако потребителят няма правилните привилегии, предоставете им ги или помолете вашия DB администратор да го направи.
Грешката ora-00942 също може да възникне, ако потребителят на схемата, която използвате, има привилегии INSERT, но не и привилегии SELECT. Отново проверете нивото на привилегии и добавете SELECT в списъка или помолете DB администратор да го направи. Очевидно, специфичната привилегия SELECT трябва да бъде предоставена на всяка схема, в противен случай пак ще видите грешката ora-00942.
Таблицата или изгледът всъщност не съществуват
Тази причина за грешката ora-00942 може да бъде причинена от неправилен синтаксис на заявки или ако таблицата не съществува. Въпреки че това изглежда логично първото място за начало, аз съм сигурен, че привилегията на потребителя е причина номер едно за грешката. Таблицата, която не е там, или използваният грешен синтаксис на таблица е на второ място.
За да проверите дали таблицата съществува, първо проверете синтаксиса на заявката. Ако синтаксисът е правилен, изпълнете тази заявка.
ИЗБЕРЕТЕ собственик, име на обект, тип на обект ОТ all_objects WHERE object_type IN ('TABLE', 'VIEW') AND object_name = 'YOUR_TABLE_NAME';
На последния ред поставете действителното име на таблицата, където виждате „YOUR_TABLE_NAME“. Това определено трябва да ви каже дали таблицата, която се опитвате да питате, съществува или не. Ако се върне без таблица, таблицата, която питате, не съществува в схемата или базата данни.
Ако системата, която използвате, има меню Tables, можете ръчно да проверите за таблицата, ако предпочитате, но горната заявка ще свърши работата.
Таблицата или изгледът са в друга схема
Ако потребителят има привилегии и таблицата съществува и все още виждате грешката ora-00942, вероятно се стига до схемата. Ако управлявате множество схеми, е лесно да стартирате заявка срещу схема, която не е ваша. Когато сте заети и сте против това, това е проста грешка.
Проверете схемата ръчно, ако можете или добавите името на схемата в реда от ВЪВ заявката си. Ако нямате правилните привилегии за новата схема, ще видите грешката ora-00942 още веднъж. Върнете се към първото поправяне на права на потребител и проверете съответната схема или накарайте вашия DBA да го направи вместо вас.
Както бе споменато по-горе, аз се консултирах с моят приятел на Oracle DBA за това парче, така че всички да му благодаря за упоритата работа. Ако откриете тук някакви грешки или пропуски, те са само мои. Уведомете ме в секцията за коментари дали съм пропуснал нещо или съм го объркал и ще го коригирам.
Ако знаете за друг начин да поправите грешката ora-00942, кажете ни за това по-долу!
