Bagaimana cara menemukan objek yang sepertinya tidak ada di tabel objek?

11

Saya memiliki objek yang disebut cot_ntn_pi_v. Saya diberitahu ini adalah sinonim. Itu tidak muncul di tabel all_synonim. Itu terlihat seperti tampilan atau tabel tetapi saya tidak dapat menemukannya di tabel semua objek. Saya dapat memilih dari itu, tetapi saya tidak bisa menjatuhkannya karena 'tidak ada' dan saya tidak bisa membuat tabel baru dengan nama yang sama dengan 'nama sudah digunakan oleh objek lain.'

Apakah saya menjadi gila atau melakukan sesuatu yang benar-benar bodoh?

BON
sumber
1
Jika Anda tidak memiliki izin pada item tersebut, item itu mungkin tidak ditampilkan di tabel ALL_ *. Anda mungkin memerlukan login administratif dan lihat di tabel kamus data DBA_ *.
ConcernedOfTunbridgeWells

Jawaban:

11

Jenis objek dalam namespace yang sama dengan tabel adalah:

  • Prosedur yang berdiri sendiri
  • Fungsi tersimpan yang berdiri sendiri
  • Paket
  • Jenis yang ditentukan pengguna
  • Urutan
  • Tampilan
  • Sinonim Pribadi
  • Pandangan Terwujud

Karena itu mungkin salah satu dari jenis-jenis itu. Jika Anda dapat memilih dari itu maka itu mengesampingkan lima pertama meninggalkannya baik berupa tabel, tampilan, sinonim pribadi atau tampilan terwujud.

Ketika Anda mencari di all_objectsdll Anda menggunakan huruf besar? Sebagai contoh,

select *
  from ALL_OBJECTS
 where OBJECT_NAME = 'COT_NTN_PI_V'; 

Jika Anda menggunakan beberapa alat seperti SQL Developer atau Toad, Anda dapat membiarkannya mendeskripsikan objek untuk Anda. Sorot nama dalam alat dan tekan Shift-F4di Pengembang atau F4di Toad. Toad menyediakan banyak deskripsi tentang objek tersebut sementara Pengembang, di tab Detail, akan memiliki baris dengan TABLE_NAMEatau MVIEW_NAMEdi dalamnya dan itu akan menunjukkan kepada Anda apa itu.

Setelah Anda tahu apa itu maka akan membuatnya lebih mudah untuk mengetahui cara menjatuhkannya.

John Doyle
sumber
Ya menggunakan pengembang sql dan shift + f4 Saya dapat menemukan apa yang saya butuhkan! Terima kasih :)
BON
4

Anda mungkin tidak dapat melihat objek di tabel ALL_% jika Anda tidak memiliki hibah pada objek itu sendiri, jadi periksa di tabel DBA_OBJECTS (Anda akan membutuhkan hibah / pengguna yang diberikan secara tepat untuk melakukan ini):

select * 
from DBA_OBJECTS
where object_name = 'COT_NTN_PI_V';

Jika itu tidak menghasilkan output apa pun, Anda dapat memeriksa di tabel kamus data Oracle mentah dengan permintaan ini:

select u.name as owner, o.name as object_name, 
 decode(o.type#, 0, 'NEXT OBJECT', 1, 'INDEX', 2, 'TABLE', 3, 'CLUSTER',
 4, 'VIEW', 5, 'SYNONYM', 6, 'SEQUENCE',
 7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE',
 11, 'PACKAGE BODY', 12, 'TRIGGER',
 13, 'TYPE', 14, 'TYPE BODY',
 19, 'TABLE PARTITION', 20, 'INDEX PARTITION', 21, 'LOB',
 22, 'LIBRARY', 23, 'DIRECTORY', 24, 'QUEUE',
 28, 'JAVA SOURCE', 29, 'JAVA CLASS', 30, 'JAVA RESOURCE',
 32, 'INDEXTYPE', 33, 'OPERATOR',
 34, 'TABLE SUBPARTITION', 35, 'INDEX SUBPARTITION',
 39, 'LOB PARTITION', 40, 'LOB SUBPARTITION',
 43, 'DIMENSION',
 44, 'CONTEXT', 47, 'RESOURCE PLAN',
 48, 'CONSUMER GROUP',
 51, 'SUBSCRIPTION', 52, 'LOCATION', 56, 'JAVA DATA', 'UNKNOWN') as type,
o.ctime, o.mtime,
 to_char(o.stime, 'YYYY-MM-DD:HH24:MI:SS'),
 decode(o.status, 0, 'N/A', 1, 'VALID', 'INVALID') as status
 from sys.obj$ o, sys.user$ u
 where o.owner# = u.user#
 and o.linkname is null
 and (o.type# not in (1 , 10) or
 (o.type# = 1 and 1 = (select 1
 from sys.ind$ i
 where i.obj# = o.obj#
 and i.type# in (1, 2, 3, 4, 6, 7, 9))))
 and o.name = 'COT_NTN_PI_V';
Philᵀᴹ
sumber