Tôi đang cố gắng để điền vào cho một đồng nghiệp trong việc làm một số công việc Oracle, và chạy vào một snag. Khi cố gắng viết kịch bản để sửa đổi cột thành giá trị rỗng, tôi gặp phải lỗi ORA-01451 đáng yêu:MODIFY COLUMN trong oracle - Làm thế nào để kiểm tra xem một cột là nullable trước khi thiết lập để nullable?
ORA-01451: column to be modified to NULL cannot be modified to NULL
Điều này xảy ra vì cột đã là NULL. Chúng tôi có một số cơ sở dữ liệu cần phải được nâng cấp, vì vậy trong giả định bị lỗi của tôi, tôi đã thiết lập nó thành NULL sẽ hoạt động trên bảng để đảm bảo mọi người được cập nhật, bất kể họ đã đặt cột này thành giá trị có thể vô hiệu hay không. Tuy nhiên, điều này dường như gây ra lỗi cho một số người đã có cột là nullable.
Làm cách nào để kiểm tra xem cột có được vô hiệu hóa để tránh lỗi không? Cái gì đó sẽ thực hiện ý tưởng này:
IF(MyTable.MyColumn IS NOT NULLABLE)
ALTER TABLE MyTable MODIFY(MyColumn NULL);
Cảm ơn bạn Tony! Tôi đã làm việc này (với một sửa chữa nhỏ để đóng báo giá trên thực hiện ngay lập tức) và chúng tôi bây giờ trong kinh doanh! –
Tôi khuyên bạn nên truy vấn từ điển dữ liệu mỗi khi bạn chạy ALTER TABLE này sẽ khá kém hiệu quả, so với chỉ xử lý ngoại lệ nếu nó xảy ra. –
Jeffrey, bạn có thể là chính xác, nhưng điều này là cho một kịch bản thay đổi giản đồ vì vậy nó là một tình huống chạy một lần cho mỗi cơ sở dữ liệu. Khi thay đổi đã được thực hiện, nó sẽ không chạy lại. –