Come trovo un oggetto che non sembra esistere nella tabella degli oggetti?


11

Ho un oggetto chiamato cot_ntn_pi_v. Mi è stato detto che questo era un sinonimo. Non appare nella tabella all_synonies. Sembra una vista o una tabella ma non riesco a trovarla nella tabella di tutti gli oggetti. Posso selezionarlo, ma non posso rilasciarlo poiché "non esiste" e non posso creare una nuova tabella con lo stesso nome di "il nome è già utilizzato da un altro oggetto".

Sto impazzendo o sto facendo qualcosa di veramente stupido?


1
Se non si dispone delle autorizzazioni per l'elemento, potrebbe non essere visualizzato nelle tabelle ALL_ *. Potrebbe essere necessario un accesso amministrativo e consultare le tabelle del dizionario dati DBA_ *.
ConcernedOfTunbridgeWells

Risposte:


11

I tipi di oggetto nello stesso spazio dei nomi di una tabella sono:

  • Procedure autonome
  • Funzioni memorizzate autonome
  • Pacchi
  • Tipi definiti dall'utente
  • sequenze
  • Visualizzazioni
  • Sinonimi privati
  • Viste materializzate

Pertanto è probabilmente uno di quei tipi. Se puoi selezionarlo, esclude i primi cinque lasciandoli come tabella, vista, sinonimo privato o vista materializzata.

Quando hai effettuato la ricerca, all_objectsecc., Hai usato le maiuscole? Per esempio,

select *
  from ALL_OBJECTS
 where OBJECT_NAME = 'COT_NTN_PI_V'; 

Se usi uno strumento come SQL Developer o Toad puoi lasciarlo descrivere l'oggetto per te. Evidenzia il nome nello strumento e premi Shift-F4in Sviluppatore o F4in Rospo. Toad fornisce molte descrizioni sull'oggetto mentre Developer, nella scheda Dettagli, avrà una riga con TABLE_NAMEo MVIEW_NAMEal suo interno e che ti mostrerà di cosa si tratta.

Una volta che sai cos'è, allora sarà più facile sapere come lasciarlo cadere.


Sì, usando sql developer e shift + f4 sono stato in grado di scoprire di cosa avevo bisogno! Grazie :)
BON

4

Potresti non essere in grado di vedere l'oggetto nelle tabelle ALL_% se non hai alcuna concessione sull'oggetto stesso, quindi controlla nella tabella DBA_OBJECTS (per fare ciò avrai bisogno di sovvenzioni / un utente concesso in modo appropriato):

select * 
from DBA_OBJECTS
where object_name = 'COT_NTN_PI_V';

Se ciò non produce alcun output, è possibile controllare nelle tabelle del dizionario dei dati Oracle non elaborate con questa query:

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';
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.