Anda kadang-kadang melihat kesalahan ora-00942 ketika menjalankan pernyataan SQL. Ini memiliki beberapa penyebab dan seperti biasa, sintaks kesalahan bukan yang paling deskriptif. Jika Anda menentang ini dan ingin tahu cara memperbaiki kesalahan ora-00942, baca terus.
Sejauh yang saya tahu, ada tiga penyebab utama kesalahan ora-00942:
- Hak istimewa pengguna tidak memadai
- Tabel atau tampilan sebenarnya tidak ada
- Tabel atau tampilan dalam skema yang berbeda
Saya akan menunjukkan kepada Anda bagaimana menangani masing-masing.
Perbaiki kesalahan ora-00942
Pertama, sedikit penafian. Saya bukan DBA, saya adalah administrator Windows dan perangkat keras desktop dan server. Saya tahu cara menjalankan SQL tetapi tidak pada tingkat keahlian apa pun dan tentu saja tidak pada level yang dapat memecahkan masalah. Saya harus bertanya kepada teman Oracle DBA saya untuk meminta bantuan, jadi ketika saya menulis artikel ini, bit yang cerdas adalah miliknya.
Daftar tiga penyebab kesalahan ora-00942 ini tidak lengkap. Rupanya ada penyebab acak lainnya tetapi ketiganya tampaknya yang paling umum.
Hak istimewa pengguna tidak memadai
Salah satu penyebab utama kesalahan ora-00942 adalah bahwa pengguna tidak memiliki hak yang cukup untuk mengakses tabel yang dimaksud. Anda dapat memeriksa ini dengan menjalankan dua kueri.
- daftar hak istimewa sistem untuk pengguna atau peran SELECT * FROM dba_sys_privs MANA penerima hibah IN (& user_role, 'PUBLIC');
- daftar hak akses objek untuk pengguna atau peran
SELECT grantee, owner || '.' || table_name object, privilege, grantable FROM dba_tab_privs MANA penerima hibah IN (& user_role) ORDER BY grantee, owner || '.' || table_name, privilege;
Keduanya akan memberi tahu Anda jika pengguna yang bersangkutan memiliki hak yang benar untuk menjalankan perintah. Jika pengguna memiliki hak istimewa yang benar, lanjutkan ke yang berikutnya. Jika pengguna tidak memiliki hak istimewa yang benar, berikan kepada mereka atau minta Admin DB Anda untuk melakukannya.
Kesalahan ora-00942 juga dapat terjadi jika pengguna skema yang Anda gunakan memiliki hak INSERT tetapi bukan hak istimewa SELECT. Sekali lagi, periksa level privilege dan tambahkan SELECT ke daftar atau minta Admin DB untuk melakukannya. Rupanya, hak istimewa SELECT tertentu harus diberikan kepada setiap skema jika tidak Anda masih akan melihat kesalahan ora-00942.
Tabel atau tampilan sebenarnya tidak ada
Penyebab kesalahan ora-00942 ini dapat disebabkan oleh sintaks kueri yang salah atau jika tabel tidak ada. Meskipun ini tampaknya tempat pertama yang logis untuk memulai, saya yakin bahwa hak istimewa pengguna adalah penyebab nomor satu dari kesalahan tersebut. Tabel tidak ada atau sintaks tabel yang salah digunakan adalah yang kedua.
Untuk memeriksa apakah tabel itu ada, periksa dulu sintaks kueri. Jika sintaksnya benar, jalankan query ini.
PILIH pemilik, object_name, object_type FROM all_objects WHERE object_type IN ('TABLE', 'VIEW') DAN object_name = 'YOUR_TABLE_NAME';
Pada baris terakhir, masukkan nama tabel yang sebenarnya di mana Anda melihat 'YOUR_TABLE_NAME'. Ini akan memberi tahu Anda secara pasti apakah tabel yang Anda coba kueri ada atau tidak. Jika kembali tanpa tabel, tabel yang Anda query tidak ada dalam skema atau basis data.
Jika sistem yang Anda gunakan memiliki menu Tabel, Anda dapat secara manual memeriksa tabel jika Anda lebih suka tetapi permintaan di atas mendapatkan pekerjaan yang dilakukan.
Tabel atau tampilan dalam skema yang berbeda
Jika pengguna memiliki hak istimewa dan tabel itu ada dan Anda masih melihat kesalahan ora-00942, itu mungkin turun ke skema. Jika Anda mengelola beberapa skema, mudah untuk menjalankan kueri terhadap skema yang bukan milik Anda. Ketika Anda sibuk dan melawannya, itu adalah kesalahan sederhana yang harus dilakukan.
Periksa skema secara manual jika Anda bisa atau tambahkan nama skema di baris FROM kueri Anda. Jika Anda tidak memiliki hak istimewa yang benar untuk skema baru, Anda akan melihat kesalahan ora-00942 sekali lagi. Kembali ke perbaikan hak istimewa pengguna pertama dan periksa skema yang sesuai atau dapatkan DBA untuk melakukannya untuk Anda.
Seperti disebutkan di atas, saya berkonsultasi dengan seorang teman Oracle DBA milik saya untuk bagian ini sehingga semua kredit kepadanya untuk kerja keras. Jika Anda menemukan kesalahan atau kelalaian di sini, mereka adalah milik saya sendiri. Beri tahu saya di bagian komentar jika saya melewatkan sesuatu atau salah dan saya akan memperbaikinya.
Jika Anda tahu cara lain untuk memperbaiki kesalahan ora-00942, beri tahu kami di bawah ini!