web-dev-qa-db-fra.com

Comment obtenir des commentaires de table via SQL dans Oracle?

J'ai essayé :

select * from user_tab_comments;

et il me renvoie 3 colonnes "TABLE_NAME", "TABLE_TYPE" et "COMMENTS", mais la colonne "TABLE_NAME" est comme "cryptée", j'ai besoin de noms de table clairs:

TABLE_NAME                      TABLE_TYPE  COMMENTS

BIN$IN1vjtqhTEKcWfn9PshHYg==$0  TABLE       Résultat d'intégration d'une photo numérisée
BIN$PUwG3lb3QoazOc4QaC1sjw==$0  TABLE       Motif de fin d'agrément de maître de stage

Lorsque j'utilise "select * from user_tables;" TABLE_NAME n'est pas "crypté".

18
Tristan

Depuis 10g, Oracle ne supprime pas immédiatement les tables lorsque nous émettons une instruction DROP TABLE. Au lieu de cela, il les renomme comme ceci BIN$IN1vjtqhTEKcWfn9PshHYg==$0 et les met dans la corbeille. Cela nous permet de récupérer des tables que nous ne voulions pas supprimer. En savoir plus .

Les tables de la corbeille sont toujours des tables, elles apparaissent donc dans TOUS_TABLES et dans des vues similaires. Donc, si vous ne souhaitez voir que les commentaires relatifs aux tables actives (non supprimées), vous devez filtrer par nom de table:

select * from all_tab_comments
where substr(table_name,1,4) != 'BIN$'
/

"Je ne peux pas croire qu'il n'y ait pas de colonne de drapeau, vous pouvez donc le faire et is_recycled = 0 ou quelque chose."

Tu as raison, ce serait incroyable. J'ai donc vérifié la documentation, il s'avère qu'Oracle 10g a ajouté une colonne appelée DROPPED aux vues USER_/ALL_/DBA_TABLES.

select tc.* 
from all_tab_comments tc
     join all_tables t
     on tc.owner = t.owner
     and tc.table_name = t.table_name
where t.dropped = 'NO'
/

Découvrez la documentation . De toute évidence, la nécessité de se joindre à la vue ALL_TABLES nécessite plus de saisie que de filtrage sur le nom, donc selon nos besoins, il pourrait être plus facile de conserver la clause WHERE d'origine.

22
APC

SELECT t.table_name, t.comments FROM USER_TAB_COMMENTS t WHERE TABLE_NAME = 'SS_DEPT';

0
Gank