Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie bekomme ich Tabellenkommentare über SQL in Oracle?

Seit 10g löscht Oracle Tabellen nicht sofort, wenn wir eine DROP TABLE-Anweisung ausgeben. Stattdessen werden sie wie folgt umbenannt BIN$IN1vjtqhTEKcWfn9PshHYg==$0 und wirft sie in den Papierkorb. Dadurch können wir Tabellen wiederherstellen, die wir nicht löschen wollten. Erfahren Sie mehr .

Tabellen im Papierkorb sind immer noch Tabellen, sodass sie in ALL_TABLES und ähnlichen Ansichten angezeigt werden. Wenn Sie also nur Kommentare sehen möchten, die sich nur auf aktive (nicht gelöschte) Tabellen beziehen, müssen Sie nach Tabellennamen filtern:

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

Du hast recht, es wäre unglaublich. Also habe ich die Dokumentation überprüft, es stellt sich heraus, dass Oracle 10g eine Spalte namens DROPPED zu den Ansichten USER_/ALL_/DBA_TABLES hinzugefügt hat.

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'
/

Sehen Sie sich die Dokumentation . Offensichtlich erfordert die Notwendigkeit, der ALL_TABLES-Ansicht beizutreten, mehr Eingaben als das Filtern nach dem Namen, daher könnte es je nach Bedarf einfacher sein, die ursprüngliche WHERE-Klausel beizubehalten.