理想的には、ソース管理と構成管理のベストプラクティスを使用して、スキーマを適切に維持する必要があります。このシナリオでは、スクリプトを実行するスキーマにこれらのテーブルが含まれているかどうかを事前に知っています。存在しないテーブルを削除しようとしないため、エラーは発生しません。
ただし、これが常に可能であるとは限りません。別のアプローチの1つは、2つのスクリプトを用意することです。最初のスクリプトには、DROP TABLEステートメントがあり、先頭にフレンドリーな
が付いています。PROMPT It is safe to ignore any ORA-00942 errors in the following statements
2番目のスクリプトにはすべてのCREATETABLEステートメントがあり、
で始まります。PROMPT All the statements in this script should succeed. So investigate any errors
別のオプションは、データディクショナリを使用することです:
begin
for r in ( select table_name from user_tables )
loop
execute immediate 'drop table '||r.table_name
||' cascade constraints';
end loop;
end;
これには注意してください。これは核のオプションであり、スキーマ内のすべてのテーブルを削除します。