Как исправить ошибку ora-00942

Как исправить ошибку ora-00942

Вы иногда видите ошибку ora-00942 при выполнении оператора SQL. У нее есть несколько причин, и, как обычно, синтаксис ошибки не самый описательный. Если вы столкнулись с этим и хотите знать, как исправить ошибку ora-00942, читайте дальше.

Содержание

Насколько я знаю, существует три основные причины ошибки ora-00942:

  1. Недостаточные привилегии пользователя
  2. Таблица или представление фактически не существует
  3. Таблица или представление находится в другой схеме

Я покажу вам, как устранить каждую из них.

Как исправить ошибку ora-00942

Исправление ошибки ora-00942

Прежде всего, небольшая оговорка. Я не DBA, я администратор Windows и техник по настольному и серверному оборудованию. Я знаю, как запускать SQL, но не до такой степени, и уж точно не до такого уровня, чтобы устранять неполадки. Мне пришлось обратиться за помощью к моему приятелю Oracle DBA, поэтому, хотя я написал эту статью, все умные части принадлежат ему.

Этот список трех причин ошибки ora-00942 не является исчерпывающим. Существуют и другие случайные причины ее возникновения, но эти три, по-видимому, являются наиболее распространенными.

Недостаточные привилегии пользователя

Одной из основных причин ошибки ora-00942 является то, что пользователь не имеет достаточных привилегий для доступа к данной таблице. Вы можете проверить это, выполнив два запроса.

 – list system privileges for the user or role SELECT * FROM dba_sys_privs WHERE grantee IN (&user_role, 'PUBLIC');

— list object privileges for the user or role

SELECT grantee, owner||'.'||table_name object, privilege, grantable FROM dba_tab_privs WHERE grantee IN (&user_role) ORDER BY grantee, owner||'.'||table_name, privilege;

Эти два запроса скажут вам, есть ли у пользователя нужные привилегии для выполнения команды. Если у пользователя есть нужные привилегии, переходите к следующему пункту. Если у пользователя нет нужных привилегий, предоставьте ему их или попросите администратора БД сделать это.

Ошибка ora-00942 также может возникнуть, если пользователь используемой схемы имеет привилегии INSERT, но не имеет привилегий SELECT. Опять же, проверьте уровень привилегий и добавьте SELECT в список или попросите администратора БД сделать это. Очевидно, что специфическая привилегия SELECT должна быть предоставлена каждой схеме, иначе вы все равно увидите ошибку ora-00942.

Как исправить ошибку ora-00942

Таблица или представление фактически не существует

Эта причина ошибки ora-00942 может быть вызвана неправильным синтаксисом запроса или если таблица не существует. Хотя это кажется логичным первым пунктом, с которого следует начать, я уверен, что привилегии пользователя являются причиной ошибки номер один. Отсутствие таблицы или использование неправильного синтаксиса таблицы — вторая.

Чтобы проверить, существует ли таблица, сначала проверьте синтаксис запроса. Если синтаксис правильный, запустите этот запрос.

SELECT owner, object_name, object_type FROM all_objects WHERE object_type IN ('TABLE','VIEW') AND object_name = ‘YOUR_TABLE_NAME';

В последней строке вставьте фактическое имя таблицы, где вы видите ‘YOUR_TABLE_NAME’. Это должно точно сказать вам, существует ли таблица, которую вы пытаетесь запросить, или нет. Если таблица не возвращается, значит таблица, которую вы запрашиваете, не существует в схеме или базе данных.

Если в системе, которую вы используете, есть меню Tables, вы можете вручную проверить наличие таблицы, если хотите, но вышеприведенный запрос сделает свою работу.

Таблица или представление находится в другой схеме

Если у пользователя есть привилегии и таблица существует, а вы все еще видите ошибку ora-00942, это, скорее всего, связано со схемой. Если вы управляете несколькими схемами, легко запустить запрос к чужой схеме. Когда вы заняты и сталкиваетесь с этим, это простая ошибка.

Проверьте схему вручную, если можете, или добавьте имя схемы в строку FROM вашего запроса. Если у вас нет правильных привилегий для новой схемы, вы снова увидите ошибку ora-00942. Вернитесь к первому варианту исправления привилегий пользователя и проверьте соответствующую схему или попросите вашего DBA сделать это за вас.

Как упоминалось выше, я консультировался с моим приятелем Oracle DBA для написания этой статьи, так что вся заслуга за тяжелую работу принадлежит ему. Если вы найдете здесь какие-либо ошибки или упущения, они принадлежат только мне. Дайте мне знать в разделе комментариев, если я что-то упустил или неправильно понял, и я это исправлю.

Если вы знаете другой способ исправить ошибку ora-00942, расскажите нам об этом ниже!

YouTube видео: Как исправить ошибку ora-00942