Иногда вы видите ошибку ora-00942 при выполнении оператора SQL. У него есть несколько причин, и, как обычно, синтаксис ошибок не самый описательный. Если вы столкнулись с этим и хотите узнать, как исправить ошибку ora-00942, читайте дальше.
Насколько я знаю, есть три основные причины ошибки ora-00942:
- Недостаточно прав пользователя
- Таблица или представление на самом деле не существует
- Таблица или представление находятся в другой схеме
Я покажу вам, как обратиться к каждому.
Исправьте ошибку ora-00942
Прежде всего, небольшой отказ от ответственности. Я не администратор баз данных, я администратор Windows, а также специалист по аппаратному и настольному оборудованию. Я знаю, как запустить SQL, но не до какой-то степени опыта и, конечно, не до уровня, который может устранять проблемы. Я должен был попросить моего друга Oracle DBA о помощи, поэтому, пока я писал эту часть, все умные биты принадлежали ему.
Этот список трех причин ошибки ora-00942 не является исчерпывающим. Есть, очевидно, другие случайные причины этого, но эти три, по-видимому, наиболее распространены.
Недостаточно прав пользователя
Одной из основных причин ошибки ora-00942 является то, что у пользователя недостаточно прав для доступа к рассматриваемой таблице. Вы можете проверить это, выполнив два запроса.
- перечислить системные привилегии для пользователя или роли SELECT * FROM dba_sys_privs WHERE грантополучатель IN (& user_role, 'PUBLIC');
- список привилегий объекта для пользователя или роли
ВЫБЕРИТЕ грантополучателя, владельца || '.' || объект имя_таблицы, привилегии, грантируемые ОТ ОТ dba_tab_privs ГДЕ грантополучатель IN (& user_role) ORDER BY грантополучателя, владелец || '.' || имя_таблицы, привилегия;
Эти двое скажут вам, имеет ли данный пользователь правильные привилегии для запуска команды. Если пользователь имеет правильные привилегии, переходите к следующему. Если пользователь не имеет правильных привилегий, предоставьте их им или попросите администратора БД сделать это.
Ошибка ora-00942 также может возникнуть, если пользователь используемой схемы имеет привилегии INSERT, но не привилегии SELECT. Опять же, проверьте уровень привилегий и добавьте SELECT в список или попросите администратора БД сделать это. Очевидно, что каждой схеме должна быть предоставлена определенная привилегия SELECT, в противном случае вы все равно увидите ошибку ora-00942.
Таблица или представление на самом деле не существует
Причиной ошибки ora-00942 может быть неправильный синтаксис запроса или отсутствие таблицы. Хотя это может показаться логичным для начала, я уверен, что привилегия пользователя является причиной ошибки номер один. Таблица, которой там нет или используется неверный синтаксис таблицы, занимает второе место.
Чтобы проверить, существует ли таблица, сначала проверьте синтаксис запроса. Если синтаксис правильный, запустите этот запрос.
ВЫБЕРИТЕ владельца, имя_объекта, тип_объекта ОТ всех_объектов ГДЕ тип_объекта IN ('TABLE', 'VIEW') И имя_объекта = 'YOUR_TABLE_NAME';
В последней строке вставьте фактическое имя таблицы, где вы видите «YOUR_TABLE_NAME». Это должно точно сказать вам, существует ли таблица, к которой вы пытаетесь обратиться, или нет. Если он возвращается без таблицы, запрашиваемая вами таблица не существует в схеме или базе данных.
Если в используемой вами системе есть меню «Таблицы», вы можете вручную проверить таблицу, если хотите, но вышеуказанный запрос выполняет свою работу.
Таблица или представление находятся в другой схеме
Если у пользователя есть права, и таблица существует, но вы все еще видите ошибку ora-00942, скорее всего, это связано со схемой. Если вы управляете несколькими схемами, легко выполнить запрос к схеме, которая не принадлежит вам. Когда вы заняты и против этого, это простая ошибка, чтобы сделать.
Проверьте схему вручную, если можно или добавьте имя схемы в строке ОТ вашего запроса. Если у вас нет правильных привилегий для новой схемы, вы снова увидите ошибку ora-00942. Вернитесь к первому исправлению привилегий пользователя и проверьте соответствующую схему или попросите своего администратора базы данных сделать это за вас.
Как упомянуто выше, я проконсультировался с моим приятелем по DBA Oracle для этой работы, так что вся заслуга ему в тяжелой работе. Если вы обнаружите здесь какие-либо ошибки или упущения, они одни. Дайте мне знать в разделе комментариев, если я что-то пропустил или ошибся, и я исправлю это.
Если вам известен какой-либо другой способ исправить ошибку ora-00942, сообщите нам об этом ниже!