Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để loại bỏ danh sách bảng khỏi một lược đồ trong Oracle?

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).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo một thuộc tính mới trong cơ sở dữ liệu Oracle từ hai thuộc tính khác

  2. Làm thế nào để xử lý ngoại lệ và thực thi các câu lệnh còn lại?

  3. Sử dụng hàm trong mệnh đề where với tham số clob

  4. JdbcTemplate - Chèn hoặc cập nhật Oracle BLOB bằng SQL MERGE

  5. Trích xuất tổng số giây từ một kiểu dữ liệu khoảng thời gian