Comment trouver un objet qui ne semble pas exister dans la table des objets?


11

J'ai un objet appelé cot_ntn_pi_v. On m'a dit que c'était un synonyme. Il n'apparaît pas dans la table all_synonym. Cela ressemble à une vue ou une table mais je ne la trouve pas dans la table tous les objets. Je peux le sélectionner, mais je ne peux pas le supprimer car il «n'existe pas» et je ne peux pas créer une nouvelle table avec le même nom que «le nom est déjà utilisé par un autre objet».

Suis-je en train de devenir fou ou de faire quelque chose de vraiment stupide?


1
Si vous ne disposez pas des autorisations sur l'élément, il peut ne pas s'afficher dans les tables ALL_ *. Vous aurez peut-être besoin d'une connexion administrative et consultez les tables du dictionnaire de données DBA_ *.
ConcernedOfTunbridgeWells

Réponses:


11

Les types d'objets dans le même espace de noms qu'une table sont:

  • Procédures autonomes
  • Fonctions stockées autonomes
  • Paquets
  • Types définis par l'utilisateur
  • Les séquences
  • Vues
  • Synonymes privés
  • Vues matérialisées

C'est donc probablement l'un de ces types. Si vous pouvez le sélectionner, il exclut les cinq premiers, en le laissant soit une table, une vue, un synonyme privé ou une vue matérialisée.

Lorsque vous avez cherché, all_objectsetc., vous avez utilisé des majuscules? Par exemple,

select *
  from ALL_OBJECTS
 where OBJECT_NAME = 'COT_NTN_PI_V'; 

Si vous utilisez un outil comme SQL Developer ou Toad, vous pouvez le laisser décrire l'objet pour vous. Mettez en surbrillance le nom dans l'outil et appuyez sur Shift-F4dans Developer ou F4dans Toad. Toad fournit beaucoup de description sur l'objet tandis que Developer, dans l'onglet Détails, aura une ligne avec TABLE_NAMEou MVIEW_NAMEdedans et cela vous montrera de quoi il s'agit.

Une fois que vous savez ce que c'est, il sera plus facile de savoir comment le déposer.


Oui, en utilisant sql developer et shift + f4, j'ai pu trouver ce dont j'avais besoin! Merci :)
BON

4

Vous ne pourrez peut-être pas voir l'objet dans les tables ALL_% si vous ne disposez d'aucune autorisation sur l'objet lui-même.

select * 
from DBA_OBJECTS
where object_name = 'COT_NTN_PI_V';

Si cela ne produit aucune sortie, vous pouvez archiver les tables du dictionnaire de données Oracle brutes avec cette requête:

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';
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.