Bazen bir SQL deyimi çalıştırırken bir ora-00942 hatası görürsünüz. Birkaç nedeni vardır ve her zamanki gibi, hata sözdizimi en açıklayıcı değildir. Buna karşı geliyorsanız ve ora-00942 hatasını nasıl düzelteceğinizi öğrenmek istiyorsanız, okumaya devam edin.
Bildiğim kadarıyla, ora-00942 hatasının üç ana nedeni vardır:
- Yetersiz kullanıcı ayrıcalıkları
- Tablo veya görünüm aslında mevcut değil
- Tablo veya görünüm farklı bir şemada
Her birine nasıl hitap edeceğinizi göstereceğim.
Ora-00942 hatayı düzeltmek
Öncelikle, küçük bir sorumluluk reddi. Ben DBA değilim, Windows yönetici ve masaüstü ve sunucu donanım teknisyeniyim. SQL'i nasıl çalıştıracağımı biliyorum, ancak herhangi bir uzmanlık derecesine ve kesinlikle sorunların giderilebileceği seviyeye değil. Yardım için bir Oracle DBA dostum sormak zorunda kaldım, bu yüzden bu parçayı yazarken, akıllı bitler onun hepsi.
Ora-00942 hatasının üç nedeni bu liste kapsamlı değildir. Görünüşe göre bunun diğer rasgele nedenleri var ama bu üç görünüşte en yaygın olanı.
Yetersiz kullanıcı ayrıcalıkları
Ora-00942 hatasının bir anahtar nedeni, kullanıcının söz konusu tabloya erişmek için yeterli ayrıcalığa sahip olmamasıdır. Bunu iki sorgu çalıştırarak kontrol edebilirsiniz.
- kullanıcı için liste ayrıcalıkları veya SELECT * FROM dba_sys_privs WHERE grantee IN (& user_role, 'PUBLIC');
- Kullanıcı veya rol için liste nesne ayrıcalıkları
SELECT grantee, owner || '.' || table_name object, ayrıcalık, granüle edilebilir dba_tab_privs FRANSIZ IN (& user_role) ORDER BY grantee, owner || '.' || table_name, privilege;
Bu ikisi, söz konusu kullanıcının komutu çalıştırmak için doğru ayrıcalıklara sahip olup olmadığını size söyleyecektir. Kullanıcı doğru ayrıcalıklara sahipse, bir sonraki sayfaya geçin. Kullanıcının doğru ayrıcalıkları yoksa, bunları onlara verin veya DB Yöneticinizden bunu yapmasını isteyin.
Ora-00942 hatası, kullandığınız şemanın kullanıcısı INSERT ayrıcalıklarına sahipse, ancak SELECT ayrıcalıklarına sahip değilse de oluşabilir. Yine, ayrıcalık düzeyini kontrol edin ve listeye SELECT'i ekleyin veya bir DB Yöneticisinin bunu yapmasını isteyin. Görünüşe göre, belirli bir SELECT imtiyazı her şemaya verilmelidir, aksi halde ora-00942 hatasını göreceksiniz.
Tablo veya görünüm aslında mevcut değil
Ora-00942 hatasının nedeni, yanlış sorgu sözdizimi nedeniyle veya tablo mevcut değilse oluşabilir. Bu, başlangıç için mantıklı ilk yer olarak görünmekle birlikte, kullanıcı ayrıcalığının hataların bir numaralı nedeni olduğu konusunda güvenilir bir şekilde eminim. Tablo orada bulunmuyor ya da yanlış tablo sözdizimi kullanılıyor.
Tablonun var olup olmadığını kontrol etmek için, önce sorgunun sözdizimini kontrol edin. Sözdizimi doğruysa, bu sorguyu çalıştırın.
SELECT owner, object_name, object_type FROM all_objects WHERE object_type IN ('TABLO', 'GÖRÜNÜM') VE object_name = 'YOUR_TABLE_NAME';
Son satırda, 'YOUR_TABLE_NAME' öğesini gördüğünüz gerçek tablo adını girin. Bu, sorgulamaya çalıştığınız tablonun var olup olmadığını kesinlikle size bildirmelidir. Tablo içermiyorsa, sorguladığınız tablo şemada veya veritabanında bulunmaz.
Kullandığınız sistem bir Tablolar menüsüne sahipse, tercih ederseniz tabloyu manuel olarak kontrol edebilirsiniz, ancak yukarıdaki sorgu işin yapılmasını sağlar.
Tablo veya görünüm farklı bir şemada
Kullanıcının ayrıcalıkları varsa ve tablo varsa ve hala ora-00942 hatasını görüyorsanız, muhtemelen şemaya doğrudur. Birden çok şema yönetiyorsanız, sizin olmayan bir şemaya karşı bir sorgu çalıştırmak kolaydır. Meşgul olduğunuzda ve buna karşı olduğunuzda, yapılması basit bir hatadır.
Şema adını sorguunuzun FROM satırına ekleyebilir veya ekleyebilirseniz şemayı el ile denetleyin. Yeni şema için doğru ayrıcalıklarınız yoksa, ora-00942 hatasını bir kez daha göreceksiniz. İlk kullanıcı ayrıcalık düzeltmesine dönün ve ilgili şemayı kontrol edin veya DBA'nızın sizin için yapmasını sağlayın.
Yukarıda bahsettiğim gibi, bu parça için bir Oracle DBA dostumuna danıştım, bu yüzden sıkı çalışma için ona tüm kredi. Burada herhangi bir hata veya eksiklik bulursanız, onlar yalnız benimdir. Bir şeyleri kaçırdıysam veya yanlış anladıysam yorumlar bölümünü bana bildirin.
Ora-00942 hatasını düzeltmek için başka bir yöntem biliyorsanız, aşağıdan bize bildirin!