Oracle
 sql >> Base de données >  >> RDS >> Oracle

Erreur SQL :la table ou la vue ORA-00942 n'existe pas

Parce que ce message est le premier trouvé sur stackoverflow lors de la recherche de "ORA-00942:la table ou la vue n'existe pas d'insertion", je souhaite mentionner une autre cause possible de cette erreur (au moins dans Oracle 12c):une table utilise une séquence pour définir une valeur par défaut et l'utilisateur exécutant la requête d'insertion n'a pas le privilège de sélection sur la séquence. C'était mon problème et il m'a fallu un temps inutilement long pour le comprendre.

Pour reproduire le problème, exécutez le SQL suivant en tant que 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;

Ensuite, exécutez cette instruction d'insertion en tant que user2 :

insert into user1.customer (name,surname) values ('michael','jackson');

Le résultat sera "ORA-00942 :la table ou la vue n'existe pas" même si user2 a des privilèges d'insertion et de sélection sur user1.customer table et préfixe correctement la table avec le nom du propriétaire du schéma. Pour éviter le problème, vous devez accorder le privilège select sur la séquence :

grant select on seq_customer_id to user2;