U kunt geen niet-null- of controlebeperking aan een weergave toevoegen; zie dit en op dezelfde pagina 'Beperkingen op NOT NULL Constraints' en 'Beperkingen op Check Constraints'. U kunt een with check option
(tegen een overbodige waar-clausule) aan de weergave, maar die wordt niet gemarkeerd als not null
in de datadictionary.
De enige manier die ik kan bedenken om dit effect te krijgen, is, als je 11g gebruikt, om de cast-waarde als een virtuele kolom op de tafel toe te voegen, en (als het nog steeds nodig is) de weergave daartegenover te creëren:
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
Aangezien je in een opmerking op dba.se zei dat dit bedoeld is om iets te bespotten, zou je een normale kolom en een trigger kunnen gebruiken om de virtuele kolom te simuleren:
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
En desc "MyView"
geeft nog steeds:
Name Null? Type
----------------------------------------- -------- ----------------------------
MyColumn NOT NULL BINARY_DOUBLE
Zoals Leigh al zei (ook op dba.se), als u de weergave wilt invoegen/bijwerken, kunt u een instead of
gebruiken trigger, met de VC of nepversie.