Anonim

Anda kadang-kadang melihat ralat ora-00942 semasa menjalankan pernyataan SQL. Ia mempunyai beberapa sebab dan seperti biasa, sintaks ralat tidak paling jelas. Jika anda datang menentang ini dan ingin mengetahui bagaimana untuk membaiki ralat ora-00942, baca terus.

Setakat yang saya ketahui, terdapat tiga sebab utama kesilapan ora-00942:

  1. Keistimewaan pengguna tidak mencukupi
  2. Jadual atau pandangan tidak semestinya wujud
  3. Jadual atau paparan adalah dalam skema yang berbeza

Saya akan menunjukkan kepada anda cara untuk menangani setiap orang.

Betulkan ralat ora-00942

Pertama, penafian kecil. Saya bukan DBA, Saya seorang pentadbir Windows dan teknologi perkakasan desktop dan pelayan. Saya tahu bagaimana untuk menjalankan SQL tetapi tidak untuk sebarang tahap kepakaran dan pastinya tidak ke tahap yang boleh menyelesaikan masalah. Saya terpaksa meminta seorang kawan Oracle DBA untuk mendapatkan bantuan, jadi ketika saya menulis artikel ini, bit yang bijak adalah semuanya.

Senarai tiga sebab kesilapan ora-00942 ini tidak lengkap. Terdapat sebab-sebab lain yang rawak tetapi ketiga-tiga ini nampaknya paling biasa.

Keistimewaan pengguna tidak mencukupi

Salah satu punca kesilapan ora-00942 ialah pengguna tidak mempunyai keistimewaan yang cukup untuk mengakses jadual yang dipersoalkan. Anda boleh menyemak ini dengan menjalankan dua pertanyaan.

- Keistimewaan sistem senarai untuk pengguna atau peranan SELECT * FROM dba_sys_privs WHERE grantee IN (& user_role, 'PUBLIC');

- Senarai keistimewaan objek untuk pengguna atau peranan

PELAKSANAAN SELECT, pemilik || '.' || table_name objek, keistimewaan, yang boleh diterima FROM dba_tab_privs WHERE grantee IN (& user_role) ORDER BY grantee, owner || '.' || table_name, privilege;

Kedua-duanya akan memberitahu anda jika pengguna yang berkenaan mempunyai keistimewaan yang betul untuk menjalankan arahan tersebut. Jika pengguna mempunyai keistimewaan yang betul, teruskan ke seterusnya. Sekiranya pengguna tidak mempunyai keistimewaan yang betul, beri mereka kepada mereka atau tanyakan kepada DB Admin untuk melakukannya.

Kesalahan ora-00942 juga boleh berlaku jika pengguna skema yang anda gunakan mempunyai keistimewaan INSERT tetapi bukan keistimewaan SELECT. Sekali lagi, periksa tahap keistimewaan dan tambahkan PILIH ke senarai atau tanyakan kepada DB Admin untuk melakukannya. Rupa-rupanya, keistimewaan SELECT tertentu harus diberikan kepada setiap skema jika tidak, anda masih akan melihat kesalahan ora-00942.

Jadual atau pandangan tidak semestinya wujud

Penyebab ralat ora-00942 ini boleh disebabkan oleh sintaks pertanyaan yang salah atau jika jadual tidak wujud. Walaupun ini seolah-olah menjadi tempat pertama yang logik, saya yakin bahawa keistimewaan pengguna adalah punca kesilapan nombor satu. Jadual tidak berada di sana atau sintaks jadual yang salah digunakan.

Untuk memeriksa sama ada jadual ada, periksa terlebih dahulu sintaks pertanyaan. Sekiranya sintaks betul, jalankan pertanyaan ini.

SELECT owner, object_name, object_type FROM all_objects WHERE object_type IN ('TABLE', 'VIEW') AND object_name = 'YOUR_TABLE_NAME';

Pada baris terakhir, masukkan nama jadual sebenar di mana anda melihat 'YOUR_TABLE_NAME'. Ini sepatutnya memberitahu anda sama ada jadual yang anda cuba untuk pertanyaan ada atau tidak. Jika ia kembali tanpa jadual, jadual yang anda tanyakan tidak wujud dalam skema atau pangkalan data.

Sekiranya sistem yang anda gunakan mempunyai menu Jadual, anda boleh memeriksa meja secara manual jika anda lebih suka tetapi pertanyaan di atas mendapat kerja yang dilakukan.

Jadual atau paparan adalah dalam skema yang berbeza

Sekiranya pengguna mempunyai keistimewaan dan jadual ada dan anda masih melihat kesilapan ora-00942, ia mungkin turun ke skema. Jika anda menguruskan pelbagai skema, mudah untuk menjalankan pertanyaan terhadap skema yang bukan milik anda. Apabila anda sibuk dan menentangnya, ia adalah ralat yang mudah dibuat.

Semak skema secara manual jika anda boleh atau tambahkan nama skema dalam baris FROM pertanyaan anda. Jika anda tidak mempunyai keistimewaan yang betul untuk skema baru, anda akan melihat ralat ora-00942 sekali lagi. Kembali ke pembaikan hak istimewa pengguna pertama dan periksa skema sepadan atau dapatkan DBA untuk melakukannya untuk anda.

Seperti yang disebutkan di atas, saya berunding dengan buddy Oracle DBA saya untuk sekeping ini jadi semua kredit kepadanya untuk kerja keras. Jika anda mendapati apa-apa kesilapan atau ketinggalan di sini, mereka adalah saya sendiri. Beritahu saya di bahagian komen jika saya terlepas apa-apa atau mendapat salah dan saya akan membetulkannya.

Sekiranya anda tahu cara lain untuk membetulkan ralat ora-00942, beritahu kami tentang perkara ini!

Bagaimana untuk membaiki ralat ora-00942