No puede agregar una restricción no nula o de verificación a una vista; vea esto y en la misma página 'Restricciones en restricciones NOT NULL' y 'Restricciones en restricciones de verificación'. Puede agregar un with check option
(contra una cláusula where redundante) a la vista, pero eso no se marcará como not null
en el diccionario de datos.
La única forma que se me ocurre para obtener este efecto es, si está en 11g, agregar el valor de conversión como una columna virtual en la tabla y (si aún es necesario) crear la vista contra eso:
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 dijo en un comentario en dba.se que esto es para simular algo, podría usar una columna normal y un disparador para simular la columna 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
Y desc "MyView"
todavía da:
Name Null? Type
----------------------------------------- -------- ----------------------------
MyColumn NOT NULL BINARY_DOUBLE
Como mencionó Leigh (también en dba.se), si quisiera insertar/actualizar la vista, podría usar un instead of
activador, con la versión VC o falsa.