¿Cómo encuentro un objeto que no parece existir en la tabla de objetos?


11

Tengo un objeto llamado cot_ntn_pi_v. Me dijeron que esto era un sinónimo. No aparece en la tabla all_synónimos. Parece una vista o tabla, pero no puedo encontrarla en la tabla de todos los objetos. Puedo seleccionarlo, pero no puedo descartarlo porque "no existe" y no puedo crear una nueva tabla con el mismo nombre que "el nombre ya está siendo utilizado por otro objeto".

¿Me estoy volviendo loco o estoy haciendo algo realmente estúpido?


1
Si no tiene permisos sobre el elemento, es posible que no se muestre en las tablas ALL_ *. Es posible que necesite un inicio de sesión administrativo y busque en las tablas del diccionario de datos DBA_ *.
Preocupado por

Respuestas:


11

Los tipos de objetos en el mismo espacio de nombres que una tabla son:

  • Procedimientos independientes
  • Funciones almacenadas independientes
  • Paquetes
  • Tipos definidos por el usuario
  • Secuencias
  • Puntos de vista
  • Sinónimos privados
  • Vistas materializadas

Por lo tanto, es probablemente uno de esos tipos. Si puede seleccionarlo, descarta los primeros cinco, dejándolo como una tabla, vista, sinónimo privado o vista materializada.

Cuando buscaste en all_objectsetc. ¿usaste mayúsculas? Por ejemplo,

select *
  from ALL_OBJECTS
 where OBJECT_NAME = 'COT_NTN_PI_V'; 

Si usa alguna herramienta como SQL Developer o Toad, puede dejar que describa el objeto por usted. Resalte el nombre en la herramienta y presione Shift-F4Desarrollador o F4Sapo. Toad proporciona una gran cantidad de descripción sobre el objeto, mientras que el Desarrollador, en la pestaña Detalles, tendrá una fila con él TABLE_NAMEo MVIEW_NAMEdentro y eso le mostrará de qué se trata.

Una vez que sepa qué es, será más fácil saber cómo soltarlo.


Sí, usando sql developer y shift + f4 pude encontrar lo que necesitaba. Gracias :)
BON

4

Es posible que no pueda ver el objeto en las tablas ALL_% si no tiene ninguna concesión en el objeto en sí, así que verifique en la tabla DBA_OBJECTS (necesitará concesiones / un usuario debidamente otorgado para hacer esto):

select * 
from DBA_OBJECTS
where object_name = 'COT_NTN_PI_V';

Si eso no produce ningún resultado, puede consultar las tablas del diccionario de datos de Oracle sin procesar con esta consulta:

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';
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.