Sie können einer Ansicht keine Not-Null- oder Check-Einschränkung hinzufügen; siehe diese und auf derselben Seite 'Einschränkungen für NOT NULL Constraints' und 'Restrictions on Check Constraints'. Sie können einen with check option
hinzufügen (gegen eine redundante where-Klausel) in die Ansicht, aber das wird nicht als not null
markiert im Datenwörterbuch.
Der einzige Weg, den ich mir vorstellen kann, um diesen Effekt zu erzielen, besteht darin, wenn Sie auf 11g sind, den Cast-Wert als virtuelle Spalte auf der Tabelle hinzuzufügen und (falls noch benötigt) die Ansicht dagegen zu erstellen:
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
Da Sie in einem Kommentar auf dba.se sagten, dass dies dazu dient, etwas zu verspotten, könnten Sie eine normale Spalte und einen Trigger verwenden, um die virtuelle Spalte zu simulieren:
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
Und desc "MyView"
ergibt noch:
Name Null? Type
----------------------------------------- -------- ----------------------------
MyColumn NOT NULL BINARY_DOUBLE
Wie Leigh erwähnte (auch auf dba.se), wenn Sie die Ansicht einfügen/aktualisieren wollten, könnten Sie einen instead of
verwenden auslösen, mit der VC- oder gefälschten Version.