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_objects
untuk melihat apakah tabel ada di skema lain. (Jika Anda tidak memiliki hak istimewa untuk menanyakan dba_objects,all_objects
daftar 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
REGIONS
tabel diHR
tetapi Anda terhubung sebagaiSCOTT
. Jika Anda hanyaselect * from regions
itu akan mencariSCOTT.REGIONS
, yang tidak ada. Untuk memperbaikinya, lakukan salah satu hal berikut:-
gunakan
hr.regions
secara 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 keregions
dialihkan 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 adalahHR
dan 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 keregions
dll tanpa perlu menentukan skema apa pun dan tanpa sinonim apa pun.
-
-