it-swarm.asia

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

Saya memiliki objek bernama 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?

11
BON

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_objects dll. 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-F4 dalam Pengembang atau F4 dalam Toad. Toad memberikan banyak deskripsi tentang objek tersebut sementara Pengembang, pada tab Detail, akan memiliki baris dengan TABLE_NAME atau MVIEW_NAME di dalamnya dan itu akan menunjukkan kepada Anda apa itu.

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

11
John Doyle

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 memerlukan 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';
4
Philᵀᴹ