Sử dụng SQL động điều khiển từ điển dữ liệu.
begin
for trec in ( select table_name
from user_tables
where table_name like 'PREFIX\_%' escape `\' )
loop
dbms_output.put_line('dropping table ' || trec.table_name);
execute immediate 'drop table '||trec.table_name;
end loop;
end;
Đó là một ý tưởng hay để chính xác với mệnh đề LIKE; sử dụng escape
từ khóa để đảm bảo dấu gạch dưới không được coi là ký tự đại diện. Hoặc sử dụng substr(table_name, 1, 7) = 'PREFIX_'
.
Bỏ nhầm bảng không phải là một thảm họa miễn là bạn đang làm việc từ 10g trở lên và BIN RECYCLE được bật , nhưng vẫn tốt hơn là không nên. Rõ ràng là bạn sẽ không chạy mã như thế này trong Sản xuất, nhưng bạn sẽ sử dụng nguyên tắc để tạo một tập lệnh của các câu lệnh thả.
Đoạn mã trên không xử lý các phần phụ thuộc. Nếu bạn có khóa ngoại tham chiếu đến các bảng có tiền tố và bạn muốn buộc bỏ bảng, hãy sử dụng logic bổ sung này:
execute immediate 'drop table '|| trec.table_name ||' cascade constraint';
Điều này loại bỏ các ràng buộc khóa ngoại nhưng để lại các bảng phụ thuộc (trước đây).