Anonim

Kai paleidžiate SQL, kartais galite pamatyti „ora-00942“ klaidą. Tai turi keletą priežasčių ir, kaip įprasta, klaidų sintaksė nėra pati apibūdinanti. Jei susidursite su tuo ir norite sužinoti, kaip ištaisyti „ora-00942“ klaidą, skaitykite toliau.

Kiek žinau, yra trys pagrindinės „ora-00942“ klaidos priežastys:

  1. Nepakankamos vartotojo privilegijos
  2. Lentelė ar vaizdas iš tikrųjų neegzistuoja
  3. Lentelė arba vaizdas pateiktas kitoje schemoje

Aš jums parodysiu, kaip kreiptis į kiekvieną iš jų.

Ištaisykite „ora-00942“ klaidą

Pirmiausia, šiek tiek atsisakymo. Aš nesu DBA, esu „Windows“ administratorius ir kompiuterio bei serverio techninės įrangos. Aš žinau, kaip paleisti SQL, bet neturiu jokios kompetencijos ir tikrai ne tokio lygio, kuris galėtų pašalinti problemas. Teko paprašyti mano „Oracle DBA“ bičiulio pagalbos, taigi, kol aš rašiau šį kūrinį, protingi bitai yra visi jo.

Šis trijų „ora-00942“ klaidų priežasčių sąrašas nėra baigtinis. Matyt, yra ir kitų atsitiktinių priežasčių, tačiau šios trys yra akivaizdžiausios.

Nepakankamos vartotojo privilegijos

Viena pagrindinių „ora-00942“ klaidos priežasčių yra ta, kad vartotojas neturi pakankamai teisių patekti į aptariamą lentelę. Tai galite patikrinti atlikę dvi užklausas.

- išvardinkite vartotojo ar vaidmens sistemos privilegijas. PASIRINKITE * IŠ Dba_sys_privs KUR SUTEIKIAMA (& user_role, 'VIEŠAS');

- išvardyti vartotojo ar vaidmens objekto privilegijas

PASIRINKITE gavėją, savininką.

Šie du praneš jums, ar minėtas vartotojas turi tinkamas teises paleisti komandą. Jei vartotojas turi teisingas teises, pereikite prie kito. Jei vartotojas neturi teisingų teisių, suteikite jas arba paprašykite, kad tai padarytų jūsų DB administratorius.

„Ora-00942“ klaida taip pat gali atsirasti, jei jūsų naudojamos schemos vartotojas turi INSERT privilegijas, bet neturi SELECT privilegijų. Dar kartą patikrinkite privilegijų lygį ir pridėkite SELECT prie sąrašo arba paprašykite, kad tai padarytų DB administratorius. Matyt, kiekvienai schemai turi būti suteikta konkreti SELECT privilegija, kitaip vis tiek matysite klaidą „ora-00942“.

Lentelė ar vaizdas iš tikrųjų neegzistuoja

Šią „ora-00942“ klaidos priežastį gali sukelti neteisinga užklausos sintaksė arba jei lentelės nėra. Nors tai atrodytų logiška pirmoje vietoje, aš esu patikimai įsitikinęs, kad klaidos priežastis yra vartotojo privilegija. Antra yra lentelė, kurios nėra, arba naudojama neteisinga lentelės sintaksė.

Norėdami patikrinti, ar lentelė egzistuoja, pirmiausia patikrinkite užklausos sintaksę. Jei sintaksė teisinga, paleiskite šią užklausą.

PASIRINKITE savininką, objekto_vardas, objekto_ tipas iš visų_objektų, KUR objekto tipas IN ('LENTELĖ', 'VIEW') IR objekto_pavadinimas = 'YOUR_TABLE_NAME';

Toje paskutinėje eilutėje įrašykite tikrąjį lentelės pavadinimą ten, kur matote „YOUR_TABLE_NAME“. Tai turėtų aiškiai pasakyti, ar lentelė, kurios bandote užklausti, yra, ar ne. Jei ji grįžta be lentelės, lentelės, kurios klausiate, schemoje ar duomenų bazėje nėra.

Jei jūsų naudojamoje sistemoje yra lentelių meniu, galite rankiniu būdu patikrinti lentelę, jei norite, bet aukščiau pateikta užklausa užbaigia darbą.

Lentelė arba vaizdas pateiktas kitoje schemoje

Jei vartotojas turi privilegijų ir lentelė egzistuoja, o jūs vis tiek matote klaidą ora-00942, greičiausiai tai priklauso nuo schemos. Jei tvarkote kelias schemas, užklausą lengva paleisti pagal schemą, kuri nėra jūsų. Kai esate užsiėmęs ir nesugebate to padaryti, tai yra paprasta klaida.

Patikrinkite schemą rankiniu būdu, jei galite arba pridėkite schemos pavadinimą užklausos FROM eilutėje. Jei neturite teisingų naujosios schemos privilegijų, dar kartą pamatysite klaidą „ora-00942“. Grįžkite prie pirmojo vartotojo privilegijų pataisų ir patikrinkite atitinkamą schemą arba gaukite savo DBA tai padaryti už jus.

Kaip minėta aukščiau, pasikonsultavau su mano „Oracle DBA“ bičiuliu dėl šio kūrinio, kad visi jį įvertintų už sunkų darbą. Jei čia aptikote klaidų ar praleidimų, jie yra tik mano. Praneškite man komentarų skiltyje, jei ką nors praleidau ar suklydau, ir aš tai ištaisysiu.

Jei žinote apie kokį nors kitą būdą ištaisyti „ora-00942“ klaidą, papasakokite apie tai žemiau!

Kaip ištaisyti „ora-00942“ klaidą