Bir SQL ifadesi çalıştırırken arada bir ora-00942 hatası görürsünüz. Bunun birkaç nedeni var ve her zamanki gibi hata sözdizimi en açıklayıcı değil. Buna karşı geliyorsanız ve ora-00942 hatasını düzeltmeyi öğrenmek istiyorsanız, okumaya devam edin.
Bildiğim kadarıyla, ora-00942 hatasının üç ana nedeni var:
- 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 hatasını düzeltin
Öncelikle, küçük bir sorumluluk reddi. Ben DBA değilim, bir Windows yöneticisiyim ve masaüstü ve sunucu donanım teknisyeniyim. SQL'i nasıl çalıştıracağımı biliyorum, ancak herhangi bir uzmanlık derecesine göre değil ve kesinlikle sorunları giderebilecek seviyeye de bilirim. Oracle DBA'dan bir dostumdan yardım istemek zorunda kaldım, bu yüzden bu yazıyı yazarken, zekice bitler onun.
Bu ora-00942 hatasının üç nedeninin listesi tam değildir. Görünüşe göre diğer rastgele nedenleri var ama bu üç görünüşte en yaygın olanıdır.
Yetersiz kullanıcı ayrıcalıkları
Ora-00942 hatasının bir önemli nedeni, kullanıcının söz konusu tabloya erişmek için yeterli yetkiye sahip olmamasıdır. Bunu iki sorgu çalıştırarak kontrol edebilirsiniz.
- Kullanıcı veya rol için sistem ayrıcalıklarını listeler. SELECT * FROM dba_sys_privs NEREDE GİRİŞİNDE (& user_role, 'PUBLIC');
- kullanıcı veya rol için nesne ayrıcalıklarını listele
SELECT grantee, owner || '.' || table_name nesnesi, ayrıcalık, dba_tab_privs'DAN KANITLANABİLİR.
Bu ikisi, söz konusu kullanıcının komutu çalıştırmak için doğru yetkilere sahip olup olmadığını size söyleyecektir. Kullanıcının doğru yetkileri varsa, bir sonrakine geçin. Kullanıcı doğru yetkilere sahip değilse, onlara yetki verin veya DB Yöneticinizden yapmalarını isteyin.
Ora-00942 hatası, kullandığınız şemanın kullanıcısı INSERT ayrıcalıklarına sahipse, SELECT ayrıcalıklarına sahip değilse de oluşabilir. Yine, ayrıcalık seviyesini kontrol edin ve listeye SELECT ekleyin veya bir DB Yöneticisinden yapmasını isteyin. Görünüşe göre, belirli bir SELECT ayrıcalığı, 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 bu nedeni yanlış sorgu sözdizimi veya tablo yoksa olabilir. Bu, başlangıçta mantıklı olan ilk yer gibi görünse de, hatanın bir numaralı nedeni olan kullanıcı ayrıcalığının güvenilir olduğundan eminim. Tablo orada değil veya kullanılan yanlış tablo sözdizimi ikinci.
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 sahibi, object_name, object_type FROM all_objects WHERE object_type IN ('TABLO', 'VIEW') VE object_name = 'YOUR_TABLE_NAME';
Bu son satıra, 'YOUR_TABLE_NAME' ifadesini gördüğünüz gerçek tablo adını girin. Bu size, sorgulamaya çalıştığınız tablonun var olup olmadığını kesinlikle söylemelidir. Tablo olmadan döndürürse, sorguladığınız tablo şema veya veritabanında mevcut değildir.
Kullanmakta olduğunuz sistemde bir Tablo menüsü varsa, tercih ederseniz tabloyu manuel olarak kontrol edebilirsiniz ancak yukarıdaki sorgu işi yapar.
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, şemaya düşme olasılığı yüksektir. Birden fazla şema yönetiyorsanız, kendinize ait olmayan bir şemaya karşı sorgu çalıştırmak kolaydır. Meşgul ve ona karşı olduğunuzda, yapmak için basit bir hatadır.
Şema adını, sorgunun FROM satırına ekleyebilir veya ekleyebilirseniz şemayı el ile kontrol edin. Yeni şema için doğru ayrıcalıklara sahip değilseniz, 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ı sizin için yapmasını sağlayın.
Yukarıda bahsedildiği gibi, bu parça için bir Oracle DBA arkadaşıma danışmıştım, bu nedenle tüm sıkı çalışmalarından dolayı ona kredi verdim. Burada herhangi bir hata veya eksiklik bulursanız, sadece benim. Herhangi bir şeyi kaçırdıysam veya yanlış anladıysam yorum bölümünde bana bildirin, düzelteceğim.
Ora-00942 hatasını düzeltmenin başka bir yolunu biliyorsanız, bize aşağıda anlatınız!