Tôi có một cơ sở dữ liệu có ràng buộc NOT NULL trên một trường và tôi muốn loại bỏ ràng buộc này. Yếu tố phức tạp là ràng buộc này có tên do hệ thống xác định và tên của ràng buộc đó khác nhau giữa máy chủ sản xuất, máy chủ tích hợp và các cơ sở dữ liệu nhà phát triển khác nhau. Quy trình hiện tại của chúng tôi là kiểm tra các tập lệnh thay đổi và một tác vụ tự động thực thi các truy vấn thích hợp thông qua sqlplus đối với cơ sở dữ liệu đích, vì vậy tôi muốn một giải pháp có thể được gửi thẳng vào sqlplus.
Trên cơ sở dữ liệu của riêng tôi, SQL để loại bỏ điều này sẽ là:
alter table MYTABLE drop constraint SYS_C0044566
Tôi có thể thấy hạn chế khi truy vấn all_constraints
chế độ xem:
select * from all_constraints where table_name = 'MYTABLE'
nhưng tôi không chắc chắn làm thế nào để làm việc với các SEARCH_CONDITION
's LONG
kiểu dữ liệu hoặc làm thế nào tốt nhất để tự động xóa các hạn chế nhìn lên ngay cả sau khi tôi biết tên của nó.
Vì vậy, làm thế nào tôi có thể tạo một kịch bản thay đổi có thể loại bỏ ràng buộc này dựa trên những gì nó là gì, thay vì tên của nó là gì?
CHỈNH SỬA: Câu trả lời của @ Allan là một câu trả lời hay, nhưng tôi lo ngại (do tôi không có kiến thức chuyên môn về Oracle) rằng có thể không hoàn toàn đúng khi bất kỳ ràng buộc nào có thể có tên do hệ thống tạo ra sẽ liên quan đến nó để loại bỏ ràng buộc mà không cần phải biết tên của nó. Có đúng là sẽ luôn có cách để tránh phải biết tên của ràng buộc do hệ thống đặt tên khi loại bỏ ràng buộc đó một cách hợp lý không?