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 được hệ thống xác định và tên của ràng buộc này 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 kịch bản lệnh thay đổi và một nhiệm vụ tự động thực hiện các truy vấn thích hợp thông qua sqlplus so 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.Làm thế nào tôi có thể thả một ràng buộc "không null" trong Oracle khi tôi không biết tên của ràng buộc?
Mở cơ sở dữ liệu của riêng tôi, SQL để thả này sẽ là:
alter table MYTABLE drop constraint SYS_C0044566
tôi có thể thấy khó khăn khi tôi truy vấn all_constraints
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 loại dữ liệu LONG
của SEARCH_CONDITION
hoặc cách tốt nhất để tự động xóa ràng buộc tra cứu ngay cả sau khi tôi biết tên của nó.
Vì vậy, làm cách nào để tạo tập lệnh thay đổi có thể làm giảm ràng buộc này dựa trên đó là gì, thay vì tên của nó là gì?
EDIT: @ câu trả lời Allan là một tốt nhất, nhưng tôi quan tâm (trong tôi thiếu Oracle chuyên môn) mà nó có thể không phổ biến sự thật rằng bất kỳ khó khăn nào có thể có một cái tên hệ thống được tạo ra sẽ có liên kết với nó một cách để loại bỏ các 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 một hạn chế của hệ thống khi giảm một cách hợp lý ràng buộc đó?
Chỉ để thỏa mãn sự tò mò của bạn: Ràng buộc NOT NULL là loại hạn chế * duy nhất * trong Oracle mà bạn có thể loại bỏ mà không cần biết tên của ràng buộc. Tất cả các loại ràng buộc khác mà bạn cần phải biết tên của ràng buộc. –