Anonim

Palaižot SQL, ik pa laikam tiek parādīta kļūda ora-00942. Tam ir daži cēloņi, un, kā parasti, kļūdu sintakse nav visaprakstošākā. Ja jūs pret to stāties pretī un vēlaties uzzināt, kā novērst ora-00942 kļūdu, lasiet tālāk.

Cik es zinu, ora-00942 kļūdai ir trīs galvenie cēloņi:

  1. Nepietiekamas lietotāja privilēģijas
  2. Tabula vai skats faktiski neeksistē
  3. Tabula vai skats atrodas citā shēmā

Es parādīšu, kā uzrunāt katru no tām.

Izlabojiet kļūdu ora-00942

Pirmkārt, neliela atruna. Es neesmu DBA, esmu Windows administrators un galddatoru un serveru aparatūras tehnoloģija. Es zinu, kā vadīt SQL, bet ne tādā kompetencē un noteikti ne tādā līmenī, lai varētu novērst problēmas. Man nācās lūgt manam Oracle DBA draugam palīdzību, tāpēc, kamēr es rakstīju šo skaņdarbu, gudrie biti ir viņa visi.

Šis trīs ora-00942 kļūdas cēloņu saraksts nav pilnīgs. Acīmredzami ir arī citi nejauši iemesli, bet šie trīs ir acīmredzami visizplatītākie.

Nepietiekamas lietotāja privilēģijas

Viens no galvenajiem ora-00942 kļūdas cēloņiem ir tas, ka lietotājam nav pietiekamu privilēģiju, lai piekļūtu attiecīgajai tabulai. To var pārbaudīt, izpildot divus vaicājumus.

- uzskaitīt lietotāja privilēģijas vai lomu SELECT * FROM dba_sys_privs WHERE grantee IN (& user_role, 'PUBLIC');

- uzskaitīt lietotāja vai lomas objekta privilēģijas

SELECT finansējuma saņēmēju, īpašnieku || '.' || tabulas_nosaukuma objekts, privilēģijas, grantable FROM dba_tab_privs, KUR SAŅEMT SAŅĒMĒJU (& user_role) |

Šie divi jums pateiks, vai attiecīgajam lietotājam ir pareizas komandas palaišanas tiesības. Ja lietotājam ir pareizas privilēģijas, pārejiet pie nākamās. Ja lietotājam nav pareizo privilēģiju, piešķiriet viņiem to vai lūdziet to darīt jūsu DB administratoram.

Ora-00942 kļūda var rasties arī tad, ja jūsu izmantotās shēmas lietotājam ir INSERT privilēģijas, bet ne SELECT privilēģijas. Vēlreiz pārbaudiet privilēģiju līmeni un pievienojiet sarakstam SELECT vai lūdziet to darīt DB administratoram. Acīmredzot katrai shēmai jāpiešķir īpaša SELECT privilēģija, pretējā gadījumā jūs joprojām redzēsit kļūdu ora-00942.

Tabula vai skats faktiski neeksistē

Šo ora-00942 kļūdas iemeslu var izraisīt nepareiza vaicājuma sintakse vai ja tabula neeksistē. Lai gan tas, šķiet, ir loģiska pirmā sākuma vieta, esmu ticami pārliecināts, ka lietotāja privilēģijas ir galvenais kļūdas iemesls. Otrā ir tabula, kuras tur nav, vai tiek izmantota nepareiza tabulas sintakse.

Lai pārbaudītu, vai tabula pastāv, vispirms pārbaudiet vaicājuma sintakse. Ja sintakse ir pareiza, palaidiet šo vaicājumu.

SELECT īpašnieks, object_name, object_type FROM all_objects WHERE object_type IN ('TABULA', 'VIEW') UN objekta nosaukums = 'YOUR_TABLE_NAME';

Pēdējā rindā ievietojiet faktisko tabulas nosaukumu tur, kur redzams “YOUR_TABLE_NAME”. Tam jums noteikti vajadzētu pateikt, vai tabula, kuru mēģināt uzdot, pastāv vai nav. Ja tā atgriežas bez tabulas, vaicājamā tabula neeksistē shēmā vai datu bāzē.

Ja jūsu izmantotajai sistēmai ir izvēlne Tabulas, varat manuāli pārbaudīt tabulu, ja vēlaties, bet iepriekš minētais vaicājums darbu veic.

Tabula vai skats atrodas citā shēmā

Ja lietotājam ir privilēģijas un tabula pastāv, un jūs joprojām redzat kļūdu ora-00942, tas, iespējams, ir atkarīgs no shēmas. Ja pārvaldāt vairākas shēmas, ir viegli izpildīt vaicājumu pret shēmu, kas nav jūsu. Kad esat aizņemts un neatbilstat tam, tā ir vienkārša kļūda.

Manuāli pārbaudiet shēmu, ja vaicājuma rindā FROM varat pievienot vai pievienot shēmas nosaukumu. Ja jums nav pareizās privilēģijas jaunajai shēmai, jūs atkal redzēsit kļūdu ora-00942. Atgriezieties pie pirmā lietotāja privilēģiju labojuma un pārbaudiet atbilstošo shēmu vai arī mēģiniet DBA to izdarīt jūsu vietā.

Kā minēts iepriekš, es konsultējos ar kādu no maniem Oracle DBA draugiem par šo gabalu, tāpēc visi viņam jāpateicas par smago darbu. Ja šeit atrodat kļūdas vai izlaidumus, tie ir tikai mani. Paziņojiet man komentāru sadaļā, ja man kaut kas pietrūka vai tas notika nepareizi, un es to izlabošu.

Ja zināt kādu citu veidu, kā novērst ora-00942 kļūdu, pastāstiet mums par to zemāk!

Kā izlabot kļūdu ora-00942