Anda tidak dapat menambahkan batasan bukan nol atau memeriksa tampilan; lihat ini dan di halaman yang sama 'Pembatasan pada NOT NULL Constraints' dan 'Restrictions on Check Constraints'. Anda dapat menambahkan with check option
(terhadap klausa where yang berlebihan) ke tampilan tetapi itu tidak akan ditandai sebagai not null
dalam kamus data.
Satu-satunya cara yang saya pikirkan untuk mendapatkan efek ini adalah, jika Anda menggunakan 11g, tambahkan nilai pemeran sebagai kolom virtual di atas meja, dan (jika masih diperlukan) buat tampilan yang bertentangan dengan itu:
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
Karena Anda mengatakan dalam komentar di dba.se bahwa ini untuk mengejek sesuatu, Anda dapat menggunakan kolom normal dan pemicu untuk mensimulasikan kolom virtual:
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
Dan desc "MyView"
masih memberikan:
Name Null? Type
----------------------------------------- -------- ----------------------------
MyColumn NOT NULL BINARY_DOUBLE
Seperti yang disebutkan Leigh (juga di dba.se), jika Anda memang ingin menyisipkan/memperbarui tampilan, Anda dapat menggunakan instead of
pemicu, dengan VC atau versi palsu.