आप किसी दृश्य में एक शून्य नहीं जोड़ सकते हैं या बाधा की जांच नहीं कर सकते हैं; इसे और उसी पृष्ठ पर देखें 'पूर्ण बाधाओं पर प्रतिबंध' और 'चेक बाधाओं पर प्रतिबंध'। आप with check option
जोड़ सकते हैं (एक अनावश्यक जहां खंड के खिलाफ) देखने के लिए लेकिन इसे 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
जैसा कि लेह ने उल्लेख किया है (dba.se पर भी), यदि आप उस दृश्य को सम्मिलित/अपडेट करना चाहते हैं तो आप instead of
का उपयोग कर सकते हैं ट्रिगर, वीसी या नकली संस्करण के साथ।