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

11

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 erstellen wie "Der Name wird bereits von einem anderen Objekt verwendet".

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

BON
quelle
1
Wenn Sie keine Berechtigungen für das Element haben, wird es möglicherweise nicht in den ALL_ * -Tabellen angezeigt. Möglicherweise benötigen Sie eine Administratoranmeldung und sehen in den DBA_ * -Datenwörterbuchtabellen nach.
ConcernedOfTunbridgeWells

Antworten:

11

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 all_objectsusw. haben Sie Großbuchstaben verwendet? Beispielsweise,

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 klicken Sie Shift-F4in Developer oder F4in Toad. Toad bietet eine Vielzahl von Beschreibungen für das Objekt, während Developer auf der Registerkarte Details eine Zeile mit TABLE_NAMEoder MVIEW_NAMEdarin 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.

John Doyle
quelle
Ja, mit SQL Developer und Shift + F4 konnte ich herausfinden, was ich brauchte! Danke :)
BON
4

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