Do pohledu nelze přidat podmínku not null nebo check; viz toto a na stejné stránce „Omezení omezení NOT NULL“ a „Omezení kontrolních omezení“. Můžete přidat with check option
(proti nadbytečné klauzuli where) do zobrazení, ale to nebude označeno jako not null
v datovém slovníku.
Jediný způsob, jak dosáhnout tohoto efektu, je, pokud jste na 11g, přidat hodnotu cast jako virtuální sloupec do tabulky a (pokud je to stále potřeba) vytvořit pohled proti tomu:
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
Vzhledem k tomu, že jste v komentáři na dba.se řekli, že jde o zesměšňování něčeho, můžete k simulaci virtuálního sloupce použít normální sloupec a spouštěč:
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
A desc "MyView"
stále dává:
Name Null? Type
----------------------------------------- -------- ----------------------------
MyColumn NOT NULL BINARY_DOUBLE
Jak zmínil Leigh (také na dba.se), pokud byste chtěli vložit/aktualizovat pohled, můžete použít instead of
spouště, s VC nebo falešnou verzí.