10g以降、DROP TABLEステートメントを発行しても、Oracleはテーブルをすぐに削除しません。代わりに、次のように名前を変更しますBIN$IN1vjtqhTEKcWfn9PshHYg==$0
そしてそれらをごみ箱に入れます。これにより、削除するつもりがなかったテーブルを回復できます。 詳細a> 。
ごみ箱内のテーブルは引き続きテーブルであるため、ALL_TABLESおよび同様のビューに表示されます。したがって、ライブ(ドロップされていない)テーブルのみに関連するコメントのみを表示する場合は、テーブル名でフィルタリングする必要があります:
select * from all_tab_comments
where substr(table_name,1,4) != 'BIN$'
/
あなたが正しい、それは信じられないでしょう。そこで、ドキュメントを確認したところ、Oracle10gがUSER_/ ALL_/DBA_TABLESビューにDROPPEDという列を追加したことがわかりました。
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'
/
ドキュメントを確認してください 。明らかに、ALL_TABLESビューに参加する必要があるため、名前をフィルタリングするよりも多くの入力が必要になるため、必要に応じて、元のWHERE句を保持する方が簡単な場合があります。