Você não pode adicionar uma restrição não nula ou de verificação a uma exibição; veja isto e na mesma página 'Restrições em restrições NOT NULL' e 'Restrições em restrições de verificação'. Você pode adicionar um
with check option
(contra uma cláusula where redundante) para a exibição, mas isso não será marcado como not null
no dicionário de dados. A única maneira que consigo pensar para obter esse efeito é, se você estiver no 11g, adicionar o valor de conversão como uma coluna virtual na tabela e (se ainda for necessário) criar a exibição contra isso:
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
Como você disse em um comentário no dba.se que isso é para simular algo, você pode usar uma coluna normal e um gatilho para simular a coluna 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
E
desc "MyView"
ainda dá: Name Null? Type
----------------------------------------- -------- ----------------------------
MyColumn NOT NULL BINARY_DOUBLE
Como Leigh mencionou (também em dba.se), se você quisesse inserir/atualizar a visualização, você poderia usar um
instead of
gatilho, com o VC ou versão falsa.