この投稿は、「ORA-00942:テーブルまたはビューが存在しません挿入」を検索したときにstackoverflowで見つかった一番上の投稿であるため、このエラーの別の考えられる原因について説明します(少なくとも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;
次に、この挿入ステートメントをuser2
として実行します。 :
insert into user1.customer (name,surname) values ('michael','jackson');
user2
であっても、結果は「ORA-00942:テーブルまたはビューが存在しません」になります。 user1.customer
に対する挿入および選択権限があります テーブルであり、テーブルの前にスキーマ所有者名が正しく付けられています。この問題を回避するには、シーケンスに対する選択権限を付与する必要があります。
grant select on seq_customer_id to user2;