Đây là một lỗi của Oracle.
Nó được kích hoạt bằng cách thêm một cột có cả NOT NULL
ràng buộc và một DEFAULT
giá trị của một bảng hiện có.
Để thêm cột một cách nhanh chóng, Oracle 11g lưu trữ giá trị mặc định trong từ điển dữ liệu. Oracle gọi đây là "tối ưu hóa thêm cột".
Điều này nhanh hơn so với việc viết ra giá trị mặc định vào mỗi hàng của bảng. Sau đó, công cụ truy vấn phải thay thế bất kỳ NULL nào trong hàng bảng bằng giá trị mặc định từ từ điển dữ liệu. Thật không may, có một số lỗi liên quan đến điều này. Của bạn dường như là một ví dụ của:
Bạn có thể kiểm tra xem những cột nào đã được thêm vào như thế này:
select owner, object_name, name
from dba_objects, col$
where bitand(col$.PROPERTY,1073741824)=1073741824
and object_id=obj#;
Trong trường hợp của chúng tôi, chúng tôi đã bị cắn bởi một lỗi khác trả lại kết quả không chính xác cho SELECT FOR UPDATE
.
Chúng tôi đặt tham số _add_col_optim_enabled=FALSE
để tắt "tối ưu hóa" này. Ngoài ra, bạn có thể nâng cấp lên phiên bản Oracle mới hơn, nơi các lỗi này đã được giải quyết.
Nâng cấp hoặc thiết lập thông số trên sẽ không sửa được bảng hiện có của bạn, bảng này bị hỏng. Bạn phải tạo lại bảng đó.