Ponieważ 10g Oracle nie usuwa natychmiast tabel, gdy wydajemy instrukcję DROP TABLE. Zamiast tego zmienia ich nazwy w następujący sposób BIN$IN1vjtqhTEKcWfn9PshHYg==$0
i wkłada je do kosza. To pozwala nam odzyskać tabele, których nie chcieliśmy usunąć. Dowiedz się więcej
.
Tabele w koszu nadal są tabelami, więc pojawiają się w widokach ALL_TABLES i podobnych. Więc jeśli chcesz zobaczyć tylko komentarze odnoszące się tylko do żywych (nieupuszczonych) tabel, musisz filtrować według nazwy tabeli:
select * from all_tab_comments
where substr(table_name,1,4) != 'BIN$'
/
Masz rację, to byłoby niesamowite. Sprawdziłem więc dokumentację i okazało się, że Oracle 10g dodał kolumnę o nazwie DROPPED do widoków 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'
/
Zapoznaj się z dokumentacją . Oczywiście potrzeba dołączenia do widoku ALL_TABLES wymaga więcej wpisywania niż filtrowania według nazwy, więc w zależności od naszych potrzeb może być po prostu łatwiej zachować oryginalną klauzulę WHERE.