SQL-fout: ORA-00942-tabel of weergave bestaat niet

Ik gebruik SQL-ontwikkelaar en ik heb verbinding gemaakt met mijn database met de systeemgebruiker, nadat ik een gebruiker heb gemaakt en een andere verbinding met die gebruiker heb gemaakt met alle benodigde rechten.

Maar als ik probeer verder te gaan, krijg ik de SQL-fout

ORA-00942 tabel of weergave bestaat niet.:


INSERT INTO customer (c_id,name,surname) VALUES ('1','Micheal','Jackson')

Antwoord 1, autoriteit 100%

Omdat dit bericht de bovenste is die gevonden is op stackoverflow bij het zoeken naar “ORA-00942: table or view bestaat niet insert”, wil ik een andere mogelijke oorzaak van deze fout noemen (tenminste in Oracle 12c): een tabel gebruikt een reeks om een standaardwaarde in te stellen en de gebruiker die de invoegquery uitvoert, heeft geen selectierecht voor de reeks. Dit was mijn probleem en het kostte me onnodig veel tijd om erachter te komen.

Om het probleem te reproduceren, voert u de volgende SQL uit als 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;

Voer vervolgens deze insert-instructie uit als user2:

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

Het resultaat is “ORA-00942: tabel of weergave bestaat niet”, hoewel user2wel invoeg- en selectierechten heeft in de tabel user1.customeren correct is voorafgaan aan de tabel met de naam van de schema-eigenaar. Om het probleem te vermijden, moet u select privileges toekennen aan de reeks:

grant select on seq_customer_id to user2;

Antwoord 2, autoriteit 24%

De gebruiker heeft geen rechten die nodig zijn om de tabel te zien, de tabel bestaat niet of u voert de query uit in het verkeerde schema

Bestaat de tabel?

   select owner, 
           object_name 
    from dba_objects 
    where object_name = any ('CUSTOMER','customer');

Welke rechten heb je verleend?

   grant select, insert on customer to user;

Voer je de zoekopdracht uit tegen de eigenaar vanaf de eerste zoekopdracht?


Antwoord 3, autoriteit 20%

U kunt niet rechtstreeks toegang krijgen tot de tabel met de naam ‘klant’. Het moet ofwel ‘gebruiker1.klant’ zijn of een synoniem ‘klant’ voor gebruiker2 maken, verwijzend naar ‘gebruiker1.klant’. hoop dat dit helpt..


Antwoord 4, autoriteit 18%

Hoofdlettergevoelige tabellen (tabelnamen gemaakt met dubbele aanhalingstekens) kunnen dezelfde fout ook veroorzaken. Bekijk dit antwoordvoor meer informatie.

De tabel gewoon tussen dubbele aanhalingstekens plaatsen:

INSERT INTO "customer" (c_id,name,surname) VALUES ('1','Micheal','Jackson')

Antwoord 5, autoriteit 4%

Hier is een antwoord: http://www.dba-oracle.com/concepts /synonyms.htm

Met een Oracle Synoniem kunt u in principe een aanwijzer maken naar een object dat ergens anders bestaat. Je hebt Oracle Synoniemen nodig omdat wanneer je bent ingelogd in Oracle, het zoekt naar alle objecten die je zoekt in je schema (account). Als ze er niet zijn, geeft het je een foutmelding om je te vertellen dat ze niet bestaan.


Antwoord 6, Autoriteit 2%

Ik gebruik Oracle-database en ik had hetzelfde probleem. Uiteindelijk vond ik Oracle DB alle metadata (tabel / sp / view / trigger) in hoofdletters.

En ik probeerde hoe ik een tafelnaam (mytemptable) in SQL schreef terwijl het verwacht hoe het op de tabelnaam opslaat in databanks (mytemptable). Ook hetzelfde toepasbaar op kolomnaam.

Het is vrij algemeen probleem met ontwikkelaar die SQL heeft gebruikt en nu in Oracle DB sprong.

Other episodes