Bạn không thể thêm ràng buộc not null hoặc check vào một dạng xem; xem phần này và trên cùng trang 'Hạn chế về Ràng buộc KHÔNG ĐẦY ĐỦ' và 'Hạn chế về Ràng buộc Kiểm tra'. Bạn có thể thêm with check option
(đối với mệnh đề where dư thừa) đối với dạng xem nhưng nó sẽ không được đánh dấu là not null
trong từ điển dữ liệu.
Cách duy nhất tôi có thể nghĩ để có được hiệu ứng này là, nếu bạn đang ở 11g, hãy thêm giá trị truyền dưới dạng một cột ảo trên bảng và (nếu nó vẫn cần thiết) tạo chế độ xem dựa trên điều đó:
ALTER TABLE "MyTable" ADD "MyBDColumn" AS
(CAST("MyColumn" AS BINARY_DOUBLE)) NOT NULL;
CREATE OR REPLACE VIEW "MyView" AS
SELECT
"MyBDColumn" AS "MyColumn"
FROM "MyTable";
desc "MyView"
Name Null? Type
----------------------------------------- -------- ----------------------------
MyColumn NOT NULL BINARY_DOUBLE
Vì bạn đã nói trong một nhận xét trên dba.se rằng đây là để chế nhạo một cái gì đó, bạn có thể sử dụng cột bình thường và một trình kích hoạt để mô phỏng cột ảo:
CREATE TABLE "MyTable"
(
"MyColumn" NUMBER NOT NULL,
"MyBDColumn" BINARY_DOUBLE NOT NULL
);
CREATE TRIGGER "MyTrigger" before update or insert on "MyTable"
FOR EACH ROW
BEGIN
:new."MyBDColumn" := :new."MyColumn";
END;
/
CREATE VIEW "MyView" AS
SELECT
"MyBDColumn" AS "MyColumn"
FROM "MyTable";
INSERT INTO "MyTable" ("MyColumn") values (2);
SELECT * FROM "MyView";
MyColumn
----------
2.0E+000
Và desc "MyView"
vẫn cho:
Name Null? Type
----------------------------------------- -------- ----------------------------
MyColumn NOT NULL BINARY_DOUBLE
Như Leigh đã đề cập (cũng trên dba.se), nếu bạn muốn chèn / cập nhật chế độ xem, bạn có thể sử dụng instead of
kích hoạt, với VC hoặc phiên bản giả mạo.