it-swarm.com.de

Wie finde ich ein Objekt, das in der Objekttabelle nicht vorhanden zu sein scheint?

Ich habe ein Objekt namens cot_ntn_pi_v. Mir wurde gesagt, dies sei ein Synonym. Es wird nicht in der Tabelle all_synonyms angezeigt. Es sieht aus wie eine Ansicht oder Tabelle, aber ich kann sie nicht in der Tabelle mit allen Objekten finden. Ich kann daraus auswählen, aber ich kann es nicht löschen, da es "nicht existiert" und ich kann keine neue Tabelle mit demselben Namen wie "Der Name wird bereits von einem anderen Objekt verwendet" erstellen.

Werde ich verrückt oder mache ich etwas wirklich Dummes?

11
BON

Objekttypen im selben Namespace wie eine Tabelle sind:

  • Eigenständige Verfahren
  • Eigenständig gespeicherte Funktionen
  • Pakete
  • Benutzerdefinierte Typen
  • Sequenzen
  • Ansichten
  • Private Synonyme
  • Materialisierte Ansichten

Daher ist es wahrscheinlich einer dieser Typen. Wenn Sie daraus auswählen können, werden die ersten fünf ausgeschlossen, sodass es sich entweder um eine Tabelle, eine Ansicht, ein privates Synonym oder eine materialisierte Ansicht handelt.

Bei der Suche in all_objects Usw. haben Sie Großbuchstaben verwendet? Zum Beispiel,

select *
  from ALL_OBJECTS
 where OBJECT_NAME = 'COT_NTN_PI_V'; 

Wenn Sie ein Tool wie SQL Developer oder Toad verwenden, können Sie das Objekt für sich beschreiben lassen. Markieren Sie den Namen im Tool und drücken Sie Shift-F4 In Developer oder F4 In Toad. Toad bietet eine ausführliche Beschreibung des Objekts, während Developer auf der Registerkarte Details eine Zeile mit TABLE_NAME Oder MVIEW_NAME Enthält, die Ihnen zeigt, was es ist.

Sobald Sie wissen, was es ist, wird es einfacher, zu wissen, wie man es fallen lässt.

11
John Doyle

Möglicherweise können Sie das Objekt nicht in den ALL_% -Tabellen sehen, wenn Sie keine Berechtigungen für das Objekt selbst haben. Überprüfen Sie daher die Tabelle DBA_OBJECTS (dazu benötigen Sie Zuschüsse/einen entsprechend gewährten Benutzer):

select * 
from DBA_OBJECTS
where object_name = 'COT_NTN_PI_V';

Wenn dies keine Ausgabe erzeugt, können Sie die Oracle-Datenwörterbuchtabellen mit dieser Abfrage einchecken:

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ᵀᴹ