非ヌルまたはチェック制約をビューに追加することはできません。これと同じページの「NOTNULL制約の制限」と「チェック制約の制限」を参照してください。 チェックオプション付き
を追加できます (冗長なwhere句に対して)ビューに追加されますが、 not null
としてマークされません データディクショナリで。
この効果を得るために私が考えることができる唯一の方法は、11gを使用している場合、キャスト値をテーブルの仮想列として追加し、(まだ必要な場合は)それに対してビューを作成することです。
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
dba.seのコメントで、これは何かをモックアップするためのものであると述べたので、通常の列とトリガーを使用して仮想列をシミュレートできます。
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
そしてdesc"MyView"
まだ与える:
Name Null? Type
----------------------------------------- -------- ----------------------------
MyColumn NOT NULL BINARY_DOUBLE
Leighが(dba.seでも)述べたように、ビューを挿入/更新したい場合は、の代わりにを使用できます。 VCまたは偽のバージョンでトリガーします。