Не можете да добавите ограничение non null или check към изглед; вижте това и на същата страница „Ограничения за ограничения НЕ NULL“ и „Ограничения за ограничения за проверка“. Можете да добавите with check option
(срещу излишна клауза where) към изгледа, но това няма да бъде маркирано като not null
в речника на данните.
Единственият начин, по който мисля да получа този ефект, е, ако сте на 11g, да добавите стойността за прехвърляне като виртуална колона в таблицата и (ако все още е необходима) да създадете изгледа срещу това:
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
Тъй като казахте в коментар на dba.se, че това е за имитиране на нещо, можете да използвате нормална колона и тригер, за да симулирате виртуалната колона:
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
И desc "MyView"
все още дава:
Name Null? Type
----------------------------------------- -------- ----------------------------
MyColumn NOT NULL BINARY_DOUBLE
Както Лий спомена (също на dba.se), ако искате да вмъкнете/актуализирате изгледа, можете да използвате instead of
тригер, с VC или фалшива версия.