Ошибка SQL: таблица или представление ORA-00942 не существует
Я использую SQL-разработчик, и я создал соединение с моей базой данных с системным пользователем после того, как создал пользователя и сделал другое соединение с этим пользователем со всеми необходимыми привилегиями.
Но когда я пытаюсь продолжить выполнение, я получаю ошибку SQL
Таблица или представление ORA-00942 не существует.:
INSERT INTO customer (c_id,name,surname) VALUES ('1','Micheal','Jackson')
Ответы
Ответ 1
Поскольку этот пост является верхним, найденным в stackoverflow при поиске "ORA-00942: таблица или представление не существует вставки", я хочу упомянуть еще одну возможную причину этой ошибки (по крайней мере, в Oracle 12c): таблица использует последовательность для установки значения по умолчанию, и пользователь, выполняющий запрос вставки, не имеет привилегии выбора в последовательности. Это была моя проблема, и мне потребовалось слишком много времени, чтобы понять это.
Чтобы воспроизвести проблему, выполните следующий SQL как user1
:
create sequence seq_customer_id;
create table customer (
c_id number(10) default seq_customer_id.nextval primary key,
name varchar(100) not null,
surname varchar(100) not null
);
grant select, insert, update, delete on customer to user2;
Затем выполните этот оператор insert как user2
:
insert into user1.customer (name,surname) values ('michael','jackson');
Результат будет "ORA-00942: таблица или представление не существует", хотя user2
имеет вставку и выбор привилегий в таблице user1.customer
и корректно префикс таблицы с именем владельца схемы. Чтобы избежать этой проблемы, вы должны предоставить привилегию выбора в последовательности:
grant select on seq_customer_id to user2;
Ответ 2
либо пользователь не имеет привилегий, необходимых для просмотра таблицы, таблица не существует или вы выполняете запрос в неправильной схеме
существует ли таблица?
select owner,
object_name
from dba_objects
where object_name = any ('CUSTOMER','customer');
какие привилегии вы предоставили?
grant select, insert on customer to user;
выполняется ли запрос от владельца с первого запроса?
Ответ 3
Вы не можете напрямую обращаться к таблице с именем "клиент". Либо он должен быть "user1.customer", либо создать синоним "клиент" для user2, указывающий на "user1.customer". надеюсь, что это поможет.
Ответ 4
Вот ответ: http://www.dba-oracle.com/concepts/synonyms.htm
Синоним Oracle в основном позволяет вам создавать указатель на объект, который существует где-то в другом месте. Вам нужны синонимы Oracle, потому что когда вы вошли в Oracle, он ищет все объекты, которые вы запрашиваете в своей схеме (учетной записи). Если их там нет, это даст вам сообщение о том, что они не существуют.
Ответ 5
Чувствительные к регистру таблицы (имена таблиц, созданные в двойных кавычках) также могут выдавать ту же ошибку. Смотрите этот ответ для получения дополнительной информации.
Просто оберните таблицу в двойные кавычки:
INSERT INTO "customer" (c_id,name,surname) VALUES ('1','Micheal','Jackson')