Langkah pertama dalam mendiagnosis masalah saat membuat tampilan adalah mencoba select bagian tersendiri. Dalam hal ini Anda masih akan mendapatkan kesalahan ORA-00942, tetapi masalahnya sekarang hanya masalah kueri dan akses dan tidak berkaitan dengan tampilan secara khusus.
Saat Anda mendapatkan ORA-00942:tabel atau tampilan tidak ada , itu karena:
-
Nama tabel atau tampilan yang Anda ketik benar-benar tidak ada.
-
Periksa ejaannya - mungkin ada kesalahan ketik.
-
Apakah Anda terhubung ke database yang ada? Mungkin Anda menggunakan sistem pengujian yang tidak memilikinya.
-
Kueri
dba_objectsuntuk melihat apakah tabel ada di skema lain. (Jika Anda tidak memiliki hak istimewa untuk menanyakan dba_objects,all_objectsdaftar semua yang Anda memiliki izin untuk melihat, yang mungkin bisa membantu.)
-
-
Ini benar-benar ada, tetapi dalam skema lain.
Dalam hal ini, ada dua kemungkinan masalah:-
Anda tidak memiliki izin untuk menanyakannya. Pemilik tabel harus
grant read on xyz(ganti nama tabel sebenarnya untukxyz) ke salah satu-
kamu
-
public(jika Anda ingin semua orang dapat melihat data, tidak selalu disarankan) -
peran yang Anda miliki (tetapi peran tidak digunakan oleh PL/SQL yang disimpan atau tampilan , jadi mungkin saja Anda dapat membuat kueri tabel dalam skema lain berkat peran yang Anda miliki, namun tetap tidak dapat membuat tampilan atau prosedur yang menggunakannya.)
-
-
Anda perlu menentukan skema. Katakanlah Anda ingin menanyakan
REGIONStabel diHRtetapi Anda terhubung sebagaiSCOTT. Jika Anda hanyaselect * from regionsitu akan mencariSCOTT.REGIONS, yang tidak ada. Untuk memperbaikinya, lakukan salah satu hal berikut:-
gunakan
hr.regionssecara eksplisit dalam kueri Anda. -
dalam skema Anda,
create or replace synonym regions for hr.regions;
Sekarang setiap kali Anda merujuk keregions, database akan secara otomatis dialihkan kehr.regions. -
dalam skema apa pun dengan izin untuk membuat sinonim publik:
create or replace public synonym regions for hr.regions;
Sekarang semua orang yang terhubung ke database akan memiliki referensi keregionsdialihkan kehr.regions, yang tidak selalu merupakan ide yang baik, tetapi tetap merupakan salah satu opsi. -
alter session set current_schema = hr;
Sekarang skema default untuk menyelesaikan nama objek adalahHRdan bukan yang Anda masuki. Untuk aplikasi yang selalu masuk sebagai pengguna yang berbeda dari yang memiliki tabel, Anda dapat membuat setelah pemicu masuk jadi ini selalu diatur. Kemudian mereka bisa merujuk keregionsdll tanpa perlu menentukan skema apa pun dan tanpa sinonim apa pun.
-
-